有没有办法把-
(负)函数改成+
(加)函数?
我的作业是在 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/