如果我有这样的东西,
(define s (hi,there))
那么我怎么能像这样写
(match s [(,h , ,t)] ...)
但是它不起作用,因为match
需要,
所以我该怎么做呢?
user618815
问问题
1531 次
3 回答
7
首先请注意,逗号,
是特殊的读者缩写。是(hi,there)
一个读作(hi (unquote there))
。这很难发现 - 因为默认打印机unquote
以特殊方式打印第一个元素是 an 的列表。
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
因此,您需要的模式是 '(list h (list 'unquote t))'。
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
于 2012-07-27T08:08:20.200 回答
2
如果您想在引用部分中使用逗号作为符号,请使用反斜杠:
> (define s '(hi \, there))
> (match s [(list h c t) (symbol->string c)])
","
并'|,|
用于独立的逗号符号。
> (match s [(list h '|,| t) (list h t)])
'(hi there)
无论哪种情况,您都应该使用空格来分隔事物,并使用列表。
(define s (hi,there))
不是有效的球拍。
于 2012-07-27T13:16:57.140 回答
1
我认为您可能会对需要逗号的位置感到困惑。在 Racket 中,您不使用逗号来分隔列表中的元素。相反,您只需使用空格。告诉我这是否错了,但我想你正在尝试匹配像(define s '(hi there))
. 为此,您将使用
(match s
[`(,h ,t) ...])
然后,在省略号所在的区域,变量h
的值为'hi
,变量t
的值为'there
于 2012-07-27T21:55:17.993 回答