結城浩のSICP日記 RSSフィード

2006-06-27

形式と意味のあやなすおもしろさ 形式と意味のあやなすおもしろさ - 結城浩のSICP日記 を含むブックマーク

LispLispを作る話(Schemeですけれど)に関して、ひげぽんさんが、http://d.hatena.ne.jp/higepon/20060625/1151217479 で以下のようなことを書いていらした。

metacircularだと、どこまでが被実装言語の機能で、どこからが実装言語の機能なのか分からなくなってきてしまうのです

ここにこそ、形式と意味のあやなすおもしろさ(メタマジック)があると思いますね。

これは、ここ100年ぐらいの知的話題のうちのトップ10の一つでしょう(大げさ?)。Lispしかり、ゲーデルしかり。

メタフィクションはその親戚筋かな。ソシュール先生もお友達かな。

higeponhigepon2006/06/27 12:04metacircularは気持ちよいのですが本当に境界があいまいですよねー。
境界のあいまいさをそのまま受け入れられる頭の構造になりたいです。

トラックバック - http://sicp.g.hatena.ne.jp/hyuki/20060627

2006-06-10

問題3.52 問題3.52 - 結城浩のSICP日記 を含むブックマーク

ひげぽんさんが問題3.52で悩んでいるので、私も実行してみる。

足りない部分はutils.streamで以下のように補ったんだけれど、これじゃ駄目なのかな?

;ここから準備
(use util.stream)

(define the-empty-stream stream-null)
(define (display-stream s)
  (stream-for-each display-line s))
(define cons-stream stream-cons)
(define (display-line x)
  (newline)
  (display x))
;ここまで準備

(define (stream-enumerate-interval low high)
  (if (> low high)
      the-empty-stream
      (cons-stream
       low
       (stream-enumerate-interval (+ low 1) high))))

(define sum 0)
(define (accum x)
  (set! sum (+ x sum))
  sum)

(define seq (stream-map accum (stream-enumerate-interval 1 20)))

(define y (stream-filter even? seq))
(define z (stream-filter (lambda (x) (= (remainder x 5) 0))
                         seq))

(stream-ref y 7)
(display-stream z)

これは、遅延評価の例としてのストリームで、実際に評価される様子を理解するためにset!の副作用を利用している問題と見た。

ところでHaskellを勉強していると、

  • 遅延評価が当たり前という頭になってしまい、必要もないのに評価するのが無粋に見えてしまう(^_^;;
  • 代入しないのが当たり前になってしまい、set!にショックを受けてしまう

という「副作用」がありますね。

トラックバック - http://sicp.g.hatena.ne.jp/hyuki/20060610

2006-06-07

足し算を定義する 足し算を定義する - 結城浩のSICP日記 を含むブックマーク

きしださんのところで、+の再定義の話題が出ていたのでやってみました。

(define + *)
;=> +

(+ 3 5)
;=> 15

(define (+ a b) (log (* (exp a) (exp b))))
;=> +

(+ 3 5)
;=> 8.0

整数じゃなくなるのが痛い。

nowokaynowokay2006/06/07 18:36掛け算じゃ無理と思ってたんですが、そうか、指数関数使えばいいんですね。
目からウロコでした。

トラックバック - http://sicp.g.hatena.ne.jp/hyuki/20060607

2006-06-05

トラックバック - http://sicp.g.hatena.ne.jp/hyuki/20060605

2006-06-03

クロージャ クロージャ - 結城浩のSICP日記 を含むブックマーク

メモ。

そういえば。

とか、

とか。

www.textfile.orgにもちらっと書きましたが、

クロージャは、ある場所のコードを環境ごと別のところに移すときに使う。野原に美しく咲いているすみれの花を、そのまわりの土ごと植木鉢にそっと移して自分の部屋に持って来るような趣。

という感じがします。←説明してないって

トラックバック - http://sicp.g.hatena.ne.jp/hyuki/20060603