list - Prolog:findall 但只保存一些解决方案

标签 list prolog swi-prolog

我找到了 that for swi-prolog it exists findnsols ,但是,它对我不起作用。
我的 predicate generate_color(Color) 生成随机颜色.
当我尝试调用它 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/

相关文章:

c# - 在 C# 中对 List<Tuple<int,int>> 进行二进制搜索

c - c 中的链接列表,代码行的解释?

prolog - Prolog:不等式运算符

ssl - 在 SWI-Prolog 中打开并检查 Pem 文件

functional-programming - Prolog 创建字典

python - 识别列表中的连续数字组

python - 使用函数将每个第二个单词替换为单词 'hello'

Prolog中的列表长度

prolog - 如何从 XPCE 传递选择值以生成 prolog 代码

unicode - Prolog 中基本多语言平面 (BMP) 之外的转义字符