Random Prolog-DCG-随机句

Random Prolog-DCG-随机句,random,prolog,dcg,Random,Prolog,Dcg,我是Prolog新手,我正在尝试编写一个小程序,可以从DCG中随机生成一个句子 我以前的想法是使用findall/3列出所有可能的句子,然后使用random_member/2 它工作了一段时间,直到语法变得更大,我开始因为递归而出现堆栈错误 然后我想到了另一种方法:在给定的时刻创建一组所有可能的项,应用random_成员来获取下一个项,递归调用同一个函数,直到得到空列表 但是,我怎样才能得到一组不完整谓词的所有可能答案呢?我如何在集合中获得它 有关信息,我的DCG如下所示: s --> p

我是Prolog新手,我正在尝试编写一个小程序,可以从DCG中随机生成一个句子

我以前的想法是使用findall/3列出所有可能的句子,然后使用random_member/2

它工作了一段时间,直到语法变得更大,我开始因为递归而出现堆栈错误

然后我想到了另一种方法:在给定的时刻创建一组所有可能的项,应用random_成员来获取下一个项,递归调用同一个函数,直到得到空列表

但是,我怎样才能得到一组不完整谓词的所有可能答案呢?我如何在集合中获得它

有关信息,我的DCG如下所示:

s --> pronoun(X), verb(X), location.
pronoun(1) --> [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> [here].
location --> [there].
我对解决方案的想法(其中列表是已连接术语的列表):

createRandom句子(列表):-
集合(H,s([List |[H | |]],[]),集合),
随机_成员(拾取、设置),
追加(列表,[Pick],列表2)

对我来说似乎是一项艰巨的任务。我会用另一种策略来解决这个问题,即在DCG中插入选择器,在您想要的地方进行选择。差不多

s --> pronoun(X), verb(X), location.
pronoun(1) --> {this}, [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> {this},[here].
location --> [there].

% here choice just between 2
this :- random(0,2,1).
产生

?- phrase(s,L).
L = [i, am, there] ;
L = [you, are, there].

?- phrase(s,L).
L = [you, are, there].

对我来说似乎是一项艰巨的任务。我会用另一种策略来解决这个问题,即在DCG中插入选择器,在您想要的地方进行选择。差不多

s --> pronoun(X), verb(X), location.
pronoun(1) --> {this}, [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> {this},[here].
location --> [there].

% here choice just between 2
this :- random(0,2,1).
产生

?- phrase(s,L).
L = [i, am, there] ;
L = [you, are, there].

?- phrase(s,L).
L = [you, are, there].

我不知道这是可能的!谢谢!我不知道这是可能的!谢谢!