我想写一个递归函数,它接受一个列表,并返回列表中的元素。调用上面定义的阶乘函数。
例如(元素"(13("的阶乘之和(应返回(+(阶乘1((阶乘3((=>7
但我得到了错误Cannot read property 'car' of undefined []
,我也使用了cond
结构,但这次它给出了一个错误Cannot read property 'indexOf' of undefined []
。我对这种语言还很陌生,如果你能帮忙,我会很高兴的。
我认为问题可能是剩余的变量似乎从未被分配来存储任何值。所以这是一个格式错误的列表,Scheme解释器不喜欢它。你是说(car-lst(吗?
括号不匹配,特别是在(if (null? lst))
-中
(define (factorial n)
(if (= n 0)
1
(* n (factorial (- n 1)))))
(define sum_of_factorials_of_elements
(lambda (lst)
(if (null? lst) ; <-
0
(+ (factorial (car lst))
(sum_of_factorials_of_elements (cdr lst))))))
(sum_of_factorials_of_elements '(1 3))
7
对于Scheme初学者,我强烈推荐一个适合该语言的开发环境。DrRacket为您提供支架对荧光笔和自动压痕(以及更多(。
这要么是非一致性方案实现,要么是R5RS一致性方案。R5RS报告有一个简单的环,并指出,如果您向其提供无效的代码,任何响应都将被视为可接受。你的代码不是有效的Scheme,因为你放错了括号:
(define sum_of_factorials_of_elements
(lambda (lst)
(if (null? lst))
0
(+ (factorial (car lst))
(sum_of_factorials_of_elements (cdr lst)))))
if
只有一个部分,而由于R4RS的最小值为2。在我看来,代码的其余部分,现在被解释为过程主体中的延续表达式,应该是if
的一部分。例如
(define sum_of_factorials_of_elements
(lambda (lst)
(if (null? lst)
0
(+ (factorial (car lst))
(sum_of_factorials_of_elements (cdr lst))))))
有一个编辑器可以平衡和缩进代码,这样你就可以看到错误,这是一个很好的工具,可以确保你不会在这样愚蠢的错误上浪费时间。