yamada
yamad****@tir*****
2004年 9月 17日 (金) 15:44:47 JST
山田です。 # 自分でも分かりそうな問題が出てきたので…‥ 先に結論から。 > (値渡しだから、初めの lambda に渡された tbl と > その tbl への変更はその lambda の中でだけ有効、との理解。) 値渡しではなく、リファレンス渡しになっていると思います。 (schemeみたいな関数指向?言語では、基本的に、値渡しをする事は無い? 数値や文字列も、値渡しではなくリファレンス渡しを しているように思えますし) > (define tbl (make-hash-table)) make-hash-tableで作られた、無名のハッシュ「を指すポインタ」を、 tblという名前の変数に束縛しています。 なので、 > ((lambda (tbl key value) > (hash-table-push! tbl key value)) > tbl 1 "a") > ((lambda (key value) > (hash-table-push! tbl key value)) > 2 "b") ここでtblとして渡されるのは、上記の、無名のハッシュを指すポインタなので、 それに対して行われる操作は、最初に作った、一つの無名ハッシュを 操作している、という事になると思います。 それでは、どうかよろしくお願い致します。