プログラミング言語論 第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]} …
© Copyright 2024 ExpyDoc