相关疑难解决方法(0)

匹配可选模式并绑定属性的拼接语法类

我的一个拼接语法类定义如下。语法类匹配两个语句的序列(第一个模式),其中一个语句(第三个和第二个模式)甚至可能根本不匹配这些语句(最后一个模式)。

正如您所看到的,有相当多的“重复”代码,因为每个模式要么返回模式中捕获的某些内容的属性,要么返回一个空的内容。我遇到的问题是,目前该语句从来都不是真正可选的,因为最后一个模式必须匹配某些内容。在这种情况下,一组空的括号()

问题是:我怎样才能使语句真正可选?作为一个附带问题 - 可以通过更好地利用头部模式来压缩代码吗?

(define-splicing-syntax-class signal-subscriptions-and-declarations
  #:description "subscriptions to signals and signal declarations"

  ; Match the case where both a subscription and declaration statement is present
  (pattern (~seq subscribed:signal-subscriptions  declared:signal-declarations)
           #:with (subscription-collection  ...) #'(subscribed.signal-collection ...)
           #:with (subscription-signal-id   ...) #'(subscribed.signal-identifier ...)
           #:with (declaration-signal-id    ...) #'(declared.signal-identifier ...))

  ; Match the case where no declaration statement is present
  (pattern subscribed:signal-subscriptions
           #:with (subscription-collection ...) #'(subscribed.signal-collection ...)
           #:with (subscription-signal-id  ...) #'(subscribed.signal-identifier ...)
           #:with (declaration-signal-id   ...) #'())

  ; Match the case …
Run Code Online (Sandbox Code Playgroud)

racket

4
推荐指数
1
解决办法
104
查看次数

标签 统计

racket ×1