6

私がこのようなものを持っている場合 (define s (hi,there)) 、どのようにマッチで書くこと (match s [(,h , ,t)] ...) ができmatchます,か?

4

3 に答える 3

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)

したがって、必要なパターンは '(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 に答える