emacs - 申请号码不准(方案)

标签 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)))


(((((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不能把test-path这样的结构体除以一个数字,所以我把点积做成一个返回数字的函数;但这没有用。

我尝试在 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))))))

然后 (((((delta test-path) G) test-path) 5)) 乘以 0.001test-path(* 0.001 eta)。而且在 G 内部,它期望 q 作为一个过程,但是 fmas 正在从 G 中检索一个过程将一个数字传递给 G。因此,这将尝试应用通过 t 计算的数字。

关于emacs - 申请号码不准(方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398949/

相关文章:

emacs - 自定义 emacs 模式和字体锁定默认值

emacs - 如何关闭间接缓冲区并返回组织模式下的主缓冲区?

emacs - 用于清理 LaTeX 代码的 Elisp 宏

macros - 如何使用 Racket 宏定义函数?

prolog - 逻辑编程中如何处理重复更新?

windows - MIT/Scheme 作为 Windows 下的简单编译器

emacs - 从模式行隐藏分支?

database - 带有 Scheme 的本地数据库

scheme - 从方案中的列表中打印对

c - 如果此代码中 consed 对象的 car 和 cdr 是整数,如何打印它们?