【发布时间】:2015-08-02 05:18:12
【问题描述】:
在 Peter Norvig 的人工智能编程范式的练习 1.2 中,要求读者这样做
编写一个函数来求幂,或者将一个数字提升为整数 力量。例如:(power 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))))))
这当然是正确的。现在我觉得有点傻,但他不是在使用他实现的功能的内置版本吗?为什么我要使用expt 来实现power?
或者expt 和power 有什么区别?
【问题讨论】:
-
你确定他没有使用
power而不是expt?有勘误网站吗? -
我找到了一个勘误网站norvig.com/paip-errata.html,但里面没有。
-
你说得对,norvig.com/paip/intro.lisp是这样写的
-
感谢链接,我也查了勘误,找了一个在线版本,但找不到。
-
如果他使用
power而不是expt它实际上会陷入无限循环,因为 (power x 2) 最终会调用 (power x 2)。
标签: lisp common-lisp