gpt4 book ai didi

function - Lisp 函数的返回参数

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:07 25 4
gpt4 key购买 nike

我试图让这个函数显示文字 expr2 和 expr1被输入。输入的数据格式为 (+ x y)。

(DEFUN  deriv (expr var)    ;  function name and arguments
(COND ( (ATOM expr) ; check for atomic expression (variable or constant)
(IF (EQL expr var)
1
0
) )
( (EQL (FIRST expr) '+) (deriv-add (SECOND expr) (THIRD expr) var) )
( (EQL (FIRST expr) '-) (deriv-minus (SECOND expr) (THIRD expr) var) )
( (EQL (FIRST expr) '*) (deriv-multi (SECOND expr) (THIRD expr) var) )
( (EQL (FIRST expr) '/) (deriv-divide (SECOND expr) (THIRD expr) var) )
( T (ERROR "UNKNOWN arithmetic operator"))
)
)

(DEFUN deriv-multi (expr1 expr2 var)
(LIST '+ (* (deriv expr1 var) expr2) (* expr1 (deriv expr2 var)))
)

(SETQ e2 '(* (+ x y) (+ y 7)) )
(DERIV e2 'x)

最佳答案

这是对 Lisp 的一个很好的基本介绍:

http://www.cs.cmu.edu/~dst/LispBook/

“Common Lisp:符号计算的简要介绍”,作者 David S. Touretzky。

免费 PDF。

顺便说一句,您的函数什么都不显示。它调用函数“LIST”。为什么 expr1expr2 有括号?

关于您的代码:

  • 使用自解释代码是 Lisp 中良好的编码风格。由于您可以使用符号来真正命名事物(而不是概念的缩写),因此您可以使用描述性符号。然后通常通过在编辑器中使用符号完成来输入更长的符号。这允许您摆脱评论。

  • 不要添加额外的空间。编写紧凑的代码。

  • 将您的代码格式化得漂亮且紧凑。

  • 在有助于阅读代码的地方使用缩进和附加行

例子:

(defun derive (expression variable)
(if (atom expression)
(if (eql expression variable) 1 0)
(funcall (case (first expression)
(+ #'derive-addition)
(- #'derive-subtraction)
(* #'derive-multiplication)
(/ #'derive-division)
(otherwise (error "unknown arithmetic operator")))
(second expression) (third expression) variable)))

(defun derive-multiplication (expression1 expression2 variable)
(list '+
(* (derive expression1 variable)
expression2)
(* expression1
(derive expression2 variable))))

上面的函数还是有错误,很容易修复。你不想执行乘法。

(defun test ()
(assert (equal (derive '(* (+ x y) (+ y 7)) 'x)
'(+ (* (+ 1 0)
(+ y 7))
(* (+ x y)
(+ 0 0)))))))

关于function - Lisp 函数的返回参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174546/

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