Recursion 带条件的方案递归

Recursion 带条件的方案递归,recursion,scheme,Recursion,Scheme,我试图通过使用scheme的一些递归来解决问题,然而,不管我尝试了什么,当它开始计算if语句的第一个分支时,我总是会得到一个错误。错误类似于:“无法调用0。0不是函数”。这个零实际上是条件中的x,但我不明白为什么会发生这种情况。经过一段时间的调试,我得出结论,这实际上只是一个递归问题,我还没有完全理解 也许有人能给我指出正确的方向 (define nums (list 1 5 6 7 8 9)) (define (find-len my-list x) ( (if (null

我试图通过使用scheme的一些递归来解决问题,然而,不管我尝试了什么,当它开始计算if语句的第一个分支时,我总是会得到一个错误。错误类似于:“无法调用0。0不是函数”。这个零实际上是条件中的x,但我不明白为什么会发生这种情况。经过一段时间的调试,我得出结论,这实际上只是一个递归问题,我还没有完全理解

也许有人能给我指出正确的方向

(define nums (list 1 5 6 7 8 9))

(define (find-len my-list x) (   
      (if (null? my-list) 
       x
      (find-len (cdr my-list) (+ 1 x) ) ) ) )

(define (len my-list) (find-len my-list 0) )

(len nums)

正如注释中所指出的,在
if
表达式周围有一对不正确的
()
。试试这个:

(define (find-len my-list x)
  (if (null? my-list) 
      x
      (find-len (cdr my-list) (+ 1 x))))

请记住,在Scheme中,一对
()
表示“应用此过程”。例如:
(f)
应用了称为
f
的零参数过程-因此您必须小心放括号的位置,它们不像其他编程语言中的
{}
括号;)

谢谢大家!!我仍然习惯于函数式编程的转变,也许可以展开来展示一些编写列表长度过程的惯用方法+1比使用内置长度过程更惯用?;)