(1)
sublist(Xs,AsXsBs) :- append(As,XsBs,AsXsBs), append(Xs,Bs,XsBs). % ゴールの順序を逆にすると,append(Xs,Bs,XsBs)が終わらない. % sublist(Xs,[a,b,c])?を実行すると, % append(Xs,Bs,XsBs)の引数は全て不完備リストになる. |
(2)
% substitute(X,Y,L1,L2) :- % L2はL1中に現れるすべてのXをYで置き換えた結果である. substitute(X,Y,[],[]). substitute(X,Y,[X|Xs],[Y|Ys]) :- substitute(X,Y,Xs,Ys). substitute(X,Y,[Z|Xs],[Z|Ys]) :- X \= Z, substitute(X,Y,Xs,Ys). ゴールの順序 %substitute(X,Y,[Z|Xs],[Z|Ys]) :- X \= Z, substitute(X,Y,Xs,Ys). を %substitute(X,Y,[Z|Xs],[Z|Ys]) :- substitute(X,Y,Xs,Ys), X \= Z. とすると左方再帰になるため終わらなくなる. |
0 件のコメント:
コメントを投稿