在Peter的人工智能编程范例的练习1.2中,读者被要求
编写一个函数进行指数运算,或将一个数字提高到整数幂。例如:(电源3 2) = 3^2 = 9。
所提供的解决办法是:
(defun power (x n)
(cond ((= n 0) 1)
((evenp n) (expt (power x (/ n 2)) 2))
(t (* x (power x (- n 1))))))这当然是对的。现在我觉得有点愚蠢,但他不是在使用他实现的函数的内置版本吗?为什么我要使用power实现expt?或者expt和power的区别是什么?
发布于 2015-05-20 19:23:32
看起来,他只在最简单的情况下使用这个数字,而不是所有的一般情况。这可能是因为这本书的早期,他还没有教过如何绑定局部变量,所以他不想写:
(defun power (x n)
(cond ((= n 0) 1)
((evenp n)
(let ((temp (power x (/ n 2)))
(* temp temp)))
(t (* x (power x (- n 1))))))它不能使用(power (power x (/ n 2)) 2),因为这将导致无限递归。尽管可以通过添加另一个基本案例来解决这个问题:
(defun power (x n)
(cond ((= n 0) 1)
((= n 2) (* x x))
((evenp n) (power (power x (/ n 2)) 2))
(t (* x (power x (- n 1))))))https://stackoverflow.com/questions/30358487
复制相似问题