Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10083|回复: 9

[原创] 巧用map,mapcar,mapc,maplist对foreach函数进行遍历

[复制链接]
发表于 2015-4-15 20:23:40 | 显示全部楼层 |阅读模式
mapcar
foreach默认返回值为遍历的list
mapcar将foreach执行的最后一条语句返回到一个list中。
举个例子:

  1. b = '( 0 1 2 3 )
  2. foreach(mapcar x b x*3)
复制代码

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

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

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



该函数实现可以打印每次遍历x的值。输出为
  1. (0 1 2 3);第一次遍历,x值为(0 1 2 3)
  2. (1 2 3);第二次遍历,x值为
  3. (2 3);第三次遍历,x值为
  4. (3);第四次遍历,x值为
  5. (0 1 2 3);foreach函数返回值
复制代码

maplist
maplist与map很类似,唯一区别是其返回值。

  1. foreach(maplist x b println(x) x)
  2. (0 1 2 3);第一次遍历,x值为(0 1 2 3)
  3. (1 2 3);第二次遍历,x值为
  4. (2 3);第三次遍历,x值为
  5. (3);第四次遍历,x值为
  6. ((0 1 2 3) ;foreach函数返回值
  7.     (1 2 3)
  8.     (2 3)
  9.     (3)
  10. )
复制代码

mapcan函数执行foreach时返回值为函数最后执行的结果,返回结果不能嵌套list

例如:
  1. foreach( mapcan x '( ( 1 2 ) ( 3 4 5 ) ( 6 7 ) ) x)
  2. (1 2 3 4 5
  3.     6 7
  4. )
复制代码




发表于 2015-4-16 16:02:40 | 显示全部楼层
mpac 的区别是什么
 楼主| 发表于 2015-4-16 16:38:13 | 显示全部楼层
l379520330 发表于 2015-4-16 16:02
mpac 的区别是什么

mapc为foreach的默认模式,foreach返回值为遍历的list
发表于 2015-4-23 21:19:59 | 显示全部楼层
本帖最后由 jelly_770 于 2015-4-23 21:21 编辑

谢谢罗老师,学习
 楼主| 发表于 2015-4-23 21:21:53 | 显示全部楼层
jelly_770 发表于 2015-4-23 21:19
谢谢罗老师,跟我第9课的思路,刚好可以用的上

,学完了啊。感觉怎么样,给点意见。。。
发表于 2015-4-23 21:24:52 | 显示全部楼层
vivienluo 发表于 2015-4-23 21:21
,学完了啊。感觉怎么样,给点意见。。。

有思路还没写出来,学艺不精,还要老师多见谅
发表于 2015-5-29 11:02:19 | 显示全部楼层
慢慢学习中………辛苦了~………
发表于 2016-1-28 10:54:33 | 显示全部楼层
感觉有点困难 要多尝试看看了
发表于 2017-6-7 20:18:10 | 显示全部楼层
实用的方法
发表于 2023-9-23 09:01:19 | 显示全部楼层
老师 为啥我的显示结果都是一样(0 1 2 3)?! 把我给搞蒙了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-4-19 18:53 , Processed in 0.135746 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表