我正在使用实现MIT方案的SCMUTILS包进行一些工作。我正在用Emacs运行它,我在使用函数时遇到了麻烦,你能帮我吗?
我的代码是:
(define ((((delta eta) f) q) t)
(let ((fmas (f (+ q (* 0.001 eta))))
(efe (f q)))
(/ (- (fmas t) (efe t)) 0.001)))
(define ((G q) t)
(dot-product (q t) (q t)))
(((((delta test-path) G) test-path) 5))其中测试路径是:
(define (test-path t)
(up (+ (* 4 t) 7)
(+ (* 3 t) 5)
(+ (* 2 t) 1)))我得到了一个错误:
Loading "mecanica"...
;Application of a number not allowed 2501.2500000000273 (())有什么问题吗?
起初,我认为这个方案不能将像test-path这样的结构除以一个数字,所以我将点积设置为返回一个数字的函数,但这是行不通的。
我尝试在delta-eta函数中打印表达式,在执行此部分时出现了错误:
(/ (- (fmas t) (efe t)) 0.001)))如果我去掉商部分,就没有错误。
我肯定漏掉了什么。希望你能帮上忙。谢谢!
发布于 2015-04-03 20:48:59
假设这
(define ((((delta eta) f) q) t)
(let ((fmas (f (+ q (* 0.001 eta))))
(efe (f q)))
(/ (- (fmas t) (efe t)) 0.001)))与此等价
(define (delta eta)
(lambda (f)
(lambda (q)
(lambda (t)
(let ((fmas (f (+ q (* 0.001 eta))))
(efe (f q)))
(/ (- (fmas t) (efe t)) 0.001))))))然后(((((delta test-path) G) test-path) 5))在(* 0.001 eta)将0.001和test-path相乘。同样在G内部,它期望q作为一个过程,然而,fmas正在从G检索一个过程,将一个数字传递给G。因此,这将尝试应用传递t的计算数字。
https://stackoverflow.com/questions/29398949
复制相似问题