首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套表达式的方案宏

嵌套表达式的方案宏
EN

Stack Overflow用户
提问于 2008-12-04 10:50:15
回答 3查看 682关注 0票数 5

宏是否可以用Scheme编写(例如,使用define-syntax ),它将采用如下表达式:

代码语言:javascript
复制
(op a b c d e f g h i j)

并产生这样的表达式作为输出?

代码语言:javascript
复制
(op (op (op (op (op (op (op (op (op a b) c) d) e) f) g) h) i) j) 

当然,对于任意长度。考虑到像这样的模板,我想不出一种方法:

代码语言:javascript
复制
(define-syntax op
  (syntax-rules ()
    [(_) 'base-case]
    [(v1 v2 ...) 'nested-case??]))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-04 11:40:48

代码语言:javascript
复制
(define bop list)

(define-syntax op
  (syntax-rules ()
    ((op a b) (bop a b))
    ((op a b c ...) (op (bop a b) c ...))))

例如,(op 1 2 3 4)扩展为(bop (bop (bop 1 2) 3) 4),计算结果为(((1 2) 3) 4)

票数 6
EN

Stack Overflow用户

发布于 2008-12-10 20:27:26

要应用于参数的函数本身应该是宏的参数。除此之外,我的解决方案是一样的。

代码语言:javascript
复制
#!r6rs

(import (rnrs base))

(define-syntax claudiu
  (syntax-rules ()
    ((claudiu fun first second)
     (fun first second))
    ((claudiu fun first second rest ...)
     (claudiu fun (claudiu fun first second) rest ...))))
票数 1
EN

Stack Overflow用户

发布于 2008-12-04 18:52:52

要显示答案是如何计算出来的:

代码语言:javascript
复制
(op 1 2 3 4)

这是一个包含4条语句的op,因此第二个用例被选择为a=1,b=2,c=3,...=4:

代码语言:javascript
复制
(op (bop 1 2) 3 4)

这是一个有3个语句的操作,所以第二个案例。A=(收支平衡表1 2),b=3,c=4:

代码语言:javascript
复制
(op (bop (bop 1 2) 3) 4)

现在这是一个包含2个语句的bop,所以a=(bop (bop 12) 3),b=4,就完成了。

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

https://stackoverflow.com/questions/340204

复制
相关文章

相似问题

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