SWI-Prolog for MS-Windows

A: 例

%% Demo Prog

%% Step1: Startメニュー->全てのプログラムからSWI-Prologを選ぶ

%% Step2: 下のようなPrologProgram(〜.pl)を作る。

%%   この例は、demoの中のlikes.plというファイル。

%%    File->Newで作ってもよいし、エディター作ってもよい。)

%% Step3: プログラムをロード&コンサルト

%%     ?- [swi('demo/likes')].か、Flle->Consult(最後に.を加える)か、

%%     プログラムアイコンのWクリック。

%% 次のような質問が可能になる。

%% ?- likes(sam,dahl).

%% ?- likes(sam,chop_suey).

%% ?- likes(sam,pizza).

%% ?- likes(sam,chips).

%% ?- likes(sam,curry).

 

likes(sam,Food) :-

        indian(Food),

        mild(Food).

likes(sam,Food) :-

        chinese(Food).

likes(sam,Food) :-

        italian(Food).

likes(sam,chips).

 

indian(curry).

indian(dahl).

indian(tandoori).

indian(kurma).

 

mild(dahl).

mild(tandoori).

mild(kurma).

 

chinese(chow_mein).

chinese(chop_suey).

chinese(sweet_and_sour).

 

italian(pizza).

italian(spaghetti).

 

B:演算子と比較

 

演算子: +、−、*、///(整数割り算)、X mod Yabs(X)

算術比較:>、<、>=、=<、=:=(等しい)、=\=(等しくない)。

項の比較: ==(同一)、¥==(同一でない)。

 

oya(o1,a).

oya(o2,b).

oya(o2,c).

kyodai(X,Y):-oya(O,X),oya(O,Y), X \==Y. (最後の項が無いと自分も出てくる)

C:Bprologとの違い

Bprologの制約述語cは、使わず、直接書く。加えて5になる文字を出すには)

 

m(o1,1).

m(o2,2).

m(o3,3).

m(o4,4).

k5(X,Y):-m(X,M),m(Y,N), M+N =:= 5.

 

D: is は代入

階乗計算は、

fact(0, 1).

fact(N, F) :- N1 is N-1,  fact(N1, F1),  F is N*F1.

で、fact(3,X).などと質問する。

 

(自分のアイデアの無い人への課題)

さざえ家の子供達の血液型を求めよう。

 

A

B

AB

O

A

A,O

A, B, AB, O

A, B, AB

A, O

B

A, B, AB, O

B, O

A, B, AB

B, O

AB

A, B, AB

A, B, AB

A, B, AB

A, B

O

A, O

B, O

A, B

O

 

 

 

 

用意するもの。

(1)分かっている血液型

k(sazae,b).

k(masuo,b).

k(namihe,o).

(2)親子関係

oya(namihe,sazae).

oya(sazae,tara).

oya(masuo,tara).

oya(namihe,katuo).

(3)規則

so(X,Z):-oya(X,Y),oya(Y,Z).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,o).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,a).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,b).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,b).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,b),k(O2,b).

k(X,o):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,a).

 

k(X,a):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,a).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,b).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,ab).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,o).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,b),k(O2,ab).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,ab),k(O2,ab).

k(X,a):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,ab).

 

k(X,b):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,b).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,ab).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,b),k(O2,b).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,b),k(O2,ab).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,b).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,ab),k(O2,ab).

k(X,b):-oya(O1,X),oya(O2,X),k(O1,o),k(O2,ab).

 

k(X,ab):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,b).

k(X,ab):-oya(O1,X),oya(O2,X),k(O1,a),k(O2,ab).

k(X,ab):-oya(O1,X),oya(O2,X),k(O1,b),k(O2,ab).

k(X,ab):-oya(O1,X),oya(O2,X),k(O1,ab),k(O2,ab).