0

我目前正在学习方案,并负责编写一些东西来计算列表的长度,这是我目前拥有的代码。

{define (len x) 
    (if(not(null? x))
    (+ 1 len(cdr x))
    (0))}

当使用'(2 3 4 5)它运行时:

procedure application: expected procedure, given: '(2 3 4 5) (no arguments)

作为一个错误。我究竟做错了什么?

4

1 回答 1

2

你有括号问题。试试这个:

(define (len x)
  (if (not (null? x))
      (+ 1 (len (cdr x)))
      0))

特别要注意:

  • 当你要调用一个函数时,函数名(和参数,如果有的话)必须(). 所以len(x)是错的,(len x)也是对的
  • 如果某些东西不是函数,那么不要(). 如果你写(0),Scheme 认为这0是一个函数并尝试应用它,这显然会失败
于 2013-10-01T20:03:24.440 回答