2016-04-03 86 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 

爲什麼它總是返回值(- n 1)?爲什麼它不執行(list-ref (cdr items) (- n 1))康德在計劃中的工作原理是什麼?

回答

1

您在最後一句中忘記了else

取而代之的是,它使用list-ref作爲條件(因爲所有過程都是真的,所以總是真的),然後評估你的其他兩個子表單並返回最後一個。

+0

我明白。但爲什麼編譯器不評估'(list-ref(cdr items)( - n 1))'? – Anatoly

+0

它做到了。它將'list-ref'評估爲真實性條件(總是爲真),並將'(cdr items)'和'( - n 1)'作爲「then」表達式。最後一個值被返回。 –

+0

在Scheme中,只有'#f'被認爲是false。其他任何價值都被視爲真實。 –

相關問題