如果你想用 Raspberry Pi 打造一些東西,大概會用到_電阻_。在這道練習裡,你需要知道關於電阻的兩件事:
為了解決這個問題,製造商會在電阻上印上以顏色標示的色帶,用來表示電阻值。每條色帶都有它的位置和一個數值。
前 2 條色帶的編碼方式很簡單:每種顏色都對應到單一個數字。舉例來說,如果印上 brown 色帶(值為 1),後面接著 green 色帶(值為 5),就會轉換成數字 15。
在這道練習中,你要寫一個好用的小程式,讓你不用再背色帶的數值。這個程式會接收顏色名稱作為輸入,並輸出一個兩位數的數字,即使輸入超過兩種顏色也一樣!
色帶顏色的編碼如下:
從上面的例子來看: brown-green 應該回傳 15,而 brown-green-violet 也應該回傳 15,第三個顏色會被忽略。
這個練習是 Resistor Color的延續,並以它為基礎。
雖然你可以用任何順序完成練習,我們仍鼓勵你按照建議的順序進行。
在這個練習中,顏色的語法已經用 c* 前綴預先定義好了,例如 c*black。
接著你要依照說明,定義出把一連串顏色對應到數字的語法。
顏色會放在 *[[ 和 ]] 之間,並以 , 分隔,例如 *[[c*black, c*yellow, c*violet]]。
這個任務很可能需要用到 notation 或 macro。 你可以參考這份參考資料喔。
因為新語法是在編譯時期展開的,除非所有必要的語法都已定義,否則任何測試都會編譯失敗。
因此,我們不依賴傳統的執行期測試,而是改用 #guard_msgs。
這個指令會把指定的 docstring 與另一個指令(在這裡是 #eval)所產生的訊息相比較,兩者不同時就會回報錯誤。
你可以把沒有出現錯誤當成測試通過。
如果你在本機或 Lean 的線上遊樂場工作,就能透過 Lean InfoView 立即看到 #guard_msgs 回報的任何錯誤。
線上的測試執行器目前不支援匯入完整的 Lean 元程式設計函式庫。
雖然你可以自由使用 Lean 預設提供的任何功能,包括 Lean 命名空間裡的內容,但只要加上 import Lean,或從 Lean 命名空間匯入特定模組,你的提交在 Exercism 上就會失敗。
請注意,解這個練習並不需要匯入 Lean 函式庫。