获取随机的解决方案子集

Get A Random Subset of Solutions

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

考虑到一组限制条件,我可以期待来自 Prolog 的大量解决方案可能需要几个小时才能出现,我是否可以选择不等待完整的解决方案,而是获得 "first" 但随机解决方案?

举个极小的例子,

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

会立即给我一组可预测的 X=1, Y=100; X=2, Y=100, X=3, Y=100 等。假设这个例子需要几个小时来计算,有没有办法得到 - 比如 35(用户参数) - 随机排序的解决方案,比如 X=79, Y=43; X=4, Y=98,等等?

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

你可以使用 call_nth/2, coupled with 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.