自分のためのTips、誰かの為にもなるといいな・・・

Prolog 覚書


Rev.4を表示中。最新版はこちら

基礎

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文のように使うことができる.

演算子

割り算

整数
X is Y // Z
実数
X is Y / Z

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] ;

No
memberと同じ使い方
?- 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]

入出力

書式付出力

C言語のprintfのようなもの.エスケープは,バックスラッシュでなくチルダ.
タブの文字数を '~t~10|' のように決めれる,さらに,*で動的に決定できる.
format('~t~*|Hello, World!~n', [4]).
出力
    Hello, World!
 



最終更新 2007/09/24 15:49:20 - yohei
(2007/09/23 02:13:52 作成)


検索

最近気になる言葉
LINQ
atコマンド
最近更新したページ
2015/7/16
2008/9/15
2008/1/30
2007/12/14
2007/11/14
2007/10/25
2007/9/23
2007/5/30