コマンドラインからLispプログラムを呼び出す

他の言語でそうやるように,コマンドラインからLispプログラムを呼び出したい.軽く調べてみたところ,あまり情報がない.とりあえず知りえたことをメモ.


他の処理系ではわからないけれど,CLISPの場合,こんな感じのプログラムを書けば良い.

; test.lisp
(defun main ()
  (format t "Hello, Lisp World!"))

(main)

呼び出しはこんな感じ

% clisp test.lisp
Hello, Lisp World!

別に呼び出す関数はmainでなくてもよい.なお,速度が気になる場合はコンパイルをするとよい.CLISP処理系を起動してcompile-file関数でコンパイルする.

(compile-file "test.lisp")

すると,test.fasというファイルが生成され,同じように呼び出すことができる.

% clisp test.fas
Hello, Lisp World!

ちなみに一行目に#!/usr/bin/clispというように書いて実行権限を与えると名前だけで実行できるようになる.この場合はコンパイルできなくなるので注意.CLISPへのパスはwhichで調べる.

% which clisp
/usr/local/bin/clisp

なので

#!/usr/local/bin/perl

をtest.lispの行頭に挿入する.

% chmod 755 test.lisp
% ./test.lisp
Hello, Lisp World!

表示された.
これで,ちょっとしたスクリプトも書けるようになりました.システムコールの仕方がわかればもっと良いのだけど.

追記

コマンドライン引数の取りかたがここに書いてあった.
コマンドラインから与えられた引数は*args*にリストで与えられるっぽい.

; test2.lisp
(defun main ()
  (print *args*)
  (format t "Argument length is ~A" (length *args*)))
(main)	 

実行するとこんな感じ

% clisp test2.lisp 1 2 3
("1" "2" "3")
Argument length is 3

おぉー.オプションを取得するようなライブラリとかないのかな?それくらいなら自分で作れるかな.


コマンドライン引数についてのまとめ発見