申请号码不允许(方案)

时间:2015-04-01 19:13:41

标签: emacs scheme lisp mit-scheme

我正在使用实现MIT SCHEME的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)))

如果我取出商部分,则没有错误。

当然我错过了一些东西。希望你能帮忙。谢谢!

1 个答案:

答案 0 :(得分:0)

假设这个

(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乘以test-path(* 0.001 eta)。而且在G内部,它期望q作为一个过程,fmas正在检索从G传递数字到G的过程。因此,这将尝试应用通过t的计算数字。