Aşağıdaki örneği inceleyin:Racket'te "eşleştir" seçeneği, dış kapsamdaki değişkenlere sahip kalıplara sahip olabilir mi?
#lang racket
(match '(cat . doge)
[`(,a . ,b)
(match b
[a #t]
[_ #f])]
[_ "Not a pair"])
Bu benim baş ve kuyruk aynı çift maç isteseydim yazabiliriz budur. Bu işe yaramaz çünkü ikinci a
yeni bir değişken olarak bağlanır (ve herhangi bir şeyle eşleşir). Önceden bağlı olan a
'u dış alandan kullanmamı sağlayan herhangi bir desen formu var mı?
(match* ('cat 'doge)
[(a a) #t]
[(_ _) #f])
elde edilebilir ama hala orada dış kapsamdan o değişkeni almak için bir yol (veya olmadığını bilmek istiyorum bilmiyor için bir neden varsa Bunu yapmak, bazı potansiyel isim çarpışma problemi veya bir şey gibi).
Ayrıca gözden kaçırmak kolaydır: #:. Örneğin, yan tümce şu olabilir: [(cons a b) #: ne zaman (eq? A b) #t] '. Tabii ki bu örnekte == 'daha basittir. –