很难在标题中说出问题。
(define-syntax func
(syntax-rules ()
((func a b c (d e) ...) (cond ((and (not (empty? d)) (not (empty? e))) (+ d e))
)
)
)
)
如果有人拨打(func a b c (1 1) (2 2))
,我希望将所有d
和e
添加到一起。首先,我上面的代码产生错误
syntax: missing ellipsis with pattern variable in template in: d
如果它甚至没有给我这个错误,我甚至不确定它是否会将它们全部加在一起。如果没有提供d
和e
,我还希望它做其他事情,所以我把它放在cond
中。
谢谢。
编辑:
(define-syntax func
(syntax-rules ()
((func a b c (d e) ...)
(cond
((and
(not (empty? d))
(not (empty? e)))
(+ d e))))))
答案 0 :(得分:1)
模式something ...
将匹配零个或多个元素。因此,在您模式(func a b c)
将符合规则。
如果模式中的模式有缺点,则需要在扩展中使用elipses。例如。
(define-syntax test
(syntax-rules ()
((_ a b ...)
(if a (begin #t b ...) #f))))
(test 1) ; ==> #t
(test 1 2) ; ==> 2
(test #f 2) ; ==> #f