Recursion 带条件的方案递归
我试图通过使用scheme的一些递归来解决问题,然而,不管我尝试了什么,当它开始计算if语句的第一个分支时,我总是会得到一个错误。错误类似于:“无法调用0。0不是函数”。这个零实际上是条件中的x,但我不明白为什么会发生这种情况。经过一段时间的调试,我得出结论,这实际上只是一个递归问题,我还没有完全理解 也许有人能给我指出正确的方向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
(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比使用内置长度过程更惯用?;)