【发布时间】:2013-10-29 22:12:44
【问题描述】:
我是 LISP 新手,所以我不太擅长这个...所以我的问题是,我得到了一个结构(列表列表),我的工作是创建一个函数来检索第二个每个子列表中的项目(从 0 开始计数)。所以最后还是想回(果果代理场)。
我可以执行遍历列表的基本递归调用,但我似乎无法弄清楚如何获取子列表中的第二项。
列表结构:
(defparameter *jack*
'((orange#8 apple fruit basment)
(pear#12 mango fruit basment)
(jones rabbit agent closet)
(jack dog agent yard)
))
到目前为止我的代码:
(defun attempt(*data*)
(cond ((null *data*)
nil
)
((attempt (rest *data*)))
))
我在想的是,我应该使用 first 和 rest 遍历列表子列表,但就像我说的那样,我想不通。帮助?
【问题讨论】:
-
糟糕,Scheme 中有“可能重复”,但这是 Common Lisp。答案仍然有效,但你必须使用
mapcar而不是map,并且你应该使用'second而不是cadr。 (你也可以使用'cadr或#'cadr,但我认为'second更清楚地说明了意图。) -
有关
mapcar的另一个示例,请参阅stackoverflow.com/q/15351988/1281433。
标签: lisp common-lisp