Şema bir listesi (bazı Lisps içinde nil
olarak da bilinir) boş liste ()
veya olan car
(aynı zamanda first
olarak da bilinir) listenin bir elementtir ve cdr
bir dezavantajları hücresi (ya da bir rest
olarak da bilinir) ya listenin geri kalanı (yani, başka bir liste) ya da listeyi sonlandıran bir atomdur. Geleneksel sonlandırıcı ()
boş listesidir; ()
tarafından sonlandırılan listelerin "uygun listeler" olduğu söylenir. Başka bir atom tarafından sonlandırılmış listeler "uygunsuz listeler" olarak adlandırılır. (1 2 3 4 5)
listesi 1, 2, 3, 4 ve 5 öğelerini içerir ve ()
ile sonlandırılır. Sistem baskılar bir aleyhte hücre, genel durum Örneğin
(car . cdr)
bunu yazdırmak olduğunda, Şimdi
(cons 1 (cons 2 (cons 3 (cons 4 (cons 5())))))
bunu olustursaydiniz, (cons 1 2)
sonucu
olarak yazdırılır
(1 . 2)
Listeler cons hücresinden oluşturulduğundan, bu gösterimi de listelerde kullanabilirsiniz:
en lisps (Bildiğim kadarıyla tümü) eksileri hücreleri yazdırmak için özel bir durum var bu yüzden olsa da, oldukça aksak var
'(1 2 3 4 5) ==
'(1 . (2 . (3 . (4 . (5 .())))))
: cdr
listesi (ya başka eksileri hücre veya ()
) ise, daha sonra 'don t .
yazdιrιn ve cdr
nolu parantezin yazdιğιnι yazmayιn (aksi takdirde, bir liste olduğundan) yazdιrιn. Eğer
(1 2 3 . 4)
gibi bir sonuç görüyorsanız Yani, sen atom 4
tarafından sonlandırılır uygunsuz bir listesi var demektir.
(1 . (2 . (3 . 4)))
Şu anki soru şudur: kodunuzda liste yapımı ne işe yaradı?bu bir değil bir şey dönebilirsiniz gibi
((> (add1 start) stop) (quote()))
ikinci vaka görünür: İlk vaka daima (boş liste) uygun bir liste döndürür: ..
daima uygun bir listesini döndürür, bu yüzden vakaların bakalım gerekiyordu liste (varsayarak (sub1 stop) == (- stop 1)
o):
:
..
düzgün olsaydı (
(cons x y)
y
ise uygun bir liste olduğundan)
((eq? (add1 start) stop) (sub1 stop))
Şimdi, daha sonra üçüncü durumda her zaman düzgün bir liste dönen olurdu
(else (cons start (.. (add1 start) stop)))
İkinci durumunuzu bir liste olarak döndürün ve her şeyin ayarlanmış olması gerekir. Uygun bir liste oluşturmak için cons
için Amacıyla (list (sub1 stop))
okumak gerekiyor (sub1 stop)
'(' 1 2) 'işlevini kullanırken' cond' içinde hangi durumda kullanılır? Ne geri dönüyor? – Barmar