2010-03-01から1ヶ月間の記事一覧

非決定性 with 例外

『On Lisp』の非決定性が面白い。 (define (two-numbers) (list (choose '(0 1 2 3 4 5)) (choose '(0 1 2 3 4 5)))) (define (parlor-trick sum) (let ((nums (two-numbers))) (if (= (apply + nums) sum) `(the sum of ,@nums) (fail)))) > (parlor-trick …

Perlで継続

現在、『On Lisp』が3巡目の終盤に差し掛かっている。でも、いまいち継続を理解できていない。分かり易い解説を見つけたのでPerlに翻訳してみた。(本を読む FizzBuzzとGaucheで学ぶ継続の基礎) use strict; use warnings; sub fizzbuzz { my ($next, ($n)) …

副作用関数のユニットテスト

ユニットテストの自動化で困るのが副作用を起こすコード。例えば、ファイルのI/Oを含む関数は自動テスト化に少し悩む。 # hoge.pl use strict; use warnings; package HOGE; use IO::File; main(@ARGV) if ($0 eq __FILE__); # テストしたい関数 sub main { …

Perlで遅延評価

遅延評価とは、HaskellやD言語なんかにある「アレ」のことだ。 遅延評価(ちえんひょうか、lazy evaluation、delayed evaluation)とは、計算機科学におけるプログラムの評価手法の一つ。主に関数型言語で使用される。対義語は先行評価(eager evaluation、s…