lambda
lambda-r
,从中你可以
return
(+ ((lambda-r ()
(return 1)
2)) 5)
这将给出
6
这是一个我正在寻找的转型的例子。假设有一个
λ-r
(lambda-r (a b)
(return a)
(+ a b))
我想把它变成这样:
(call/cc (lambda (k)
(define return (lambda (v)
(k (lambda (a b)
v))))
(lambda (a b)
(return a)
(+ a b))))
也可以用let表达式而不是内部define来表示,但是为了清晰起见,我使用define。
问题
λ-r
作为一个
宏
. 原因是我想
k
和
v
为了卫生,但我不想
保持卫生。
(define-syntax lambda-r
(syntax-rules (return)
[(_ (var ...) body ...)
(call/cc (lambda (k)
(define return (lambda (v)
(k (lambda (var ...)
v))))
(lambda (var ...)
body ...)))
]))
这不管用,因为
返回
经过卫生处理,因此在使用时不能直接看到
λ-r
. 所以呢
(lambda-r () (return 1))
给出了一个错误
返回
不是有效的标识符。
-
syntax
-
这个
datum->syntax
/
syntax->datum
编辑:没关系-我现在有了:)