09/08/02 10:01:52
>>598
% Prolog
t598 :-
write('最大公約数を求めます。一行にひとつ整数を入力してください : '),
get_line(Line1),atom_to_terms(Line1,N1,_),
get_line(Line2),atom_to_terms(Line2,N2,_),
appendを使って最大公約数を求める(N1,N2,X),
write_formatted('%tと%tの最大公約数は%tです\n',[N1,N2,X]).
appendを使って最大公約数を求める(N1,N2,X) :-
length(L1,N1),
length(L2,N2),
最大公約数(L1,L2,[_],[_],LX),
length(LX,X).
appendを使って最大公約数を求める(L1,L2,L,X,X) :-
not((append(L,_,L1),append(L,_,L2))),!.
appendを使って最大公約数を求める(L1,L2,L,_,X) :-
割り切れる(L1,L),
割り切れる(L2,L),
appendを使って最大公約数を求める(L1,L2,[_|L],L,X).
appendを使って最大公約数を求める(L1,L2,L,Y,X) :-
appendを使って最大公約数を求める(L1,L2,[_|L],Y,X).
割り切れる([],_) :- !.
割り切れる(L,DL) :-
append(DL,L3,L),
割り切れる(L3,DL).