20/08/01 12:02:58.28 9QK6xp3l.net
>>412
バグを意図的に作るのは難しいのですが、フィボナッチ数を判定する関数とかは例として分かりやすいのでは?
フィボナッチ数じゃ無かったパターンを書き忘れても普通の言語だと文法上は間違いじゃ無いので、実行時エラーになる。
HaskellだとNoting返そうとしたら、受け取るパターンが無いと怒られてコンパイルエラーになる。
(悪魔で返そうとしたら受け取るパターンが無いから検知出来るので、外部からの入力とかで、
入力するまでパターンがあるか無いか分からないとかだと検出出来ない場合もある)
main = (mapM_ (put.isfib)) [0..1000]
put Nothing= return ()
put (Just x) = print x
fibs = 0:1:zipWith (+) fibs (tail fibs)
isfib = isfib' (zip fibs [1..])
where
isfib' ((a,b):_) x | x == a = Just (a,b)
isfib' ((a,_):_) x | x < a = Nothing
isfib' (_:ts) x = isfib' ts x