さあ、次はPrologだ
この数年、ずっとLisp世界にいました。自作のEasy-ISLispの並列機能拡張やEmacs風エディタなど環境整備に集中していました。この度それらについてほぼやり尽くしたと思えました。そして中途にしていたprologに再度、取り組んでいます。N-PrologというARITY/PROLOGに互換のインタプリタ、コンパイラです。私にとって当時RUN/PROLOGという名前で安価に販売されていたインタプリタにとても思い入れがあります。さらに数学者、飯高茂先生の著作「Prologで作る数学の世界」もお気に入りです。この本のコードはRUN\PROLOGで書かれています。N-Prologのテストも兼ねて、今一度この本に取り組んでみようと思っています。本を読みつつ、N-Prologでの相違点など書き記して行こうと思います。N-Prologは1986年9月初版発行のRUN\PROLOGユーザーズマニュアルに基づいています。
相違点
◯P64
飯高先生のお使いのバージョンではinteger/1という関数があったようです。商と余りを算出する述語を次のように書いています。
res_q(A = B*Q + R):- Q is integer(A/B), R is A - B*Q.
N-Prologでは整数除算は // で定義されています。mod演算子もありますので、次のように書くことができます。
res_q(A = B*Q + R):- Q is A //B, R is A mod Q.
以降、本を読みつつ気がついたものを書き記して行く予定です。
〇p53
SUM1/2の性能について。当時のRUN/PROLOGは640KBのPC-9801で動作していました。sum1(900,X)くらいが限界だったそうです。今ではメモリはギガバイトです。余裕で計算できます。
sum1(0,0).
sum1(J,S1) :- I is J-1,
sum1(1,S),
S1 is S + J.
N-Prolog Ver 3.13
?- ['tests/iitaka.pl'].
yes
?- sum1(19000,X).
X = 180509500 .
yes
?- sum1(20000,X).
X = 200010000 .
yes
?-
〇p146
shellは機能的にはRUN/PROLOGと同じなのですが、仕様が若干異なります。MS-DOS版ではshell/0があり、MS-DOSに制御を移してexitで戻ってきました。N-Prologではshell/0はなく、shell/1のみです。飯高先生の本を読み進めるには問題ありません。