2016-04-07 11 views
6

私はいくつかの値が(list 'foo 'bar 2 #t 42 9 2 'some)のラケットリストを持っています。実際にはこれらの値はいくつかのより具体的なパターンに従いますが、質問に対してはこれは無関係です。リストに2つの同じ値(この場合は2)があり、要素と他の要素がある場合、テストをテストします。これは私の試みです:未定義リスト内の2つの値が同じ場合に一致する

#lang racket 

(match (list 'foo 'bar 2 #t 42 9 2 'some) 
    [(list-no-order a a rest ...) 
    "Do some stuff"] 
    [_ "Do some other stuff"]) 

パターンは(list-no-order a a rest ...)です。しかし、プログラムの解釈が失敗します:

a11: unbound identifier; 
also, no #%top syntax transformer is bound in: a11 

私には、マクロを変換するときにエラーが発生します。 list-no-orderlistに変更するとパターンは機能しますが、もちろん要素がリストの先頭にある場合のみです。

私のパターンは間違っていますか?それを修正する方法や意図したパターンは不可能で、その回避策は何ですか?

+2

ここでは、 '(match-list 2 2t)[(list-no-order asd asd dsa) "Do some stuff"]) ':http://pastebin.com/K3PG44kY。私たちには、非対称ID「asd8」があることがわかります。おそらくマクロはバグでしょうか? –

+0

これはバグであることがどの程度確実ですか?私はそれをラケット開発者に報告すべきでしょうか? – Pyfisch

+1

[Github](https://github.com/racket/racket/issues/1304)で報告されています。 – Pyfisch

答えて

0

私はあなたが何かパターンマッチングを試みているのだろうと思います。あなたの質問とコードを介して私には明らかではありません。私はあなたの問題に純粋なリスト処理でアプローチします(少なくとも私が理解するところでは)

(filter 
    (lambda (x) 
     ;;filter for the first element of the prev created tuple and 
     ;;check if its larger than 1 
     (> (first x) 1)) 
    (map 
     (lambda (x) 
      ;;tuple of the length of the prevously created group and the group itself 
      (cons (length x) x)) 
     (group-by 
      ;;just the element it seld 
      (lambda (x) 
       x) 
      (list 'foo 'bar 2 #t 42 9 2 'some)))) 
関連する問題