继续获取程序申请:预期程序,从此代码

时间:2013-10-01 19:50:47

标签: scheme

我当前正在学习Scheme,并且负责编写一些内容来计算列表的长度,这是我目前的代码。

{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)

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

1 个答案:

答案 0 :(得分:2)

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

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

特别注意:

  • 当您要调用函数时,函数名称(以及参数,如果有的话)必须()包围。因此len(x)错误,而(len x)是正确的
  • 如果不是某个功能,则不会()包围它。如果你写(0),Scheme会认为0是一个函数并试图应用它,这显然会失败
相关问题