Lisp递归不能正常工作

时间:2016-12-08 13:42:35

标签: lisp common-lisp

我正在为一个大学课程开发一个Lisp项目,所以我刚开始用这种语言编写代码。
我们被要求实现一个Lisp库来管理单项式和多项式。 单项式被表示为:( M系数总 - deegre(vars-and-powers))例如 3ywt ^ 3是(M 3 5((V 3 T)(V 1 W)(V 1 Y)))
我不确定函数的实现如何返回M中的变量列表。我已经定义了一个函数来获取 vars-and-powers ,称为 varpowers
我的想法是:我使用 varpowers 返回的列表来使用 last 函数获取变量。这是我的代码:

(defun var-of (m)
  (setq a (varpowers m))
  (cond ((null a) nil)
        (t (cons (last (car a))
                 (var-of (cdr a))))))  

我猜这个递归是行不通的,因为每次在最后一行调用var-of时,重新定义了并且它的 car 总是相同的(( V 3 T))。我该如何解决这个问题呢? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

setq改变let

(defun var-of (m)
  (let ((a (varpowers m)))
      (cond ((null a) nil)
            (t (cons (last (car a))
                     (var-of (cdr a)) )))))