【发布时间】:2012-03-31 20:07:56
【问题描述】:
这是我的问题:对于我的一项任务,我的任务是开发一个 lisp 程序,该程序接受 2 个列表作为输入,一个表示带有商品名称和数量的购物车 (L1),第二个表示价格表(L2),带有商品名称和价格。一切都遵循这种格式:
(calcTotal '(shirtA 3 shirtB 1) '(shirtA 25 shirtB 55))
The total is 155.00
下面是我的代码:
(defun calcTotal (L1 L2 &aux(Ttl 0))
(cond
(
(and (listp L1) (listp L2))
(do
((tLst1 L1 (cddr tLst1)))
((equal tLst1 nil) Ttl)
(do
((tLst2 L2 (cddr tLst2)))
((equal tLst2 nil) nil)
(cond
(
(equal (car tLst1) (car tLst2))
(print (+ Ttl (* (cadr tLst1) (cadr tLst2))))
)
)
)
)
)
)
)
基本上,它所做的是检查第一个列表中的项目名称,然后在第二个列表中搜索它。一旦找到匹配项,将它们的值相乘以获得该项目的总数,然后删除第一个列表中的前两个元素,然后重复。问题是总数(Ttl)没有累积。我可以具体获取每个项目的金额,但由于某种原因,Ttl 返回为 0。谁能告诉我为什么?
【问题讨论】:
-
我建议您使用典型的 Lisp 约定缩进和格式化代码。括号自己的行没有多大帮助。正确缩进(编辑器支持)和括号匹配有帮助。
标签: lisp common-lisp