2010年11月7日日曜日

Prologの技芸 8.3節の練習問題

(1)
% triangle(N,T) :-
% TはN番目の三角数である.
triangle(N,T) :- triangle(N,0,T).
triangle(N,Temp,T) :-
N<0, Temp1 is Temp+N, N1 is N-1, triangle(N1,Temp1,T).
triangle(0,T,T).

(2)
% power(X,N,V) :-
% VはXのN乗である.
power(X,N,V) :- power(X,N,1,V).
power(X,N,Temp,V) :-
N>0, Temp1 is Temp*X, N1 is N-1, power(X,N1,Temp1,V).
power(_,0,V,V).

(3)
% between(I,J,K) :-
% Kは,整数IとJの両端を含む区間内の整数である.
between(I,J,J) :- I=<J.
between(I,J,K) :-
I<J, J1 is J-1, between(I,J1,K).

(4)
% timeslist(IntegerList,Product) :-
% Productは整数のリストIntegerListの積である.
timeslist(Is,Pro) :- timeslist(Is,1,Pro).
timeslist([I|Is],Temp,Pro) :-
Temp1 is Temp*I, timeslist(Is,Temp1,Pro).
timeslist([],Pro,Pro).

(5)
% area(Chain,Area) :-
% Areaは,頂点のリストChainで囲まれた多角形の面積である.
% ただし,各頂点の座標は整数の対(X,Y)で表される.
area(XYs,Area) :- area(XYs,0,Area).
area([(X1,Y1),(X2,Y2)|XYs],Temp,Area) :-
Temp1 is Temp+(X1*Y2-Y1*X2)/2,
area([(X2,Y2)|XYs],Temp1,Area).
area([_],Area,Area).

(6)
% minimum(Xs,Min) :-
% Minは,整数のリストXsの要素の最小値である.
minimum([X|Xs],M) :- minimum(Xs,X,M).
minimum([X|Xs],Y,M) :- X=<Y, minimum(Xs,X,M).
minimum([X|Xs],Y,M) :- X >Y, minimum(Xs,Y,M).
minimum([],M,M).

(7)
% my_length(Xs,N) :-
% Nは,リストXsの長さである.
my_length(Xs,N) :- my_length(Xs,0,N).
my_length([_|Xs],Temp,N) :-
Temp1 is Temp+1, my_length(Xs,Temp1,N).
my_length([],N,N).

(8)
% range(M,N,Ns) :-
% Nsは,MとNを含む区間の整数のリストである.
range(M,N,Ns) :- range(M,N,[],Ns).
range(M,N,Xs,Ys) :-
M =< N, N1 is N-1, range(M,N1,[N|Xs],Ys).
range(M,N,Xs,Xs) :-
M > N.

0 件のコメント: