Help us understand the problem. What is going on with this article?

【スマートフォンではなく】パソコンが始める Prolog 【動作確認編】

More than 5 years have passed since last update.

【スマートフォンではなく】パソコンが始める Prolog 【動作確認編】

前回 は、あたにPrologを導入して頂きました。

動作確認をしてみましょう

本当にあなたに Prolog 処理系がインストールされたか、あなたはまだ疑っているのではないでしょうか。

ここでは、実際に Prologのプログラムを動作をさせて、あなたがプログラムを処理している実感を味わってみることにしましょう。

せっかくですので、 1日目 に取り上げたソースコードを動かしてみることにします。
ただし、少しソースコードは変更しています。

下記を advent-example01.pro などとファイル名をつけ、保存しておいてください。

% あなたとジャバ
ジャバ(あなた).

% わたしとジャバ
ジャバ(わたし).

% X とジャバならば、X は今すぐジャバをダウンロードすべきである
ジャバをダウンロード(X,今すぐ) :- ジャバ(X).

:pencil: Windowsにて「メモ帳」を使い保存する場合は、 「文字コード」を 「UTF-8」 で保存してください。でなければ、あとの作業でエラーがでることでしょう。
2014-12-03_swi-prolog06.png

あなたが Linux や Mac OS X 環境の場合

以下のようにして、読み込ませることができるでしょう。

$ swipl -f advent-example01.pro

あなたが Windows の場合

まずは上記で紹介したように Prolog を起動し、メニューから 「File」⇒「Consult...」 と選択し、ファイル advent-example01.pro を選ぶとよいでしょう。

2014-12-03_swi-prolog05.png

:pencil: このあたりは 『プログラムの起動と質問の自動実行 - Prolog - Wikipedia』 も参考になるかと思います。

対話画面が開いたら

対話画面が開いたら 以下のように入力してみましょう。下記は、 「あなたは今すぐジャバをダウンロードすべきか?」 という趣旨の質問をしています。

?- ジャバをダウンロード(あなた,今すぐ).

:pencil: ?- 以降の文字を入力します

true と出力されました。これは「あなたは今すぐジャバをダウンロードすべきである」ということを意味しています。

?- ジャバをダウンロード(あなた,今すぐ).
true.

それでは、以下の質問を入力した場合はどうでしょうか。下記は 「今すぐジャバをダウンロードすべきは『誰』(X)か?」 という質問をしてみています。

?- ジャバをダウンロード(X, 今すぐ).

まずは以下のように、出力されるでしょう。

?- ジャバをダウンロード(X, 今すぐ).
X = あなた 

さて、ここからが Prolog のおもしろいところです。

そのまま ;スペースバー を押してみましょう。

?- ジャバをダウンロード(X, 今すぐ).
X = あなた;
X = わたし.

すると、上記のように 「あなた」 以外の 「わたし」 も現れました。

上記は、 「今すぐジャバをダウンロードすべきは『あなた』であり『わたし』である」 ことを意味しています。

他のプログラミング言語ならば、 for や foreach などを使っていたかもしれません。
このあたりが Prolog のユニークなところの1つです。


さて、うまくいきましたでしょうか。

Prologのただの「動作確認」としては少々長く感じられたかもしれません。

それでも、もしあなたが物足りないならば以下の課題を試してみてください。

:pencil: もし課題に取り組まなかったとしても、そのことによって、すぐに巨大な隕石が地球に落ちてきたり、地軸が必要以上に傾いたりはしないでしょう。あなたが気が向いたときで大丈夫です。

課題1 : 以下のように入力した場合はどのような結果が出力されるでしょうか。

?- ジャバをダウンロード(X, Y).

課題2 : 下記のように forall を利用した場合はどのような結果が出力されるでしょうか。

?- forall(ジャバをダウンロード(X, 今すぐ), writeln(X)).

それでは、次回の Prolog Advent Calender でお会いしましょう。

toby_net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away