10/01/22 20:06:16
>>381 訂正
% Prolog
'異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :-
'異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d),
'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L),
'表示し'(L),
最後にその個数を表示する(L),!.
表示し(L) :-
concat_atom(L,' ',S),
write_formatted('%t\n',[S]),!.
最後にその個数を表示する(L) :-
length(L,_その個数),
write_formatted('合計で%t個あります\n',[_その個数]),!.
'異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :-
get_line(Line),
split(Line,[' '],[_p,_q,_d]),!.
'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :-
findall(N,for(0,N,10),L1),
findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!.
'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :-
_k is _p * _m + _q * _n,
_k =< _d,!.