Ho una lista Racket con alcuni valori (list 'foo 'bar 2 #t 42 9 2 'some)
. In realtà questi valori seguono uno schema più specifico ma per la questione questo è irrilevante. Voglio testare se ci sono due valori identici nella lista, in questo caso il numero 2, e ottenere l'elemento e gli altri elementi. Questo è il mio tentativo:Corrisponde se due valori in una lista non ordinata sono uguali
#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"])
Il modello è (list-no-order a a rest ...)
. Ma l'interpretazione del programma non riesce con:
a11: unbound identifier;
also, no #%top syntax transformer is bound in: a11
A me sembra un errore quando si trasforma la macro. Se si modifica list-no-order
a list
, il modello funziona ma, naturalmente, solo se gli elementi si trovano all'inizio della lista.
Il mio schema è errato, in tal caso come correggerlo o il modello previsto non è possibile e qual è il modo migliore per aggirare il problema?
Ecco un risultato dopo macro espansione del '(partita (elenco 2 2 #t) [(lista-no-ordine asd asd dsa) "Fai qualcosa"]) ': http://pastebin.com/K3PG44kY. Possiamo vedere che esiste un ID non associato 'asd8'. Forse la macro è bacata? –
Quanto sei sicuro che questo sia un bug? Devo segnalarlo agli sviluppatori di Racket? – Pyfisch
Segnalato in [Github] (https://github.com/racket/racket/issues/1304). – Pyfisch