2009-06-27 11 views
3

次の入力を受け入れるにはどうすればよいですか?スキームのパターンマッチング

(list of 0 or more charcters and ends with 3) or 
(list of 1 or more characters 4 and 0 or more characters after 4) 

何か

(match (list 3)) -> #t 
(match (list 1 2 3)) -> #t 
(match (list 1 2 3 4)) -> #t 
(match (list 1 2 3 4 5)) -> #t 
(match (list 4)) -> #f 

ようEDIT:これは私の宿題ではありません。私はPAIPからELIZAのようなものを書こうとしましたが、単語で始まるパターンを書く方法しか知りません。

答えて

3

文字を記述していますが、例では数字を使用します。私はここで数字を使用していますが、文字に切り替えるのは簡単です。

(require scheme/match) 
(define satisfies 
    (match-lambda 
    [(list (? number?) ... 3) #t] 
    [(list (? number?) ..1 4 (? number?) ...) #t] 
    [_ #f]))