我是 Prolog 的新手,我正在尝试编写一个小程序,它会从 DCG 中给出一个随机句子。
我之前的想法是使用findall/3来列出所有可能的句子,然后使用random_member/2。
它工作了一段时间,直到语法变大并且由于递归而开始出现堆栈错误......
然后我想到了另一种方法:在给定时刻制作一组所有可能的术语,应用 random_member 来获取下一个术语,递归调用这个相同的函数,直到我得到空列表......
但是我怎样才能得到一个不完整谓词的所有可能答案呢?我怎样才能把它放在一组中?
有关信息,我的 DCG 如下所示:
s --> pronoun(X), verb(X), location.
pronoun(1) --> [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> [here].
location --> [there].
我对解决方案的想法(其中 List 是已经连接的术语的列表):
createRandomSentence(List) :-
setof(H, s([List|[H|_]], []), Set),
random_member(Pick, Set),
append(List, [Pick], List2)
<recursive call (haven't figured out this one either yet)>
...
提前致谢 !:)