如何解决Lisp中的负权力问题

时间:2014-09-19 04:14:40

标签: math lisp

今天,我们在人工智能课程中首次使用LISP。好吧,LISP编译器不是很容易获得,所以我们干运行每个代码。

当我将POWER函数提升为负数时,我目前遇到问题。我问讲师,他说我应该自己这样做,并吹嘘他会把它放在周三的考试中。我在线搜索,我发现一些教程说它会产生错误,你应该输出一个自定义的错误信息,然后我才记得Stackoverflow。

这是我已经做过的示例程序,但功率是一个正整数。

(DE POWER (M N)
   (COND ((ZEROP N) 1)
    (T (TIMES M (POWER M (SUB 1 N)))))

实施例

  

M = 4,N = 3

(POWER 4 3)
 (TIMES 4 (POWER 4 2))
 (TIMES 4 (TIMES 4 (POWER 4 1)))
 (TIMES 4(TIMES 4(TIMES 4 ( POWER 4 0))))
(TIMES 4(TIMES 4 (TIMES 4 1)))
 (TIMES 4 (TIMES 4 4))
  (TIMES 4 16)
       64

现在,如何使用LISP程序解决以下问题?

  

M = 4,N = -3

是否有任何职能可以解决LISP中的负面权力,还是有系统的步骤来解决这个问题?

1 个答案:

答案 0 :(得分:4)

M ^( - N)= 1 /(M ^ N)。所以你可以检查负N并返回1 / M ^( - N)。

(DE POWER (M N)
   (COND ((ZEROP N) 1)
   ((< N 0) (/ 1 (POWER M (- 0 N))))
   (T (TIMES M (POWER M (SUB 1 N)))))