処理系:プログラムを実行するには

処理系:プログラムを実行するには

Tags: 処理系, CCL, CLISP, SBCL

Common Lispのプログラムを実行する方法について説明します。



スクリプトとして実行する

CLISPSteel Bank Common Lispシバン(シェバン、シェバングとも)に対応しています。UNIXに準じる環境では、Common Lispのソースコードに実行権限を付けて、ファイルの最初の行にシバンを書いておけば、シェルから直接実行することができます。

% cat hello
#!/usr/local/bin/sbcl --script

(format t "Hello, world.~%")
% chmod +x hello
% ./hello
Hello, world.
% 

それ以外のシバンに対応していない処理系では、処理系がシバンを正しく扱えません。シェルが処理系を起動し、最初の行のシバンを読み込んだ時点でエラーになります。これを回避するには、リーダーマクロを定義してシバンを無視させると良いでしょう。

;; http://trac.clozure.com/ccl/ticket/823より
(set-dispatch-macro-character #\# #\!
  (lambda (stream char n)
    (declare (ignore char n))
    ;; 単純に改行まで読み飛ばす
    (do* ((ch (read-char stream nil nil) (read-char stream nil nil)))
         ((or (null ch) (eql ch #\newline)) (values)))))

このようなマクロを処理系の初期化ファイルに書いておけば、ソースコードをスクリプトとして実行できます。

% cd
% cat .ccl-init.lisp
(set-dispatch-macro-character #\# #\!
  (lambda (stream char n)
    (declare (ignore char n))
    (do* ((ch (read-char stream nil nil) (read-char stream nil nil)))
         ((or (null ch) (eql ch #\newline)) (values)))))
% cat hello
#!/opt/ccl-1.6/lx86cl64 -l
;; シンボリックリンクを指定できないのでバイナリを直接指定

(format t "Hello, world.~%")
;; プログラムを終了させないとREPLに入る
(quit)
% chmod +x hello
% ./hello
Hello, world.
% 

コマンドラインパラメータを指定して処理系を起動する

多くの処理系では、トップレベルの処理の代わりに、あるいはトップレベルの処理の前にコードを実行できるようになっています。

% cat hello.lisp
(format t "Hello, world.")
% ccl -e '(progn (compile-file "hello") (quit))'
% ls hello.*
hello.lisp  hello.wx32fsl
% ccl -l hello -e "(quit)"
Hello, world.
% clisp -q -x '(progn (compile-file "hello") (quit))'
;; Compiling file C:\Cygwin\tmp\hello.lisp ...
;; Wrote file C:\Cygwin\tmp\hello.fas
0 errors, 0 warnings
% ls hello.*
hello.fas  hello.lib  hello.lisp  hello.wx32fsl
% clisp hello
Hello, world.
% 

プログラム専用のイメージを作り、それを使って処理系を起動しても良いでしょう。

% cat main.lisp
(defun main ()
  (format t "Hello, world."))
% ccl
Welcome to Clozure Common Lisp Version 1.7-r14925M  (WindowsX8632)!
? (compile-file "main")
#P"C:/Cygwin/tmp/main.wx32fsl"
NIL
NIL
? (load "main")
#P"C:/Cygwin/tmp/main.wx32fsl"
? (ccl:save-application "main.image" :toplevel-function #'main)
% ccl main.image
Hello, world.
% 

コマンドラインパラメータやイメージの作り方については、それぞれの処理系のマニュアルを見てください。


実行ファイルを作る

実行ファイルを作れば、それぞれのOSごとに決められている方法でプログラムを自然に起動できます。あらかじめ処理系をインストールしておく必要もありません。

詳しくは処理系:実行ファイルの作り方を見てください。


参考文献


Last modified : 2011/08/22 07:46:01 JST
CC0 1.0
Powerd by WiLiKi 0.6.1 on Gauche 0.9