再現できません。
乱数のベクトルのソートは、LispWorks で乱数のリストをソートするよりも高速です。
(defun test ()
(let* ((list (loop repeat 10000000 collect (random 1000000)))
(vector (coerce list 'vector)))
(time (sort list #'>))
(time (sort vector #'>))
(values)))
例:
CL-USER 9 > (test)
Timing the evaluation of (SORT LIST (FUNCTION >))
User time = 8.697
System time = 0.027
Elapsed time = 8.626
Allocation = 170168 bytes
145 Page faults
Timing the evaluation of (SORT VECTOR (FUNCTION >))
User time = 5.951
System time = 0.018
Elapsed time = 5.904
Allocation = 120512 bytes
86 Page faults
ベクトルの場合は 5.951 秒、リストの場合は 8.697 秒です。
Common Lisp では、1 次元配列は正確にベクトルです。SORT
他の多次元配列でも機能しません。
CL-USER 10 > (vector 'a 'b 'c)
#(A B C)
CL-USER 11 > (describe *)
#(A B C) is a (SIMPLE-VECTOR 3)
0 A
1 B
2 C
CL-USER 12 > (arrayp **)
T
CL-USER 13 > (typep (vector 'a 'b 'c) '(array symbol (3)))
T
したがって、3 つのシンボルのベクトルは、長さ 3 の element-type の 1 次元配列でもありSYMBOL
ます。
私の例 (Intel i7 プロセッサを搭載した Apple Macbook Air) の場合:
Implementation | faster | seconds
-----------------+--------+--------
LispWorks 64bit | vector | 5.951
Clozure CL 64bit | vector | 6.727
SBCL 1.1 64bit | list | 8.890
CLISP | list | 42.968