(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))
?
答案 0 :(得分:1)
你忘记了最后一句中的else
。
相反,它使用list-ref
作为条件(由于所有过程都是真实的,因此总是真实的),并评估其他两个子表单并返回最后一个。