我对口齿不清不太在行所以我的问题是,我得到了一个结构(列表列表),我的工作是创建一个函数来检索每个子列表中的第二项(从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遍历列表子列表,但正如我所说的,我无法理解帮忙?

最佳答案

CL-USER> (mapcar #'caddr *jack*)
(FRUIT FRUIT AGENT AGENT)

编辑:如果要练习递归方法,请尝试:
(defun attempt (list-of-lists)
    (if (null list-of-lists) nil
        (cons (third (car list-of-lists))
              (attempt (cdr list-of-lists)))))

EDIT2:递归尾:
(defun attempt-tail (list-of-lists)
    (labels ((iter (rest ans)
               (if (null rest) (nreverse ans)
                   (iter (cdr rest) (push (third (car rest)) ans)))))
      (iter list-of-lists nil)))

编辑3:当我在做的时候,这里是循环版本:
(loop for list in *jack* collect (third list))

关于lisp - 麻烦列表LISP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19670175/

10-14 19:53
查看更多