我正在尝试使用所提供的方案代码来完成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.发布于 2022-08-24 08:08:56
首先,当您调用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-product或square,也不能将其添加到(coordinate q)中,因为您试图将一个向量和一个数字相加。
对于人类来说,只有一个分量和数字的向量“几乎”是一回事。另一方面,对于个人电脑来说,它们是两种不同的东西。
https://stackoverflow.com/questions/73340838
复制相似问题