Mam listę rakiet z pewnymi wartościami (list 'foo 'bar 2 #t 42 9 2 'some)
. W rzeczywistości wartości te są zgodne z bardziej konkretnym schematem, ale na pytanie to nie ma znaczenia. Chcę przetestować test, jeśli na liście znajdują się dwie identyczne wartości, w tym przypadku liczba 2, i uzyskać element i inne elementy. To jest moja próba:Dopasuj, jeśli dwie wartości na niezameldowanej liście są takie same
#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"])
Wzór ma postać (list-no-order a a rest ...)
. Ale interpretacja programu kończy się niepowodzeniem z:
a11: unbound identifier;
also, no #%top syntax transformer is bound in: a11
Dla mnie wygląda na błąd podczas transformacji makra. Jeśli zmieni się list-no-order
na list
, wzór działa, ale oczywiście tylko wtedy, gdy elementy znajdują się na początku listy.
Czy mój wzorzec jest błędny, jeśli tak, jak go poprawić, czy też zamierzony wzór nie jest możliwy i jaki jest najlepszy sposób obejścia go?
Oto wynik po makro ekspansji '(mecz (lista 2 2 #ti) [(lista-no-order asd asd dsa) "Zrób trochę rzeczy"]) ': http://pastebin.com/K3PG44kY. Widzimy, że istnieje niezwiązany identyfikator 'asd8'. Być może makro jest błędne? –
Na ile jesteś pewien, że to błąd? Czy powinienem zgłosić to deweloperom rakiety? – Pyfisch
Zgłoszono w [Github] (https://github.com/racket/racket/issues/1304). – Pyfisch