速度

Gauche って結構速いらしい。CLISP は遅い。GCL は速い。
それというのも、大学の課題の N-Queens を解くコードのプロトタイプを Scheme で書いて、うまくいったからさて課題で定められてる Common Lisp にコードを書き換えて clisp にやらせたら、まあ遅かったわけです。コンパイルできることに気付いてコンパイルしたら多少速くなったけど、それでも遅い。
以下それぞれ 8-Queens を解いてもらう。求める解は一つ。
Gauche

gosh> (load "./n-queens.scm")
#t
gosh> (time (n-queens 8))
;(time (n-queens 8))
; real   0.740
; user   0.730
; sys    0.000
((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))

CLISP

[1]> (load "n-queens.lsp")
[2]> (time (n-queens 8))
Real time: 8.19814 sec.
Run time: 8.192512 sec.
Space: 47481224 Bytes
GC: 90, GC time: 0.652032 sec.
((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))
[3]> (compile-file "n-queens.lsp")
[4]> (load "n-queens.fas")
[5]> (time (n-queens 8))
Real time: 1.467878 sec.
Run time: 1.464092 sec.
Space: 13066840 Bytes
GC: 25, GC time: 0.144006 sec.
((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))

GNU Common Lisp (gcl)

>(load "n-queens.lsp")
>(time (n-queens 8))
real time       :      5.630 secs
run-gbc time    :      4.450 secs
child run time  :      0.000 secs
gbc time        :      1.050 secs
((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))
>(compile-file "n-queens.lsp")
>(load "n-queens.o")
>(time (n-queens 8))
real time       :      0.420 secs
run-gbc time    :      0.420 secs
child run time  :      0.000 secs
gbc time        :      0.000 secs
((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))

俺の書いた N-Queens のコードになんか問題とかが色々あるとか想定したとしても。SchemeCommon Lisp でコードはまずまったく等価に書いたし。わりとびっくりした。

test