このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1337692704/835
#  【課題】X * Y = 115 になる 素数Xと素数Yをクラスを3つ使って求め結果を表示しなさい 
#  【 期限 】2013/11/06 
#  【 Ver  】"1.7.0_11" 
#  
#  いまいちわからず困っています。 
#  よろしくお願いします。

'X * Y = 115 になる 素数Xと素数Yをクラスを3つ使って求め結果を表示しなさい' :-
        forall('X * Y = 115 になる 素数Xと素数Yを求める'(_X,_Y),
               表示しなさい(_X,_Y)).

'X * Y = 115 になる 素数Xと素数Yを求める'(_X,_Y) :-
        '115以下の素数ならびを得る'(_115以下の素数ならび),
        組合せ(_115以下の素数ならび,2,[_X,_Y]),
        115 is _X * _Y.

'115以下の素数ならびを得る'(_115以下の素数ならび) :-
        findall(N,between(2,115,N),_2から115までの整数ならび),
        エラトステネスの篩(_2から115までの整数ならび,_115以下の素数ならび).

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

エラトステネスの篩([],[]) :- !.
エラトステネスの篩([A|R1],[A|R2]) :-
        エラトステネスの篩(A,R1,L),
        エラトステネスの篩(L,R2).

エラトステネスの篩(_,[],[]) :- !.
エラトステネスの篩(N,[A|R1],R2) :-
        0 is A mod N,
        エラトステネスの篩(N,R1,R2),!.
エラトステネスの篩(N,[A|R1],[A|R2]) :-
        エラトステネスの篩(N,R1,R2).

表示しなさい(_X,_Y) :-
        writef('%t\n',[_X,_Y]).