Lisp 从列表列表中提取项目?

Lisp 从列表列表中提取项目?,lisp,common-lisp,Lisp,Common Lisp,我正在为类做一个与lisp相关的作业,其中一个问题要求我们使用mapcar从列表中“提取”一项(这是否意味着他希望我们打印它,或者干脆删除它,我不完全知道,我假设他希望我们打印它。) 我通常理解使用(nth 3(列表1 2 3 4))从列表中获取第三项,但使用mapcar似乎过于复杂-尤其是当他希望我们测试的数据是(他希望我们提取社会保险号码): 有人能指导我如何使用mapcar?我一直在查找它的Web链接,似乎mapcar通常用于执行列表中每个项目的特定操作,而不是单个项目。(或者可能我理解错

我正在为类做一个与lisp相关的作业,其中一个问题要求我们使用
mapcar
从列表中“提取”一项(这是否意味着他希望我们打印它,或者干脆删除它,我不完全知道,我假设他希望我们打印它。)


我通常理解使用
(nth 3(列表1 2 3 4))
从列表中获取第三项,但使用
mapcar
似乎过于复杂-尤其是当他希望我们测试的数据是(他希望我们提取社会保险号码):


有人能指导我如何使用
mapcar
?我一直在查找它的Web链接,似乎
mapcar
通常用于执行列表中每个项目的特定操作,而不是单个项目。(或者可能我理解错了?

我实际上设法解决了这个问题-它非常简单,你真正需要做的就是在项目列表中做“第三个”。我得到的代码是:

(setf daily-planet
    '((olsen jimmy 123-76-4535 cub-reporter)
      (kent clark 089-52-6787 reporter)
      (lane lois 951-26-1438 reporter)
      (white perry 355-16-7439 editor)))

(mapcar #'third daily-planet)
成功了

CL-USER 26 > (setf daily-planet
                   '((olsen jimmy 123-76-4535 cub-reporter)
                     (kent clark 089-52-6787 reporter)
                     (lane lois 951-26-1438 reporter)
                     (white perry 355-16-7439 editor)))

((OLSEN JIMMY |123-76-4535| CUB-REPORTER) (KENT CLARK |089-52-6787| REPORTER)
 (LANE LOIS |951-26-1438| REPORTER) (WHITE PERRY |355-16-7439| EDITOR))
您的解决方案:

CL-USER 27 > (mapcar #'third daily-planet)

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)
探索替代方案

只是使用lambda函数,什么都不做。它只返回每个项目:

CL-USER 28 > (mapcar #'(lambda (x)
                         x)
                     daily-planet)

((OLSEN JIMMY |123-76-4535| CUB-REPORTER) (KENT CLARK |089-52-6787| REPORTER)
 (LANE LOIS |951-26-1438| REPORTER) (WHITE PERRY |355-16-7439| EDITOR))
现在使用
third
访问每个子列表的第三个元素:

CL-USER 29 > (mapcar #'(lambda (x)
                         (third x))
                     daily-planet)

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)
CL-USER 30 > (mapcar #'(lambda (x)
                         (nth 2 x))
                     daily-planet)

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)
现在使用
NTH
访问每个子列表的第三个元素:

CL-USER 29 > (mapcar #'(lambda (x)
                         (third x))
                     daily-planet)

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)
CL-USER 30 > (mapcar #'(lambda (x)
                         (nth 2 x))
                     daily-planet)

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)

“我通常理解使用(nth3(列表1234))来获取第三项”--我希望它在lisp中返回第四项。n从0开始,因此(n 0’(1 2 3 4))将返回1。