if-then-else はそれほど奇妙ではありません。これらは ISO コア標準の一部であり、7.8 Control コンストラクト、7.8.8 (;)/2 - if-then-else で定義されており、さまざまな Prolog コンパイル スキームが存在するという利点があります。

これらの Prolog コンパイル戦略は、if-then-else が句の途中にある場合に特に役立ちます。これは、通常、if-then-else が別の補助述語に移動される場合よりも結果のコードで発生するオーバーヘッドが少なくなるためです。
論理和 (;)/2 についても同じことが言えます。経験則として、他のブランチと比較して多くの新しい変数を導入する if-then-else ブランチがない場合、安全であると言えます。次に、Prolog コンパイラが変数の作成を if-then-else の外に移動すると、意味があります。
以下は、YAP Prolog の if-then-else が、他のプログラミング スタイルよりも優れたパフォーマンスを示す例です。
tarai_cut(X,Y,_,Y) :- X=<Y, !.
tarai_cut(X,Y,Z,R) :-
X1 is X-1, tarai_cut(X1,Y,Z,Rx),
Y1 is Y-1, tarai_cut(Y1,Z,X,Ry),
Z1 is Z-1, tarai_cut(Z1,X,Y,Rz),
tarai_cut(Rx,Ry,Rz,R).
tarai_or(X,Y,Z,R) :- X=<Y, !, R=Y;
X1 is X-1, tarai_or(X1,Y,Z,Rx),
Y1 is Y-1, tarai_or(Y1,Z,X,Ry),
Z1 is Z-1, tarai_or(Z1,X,Y,Rz),
tarai_or(Rx,Ry,Rz,R).
tarai_if(X,Y,Z,R) :- X=<Y -> R=Y;
X1 is X-1, tarai_if(X1,Y,Z,Rx),
Y1 is Y-1, tarai_if(Y1,Z,X,Ry),
Z1 is Z-1, tarai_if(Z1,X,Y,Rz),
tarai_if(Rx,Ry,Rz,R).
if-then-else バージョンが最も速く実行されます。
YAP 6.3.3 (i686-mingw32): Sun Jan 20 18:27:56 GMTST 2013
?- time(tarai_cut(12,6,0,X)).
% 0.687 CPU in 0.690 seconds ( 99% CPU)
X = 12
?- time(tarai_or(12,6,0,X)).
0.734 CPU in 0.735 seconds ( 99% CPU)
X = 12
?- time(tarai_if(12,6,0,X)).
% 0.515 CPU in 0.516 seconds ( 99% CPU)
X = 12