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文のように使うことができる.
SWI-Prolog 組込み関数
SWI-Prologのホーム : http://www.swi-prolog.org/文字列操作
文字アトムの連結
連結?- concat_atom(['A', 'B', 'C'], ' and ', X). X = 'A and B and C'分割
?- concat_atom(L, ',', 'a,b,c,d,e'). L = [a, b, c, d, e]
文字コード・文字アトムの変換
コードからアトム?- char_code(C,65). C = 'A'アトムからコード
?- char_code('a',N). N = 97
リスト操作
2つのリストを連結
連結?- append([1,2,3],[4,5,6],X). X = [1, 2, 3, 4, 5, 6]後ろ部分を得る
?- append([1,2,3],X,[1,2,3,4,5]). X = [4, 5]前部分を得る
?- append(X,[3,4,5],[1,2,3,4,5]). X = [1, 2]
リスト要素を選択
選択?- select(X,[1,2,3],Y). X = 1, Y = [2, 3] ; X = 2, Y = [1, 3] ; X = 3, Y = [1, 2] ; No任意の場所への挿入として使える
?- select(4,X,[1,2,3]). X = [4, 1, 2, 3] ; X = [1, 4, 2, 3] ; X = [1, 2, 4, 3] ; X = [1, 2, 3, 4] ; Nomemberと同じ使い方
?- select(4,[1,2,3,4],_). Yes
リスト反転
?- reverse(X,[1,2,3]). X = [3, 2, 1]
最後の要素
?- last([1,2,3],X). X = 3
一致する要素を削除
?- delete([1,3,2,3],3,X). X = [1, 2]