09/07/13 13:42:10
>>465
% Prolog
逆数を正確に計算(_最大桁,_正整数,_逆数表示) :-
逆数表示(_最大桁,_正整数,[[0,1]],_逆数表示),!.
逆数表示(N,_,Y,X) :- N < 0,逆数表示(Y,[],X),!.
逆数表示(N,_整数,[[D,0]|Y],X) :- 逆数表示([[D,0]|Y],[],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
_商2 is _剰余 // _整数,
_剰余2 is (_剰余 mod _整数) * 10,
append(L1,[[_商2,_剰余2]|L2],[[_商,_剰余]|Y]),
append([[']...',_]|L1],[[_商2,_剰余2],['[',_]|L2],Z),
逆数表示(Z,[],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
_整数 > _剰余,
_剰余2 is _剰余 * 10,
N2 is N - 1,
逆数表示(N2,_整数,[[0,_剰余2],[_商,_剰余]|Y],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
_整数 < _剰余,
_商2 is _剰余 // _整数,
_剰余2 is (_剰余 mod _整数) * 10,
N2 is N - 1,
逆数表示(N2,_整数,[[_商2,_剰余2],[_商,_剰余]|Y],X),!.
逆数表示([],[_|X],S) :- concat_atom(['0','.'|X],S),!.
逆数表示([[A|_]|R1],Y,S) :- 逆数表示(R1,[A|Y],S).