关于“应用”的问题
大家好。我有一个关于“应用”和“地图车”的问题。
请查看以下代码:
(setq b '((0 1 2) (3 4 5) (6 7 ))
(apply 'mapcar (cons 'list b))
它返回:((0 3 6)(1 4 7)(2 5 8))
它是如何工作的?
下一个问题:
(setq a '(1 2 3 4 5 6 7 8 9 0))
(apply 'mapcar (cons 'list (list a (cdr a))))
它返回:((1 2)(2 3)(3 4)(4 5)(5 6)(6 7)(7 8)(8 9)(9 0))
它是如何工作的? 欢迎来到CADTutor。
希望我能像你一样清楚地描述它们
第一个函数apply在列表上实现mapcar函数,mapcar函数迭代每个列表的每个元素,并使用cons和list函数将它们收集在列表中。
第二个问题是使用apply函数实现mapcar函数,分别获得列表的第一项和第二项,我可以以递归方式将其作为替代函数提供给您。
测试上述功能:
(_list '(1 2 3 4 5 6 7 8 9 0))
;; Returns
((1 2) (2 3) (3 4) (4 5) (5 6) (6 7) (7(8 9) (9 0))
谢谢你,塔瓦先生!
但我仍然对一些细节感到困惑。
第一
我和foreach一样知道mapcar函数。在代码1中,为什么下一个值是“3”而不是“1”?
请看其他示例:
(setq lst '((3 4 5) (0 1 2) (6 7 ))
(apply 'mapcar (cons 'min lst))
结果显示(0 1 2)
为什么不是(3 0 6)?
第二
为什么要在列表的前面添加列表(使用apostrope表示不执行),而使用apply可以收集列表?
谢谢
因为mapcar函数首先遍历目标列表的每个第一个元素,然后遍历第二个元素,最后遍历第三个元素。。。。直到最后。
因为目标列表的最小值由三个元素组成,结果是三个元素,包括最小值。
mapcar函数需要的是,第一个apply函数需要一个函数作为第一个参数,然后mapcar函数也需要一个函数作为第一个参数。
我很高兴你的问题,因为这也刷新了我对前面提到的函数的记忆 谢谢你!
经过你的解释,我已经清楚地了解了那些功能!
很高兴听到这个消息,非常欢迎你。
继续练习函数以熟悉它们,如果有一天你注意到某个函数做了比你更重要的事情,不要感到惊讶或恐慌
用于查看或了解示例一是entdel函数。
考虑一下:
(apply 'mapcar (cons 'list '((0 1 2) (3 4 5) (6 7 )))与:
(mapcar 'list '(0 1 2) '(3 4 5) '(6 7 )其评估方式与:
(list (list 0 3 6) (list 1 4 7) (list 2 5 )
返回:
((0 3 6) (1 4 7) (2 5 ) 也谢谢你,李先生!
我试了另一个例子,真的很神奇。
但是为什么要使用apply和mapcar,为什么不只是使用mapcar?
这有什么原因吗?快得多?
谢谢
不客气!
所需的函数取决于输入数据的格式、要执行的操作以及返回的列表所需的格式-在您的特定示例中,如果三个元素的每个列表嵌套在父列表中,则该列表将作为单个参数提供给mapcar,并且不会返回相同的结果:
_$ (mapcar 'list '((0 1 2) (3 4 5) (6 7 ))
(((0 1 2)) ((3 4 5)) ((6 7 ))
因此,应用函数用于构造等价于以下内容的表达式:
(mapcar 'list '(0 1 2) '(3 4 5) '(6 7 )
页:
[1]