现在,我正在通过查看 The Seasoned Schemer 这本书来吸引阴谋家。
我通过racket编写代码,但是当我使用try
时,策划者没有这个方法或宏。它报告扩展:模块中的未绑定标识符:try。
代码如下:(在第89页)
(define (remove-member-first* a lat)
(try oh (rm a lat oh) lat))
我搜索了球拍文件,但没有找到熟悉的功能。
那么谁知道是否有类似“尝试”的功能?
答案 0 :(得分:13)
我刚发现有人已经在github的书中写了 The Seasoned Schemer 中的所有代码片段。
这是他的回答:(这不是非卫生的,不需要其他模型)
(define-syntax letcc
(syntax-rules ()
((letcc var body ...)
(call-with-current-continuation
(lambda (var) body ... )))))
(define-syntax try
(syntax-rules ()
((try var a . b)
(letcc success
(letcc var (success a)) . b))))
答案 1 :(得分:4)
你没有提到它,但我猜你所说的那本书是“The Seasoned Schemer”。使用以下宏定义来实现本书中定义的try
:
(require mzlib/defmacro)
(define-macro (letcc c . body)
`(call/cc (lambda (,c) ,@body)))
(define-macro (try x a b)
`(letcc *success*
(letcc ,x
(*success* ,a))
,b))