小學

小學

中等

說明

給定學生的名字以及他們所屬的年級,為學校建立一份名冊。

最後,你應該要能夠:

  • 把學生的名字加入某個年級的名冊:
    • 「把 Jim 加入 2 年級。」
    • 「好的。」
  • 取得某個年級中所有學生的名單:
    • 「2 年級有哪些學生?」
    • 「目前只有 Jim。」
  • 取得所有年級、所有學生排序後的名單。 年級應該依 1、2、3 等順序排序,同一個年級內的學生則應該依名字的字母順序排序。
    • 「現在有誰註冊就讀?」
    • 「讓我想想。 1 年級有 Anna、Barb 和 Charlie,2 年級有 Alex、Peter 和 Zoe,5 年級有 Jim。 所以答案是:Anna、Barb、Charlie、Alex、Peter、Zoe 和 Jim。」

請注意,我們的學生都只有一個名字(這是個小鎮,不然你想怎樣?),而且每個學生在同一份名冊或同一個年級裡都只能加入一次。 如果測試嘗試把同一個學生加入超過一次,你的實作應該指出這是錯誤的。

字詞

定義一個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,全部免費。