このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354393458/650
#  
#  81以下の自然数で九九に現れない数を昇順にすべて表示せよ。
#  

'81以下の自然数で九九に現れない数を昇順にすべて表示せよ。' :-
forall(
'81以下の自然数で九九に現れない数を昇順に'(_81以下の自然数で九九に現れない数),
'表示せよ。'(_81以下の自然数で九九に現れない数)).

'81以下の自然数で九九に現れない数を昇順に'(_81以下の自然数で九九に現れない数) :-
'81以下の自然数で'(_81以下の自然数で九九に現れない数),
九九に現れない数を(_81以下の自然数で九九に現れない数).

'81以下の自然数で'(_81以下の自然数) :-
between(1,81,_81以下の自然数).

九九に現れない数を(_81以下の自然数で九九に現れない数) :-
\+(九九に現れる数を(_81以下の自然数で九九に現れない数)).

九九に現れる数を(_81以下の自然数で九九に現れる数) :-
重複組合せ([1,2,3,4,5,6,7,8,9],2,[M,N]),
_81以下の自然数で九九に現れる数 is M * N,!.

'表示せよ。'(_81以下の自然数で九九に現れない数) :-
writef('%t ',[_81以下の自然数で九九に現れない数]).

重複組合せ(X,1,[A]) :-
member(A,X).
重複組合せ([A|Y],N,[A|X]) :-
N > 1,
M is N - 1,
重複組合せ([A|Y],M,X).
重複組合せ([_|Y],N,A) :-
N > 1,
重複組合せ(Y,N,A).