2010年11月7日日曜日

Prologの技芸 7.3節の練習問題

(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 件のコメント: