你是 Numberphile Youtube 頻道 的忠實粉絲,剛剛看到了一部關於_盧卡斯數列_的精彩影片。你想用 Elixir 來建立這個數列。
設計函式時,你想運用_惰性求值_,這樣就能產生任意多個數字,但只在需要時才產生,於是你決定使用串流。
新增一個防護子句,當用來產生數列的不是整數,或是小於 1 的整數時就拋出錯誤。把這一步放在最前面,可以避免後續步驟出現無限遞迴的錯誤。
LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1
你知道這個數列有兩個起始數字,它們不遵循相同的規則。撰寫兩個基本情況子句來回傳這些數字:
LucasNumbers.generate(1)
# => [2]
LucasNumbers.generate(2)
# => [2, 1]
對於任何長度超過 2 的數列,你知道要把前兩個數字相加才能得到下一個數字,依此類推。撰寫一般化情況吧。
LucasNumbers.generate(3)
# => [2, 1, 3]
LucasNumbers.generate(4)
# => [2, 1, 3, 4]