(目前,请忽略我所追求的是un-Schemey,因为这是针对非程序员的DSL)
我想做些等效的事情:
(pairwise key1 value1 key2 value2)
m
将扩展为我定义的另一个宏(因此,我不能简单地使用可变参数样式函数):
(list (cons key1 (m value1)) (cons key2 (m value2)))
我已经尝试过了:
(define-syntax pairwise
(syntax-rules ()
((_ key value ...)
(list (cons key (m value)) ...))))
但是我猜想它扩展为:
(list (cons key1 (m value1)) (cons key1 (m key2)) (cons key1 (m value2)))
我对如何以我想要的方式成对处理这些元素有些困惑,而无需用户添加内括号。
答案 0 :(得分:1)
您可以使用递归进行此操作。而不是像这样的情况
Demo_600x600
您可以看到两种情况
((_ key value ...)
(list (cons key (m value)) ...))
类似于您设计递归列表处理函数的方式,但基本情况为((_)
'())
((_ key value . rest)
(cons (cons key (m value)) (pairwise . rest)))
情况(在编译时检测到),而不是syntax-rules
或if
条件(在运行时检测到)。