1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

議長さんに敬意を表して

Last updated at Posted at 2025-01-26

発端

N-Prologは私の趣味的な処理系で1980年代を懐かしみつつRUN\PROLOGのコードを動かす目的で作ってます。ところで最近、UWNという人からissuesをもらいました。ISO-Prolog規格との対比を持ち出してきて、それは違うと指摘をもらいました。「ああ、めんどくせ。言語仕様の隅を突くのが大好きな暇人かな?」とテキトーに距離をおいていたのですが、どうもこの傍若無人なコメント、どこかで見たことあるような雰囲気...

何日かして思い出しました。ああ、ISO-Prologの議長のウルリッヒさんだよ。頭文字をとるとUWN、あのお方だ!!!。

言い訳

UWNさんにはN-Prologは1980年代のDEC10-Prologをお手本にしているもので、日本でRUN\PROLOGと呼ばれたいたものの互換でして・・・と言い訳をしたのですが。なんか、考えてるうちにISO-Prologは好きじゃないけど、実装できないのか?と言われるのも悔しい気がしてきました。以前、作っていたO-PrologではISO準拠を目指して頑張ってはみたものの、そのシンタックスのハードルの高さと、その割にはエレガントではないところ、文字列が不満足なところ、モジュールが曖昧なところが嫌になって離脱したのでした。

でも、これもなんかの御縁かもしれません。いっちょやってみますか。

RUN/PROLOG上位互換

というわけでISO-Prologのコアの部分を取り込んで実装を追加したところです。ウルリッヒさんから「ああ、その結果はISOの仕様と違うと言われそうなので、ドキュメントに逃げ口上をたっぷり書いておきました。

今のところ追加したのは下記の述語たちです。

\+ (not)
atom_concat/3
append/3
member/2
between/3
select/3
succ/2
maplist/2
compound/1
ground/1
once/1
atom_codes/2
atom_chars/2
char_code/2
number_codes/2
number_chars/2
predicate_property/2
bagof/3
setof/3
findall/3
existerrors/2
write_canonical/1 /2
atom_length/2
get_char/1 2
get_byte/1 2
put_char/1 
flush_output/0
catch/3
throw/1
unify_with_occurs_check/2
current_input/1
current_output/1
set_input/1
set_output/1
use_module/1
module/1
copy_term/2

モジュールはSWI-Prologを参考にしつつも、独自です。ISOはモジュールはゆるくしか定めてないのでセーフでしょう。

案外、楽しいかも

何年か前はほんとISOが苦手で嫌ってました。でも、やってみると案外と楽しいかもしれません。ISOの仕様にとらわれずに自分ならこう考えて、こういう仕様にした、ということをやっています。ChatGPTも相手になってくれるので百人力です。あいつは大学教授並に博識です。本業が忙しいのですが、こんなことをするのも気分転換、リラックスできるのでいいかもしれません。

2025-01-26 13-28-18.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?