2010-05-03から1日間の記事一覧

遅延評価(無限リストと take)

無限リストを作成し、その結果から take 関数により取得しているのではない。 import Debug.Trace take' n _ | n <= 0 = trace ("[]") [] take' _ [] = trace ("[]") [] take' n (x:xs) = trace (show x ++ " : take' ("++show n++"-1) xs") (x : take' (n-1…

「エラトステネスの篩」など。

フィボナッチ数列:次の数字は前の数字とその前の2つを足した数字。 ghci> let fib=0:1:[a+b|(a,b)<-zip fib (tail fib)] ghci> take 20 $ fib [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181] 素数:1と自分自身以外のどんな自然数に…

遅延評価と正格評価

正格評価の言語 Ruby と比較してみる。 ~$ irb irb(main):001:0> def trace(str) irb(main):002:1> puts str irb(main):003:1> return str irb(main):004:1> end => nil irb(main):005:0> trace "hello" hello => "hello" # a に配列を代入した時点で trace …