Scheme 持续获取程序应用程序:预期程序,来自此代码
Im学习计划目前正在进行中,我的任务是写一些东西来计算列表的长度,这是我目前拥有的代码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
{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)
- 如果某个东西不是函数,那么不要用
围绕它。如果您编写()
,Scheme认为(0)
是一个函数,并尝试应用它,这显然会失败0
过程应用程序:预期过程,给定:'(2 3 4 5)(无参数)
,除非OP试图从REPL-likelen('(2 3 4 5))
或(len('(2 3 4 5))调用它
。正如我在对已接受答案的评论中提到的,这看起来不像是因为函数的定义方式而导致的错误,而是因为您试图调用函数的方式。你需要把它叫做(len'(23445))
,但我猜你在做len('(23445))
或(len('(23445))
。