function - Lisp 函数的返回参数

标签 function lisp return

我试图让这个函数显示文字 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/

相关文章:

c - 从函数返回结构变量而不创建中间变量的简写

c++ - 在 C++ 中存储引用变量

c++ - 返回常量 char 指针会产生错误

python - 如何在被 Python 杀死之前运行最后一个函数?

lisp - 简化符号表达式

recursion - 返回 Lisp 中递归函数的顶层调用

c++ - 在 C++ 函数中使用 CURL

r - "self-contained"函数在 R 中更有效吗?

lisp - 如何从 OS X 上的 shell 脚本运行 Clozure CL (Lisp)?

Java Swing : return value when button clicked