首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Racket中,如何创建一个语法规则来处理多个参数?

在Racket中,如何创建一个语法规则来处理多个参数?
EN

Stack Overflow用户
提问于 2016-10-10 17:20:06
回答 1查看 441关注 0票数 0

在标题里说这个问题有点困难。

代码语言:javascript
复制
(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)),我希望它将所有的de放在一起。

syntax: missing ellipsis with pattern variable in template in: d

如果它甚至没有给我那个错误,我甚至不确定它是否会把它们全部加在一起。如果没有提供de,我也希望它能做其他的事情,所以我把它放在cond中。

谢谢。

编辑:

代码语言:javascript
复制
(define-syntax func
  (syntax-rules ()
    ((func a b c (d e) ...)
     (cond
       ((and
         (not (empty? d))
         (not (empty? e)))
        (+ d e))))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-10 18:36:34

模式something ...将匹配零或多个元素。因此,在您的模式中,(func a b c)将与规则匹配。

如果一个模式在模式中有省略,那么它需要扩展中的省略。例如:

代码语言:javascript
复制
(define-syntax test
  (syntax-rules ()
    ((_ a b ...)
     (if a (begin #t b ...) #f))))

(test 1)    ; ==> #t
(test 1 2)  ; ==> 2
(test #f 2) ; ==> #f
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39963532

复制
相关文章

相似问题

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