宏是否可以用Scheme编写(例如,使用define-syntax ),它将采用如下表达式:
(op a b c d e f g h i j)并产生这样的表达式作为输出?
(op (op (op (op (op (op (op (op (op a b) c) d) e) f) g) h) i) j) 当然,对于任意长度。考虑到像这样的模板,我想不出一种方法:
(define-syntax op
(syntax-rules ()
[(_) 'base-case]
[(v1 v2 ...) 'nested-case??]))发布于 2008-12-04 11:40:48
(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)。
发布于 2008-12-10 20:27:26
要应用于参数的函数本身应该是宏的参数。除此之外,我的解决方案是一样的。
#!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 ...))))发布于 2008-12-04 18:52:52
要显示答案是如何计算出来的:
(op 1 2 3 4)这是一个包含4条语句的op,因此第二个用例被选择为a=1,b=2,c=3,...=4:
(op (bop 1 2) 3 4)这是一个有3个语句的操作,所以第二个案例。A=(收支平衡表1 2),b=3,c=4:
(op (bop (bop 1 2) 3) 4)现在这是一个包含2个语句的bop,所以a=(bop (bop 12) 3),b=4,就完成了。
https://stackoverflow.com/questions/340204
复制相似问题