首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"or“的方案宏

"or“的方案宏
EN

Stack Overflow用户
提问于 2011-12-14 03:37:21
回答 2查看 279关注 0票数 3

为了学习Scheme宏,我正在学习Kent Dybvig的"The Scheme Programming Language“。

在8.2节http://www.scheme.com/tspl4/syntax.html#./syntax:h2中,他有一个"or“宏的例子。

代码语言:javascript
复制
(define-syntax or
   (syntax-rules ()
     ((_) #f)
     ((_ e) e)
     ((_ e1 e2 e3 ...)
      (let ((t e1)) (if t t (or e2 e3 ...))))))

有什么原因他没有使用更简单的形式:

代码语言:javascript
复制
(define-syntax or
   (syntax-rules ()
     ((_) #f)
     ((_ e) e)
     ((_ e1 e2 ...)
      (let ((t e1)) (if t t (or e2 ...))))))

这两个表单是否等同地展开?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-14 04:01:34

我这样做是为了让事情更清楚一些--您的简单形式取决于案例的顺序,因为(or x)可以同时匹配第二条和第三条规则。因此,使案例互斥使其更容易阅读,也更健壮。

(顺便说一下,这里有一个更微妙的观点,我最初以为你是在问这个问题:为什么不进一步简化它:

代码语言:javascript
复制
(define-syntax or
  (syntax-rules ()
    ((_) #f)
    ((_ e1 e2 ...)
     (let ((t e1)) (if t t (or e2 ...))))))

?)

票数 6
EN

Stack Overflow用户

发布于 2011-12-14 03:48:01

后跟...的子模式可以匹配零个或多个输入元素。使用e1 e2 e3使这种情况与前一种情况截然不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8495091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档