关于Common Lisp中的MERGE函数

时间:2014-11-29 11:52:03

标签: merge common-lisp

函数merge的逻辑是什么?

如果判断返回true,请不要选择list1中的第一个元素,如果为false,则选择list2?

我对以下两句话感到困惑......

(merge'list'(1)'(2)#'<)==> (1 2)

(merge'list'(1)'(2)#'=)==> (1 2)

为什么他们得到相同的结果?

1 个答案:

答案 0 :(得分:3)

merge的结果包含两个序列的所有元素。

如果谓词是T,则首先放置第一个元素。

CL-USER 57 > (merge 'list
                    (list 1 2)
                    (list 2 1)
                    #'<)
(1 2 2 1)

CL-USER 58 > (merge 'list
                    (list 1 2)
                    (list 2 1)
                    #'=)
(1 2 2 1)

CL-USER 59 > (merge 'list
                    (list 1 2)
                    (list 2 1)
                    #'>)
(2 1 2 1)

merge的基本用例:合并两个已排序的序列将产生一个包含所有元素的排序序列。

CL-USER 63 > (merge 'list
                    '(1 2 6)
                    '(3 4 5)
                    #'<)
(1 2 3 4 5 6)

也适用于矢量:

CL-USER 64 > (merge 'vector
                    #(1 2 6)
                    #(3 4 5)
                    #'<)
#(1 2 3 4 5 6)