【发布时间】:2014-07-06 11:06:17
【问题描述】:
Racket 语言中的模式匹配有 ... 进行贪婪匹配(匹配 0 或更多),如果我想匹配这样的东西怎么办:
#lang racket
(define (Modifier? t) (equal? t "Modifier"))
(define (SimpleName? t) (equal? t "SimpleName"))
(define (SimpleType? t) (equal? t "SimpleType"))
(define (FieldDeclaration? t) (equal? t "FieldDeclaration"))
(match (match '("FieldDeclaration" ("Modifier") ("Modifier") ("SimpleType") ("VariableDeclarationFragment" ("SimpleName") ("StringLiteral")))
[(list (? FieldDeclaration? id) (? Modifier? m) ... (? SimpleType? t) (list _ (? SimpleName? n)) _ ...)
'yes]
[else 'no] )
打印'no,而我期望'yes。我猜它是由... which do a greedy matching 引起的(只需在链接页面中搜索“贪婪”),但我不太确定......)
列表中可以有0到3个("Modifier"),那么这个表格怎么匹配?(其实XXX?函数里面还有很多事情要做,所以我有使用(? XXX? x) 的形式)
PS:是否可以extend the matching syntax 这样我可以使用n_m 之类的东西,这意味着匹配n 到m 次,就像正则表达式中的{n,m} 一样?
【问题讨论】:
标签: regex pattern-matching racket