2016-04-03 19 views
0
(define (list-ref items n) 
    (cond ((null? items) "Out of range exception") 
     ((= n 0) (car items)) 
     (list-ref (cdr items) (- n 1)))) 

(list-ref (list 1 2 3) 6) 
5 

Neden her zaman (- n 1) değerini döndürür? Neden (list-ref (cdr items) (- n 1))'u çalıştırmıyor?Şemada nasıl çalışır?

cevap

1

Son maddede bir else unuttuysanız. Bunun yerine, list-ref koşulu olarak (tüm prosedürler doğru olduğundan) her zaman doğru olan ve diğer iki alt formunuzu değerlendiren ve sonuncuyu döndüren koşul olarak kullanılmıştır.

+0

Anladım. Ama derleyici neden yorumlamadı? (List-ref (cdr items) (- n 1)) '? – Anatoly

+0

Yaptı. “List-ref”, doğruluk durumu (her zaman doğru olan) ve '(cdr öğeleri)' ve '(- n 1)' 'o zaman' ifadeleri olarak değerlendirdi. Sonun değeri döndürülür. –

+0

Şemada, sadece # # f yanlış kabul edilir. Diğer her değer doğru olarak kabul edilir. –