方案/“经验丰富的计划者”:有关“ try”函数的定义的语法的问题

问题描述 投票:0回答:2

[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的功能以及如何使用它,但我仍然很难遵循它的正式定义。行中letccsuccess(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 ...

syntax scheme
2个回答
0
投票

语法规则是模式匹配。圆点表示一对的carcdr,就像lambda / define中的其余参数一样:


0
投票

我不是Scheme宏语法复杂性的专家,但是我think

© www.soinside.com 2019 - 2024. All rights reserved.