方案错误:无法读取未定义的 [] 的属性'car'



我想写一个递归函数,它接受一个列表,并返回列表中的元素。调用上面定义的阶乘函数。

例如(元素"(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))))))

有一个编辑器可以平衡和缩进代码,这样你就可以看到错误,这是一个很好的工具,可以确保你不会在这样愚蠢的错误上浪费时间。

最新更新