使用映射函数进行列表遍历
至于为什么叫做映射函数,应该是历史原因造成的
映射函数共有5个函数:
- map
- mapc
- mapcar
- mapcan
- maplist
所有的这些函数具有相同的参数:一个函数和一个列表,函数仅可以接受一个参数。
map* ( func list )
lambda用法
一般而言,通常使用lambda
创建一个无名字的函数作为映射类函数的第一个参数。
mapcar(
lambda( ( x ) list( x x**2 ))
'(0 1 2 3 )
)
foreach用法
使用foreach
函数使代码更好理解。上一节示例代码的等效形式如下:
foreach(
mapcar x '( 0 1 2 3 )
list( x x**2 )
)
小结
lambda
形式和foreach
形式的关系是非常紧密的。当使用foreach
函数时,SKILL实际上会把foreach
函数体内的表达式转换为lambda
函数,然后将lambda
函数作为参数传递到map*
函数。
;;froeach写法
foreach( mapcar x aList
exp1()
exp2()
exp3()
)
;;lambda写法
mapcar(
lambda( ( x )
exp1()
exp2()
exp3()
)
aList
)
mapc
函数
用法说明:
- 通过迭代,逐个获取列表中每个元素;
- 在每次迭代中,当前元素在
foreach
函数体是可用的; - 返回值为原始参数列表
foreach(
mapc x '(1 2 3 4 5)
println(x)
)
等效写法
mapc(
lambda( ( x ) println( x ) )
'( 1 2 3 4 5 )
)