Prog 不能 运行 在 <<Lisp in small pieces>> 第 113 页
Prog can't run on page 113 of <<Lisp in small pieces>>
Lisp in small pieces
第 113 页的代码似乎不能 运行 在球拍的 r5rs 环境中:
(let ((name "Hemo"))
(set! winner (lambda () name))
(set! set-winner! (lambda (new-name) (set! name new-name) name ))
(set-winner! "Me")
(winner) )
和:
(let ((name "Nemo"))
(set! winner (lambda () name))
(winner) )
都出错了:
cannot set variable before its definition
variable: winner
这本书的代码是不是错了?或者我不应该使用scheme?我必须使用lisp这本书定义到运行这段代码?谢谢!
您需要使用 define
或 lambda
绑定变量。例如:
(let ((name "Hemo"))
(define winner #t)
(define set-winner! #t)
(set! winner (lambda () name))
(set! set-winner! (lambda (new-name) (set! name new-name) name ))
(set-winner! "Me")
(winner) )
set!
被转换成一个 scode,其语义是改变内存位置,而不是绑定新位置。像 let
这样的形式是两种操作(绑定+变异)组合的语法糖,并且因为它们很常见,Queinnec 为这种组合插入了一个 scode,fixlet。
这些都在Queinnec 的书中有解释。继续阅读!
Lisp in small pieces
第 113 页的代码似乎不能 运行 在球拍的 r5rs 环境中:
(let ((name "Hemo"))
(set! winner (lambda () name))
(set! set-winner! (lambda (new-name) (set! name new-name) name ))
(set-winner! "Me")
(winner) )
和:
(let ((name "Nemo"))
(set! winner (lambda () name))
(winner) )
都出错了:
cannot set variable before its definition
variable: winner
这本书的代码是不是错了?或者我不应该使用scheme?我必须使用lisp这本书定义到运行这段代码?谢谢!
您需要使用 define
或 lambda
绑定变量。例如:
(let ((name "Hemo"))
(define winner #t)
(define set-winner! #t)
(set! winner (lambda () name))
(set! set-winner! (lambda (new-name) (set! name new-name) name ))
(set-winner! "Me")
(winner) )
set!
被转换成一个 scode,其语义是改变内存位置,而不是绑定新位置。像 let
这样的形式是两种操作(绑定+变异)组合的语法糖,并且因为它们很常见,Queinnec 为这种组合插入了一个 scode,fixlet。
这些都在Queinnec 的书中有解释。继续阅读!