UtilMatch
patvar ;; すべて、かつ、パターン変数を束縛
(match 3 (x (+ x 1))) ;-> 4
以下のシンボルは特別な意味をもち、パターン変数としては使えません。 _、quote、$、struct、@、object、 =、and、or、not、?、set!、 get!、backquote、...、___ および ..k と __k (ここで、k は整数)。
_ ;; すべて
(match '(1 2 3) (_ "hoge")) ;-> "hoge"
() ;; 空リスト
(match '() (() 1)) ;-> 1
#t ;; #t
(match #t (#t 1)) ;-> 1
#f ;; #f
(match #f (#f 1)) ;-> 1
string ;; 文字列
(match "foo" ("foo" 1) ("bar" 2)) ;-> 1
number ;; 数
character ;; 文字
keyword ;; キーワード (*)
'sexp ;; S式
(match '(1 2 3) ('(1 2 3) "foo")) ;-> "foo"
'symbol ;; シンボル(S式の特殊ケース)
(match 'a ('a "foo")) ;-> "foo"
(pat1 ... patN) ;; n 要素のリスト
(match '(1 2) ((_ _) 1) (else #f)) ;-> 1 (match '(1 2 3) ((_ _) 1) (else #f)) ;-> #f
(pat1 ... patN . patN+1) ;; n 以上の要素を含むリスト
(match '(1) ((a b . c) c) (else #f)) ;-> #f (match '(1 2) ((a b . c) c) (else #f)) ;-> () (match '(1 2 3) ((a b . c) c) (else #f)) ;-> (3)
(pat1 ... patN patN+1 ooo) ;; n 以上の要素を含むリスト、残りの各要素は ;; patN+1 にマッチしなければならない
#(pat1 ... patN) ;; n 要素のベクタ #(pat1 ... patN patN+1 ooo) ;; n 以上の要素を含むベクタ、残りの各要素は ;; patN+1 にマッチしなければならない
| ($ class pat1 ... patN) ;; オブジェクト (patK はスロット順でマッチ) | (struct class pat1 ... patN) ;; 同上 (*) | (@ class (slot1 pat1) ...) ;; オブジェクト (スロット名を使う) (*) | (object class (slot1 pat1) ...) ;; 同上 (*)
(= proc pat) ;; procを適用し、結果を pat にマッチさせる
(match '(1 2 3) ((= car 1) #t)) ;-> #t
| (and pat ...) ;; すべての pat にマッチするか | (or pat ...) ;; マッチする pat があるか | (not pat ...) ;; どの pat もマッチしないか
(? predicate pat ...) ;; predicate が真、かつ、全 pat がマッチ
(match '(4 "foo") ((? list? _ _) #t)) ;-> #t
(match '(4 "foo") ((= car (? (pa$ < 2) _ )) #t)) ;-> #t
| (set! patvar) ;; すべて、かつ、セッタを束縛 | (get! patvar) ;; すべて、かつ、ゲッタを束縛 | `qp ;; 擬似パターン
patvar : a symbol except _, quote, $, struct, @, object, =, and, or,
not, ?, set!, get!, backquote, ..., ___, ..k, __k.
ooo : ... ;; ゼロまたはそれ以上
| ___ ;; ゼロまたはそれ以上 | ..k ;; k またはそれ以上 | __k ;; k またはそれ以上
View on github | Report issue