>141,142,143,147
p(X,Y) :- X=[f1(X1),f2(X2),f3(X3)],p1(X1,Y1),p2(X2,Y2),p3(X3,Y3),p4(Y1,Y2,Y3,Y).

p/2が呼び出される述語とするとき、その中で上のX1,X2,X3のように
ストリームが分岐するコードはできれば書きたくない、ということですね。
Prologのプログラムの焦点は徹頭徹尾ストリーム(引数)上の変数の解決なので、
そのストリームはできるだけ単純に赤、青、緑というような
帯になって最後まで繋がっていてほしい。途中から、紫や茶や橙に化けて、
やがて、いつのまにか消えていく、というようなコードは書きたくない。