我找到了 that for swi-prolog it exists findnsols ,但是,它对我不起作用。
我的 predicate generate_color(Color)
为 html 生成随机颜色.
当我尝试调用它 N 次并将执行的值保存在一个列表中时,我总是得到一个结果而不是多个结果。
findnsols(3, Color, generate_color(Color),Colors).
Colors = ["# 4c4b43"].
findnsols(3, Color, generate_color(Color),Colors).
Colors = ["# 158955"].
findnsols (300, Color, generate_color (Color), Colors).
Colors = ["# 5d67e1"].
有谁知道我什至可以在列表中获得我想要的 Nsolution 的任何方法?
预期输出:
findnsols(3, Color, generate_color(Color),Colors).
Colors = ["# 5d67e1", "# 4c4b43", "# 158955"].
最佳答案
我假设 generate_color
仅返回单一颜色(即,在给出第一个解决方案后,您不能按 ;
)。
因此,findnsols
不起作用,因为它基于回溯工作,即再次输入您的目标并尝试找到进一步的解决方案。
我建议类似于以下的解决方案:
length(Colors, 10), maplist(generate_color, Colors).
这定义了一个列表 Colors
长度为 10,其中所有条目必须对应于 generate_color
(更多信息见 maplist
)相关示例:
random
生成单个随机数。?- findnsols(3, N, random(0, 100, N), Rands).
Rands = [33].
?- length(Rands, 10), maplist(random(0,100), Rands).
Rands = [85, 92, 81, 66, 98, 15, 74, 95, 56|...].
关于list - Prolog:findall 但只保存一些解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68110260/