プログラムを終了する述語です。
何もしません。
カットです。
述語の反転を行う前置演算子です。
example
:- A = 1, \(A = 2), writeln(A),halt.
これは述語なのか?todo
選択は述語なのか?todo
単一化は述語なのか?todo
単一化の否定。述語なの?todo
これは算術計算をする述語です。
述語をデータベースに後ろに追加する形で登録します。
標準出力に出力します。
指定ファイルを読み込みます。:-で始まる宣言はその場で実行し、それ以外の述語定義はDBに追加登録されます。
整数判定をします。
アトム判定をします。
変数判定をします。
第一パラメータに指定された述語を呼び出します。第二パラメータ以降は追加のパラメータです。
ユーザー定義演算子を登録します。
改行を標準出力に出力します。
example
:- write(hello),nl,halt.
改行付きでパラメータに引き渡されたデータを標準出力します。
example
:- writeln(hello),halt.
第一パラメータと第二パラメータのリストを結合し第3パラメータに返します。
example
:- append([1,2],[3,4],R),!,R=[1,2,3,4].
Prologの面白いところは、以下のようなコードも動作するところです:
:- append(R,[3,4],[1,2,3,4]),!,R=[1,2]. :- append([1,2],R,[1,2,3,4]),!,R=[3,4]. :- append([1,2],[3|R],[1,2,3,4]),!,R=[4]. :- append([1,2],[3,4],[1,2|R]),!,R=[3,4].
第二パラメータで指定されたリスト内に存在する第一パラメータにマッチするデータを取得します。 トラックバックすると次のパラメータを探すことが出来ます。
member(A,[A|B]).
member(A,[C|B]) :- member(A,B).
リストに対して処理を行う述語です。
example
:- maplist(writeln,[1,2,3]),halt.
2つのリストの値を1つずつ取り出して第一パラメータの述語を呼び出します。 受け取った述語はそのパラメータを好きに操作できます。 リストに対して処理を行ったり、1つのリストを受け取ってリストを返すような処理を行うのに使えます。
example
double(A,B) :- B is A * 2.
:- maplist(double,[1,2,3],[2,4,6]),halt.
この例は[1,2,3]の倍の値のリストを作成して[2,4,6]を返しそれを確認しているとも読めますが、 2つのリストを受け取ってすべての要素で、2つ目のリストが1つ目のリストの倍の値になっていることを確認するとも読めます。
3つのリストのマップ処理です。 3つのリストの値を第一パラメータの述語に渡して処理します。
example
double_triple(A,B,C) :- B is A * 2, C is A * 3.
:- maplist(double_triple,[1,2,3],[2,4,6],[3,6,9]),halt.
リストを反転させます。
リストの畳込みを行います。
example
add(A,B,C) :- C is A + B.
:- foldl(add,0,[1,2,3],6),halt.
第一パラメータがtrueになるすべてのパターンで第二パラメータを実行します。
example
name(test).
name(hoge).
name(fuga).
:- forall(name(A),writeln(A)).
:- halt.
第二パラメータがtrueになるすべてのパターンを取り出し第一パラメータのリストとして第三パラメータに返します。
example
name(test).
name(hoge).
name(fuga).
:- findall(A,name(A),R),maplist(writeln,R).
:- halt.
通常連続して書かれていない述語を定義するとSWI-Prologなどではワーニング表示されるのですが、その防止のための述語です。 現在のGDID Prologでは何もしません。