Racket 定义语法时使用多个省略号

Racket 定义语法时使用多个省略号,racket,Racket,我需要为如下工作的花式子列表过程定义语法 > (fancy-sublist 1 2 -> 3 4 5 <- 6 7) (3 4 5) >(奇特子1)2 ->3,4,5,DIS1,…< P>使用而不是语法规则< /代码>;它在各个方面都更有能力,即使在技术上都能完成任务时,它也能产生更好的错误消息。现代球拍中的ce。它完美地处理了您的示例: #lang racket (require syntax/parse/define) (define-syntax (<- st

我需要为如下工作的
花式子列表
过程定义语法

> (fancy-sublist 1 2 -> 3 4 5 <- 6 7)
(3 4 5)
>(奇特子1)2 ->3,4,5,DIS1,…< P>使用而不是<代码>语法规则< /代码>;它在各个方面都更有能力,即使在技术上都能完成任务时,它也能产生更好的错误消息。现代球拍中的ce。它完美地处理了您的示例:

#lang racket

(require syntax/parse/define)

(define-syntax (<- stx)
  (raise-syntax-error #f "cannot be used as an expression" stx))

(define-syntax-parser fancy-sublist
  #:literals [<- ->]
  [(_ x xs ... -> dis dis1 ... <- y ys ...)
   #'(list dis dis1 ...)])

( )

((此外,syntax/parse允许您使用
…+
来表示一个或多个-将模式简化为
(xs…++->dis…+OMG alexis。你是如何获得超链接的。I@LeifAndersen标记可以包含HTML,因此你可以将
元素粘贴在
..
中的?当然。尽管查看alexis的响应标记,它看起来像是生成的。我主要好奇她是如何做到的(如果它是生成的).@LeifAndersen我没有生成它,我是手工生成的,但我正在考虑可能尝试编写一些东西来在将来自动生成它。
#lang racket

(require syntax/parse/define)

(define-syntax (<- stx)
  (raise-syntax-error #f "cannot be used as an expression" stx))

(define-syntax-parser fancy-sublist
  #:literals [<- ->]
  [(_ x xs ... -> dis dis1 ... <- y ys ...)
   #'(list dis dis1 ...)])
> (fancy-sublist 1 2 -> 3 4 5 <- 6 7)
'(3 4 5)