Emacs 不允许使用数字(方案)

Emacs 不允许使用数字(方案),emacs,scheme,mit-scheme,sicm,Emacs,Scheme,Mit Scheme,Sicm,我正在使用实现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))) ((

我正在使用实现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 (())
有什么问题吗

起初,我认为scheme不能将一个结构(如TestPath)除以一个数字,所以我将点积作为一个返回数字的函数;但那没用

我尝试在delta eta函数中打印表达式,但在执行此部分时出现错误:

(/ (- (fmas t) (efe t)) 0.001)))
如果我去掉商部分,就没有错误

我肯定错过了什么。希望你能帮忙。谢谢

假设

(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))))))

然后,增量测试路径G测试路径5乘以0.001,测试路径等于*0.001 eta。同样在G内部,它期望q是一个过程,然而,fmas正在从G检索一个过程,将一个数字传递给G。因此,这将尝试应用计算出的通过t的数字。

在我的方案实现中,我无法单独运行它。up、efe、点积和FMA的定义是什么?错误很简单。在某一点上,你正在做一些变化。。。其中一些变量不是解析为过程,而是一个数字。test-path是一个函数,但当您调用delta时,它会被分配给eta和q参数,然后您将它们相加和相乘。我认为这是一个包,必须在MIT Scheme内部运行,而不是在Unix上运行emacs,作为SICMechanichs手册的一部分。@Sylwester抱歉,下面的答案显示代码更清晰。Dot产品和up程序包含在SCMUtils软件包中。这是一个设计用于在使用《经典力学的结构和解释》一书时使用的软件包。Willence scmutils可从emacs运行。见我的评论。