バックトラックの例について書く
たとえば(>>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], [])].

  ?-