获取解决方案的随机子集

时间:2019-05-19 16:27:11

标签: functional-programming prolog swi-prolog

我在StackOverflow上找不到任何相关问题,并且不确定在Prolog中是否可行,但这是我的问题:

考虑到一系列限制,我可以期望Prolog提供大量的解决方案,这些解决方案可能要花费数小时,我可以选择不等待全套解决方案,而是选择“第一个”但随机的解决方案?

举一个非常小的例子,

between(0, 100, X), between(0, 100, Y), X+Y>100.

会立即给我一组可预测的X=1, Y=100; X=2, Y=100, X=3, Y=100等。假设该示例要花几个小时来计算,有没有办法获得-例如35(用户参数)-随机排序的解决方案,例如{ {1}},等等?

距离我上次进行Prolog已经有一段时间了,所以我又回到了初学者的时代!

1 个答案:

答案 0 :(得分:1)

您可以将call_nth / 2与random_between / 3结合使用:

?- random_between(1,8,X),call_nth(member(E,[1,2,3,4,5,6,7,8]),X).
X = E, E = 1.

?- random_between(1,8,X),call_nth(member(E,[1,2,3,4,5,6,7,8]),X).
X = E, E = 6.