私は 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)>
...
前もって感謝します !:)