2006年06月17日

式と手続き(defineで定義3)

(define a 1) -> a
a -> 1
(a) -> error

(define foo (+ 1 2)) -> foo
foo -> 3
(foo) -> error

(define (foo) (+ 1 2)) -> foo
foo -> #<closure foo>
(foo) -> 3
当たり前なんだけど、なんだか混乱してしまいました。
なんでかというと

(define x 100)
x -> 100
(x) -> error

(define bar (set! x 100))
bar -> 100
(bar) -> error

なんてやっていて、何を血迷ったか
(define (bar (set! x 5) x))

なんてやってしまったものだから、

bar -> #<closure foo>
(bar) -> error ;引数が2個必要なのでエラー
(bar 1 2) -> #<undef> ;こんな事になってしまいました。
ちなみに
x -> 100

です。

これは何の事はない、ボディのない手続きを定義してしまったのです。(set! x 5)が引数1で、xが引数2という事ですね。
本当は
(define (bar) (set! x 5))


(bar) -> 5
x -> 5
としてみたかったのです。

結果。
(define <変数> <式>) は<変数>を定義する式
(define (<変数> <仮引数群>) <ボディ>) は名前が<変数>の手続きを定義する式
(define (<変数> . <仮引数>) <ボディ>) も同じく、名前が<変数>の手続きを定義する式
という事があまりよくわかっていなかった。という事です。

posted by ほえ at 23:34| Comment(0) | TrackBack(0) | Scheme | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。