- 【論理】Prolog【初心者】
748 :デフォルトの名無しさん[sage]:2014/08/20(水) 23:58:46.17 ID:32E1i6+B - バックトラックの例について書く
たとえば(>>745 は気付いていると思うけど) >>744 はバックトラックの応用になる ?- multiply_of_product(X). X = 1 ; % 最初の解が表示され、";" をタイプするとバックトラックで次の解を求める X = 2 ; X = 3 ; X = 2. % 途中で止めたい時には [return] をタイプすると入力待ちに戻る ?- この述語 multiply_of_product/1 に関して、組み込み述語 findall/3 を使って すべての解のリストを求めたのが >>744 になる またリストそのものもバックトラックの対象になる ?- append(Xs, Ys, [1,2,3]). % 述語 append/3 は2つのリストを結合したリストを求める Xs = [], Ys = [1, 2, 3] ; Xs = [1], Ys = [2, 3] ; Xs = [1, 2], Ys = [3] ; Xs = [1, 2, 3], Ys = [] ; false. % すべての解を探索し終えると false を表示して入力待ちに戻る ?- 同様に findall/3 を使ってすべての解のリストを求めてみる ?- findall((X,Y), append(X,Y,[1,2,3]), ListOfPair). ListOfPair = [ ([], [1, 2, 3]), ([1], [2, 3]), ([1, 2], [3]), ([1, 2, 3], [])]. ?-
|