関数型言語の勉強にSICPを読もう - (35) 3章 - 小休止 外の世界とつながろうファイルを読む
#scheme-jp(wide系 IRCチャンネル)でのネタふりで、ファイルの読み込みを学んでみました。
Schemeは port を介して入出力するようです。
面白いのが read の戻り値がS式だということです。(これはひらっちさんから教えてもらいました。)
なのでファイルの中身がS式だといろいろと面白いことが出来そうなので作ってみました。
まず data.scm を用意します。
(list 1 2 3 4 5 6 7 8 9) (list 1 1 1 1 1 1 1 1 1)
次はプログラム本体です。
data.scmを読み込んで、read した S式のlistの要素を sum して表示します。
(define (sum l) (if (null? l) 0 (+ (car l) (sum (cdr l))))) (call-with-input-file "data.scm" (lambda (i) (define (f) (let ((l (read i))) (if (eof-object? l) #f (begin (display (sum (eval l '()))) (f))))) (f)))
これをやると 45 と 9 が表示されます。
read で読み込んだデータを eval してsumに渡しています。
で、思ったのですが
(1 2 3 4 5 6 7 8 9) (1 1 1 1 1 1 1 1 1)
として、evalしないほうが自然ですね。
ひらっちさんの説明で、S式ってのはJSONみたいなもんですよってのが分かりやすくて面白かったです。
計算機プログラムの構造と解釈
posted with amazlet on 06.04.15
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404