gpt4 book ai didi

方案 - 使用表格的导数

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:26 27 4
gpt4 key购买 nike

我正在尝试使用下面的代码获取方案中的导数。谁能告诉我哪里出错了?我已经尝试了一段时间了。

(define d3
(λ (e)
(cond ((number? e) 0)
((equal? e 'x) 1)
(else
;; We handle only BINARY ops here, and only + and *
(let ((op (car e)) (args (cdr e)))
(apply (lookup op d-op-table) args))))))


(define d-op-table
(list(list '+ (λ (u v) (+ (d3 u) (d3 v))))
(list '+ (λ (u1 v1)
(list '(* u1 (d v1)))(list '(* (d u1) v1))))))

(define lookup
(λ (op table)
(if (equal? op (caar table))
(cadar table)
(lookup op (cdr table)))))

当我运行该函数时,出现以下错误。我输入, (d3 '(* 2 x)).

    caar: contract violation
expected: (cons/c pair? any/c)
given: '()

最佳答案

查找表不正确,有时你计算表达式,但其他人你只是引用它们,而不计算它们。例如,'(* u1 (d v1)) 只会求值为 '(* u1 (d v1)),实际上并未计算导数!乘法的情况看起来特别糟糕,它甚至没有正确的搜索键 *

这更接近您的预期,请注意您需要做更多的工作来实际检测哪些表达式可以简化 - 例如:(* 0 x)0 , 但它应该足以让你开始:

(define d-op-table
(list (list '+ (λ (u v) (list '+ (d3 u) (d3 v))))
(list '* (λ (u v)
(list '+
(list '* u (d3 v))
(list '* (d3 u) v))))))

现在你的例子可以工作了:

(d3 '(* 2 x))
=> '(+ (* 2 1) (* 0 x))

如果你想写一个真正有用的微分程序,最好看看SICP .

关于方案 - 使用表格的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58271454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com