如果我有这样的话
(define s (hi,there))
那我怎么写比赛
喜欢
(match s [(,h , ,t)] ...)
但它不起作用,因为match
需要,
所以我该怎么办呢?
答案 0 :(得分:7)
首先请注意,逗号,
是特殊的读者缩写。
(hi,there)
的读数为(hi (unquote there))
。这是
很难发现 - 因为默认打印机打印列表
其第一个元素是特殊方式的unquote
。
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
因此,您需要的模式是'(列表h(列表'不引用t))'。
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
答案 1 :(得分: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))
无效的球拍。
答案 2 :(得分:1)
我想你可能会对你需要逗号的地方感到困惑。在Racket中,您不使用逗号分隔列表中的元素。相反,你只需使用空格。告诉我这是不是错了,但我想的是你试图匹配像(define s '(hi there))
这样的表达式。为此,您将使用
(match s
[`(,h ,t) ...])
然后,在elipses所在的区域,变量h
的值为'hi
,变量t
的值为'there