prefix, suffixの定義

プログラミング言語論
第12回 論理型プログラミングの補足
prefix, suffixの定義
情報工学科 篠埜 功
Prefix, suffix
• 論理型プログラミングの講義資料のp.21の
prefix, suffixは以下のように定義される述語である。
prefix(X,Y) :- append(X,Z,Y).
suffix(X,Y) :- append(Z,X,Y).
prefix(X,Y)はリストXがリストYの先頭部分(長さ自
由)、suffix(X,Y)はリストXがリストYの後ろの部分
(長さ自由)という関係である。
(注)appendは、講義資料のp.6に定義されている述
語である。
Prefix, suffixのqueryの例
(prefixのqueryの例)
?- prefix(X,[1,2]).
X = [];
X = [1];
X = [1,2];
no
(suffixのqueryの例)
?- suffix(X,[1,2]).
X = [1,2];
X = [2];
X = [];
no
Prefix, suffixはappend同様、GNU Prologの組み
込み述語である(ので定義を入力せずqueryを入
力してよい)。
例
suffix([b],L), prefix(L,[a,b,c])
append(_1,[b],L), prefix(L,[a,b,c])
{_1 -> [_3|_4 ], L->[_3|_5]}
{_1 -> [ ], L->[b]}
prefix([b],[a,b,c])
append(_4, [b], _5),
prefix([_3|_5],[a,b,c])
append([b],_2,[a,b,c])
{_4 -> [ ], _5->[b]}
backtrack
prefix([_3,b],[a,b,c])
append([_3,b],_6,[a,b,c])
{_3 -> a}
append([b],_6,[b,c])
append([ ],_6,[c])
yes
{_6 -> [c]}
…