関数型言語の勉強に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みたいなもんですよってのが分かりやすくて面白かったです。


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy