我正在为一个大学课程开发一个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))。我该如何解决这个问题呢? 提前谢谢。
答案 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)) )))))