当我尝试测试空列表时,为什么在Scheme中出现错误?

问题描述:

当我运行下面的代码时,我得到这个TypeError。我认为这是因为我试图使用“null?”测试一个空列表。为什么会造成错误?当我尝试测试空列表时,为什么在Scheme中出现错误?

TypeError: Cannot read property 'apply' of undefined [NumberLister, NumberLister, NumberLister, NumberLister, NumberLister, car]

(define NumberLister(lambda(numberList) 

(if(null? numberList) 
    (= (+ 1 1) 2) 
) 

(display (car numberList)) 
(display "\n") 
(NumberLister (cdr numberList)) 
) 
) 

(NumberLister '(1 3 5 6)) 
+0

您的递归是无条件的 - 请检查您的括号。 – molbdnilo

通常,如果需要的组中的表达式begin形式你不能把一个以上的表达在if表达的结果或可替换的部分。另外,(= (+ 1 1) 2)有什么用?只需返回#t,像这样:

(define NumberLister 
    (lambda (numberList) 
    (if (null? numberList) 
     #t 
     (begin  
      (display (car numberList)) 
      (display "\n") 
      (NumberLister (cdr numberList))))))