我必须计算这样的多项式 -
f(x)= x ^ 4 - 2.274x ^ 3 + 1.8x ^ 2 - 0.576x + 1.0
这个lisp函数 -
(defun polynomial (x)
(+ (+ (+ (+ (expt x 4) (* -2.274 * (expt x 3)))
(* 1.8 (* x x))) (* -0.576 x)) 0.1))
Run Code Online (Sandbox Code Playgroud)
当我调用(多项式0.5)时,结果在不同的评估中是不同的,如下所示 -
CL-USER> (polynomial 0.5)
-1.9495
CL-USER> (polynomial 0.5)
0.8786454
CL-USER> (polynomial 0.5)
0.07474504
CL-USER> (polynomial 0.5)
0.3032537
CL-USER> (polynomial 0.5)
0.23830011
CL-USER>
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事 ?我正在使用最新的sbcl.
Syl*_*ter 17
*在参数位置评估您在REPL中的最后一个结果.在你的代码做的(* -2.274 * (expt x 3))地方*是-1.9495第一次运行之后,或许.(如果最后一个结果不是数字,第一次运行时会出错.)
你可以有两个参数*,+并且所有LISP都有波兰前缀表示法,所以你的函数可能看起来更像这样:
;; f(x) = x^4 - 2.274x^3 + 1.8x^2 - 0.576x + 1.0
(defun polynomial (x)
(+ (expt x 4)
(* -2.274 (expt x 3))
(* 1.8 x x)
(* -0.576 x)
1.0)) ;; this was originally 0.1
(polynomial 0.5) ; ==> 0.94025004
Run Code Online (Sandbox Code Playgroud)
基本上x + y + z在中缀变成(+ x y z)前缀.