[Felleisen和Friedman在他们的书“ The Seasoned Schemer”中介绍了try
函数。根据http://community.schemewiki.org/?seasoned-schemer,此功能可以定义为
(define-syntax try
(syntax-rules ()
((try var a . b)
(letcc success
(letcc var (success a)) . b))))
其中letcc
定义为
(syntax-rules ()
((letcc var body ...)
(call-with-current-continuation
(lambda (var) body ... )))))
现在,虽然我了解try
的功能以及如何使用它,但我仍然很难遵循它的正式定义。行中letcc
到success
和(letcc var (success a)) . b
的应用中,点的确切含义是>
(letcc success (letcc var (success a)) . b)
try
?或不同的问题:如果在try
中调用try
,则b
定义的哪一部分确定var
会被评估为a
?
[Felleisen和Friedman在他们的书“ The Seasoned Schemer”中介绍了try函数。根据http://community.schemewiki.org/?seasoned-schemer,此功能可以定义为(define-syntax ...
语法规则是模式匹配。圆点表示一对的car
和cdr
,就像lambda
/ define
中的其余参数一样:
我不是Scheme宏语法复杂性的专家,但是我think