Prolog
SWI-Prolog
PrologDay 6

日本語で言語を作ろう

More than 1 year has passed since last update.

はじめに

Prolog は特に日本語プログラミング言語ではありません。
しかしながら、ユーザーが自由に優先順位を持った演算子を定義できて文字コードに制限が少なく、マクロを使うことも可能なので日本語プログラミングをすることも簡単に出来ます。

例えば以下のプログラムは、四則演算の評価をする言語を定義して使っている例です:

test.pl
:- op(1200,xfx,ならば).
:- op(1000,xfy,かつ).
:- op(700,xfx,).
:- op(700,xfx,を評価すると).
term_expansion(A ならば B,B:-A).
A かつ B :- A,B.
A  整数 :- integer(A).
A  B :- B is A.

I  整数 ならば I を評価すると I.
A を評価すると A_ かつ B を評価すると B_ かつ A_+B_  C ならば A+B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_-B_  C ならば A-B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_*B_  C ならば A*B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_ div B_  C ならば A/B を評価すると C.

:- 1+2*3 を評価すると R, writeln(R),halt.

I が 整数 ならば I を評価すると I.
A を評価すると A_ かつ B を評価すると B_ かつ A_+B_ が C ならば A+B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_-B_ が C ならば A-B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_*B_ が C ならば A*B を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_ div B_ が C ならば A/B を評価すると C.

という日本語として十分理解できる文章を、Prologでは式として認識することが出来ます。
恐るべし、Prologです。

実行方法

$ swipl test.pl
7

計算できてますよ。

ダウンロード

https://qiita.com/h_sakurai/items/701b1ca926b5e2176a83