書き忘れ、 一意配列について lp :: *x a -> *(a , *x) | dup, f, end x // dup 架空の 複製関数 lp x y # (x , x2) = dup x # end x2 = (y , x) # lp x (f x2 y) dup で 複製した領域は再利用されなかった。されれば実装上fが一つに決まり楽になる。
//連想配列書いてみる。lookupはdynamic使ったりMaybeを使わないから実装多い assoc e [] = Nothing assoc e [x=:(a,b):xs] | a == e = Just x = assoc e xs (%|%) infixl 9 :: (Maybe a) a -> a (%|%) Nothing y = y (%|%) (Just x) _ = x assocx x alist :== (@) infix 9 :: [(!String,!a)] !String ->a (@) alist x = snd (assoc x alist %|% (abort ("assoc not match " +++ x))) (:-) infixl 9 :: a b -> (a,b) (:-) a b = (a,b)