
188
|
第 6 章
感謝這個未用欺騙手段的
MOD
版本仍然有效:
>> to_integer(MOD[THREE][TWO])
=> 1
>> to_integer(MOD[
POWER[THREE][THREE]
][
ADD[THREE][TWO]
])
=> 2
現在我們可以呼叫
MOD
來換掉 FizzBuzz 程式裡所有出現的
%
:
(ONE..HUNDRED).map do |n|
IF[IS_ZERO[MOD[n][FIFTEEN]]][
'FizzBuzz'
][IF[IS_ZERO[MOD[n][THREE]]][
'Fizz'
][IF[IS_ZERO[MOD[n][FIVE]]][
'Buzz'
][
n.to_s
]]]
end
串列
我們只剩下些許Ruby 功能要替FizzBuzz 重新實作:範圍、
#map
、字串常值、
Fixnum#to_s
。我們已經看過很多我們實作過的其他的值和運算的細節,所以會盡快瀏覽
剩下的一些細節(不用擔心無法瞭解所有的一切,我們只是要淺嚐風味而已)。
為了能實作範圍和
#map
,我們需要串列的實作物,而建置串列最簡單的方法就是使用
對組。這個實作物的運作就像鏈結串列,其中每個對組儲存一個值和一個指到串列裡下
個對組的指標;我們在此例使用巢狀的對組而非指標。如下是標準串列的運算:
EMPTY = PAIR[TRUE][TRUE]
UNSHIFT = -> l { -> x {
PAIR[FALSE][PAIR[x][l]]
} }
IS_EMPTY = LEFT ...