私は次のコードを持っています:
internal_generator(List):-
select(foo, List, MList),
select(bar, MList, M2List),
select(baz, M2List, _).
internal_generator2(List):-
select(sth1, List, MList),
select(sth2, MList, M2List),
select(sth3, M2List, _).
external_generator([List1, List2]):-
internal_generator(List1),
internal_generator2(List2).
Prolog は、internal_generator によっていくつかの List1 を生成した後、internal_generator2 によって List2 を生成し、結果を表示し始めています。ただし、internal_generator2 がすべての結果をスローすると、prolog は internal_generator に戻り、foo、bar、baz で別の結果を取得し、internal_generator2 ですべての可能な値の生成を再開します。
コードをリファクタリングして、何らかの方法で internal_generator2 からの結果を保存するにはどうすればよいですか?
さらに、exernal_generator の開始時に、可能なすべての結果を生成するために findall を使用したくありません (私の実際の例は大きすぎて、グローバル スタック オーバーフローが発生します)。