Scheme 持续获取程序应用程序:预期程序,来自此代码

Scheme 持续获取程序应用程序:预期程序,来自此代码,scheme,Scheme,Im学习计划目前正在进行中,我的任务是写一些东西来计算列表的长度,这是我目前拥有的代码 {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) 作为一个错误。我做错了什么 您有括号问题。试试这个: (define

Im学习计划目前正在进行中,我的任务是写一些东西来计算列表的长度,这是我目前拥有的代码

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

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

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

(define (len x)
  (if (not (null? x))
      (+ 1 (len (cdr x)))
      0))
请特别注意:

  • 调用函数时,函数名(以及参数,如果有的话)必须用
    ()
    包围。所以
    len(x)
    是错误的,而
    (lenx)
    是正确的
  • 如果某个东西不是函数,那么不要用
    ()
    围绕它。如果您编写
    (0)
    ,Scheme认为
    0
    是一个函数,并尝试应用它,这显然会失败

您指出的关于代码的所有问题都是正确的,但我不确定OP的代码会在哪里生成
过程应用程序:预期过程,给定:'(2 3 4 5)(无参数)
,除非OP试图从REPL-like
len('(2 3 4 5))
(len('(2 3 4 5))调用它
。正如我在对已接受答案的评论中提到的,这看起来不像是因为函数的定义方式而导致的错误,而是因为您试图调用函数的方式。你需要把它叫做
(len'(23445))
,但我猜你在做
len('(23445))
(len('(23445))