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

时间:2015-12-03 00:30:57

标签: algorithm recursion scheme

当我运行以下代码时,我得到下面的TypeError。我认为这是因为我试图使用" null?"来测试空列表。为什么会导致错误?

  

TypeError:无法读取属性' apply'未定义的[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))

1 个答案:

答案 0 :(得分:4)

通常,您不能在if表达式的结果或替代部分中放置多个表达式,如果需要,则以begin形式对表达式进行分组。另外,(= (+ 1 1) 2)的用途是什么?只需返回#t,就像这样:

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