SICStus v4 は、なんと、ISO Prolog モードのみで、Clockskin & Merish の構文は動かない...
http://
なので、完全放置だったんですが、昨日のWorkshopと、今日のワールドコンの電車の時間が長かったので、昔書いた、プログラムを動くようにしてみました。(さすがに、受付けやっている間は、何も出来ませんでした...)
r_abolish(A,B) :- functor(C,A,B),retractall(C).
put([C]) :- !, char_code(Char,C),put_char(Char).
put(C) :- char_code(Char,C),put_char(Char).
ttyflush :- flush_output.
nofileerrors.
tab(0) :-!.
tab(N) :- N>0, N1 is N-1,write(' '),tab(N1).
とかすると良いらしい。abolish(A,B) は、abolish(A/B) に変わったんだが、predicate のproperty も消してしまう。これは、dynamic (つまり、assert/retract する述語)の場合は、極めてまずい。プログラムの中で、dynamic 宣言する手法が良くわからないので。なので、retract に置き換えるのが良いらしいです。
nofileerrors はないのか。なんで〜? もっとも、nofileerrors は、かなり brain damaged だったので、なくてもいいです。確か、ファイルのある/なしをチェックするのにしか使わないはず。
string literal とかの扱いが少し違う。back slash がCの文字列みたいな扱いになっている。これは、今までと互換を維持した書き直しがでないのでかなり困ります。しくしく。
systemp('\=='(_,_)).
と昔は書いていたのだが、
systemp('\\=='(_,_)).
と書くらしい。
まぁ、そのあたりを直したら動きました。
Prolog に閉じた部分は、あまり変わってないみたい。
昔の、Unix I/O (system とか)は、
:-use_module(library(system3)).
とかすると使えるようになりました。
ちょっと、懐かしい。