このディレクトリの索引
#  
#  目標を限界度数成功させて指定した蒐集項をならびとして得る
#  


目標を限界度数成功させて指定した蒐集項をならびとして得る(_限界度数,_蒐集項,_目標,_蒐集項ならび) :-
        findall_n(_限界度数,_蒐集項,_目標,_蒐集項ならび).

findall_n(_限界度数,_蒐集項,_目標,_蒐集項ならび) :-
        message_queue_create(_キュー番号),
        度数(_限界度数,_キュー番号),
        findall(_蒐集項,(
                    thread_get_message(_キュー番号,_項),
                    ( _項 = 0,!,fail;call(_目標))),
                _蒐集項ならび).

度数(_限界度数,_キュー番号) :-
        between(1,_限界度数,_度数),
        _剰余 is _度数 mod ( _限界度数 + 1 ),
        thread_send_message(_キュー番号,_剰余),
        _度数 = _限界度数.


%  
%  ?- length(L,4),findall(N,between(1,10000000,N),L).
%  false.
%  1000万要素と4要素のリストの単一化。この結論を得るまでに数秒を要する。
%  
%  ?- length(L,4),findall_n(4,N,between(1,10000000,N),L).
%  L = [1,2,3,4]
%  
%  ?- length(L,4),findall_n(5,N,between(1,10000000,N),L).
%  false.
%  
%  ?- length(L,4),findall_n(5,N,between(1,4,N),L).
%  L = [1,2,3,4]
%