map-reduce in common lisp

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?

你可能感兴趣的:(common lisp)