09/07/10 13:00:37
>>429
integer_to_varlist(N,L) :- var(N),var(L).
integer_to_varlist(A,A) :- not(var(A)),A=[].
integer_to_varlist(L1,L2) :-
not(var(L1)),
not(var(L2)),
L1=[N|R1],
L2=[L|R2],
integer_to_varlist(N,L),
integer_to_varlist(R1,R2).
integer_to_varlist(N,L) :- not((var(N),var(L))),length(L,N).
integer_to_varlist/2は複雑になったがこれはユーティリティだから
構わない。これで
sum(N,M,Sum) :-
integer_to_varlist([N,M,Sum],[L1,L2,L3]),
sum_l(L1,L2,L3),
integer_to_varlist([N,M,Sum],[L1,L2,L3]).
とすっきりする。