【问题标题】:Scheme Error: Cannot read property 'car' of undefined []方案错误:无法读取未定义 [] 的属性“汽车”
【发布时间】:2021-01-04 21:36:42
【问题描述】:

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

例如 (sum-of-factorials-of-elements ‘(1 3)) 应该返回 (+ (阶乘 1) (阶乘 3)) => 7

但是我得到了错误Cannot read property 'car' of undefined [] 我也使用了cond 结构,但是这次它给出了一个错误Cannot read property 'indexOf' of undefined []。我对这门语言很陌生,如果你能提供帮助,我会很高兴。

【问题讨论】:

  • 你还有一个错字:(if (null? lst)) 0 ...) 必须是(if (null? lst) 0 ...),也就是说,你在if 表达式中有一个放错位置的括号。修复后,代码似乎对我有用。修复第一个错字后是否重新加载文件(修复 remaining --> list)?
  • 您看到的那些错误看起来像 JavaScript 错误。你在哪里运行这个计划程序?
  • Classmate of yours?先前的问题具有非常相似的代码和关于放错括号的完全相同的错误。
  • @Thankyou 我正在 Repl.it 中运行。

标签: recursion scheme


【解决方案1】:

我认为问题可能是剩余的变量似乎从未被分配来存储任何值。所以这是一个格式错误的列表,Scheme 解释器不喜欢它。你的意思是(汽车)?

【讨论】:

  • 是的,我写错了,但它给出了与 car lst 相同的错误。
【解决方案2】:

您的括号不匹配,特别是在(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 为您提供括号对荧光笔和自动缩进(以及更多)。

【讨论】:

  • PLT Scheme(现在称为“Racket”)很可能是我一直以来最喜欢的语言。如果您在使用这种优美的语言时遇到其他问题,请务必寻求帮助。我或想到的许多其他人将很乐意为您提供帮助。
【解决方案3】:

这要么是不符合标准的方案实现,要么是符合 R5RS 的方案。 R5RS 报告对它有一个简单的提示,并指出如果您向其提供无效方案的代码,则任何响应都将被认为是可接受的。您的代码不是有效的方案,因为您放错了括号:

(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。在我看来,其余代码,现在解释为过程主体中的延续表达式,应该是 @987654323 的一部分@。例如。

(define sum_of_factorials_of_elements 
  (lambda (lst)
    (if (null? lst)
        0
        (+ (factorial (car lst)) 
           (sum_of_factorials_of_elements (cdr lst))))))

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

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-12-31
    • 2022-10-05
    • 2019-11-24
    • 2022-07-06
    相关资源
    最近更新 更多