list処理

-- [x,y] は x:y:[] の簡略表記 lispでいうと (x y) と (x . (y . ()))の関係 
cons x y = x:y

reduceをconsを利用しようとするとエラーが出る。

reduce f x [] = x
reduce f x (cons a l) = f a (reduce f x l)

うーん、(cons a l) を (a:l) とすると同じなんだけどな。
なぜだろう。

予想としては

data List a = Car a | Cdr (List a)

みたいな形でList型を作る必要があるのでは無いかと思う。
いつも基礎からはまるなぁ…まあ、性分だからしょうがないか。
本日終了。