小学

小学

中等

说明

给定学生的名字以及他们所在的年级,为学校创建一份花名册。

最终,你应该能够:

  • 把学生的名字添加到某个年级的花名册中:
    • "Add Jim to grade 2."
    • "OK."
  • 获取某个年级里所有学生的列表:
    • "Which students are in grade 2?"
    • "We've only got Jim right now."
  • 获取一份包含所有年级所有学生的排序列表。 年级应按 1、2、3 等排序,同一年级内的学生应按名字的字母顺序排序。
    • "Who is enrolled in school right now?"
    • "Let me think. We have Anna, Barb, and Charlie in grade 1, Alex, Peter, and Zoe in grade 2, and Jim in grade 5. So the answer is: Anna, Barb, Charlie, Alex, Peter, Zoe, and Jim."

注意,我们这里的学生都只有一个名字(小镇嘛,还能怎样?),而且每名学生都不能在同一个年级或整份花名册里被重复添加。 如果测试试图把同一名学生添加多次,你的实现应当表明这种做法是错误的。

词

定义一个school元组来保存名单(如何在其内部存储学生由你决定),然后实现下面的词。

  • <school> ( -- school ):构造一个空的 school。
  • add-student ( school name grade -- ? ):将name添加到grade。成功时返回t,如果name已经被添加过(无论是这个年级还是其他年级),则返回f,此时名单保持不变。
  • roster ( school -- names ):所有学生,先按年级排序,再按名字的字母顺序排序。
  • grade ( school n -- names ):年级n中的学生,按名字的字母顺序排序。

来源

与 Phil Battos 在 gSchool 的一次结对编程
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Factor Exercism

准备好开始 小学 了吗?

注册 Exercism,借助 47 个概念163 个练习 和真人导师指导,学习并掌握 Factor,全部免费。