6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PrologAdvent Calendar 2017

Day 6

日本語で言語を作ろう

Last updated at Posted at 2017-12-04

はじめに

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 ならば AB を評価すると C.
A を評価すると A_ かつ B を評価すると B_ かつ A_ div B_ が C ならば A/B を評価すると C.

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

実行方法

$ swipl test.pl
7

計算できてますよ。

ダウンロード

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?