模板的不兼容省略号匹配计数

时间:2015-11-11 05:48:24

标签: functional-programming racket

我正在尝试使用Racket编写对象,我正在尝试实现“继承”。

(define-syntax class-trait
  (syntax-rules (with)
    [(class <Class> (<attr> ...) (with <traits> ...)
       [(<method> <param> ...) <body>]...)
       (define (<Class> <attr> ...)
         (lambda (msg)
           (cond [(equal? msg (id->string <attr>)) <attr>]
                 ...
                 [(equal? msg (id->string <method>))
                  (lambda (<param> ...) <body>)]
                 ...
                 [else ((<traits> <param> ...) ... msg)]
                 ))
     )]))

这就是我目前所拥有的,但对于最后的else语句,省略号不起作用。

1 个答案:

答案 0 :(得分:2)

让我们首先讨论错误的含义:&#34;模板&#34;的不兼容的省略号匹配计数。

假设a匹配(1 x #t)b匹配(2 y #f),那么 模板((a b) ...)生成((1 2) (x y) (# f)

现在,如果a匹配(1 x)b匹配(2 y #f),那么((a b) ...)会产生什么? ab的匹配计数不兼容(长度相同)。

在我的代码中,我认为是模板

 ((<traits> <param> ...) ... 
如果<traits>的数量与<param> ...的数量不匹配,则

可能会出现问题。