Friday, 31 August 2007

ISO Prolog



SICStus v4 は、なんと、ISO Prolog モードのみで、Clockskin & Merish の構文は動かない...

http://mixi.jp/view_diary.pl?id=434307641&owner_id=2510

なので、完全放置だったんですが、昨日の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)).
とかすると使えるようになりました。

ちょっと、懐かしい。

No comments: