是否可以在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??]))
最佳答案
(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)
。
关于嵌套表达式的方案宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/340204/