Col*_* Ji 6 scheme racket seasoned-schemer
现在,我正在通过查看The Seasoned Schemer这本书来吸取阴谋家.我通过球拍编写代码,但是当我使用时try,计划器没有这个方法或宏.它报告扩展:模块中的未绑定标识符:try.代码如下:(在第89页)
(define (remove-member-first* a lat)
(try oh (rm a lat oh) lat))
Run Code Online (Sandbox Code Playgroud)
我搜索了球拍文件,但没有找到熟悉的功能.
那么谁知道是否有类似'尝试'的功能呢?
Col*_* Ji 14
我刚刚找到了一个已经编写了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))))
Run Code Online (Sandbox Code Playgroud)
链接是https://github.com/viswanathgs/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))
Run Code Online (Sandbox Code Playgroud)