このディレクトリの索引

#  http://d.hatena.ne.jp/E_Mattsan/20130211/1360590408
#  「E.Mattsan氏のブログ 20130211より」
#  
#  設問
#  
#  まず、パタンマッチングの部分だけが見やすくなるように、「どう書く」の問題からいろいろ取り去ってより簡単な問題を作りました。
#  
#  
#  要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。
#  コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。
#  要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。
#  要素が2つ連続した場所がない場合、最初の要素の位置を返す。
#  要素がコンテナ中に見つからない場合、-1を返す。
#  


'要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。要素が2つ連続した場所がない場合、最初の要素の位置を返す。要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        '先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置),!.

'要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。要素が2つ連続した場所がない場合、最初の要素の位置を返す。要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        '先頭の位置は0とする。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置),!.

'要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。要素が2つ連続した場所がない場合、最初の要素の位置を返す。要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        '先頭の位置は0とする。要素が2つ連続した場所がない場合、最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置),!.

'要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。要素が2つ連続した場所がない場合、最初の要素の位置を返す。要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        '要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,-1).



'先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        append(L0,[_指定された要素,_指定された要素,_指定された要素|_],_コンテナ),
        length(L0,_最初の場所の最初の要素の位置),!.


'先頭の位置は0とする。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        要素が3つ連続した場所がない場合(_コンテナ,_指定された要素),
        append(L0,[_指定された要素,_指定された要素|_],_コンテナ),
        length(L0,_最初の場所の最初の要素の位置),!.


'先頭の位置は0とする。要素が2つ連続した場所がない場合、最初の要素の位置を返す。'(_コンテナ,_指定された要素,_最初の場所の最初の要素の位置) :-
        要素が2つ連続した場所がない場合(_コンテナ,_指定された要素),
        append(L0,[_指定された要素|_],_コンテナ),
        length(L0,_最初の場所の最初の要素の位置),!.


'要素がコンテナ中に見つからない場合、-1を返す。'(_コンテナ,_指定された要素,-1) :-
        \+(member(_指定された要素,_コンテナ)).


要素が3つ連続した場所がない場合(_コンテナ,_指定された要素) :-
        \+(append(_,[_指定された要素,_指定された要素,_指定された要素|_],_コンテナ)).


要素が2つ連続した場所がない場合(_コンテナ,_指定された要素) :-
        \+(append(_,[_指定された要素,_指定された要素|_],_コンテナ)).