このディレクトリの索引

スレッドとメッセージキューを使って全解を収集する(_選択項,_副目標,_回収値ならび) :- message_queue_create(_キュー番号), thread_create(スレッドで副目標を実行する(_キュー番号,_選択項,_副目標),_,[]), メッセージを回収する(_キュー番号,_回収値ならび), message_queue_destroy(_キュー番号). スレッドで副目標を実行する(_キュー番号,_選択項,_副目標) :- call(_副目標), swritef(_選択項文字列,'%t',[_選択項]), thread_send_message(_キュー番号,_選択項文字列), fail. スレッドで副目標を実行する(_キュー番号,_,_) :- thread_send_message(_キュー番号,end_of_file). メッセージを回収する(_キュー番号,_メッセージならび) :- メッセージを確実に得る(_キュー番号,_回収値), メッセージを回収する(_キュー番号,_回収値,_メッセージならび). メッセージを回収する(_キュー番号,end_of_file,[]) :- !. メッセージを回収する(_キュー番号,_回収値文字列,[_回収項|R]) :- read_term_from_atom(_回収値文字列,_回収項,[]), メッセージを確実に得る(_キュー番号,_回収値_2), メッセージを回収する(_キュー番号,_回収値_2,R). メッセージを確実に得る(_キュー番号,_メッセージ) :- repeat, thread_peek_message(_キュー番号,_), thread_get_message(_キュー番号,_メッセージ),!.