
180
|
第 6 章
它的運作十分正常,所以我們可以在 FizzBuzz 將所有的
#zero
呼叫換成
IS_ZERO
:
(ONE..HUNDRED).map do |n|
IF[IS_ZERO[n % FIFTEEN]][
'FizzBuzz'
][IF[IS_ZERO[n % THREE]][
'Fizz'
][IF[IS_ZERO[n % FIVE]][
'Buzz'
][
n.to_s
]]]
end
對組
我們有數值和布林值形式的自由資料,但卻完全沒有能以有組織的方式儲存多個值的資
料結構。為了實作更複雜的功能,我們很快就需要一些資料結構,所以讓我們稍微暫停
做些介紹。
對組
(
pair
)是最簡單的資料結構,例如雙元素陣列。對組非常容易實作:
PAIR = -> x { -> y { -> f { f[x][y] } } }
LEFT = -> p { p[-> x { -> y { x } } ] }
RIGHT = -> p { p[-> x { -> y { y } } ] }
對組的目的是儲存兩個值,並在稍後需要的時候再次提供它們。為了建構對組,我們可
以用兩個值(
x
和
y
)來呼叫
PAIR
,而它會傳回它內部的 proc:
-> f { f[x][y] }
以另一個 proc
f
一起呼叫這個 proc 時,這個 proc 會以先前的
x
和
y
值作為引數呼叫
它。
LEFT
和
RIGHT
是揀選出對組的左右元素的運算,作法是以分別傳回它第 1 個或第 2
個引數的 proc 來呼叫它。整個運作都非常簡單:
>> ...