我有以下代码:
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 生成所有可能的结果(我的真实示例太大,并且出现全局堆栈溢出)。