このディレクトリの索引
#  
#  abcd というPrologのお題が、最終的にa,b,c,dという述語に分割可能だとする。
#  その時に、abcd:-abc,d. と abcd:-a,bc,d.とabcd:-ab,cd.とabcd:-a,bcd.と
#  abcd:-ab,c,d.とabcd:-a,b,cd.とabcd:-a,b,c,d.のどれを選ぶか?何に導かれて選ぶのか?
#  
#  実際の仕様文が「リストに入力して変換した上で整列して出力する」であるとして、
#  
#  考えてみよう。各パターンの先頭にトップレベルの分割を示す。
#  
%  詳細化版
%
%  共通のデータベース

a.

b.

c.

d.

%% 分割パターン(1-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して変換した上で整列して(_変換した上で整列したリスト),
        出力する(_変換した上で整列したリスト).

abcd :-
        abc,
        d.

abc :-
        ab,
        c.

ab :-
        a,
        b.

%% 分割パターン(1-2) %%

abcd :-
        abc,
        d.

abc :-
        a,
        bc.

bc :-
        b,
        c.

%% 分割パターン(1-3) %%

abcd :-
        abc,
        d.

abc :-
        a,
        b,
        c.

%% 分割パターン(2-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して(_リスト),
        変換した上で整列して(_リスト,_変換した上で整列したリスト),
        出力する(_変換した上で整列したリスト).

abcd :-
        a,
        bc,
        d.

bc :-
        b,
        c.

%% 分割パターン(3-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して変換した上で(_変換したリスト),
        整列して出力する(_変換したリスト).

abcd :-
        ab,
        bc.

ab :-
        a,
        b.

cd :-
        c,
        d.

%% 分割パターン(4-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して(_リスト),
        変換した上で整列して出力する(_リスト).

abcd :-
        a,
        bcd.

bcd :-
        bc,
        d.

bc :-
        b,
        c.

%% 分割パターン(4-2) %%

abcd :-
        a,
        bcd.

bcd :-
        b,
        cd.

cd :-
        c,
        d,

%% 分割パターン(4-3) %%

abcd :-
        a,
        bcd.

bcd :-
        b,
        c,
        d.

%% 分割パターン(5-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して(_リスト),
        変換した上で(_リスト,_変換したリスト),
        整列して出力する(_変換したリスト).

abcd :-
        a,
        b,
        cd.

cd :-
        c,
        d.

%% 分割パターン(6-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して変換した上で(_変換したリスト),
        整列して(_リスト,_変換した上で整列したリスト),
        出力する(_変換した上で整列したリスト).

abcd :-
        ab,
        c,
        d.

ab :-
        a,
        b.

%% 分割パターン(7-1) %%

リストに入力して変換した上で整列して出力する :-
        リストに入力して(_リスト),
        変換した上で(_リスト,_変換したリスト),
        整列して(_変換したリスト,_変換した上で整列したリスト),
        出力する(_変換した上で整列したリスト).

abcd :-
        a,
        b,
        c,
        d.