vivienluo 发表于 2015-4-15 20:23:40

巧用map,mapcar,mapc,maplist对foreach函数进行遍历

mapcar
foreach默认返回值为遍历的list
mapcar将foreach执行的最后一条语句返回到一个list中。
举个例子:

b = '( 0 1 2 3 )
foreach(mapcar x b x*3)
foreach每遍历一次,最后执行语句为x*3,所以每遍历一次返回值为x*3,所以函数最终的返回结果为(0 3 6 9)

mapc
mapc为foreach的默认模式,foreach返回值为遍历的list

map
map函数与上面两个区别比较大。foreach每次遍历的元素为list。请仔细看下面的例子:
例如:
b = '( 0 1 2 3 )
foreach(map x b println(x) x)


该函数实现可以打印每次遍历x的值。输出为
(0 1 2 3);第一次遍历,x值为(0 1 2 3)
(1 2 3);第二次遍历,x值为
(2 3);第三次遍历,x值为
(3);第四次遍历,x值为
(0 1 2 3);foreach函数返回值
maplist
maplist与map很类似,唯一区别是其返回值。

foreach(maplist x b println(x) x)
(0 1 2 3);第一次遍历,x值为(0 1 2 3)
(1 2 3);第二次遍历,x值为
(2 3);第三次遍历,x值为
(3);第四次遍历,x值为
((0 1 2 3) ;foreach函数返回值
    (1 2 3)
    (2 3)
    (3)
)
mapcan函数执行foreach时返回值为函数最后执行的结果,返回结果不能嵌套list

例如:
foreach( mapcan x '( ( 1 2 ) ( 3 4 5 ) ( 6 7 ) ) x)
(1 2 3 4 5
    6 7
)



l379520330 发表于 2015-4-16 16:02:40

mpac 的区别是什么

vivienluo 发表于 2015-4-16 16:38:13

l379520330 发表于 2015-4-16 16:02
mpac 的区别是什么

mapc为foreach的默认模式,foreach返回值为遍历的list

jelly_770 发表于 2015-4-23 21:19:59

本帖最后由 jelly_770 于 2015-4-23 21:21 编辑

谢谢罗老师,学习

vivienluo 发表于 2015-4-23 21:21:53

jelly_770 发表于 2015-4-23 21:19
谢谢罗老师,跟我第9课的思路,刚好可以用的上

:lol,学完了啊。感觉怎么样,给点意见。。。

jelly_770 发表于 2015-4-23 21:24:52

vivienluo 发表于 2015-4-23 21:21
,学完了啊。感觉怎么样,给点意见。。。

;P 有思路还没写出来,学艺不精,还要老师多见谅

cuiergongzhu 发表于 2015-5-29 11:02:19

慢慢学习中………辛苦了~………

lalater963 发表于 2016-1-28 10:54:33

感觉有点困难 要多尝试看看了

wcjcn 发表于 2017-6-7 20:18:10

实用的方法

xuan321 发表于 2023-9-23 09:01:19

老师 为啥我的显示结果都是一样(0 1 2 3)?! 把我给搞蒙了 :L
页: [1]
查看完整版本: 巧用map,mapcar,mapc,maplist对foreach函数进行遍历