MAP
(map 'vector #'* (list 1 2 3) (list 3 4 5) (list 2 2 2))
==>(注:该符号表示上面的表达式得到下面的结果)
#(6 16 30)
;;map函数格式如下
;;(map list-type function list-1 list-2 ... list-n)
;;list-type是列表的类型,可以是vector,string等等,这个不是重点
;;map函数接受一个函数和N个列表,该函数接受N个参数;返回一个列表。返回列表的每个元素都是使用输入的函数对N个类别中的每个元素处理的结果。
;;比如上面的表达式就把(1 2 3),(3 4 5)和(2 2 2)三个类别的对应元素相乘。
;;别问我这有啥用!
;;最起码你可以让对应的情侣互诉倾心啊!
;;比如A1喜欢B1,A2喜欢B2,A3喜欢B3;
;;就可以把A1,A2,A3放入一个类别(男孩列表),把B1,B2,B3放入另一个列表(女孩列表);然后用一个函数分别处理对应的男女;
;;比如,就可以写成:
(map 'vector #'(lambda (x y) (format t "~a love ~a~%" x y)) (list "he" "sz") (list "yu" "ql"))
==>
he love yu
sz love ql
REDUCE
(reduce #'+ (list 1 2 3 4))
==>
10
;;reduce函数格式如下
;;(reduce function list)
;;reduce让一个指定的函数(function)作用于列表的第一个元素和第二个元素,然后在作用于上步得到的结果和第三个元素,直到处理完列表中所有元素。
;;reduce函数一般用于把一个列s表提取成一个值
;;比如上面的表达式就是把(1 2 3 4)相加起来
;;别问这有啥用!
;;最起码你可以提取班级同学的总年龄再加上班主任的年龄啊!(貌似这个需求好无聊)
;;比如班上有3人:("heshizhu" 25) ("zhangsan" 22) ("lisi" 34)
(reduce #'+ #(("heshizhu" 25) ("zhangsan" 22) ("lisi" 34)) :key #'second :intial-value 50) ;;班主任好老哦,50岁
==>
131
;; 我这的intial-value参数(用于设置初始值)有点问题,所以略去
(reduce #'+ #(("heshizhu" 25) ("zhangsan" 22) ("lisi" 34)) :key #'second)
==>
81
we all know map-reduce stem from lisp. Why do not we learn lisp?