Functional programming 得到解的随机子集

Functional programming 得到解的随机子集,functional-programming,prolog,swi-prolog,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等。假设这个例

我找不到有关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(一个用户参数)——随机排序的解,比如
X=79,Y=43;X=4,Y=98等

自从我上次做Prolog已经有一段时间了,所以我又回到了初学者的行列

您可以使用/2和/3:


“唯一”解的意义上的随机性,或者重复是可能的?Prolog不容易随机化的主要原因之一,是因为计算顺序有时确实很重要。特别是对于带有cut(
)的程序,在这个程序中,选择一个随机子句可以做一些本来不可能的事情。@WillemVanOnsem Re:unique vs repeation。我想说独特。@WillemVanOnsem我有两个想法,但我不确定它们是否有任何意义:1。按照说明编写35条随机语句,并以某种方式将任意数量随机语句的编写参数化。使用
randseq
像这样。我确实找到了,但我不确定如何限制解决方案的数量(参数化),至少以避免计算所有解决方案的方式。调用第n个
是否强制Prolog首先找到所有解(真正的问题)?我的目标之一是避免这样做,因为要找到所有的解决方案需要几个小时。不,实际上只有必要的解决方案才能到达柜台。
?- 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.