2010/01/27

ダイナミックスコープ

ってこういうものだったんですか。

 

SBCL

(defvar temp-special)

(setq temp-special 1)

(defun temp-special-returner ()
  temp-special)

(temp-special-returner)
; ->  1

(let ((temp-special 2))
  (temp-special-returner))
; -> 2

(temp-special-returner)
; -> 1

 

schemeだとこうはならんですね。常にレキシカルスコープ(こういう言い方していいのか知りませんが)ということですかね。

(define temp-special 0)

(set! temp-special 1)

(define temp-special-returner
  (lambda ()
    temp-special))

(temp-special-returner)
; -> 1

(let ((temp-special 2))
  (temp-special-returner))
; -> 1

 

dynamic-windを使うと同じようなことができるそうな。

 

funcall とか function とか #' とか・・・、今のところとても面倒でややこしい印象。まともに Common Lisp さわるの初めてです。

 

LET OVER LAMBDA Edition 1.0

0 件のコメント:

コメントを投稿