Prolog基礎
Rev.3を表示中。最新版はこちら。
基本的な構文
And と Or
ANDはコンマ,ORはセミコロン.簡単な例.hoge(X,Y) :- X > Y, write('ok!'); write('ng!').
同じ内容のORを,以下のように書ける.
hoge(X,Y) :- X > Y, write('ok').
hoge(X,Y) :- write('ng').
入れ子にしたい場合,括弧を使えば良い.
hoge(X,Y,Z) :-
X < Y, (
Y < Z, write('xyz');
X < Z, write('xzy');
write('zxy')
);
X < Z, write('yxz');
Y < Z, write('yzx');
write('zyx').
if文のように使うことができる.If と Else
次のように定義されている.If -> Then; _Else :- If, !, Then. If -> _Then; Else :- !, Else. If -> Then :- If, !, Then.上のAnd と Or による条件分岐より分かりやすく表現できる.使用例.
X > 10 -> write('Large'); write('small').
true と fail
trueは常に成功,fail は常に失敗.?- true; write('Hello').
Yes
?- fail; write('Hello').
Hello
Yes
repeat
repeatは常に成功.さらに,バックトラックの無限の分岐点となる.次の例は,C(67)が入力されるまで,入力を読み続ける.
?- repeat, get(67) |: A |: B |: C Yes
否定
例えば,上の条件分岐の条件を反転してみる\+ X =< 10 -> write('Large'); write('small').
not(X =< 10) -> write('Large'); write('small').
notは,古い形で \+ を使うのが推奨されているみたい.演算子
割り算
整数X is Y // Z実数
X is Y / Z余り
X is Y mod Z
数値比較
等しい
is は,右辺だけ展開される,?- 6 is 2 * 3. Yes ?- 2 * 3 is 6. No型まで一致しないとダメ.(integer, float)
?- 6 is 4 * 1.5. No ?- 6.0 is 4 * 1.5. Yes=:= 左右とも展開され,数値の一致を見ている.
?- 2 * 3 =:= 4 * 1.5. Yes
数値比較演算子(左辺・右辺とも展開される)
| 演算子 | 説明 |
|---|---|
| =:= | 等しい |
| =\= | 等しくない |
| < | 小なり |
| > | 大なり |
| =< |
小なりイコール |
| >= |
大なりイコール |
