function - 在 Common Lisp 中将 - 更改为 +

标签 function lisp common-lisp

有没有办法把-(负)函数改成+(加)函数?

我的作业是在 Macluaurin 级数上实现 sin 计算

sin(x) = x-(x^3/3!)+(x^5/5!) -(x^7/7!)+(x^9/9!)-...

每篇文章都有不同的符号。这是我的 Lisp 代码

(defun sinMac (x series n plusminus)
  (cond ((= series 0) 0)
        (t (funcall plusminus
                    (/ (power x n) (factorial n))
                    (sinMac x (- series 1) (+ n 2) plusminus)))))

是否可以更改 plusminus 来交换符号?如果我得到 '+ 函数发送 '- 到下一个递归调用。从那个电话(得到 '-)我调用 '+ 等等...

最佳答案

您可以使用循环列表来完成。像这样:

(defun sin-mac (x series n plus-minus)
  (cond ((zerop series) 0)
        (t (funcall (car plus-minus)
                    (/ (power x n) (factorial n))
                    (sin-mac x (1- series) (+ n 2) (cdr plus-minus))))))

(sin-mac x series 1 '#0=(+ - . #0#))

或者更好的是,使用 labels 包装初始参数:

(defun sin-mac (x series)
  (labels ((recur (series n plus-minus)
             (cond ((zerop series) 0)
                   (t (funcall (car plus-minus)
                               (/ (power x n) (factorial n))
                               (recur (1- series) (+ n 2) (cdr plus-minus)))))))
    (recur series 1 '#0=(+ - . #0#))))

关于function - 在 Common Lisp 中将 - 更改为 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823599/

相关文章:

javascript 调用函数作为数组元素

javascript - 使用arguments.callee.caller获取调用函数的参数

algorithm - Lisp 良好实践

iteration - Lisp,向后迭代

lisp - 如何将字符串解析为列表结构?

lisp - 读取时评估宏与准引用

javascript - 如何在javascript中向函数添加回调

javascript - 当函数创建并返回对象时会发生什么?

LISP:在从文件中读取游戏板时格式化读取行的输出

scope - Lisp函数和/或let语句中的函数和变量的范围