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 Y、abs(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).