5
6

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.

SWI-Prologでスペルミスを推測してくれた話

Last updated at Posted at 2015-06-05

(対象OS:Windows8、Windows8.1 ※Windows7は試していない)

M.Hiroiさんのお気楽 Prolog プログラミング入門のサンプルを試している中で、筆者が述語名のスペルミスをした時に、SWI-Prologが推測してメッセージを出してくれたので紹介。

手順は以下の通り。

まず、SWI-Prologは以下の手順でインストール。

powershell
# PowerShellを管理者にて実行しておく

# chocolateyのインストール
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))

# SWI-Prologのインストール
choco install swi-prolog

次に、以下の内容をファイルに保存し、ダブルクリックで起動。

family.pl
/* 男性 */
male(taro).
male(ichiro).
male(jiro).
male(saburo).

/* 女性 */
female(hanako).
female(tomoko).
female(sachiko).
female(youko).

/* 父親 */
father_of(taro, ichiro).
father_of(taro, jiro).
father_of(taro, tomoko).
father_of(ichiro, saburo).
father_of(ichiro, youko).

/* 母親 */
mother_of(hanako, ichiro).
mother_of(hanako, jiro).
mother_of(hanako, tomoko).
mother_of(sachiko, saburo).
mother_of(sachiko, youko).

parents_of(X,Y):- father_of(X,Y).
parents_of(X,Y):- mother_of(X,Y).

son_of(X,Y) :- parents_of(Y,X),male(X).

下のような画面が立ち上がった。
20150606_swiprolog2.png

次に、質問を入力したのだが、ここで筆者がスペルミス。
("son_of"を"san_of"と間違えた)

1 ?- san_of(X,hanako).

すると、

Correct to : "son_of(X,hanako)"?
Please answer 'y' or 'n'?

「son_of(X,hanako)に訂正しますか?y(yes)かn(no)か答えて下さい」と怒られた。もちろん答えはyes。

結果、無事スペルミスも訂正されて、答えが導き出された。
20150606_swiprolog.png

もちろん、noと答えた場合は、エラー。
20150606_swiprolog3.png

「san_ofなんてありませんよ。son_ofならありますけどね」だそうで。嫌味な奴だ(笑)

それはともかく、スペルミスのような初歩的なミスに起因する不具合は、ハマる時はかなりハマるので、こういう推測機能が標準で入っているのは嬉しい。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?