【问题标题】:Why am I getting `Generic operator inapplicable` error in Scheme function为什么我在 Scheme 函数中收到“通用运算符不适用”错误
【发布时间】:2022-08-24 16:08:56
【问题描述】:

我正在尝试使用提供的方案代码完成 SICM 书的练习,但是我无法弄清楚错误的原因,我在方案方面很新手,所以任何人都可以告诉我在这里缺少什么吗?

(define q (up (literal-function \'x)))

; This runs fine
(define ((Lagrangian-unknown m k) q) (+ (* 1/2 m (coordinate q) (coordinate q) ) (* 1/2 k (coordinate q) (coordinate q)) ))
(show-expression ((Lagrangian-unknown \'m \'k) ((Gamma q) \'t)) ))

; This gives error
(define ((Lagrangian-unknown m k) q) (+ (* 1/2 m (coordinate q) (coordinate q) ) (* 1/2 k (coordinate q) ) ))
(show-expression ((Lagrangian-unknown \'m \'k) ((Gamma q) \'t)) ))

在我刚刚删除一个术语的第二次迭代中,出现以下错误

;Generic operator inapplicable: #[compiled-closure 12 (lambda \"ghelper\" #x3) #x625 #x2291fd5 ...] + (#(...) (*number* ...))
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.

    标签: scheme mit-scheme sicm


    【解决方案1】:

    首先,当您调用show-expression 时,我可以看到您的括号不平衡。

    你想让它工作吗?你必须有相同的类型,你错过了第二个附录中的up

    (define ((Lagrangian-unknown m k) q) (+ (* 1/2 m (coordinate q) (coordinate q) ) (up (* 1/2 k (coordinate q) ) )))
    

    但下一个问题是:这有意义吗? 当您编写(* (coordinate q) (coordinate q)) 时,您正在获取两个向量的乘积。最多可以使用返回数字的内积 (dot-product q q)(square q)

    此外,即使您使用dot-productsquare,也无法将其添加到(coordinate q),因为您正在尝试将向量和数字相加。

    对于人类来说,一维向量和数字“几乎”是一回事。另一方面,对于个人电脑来说,它们是两个不同的东西。

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多