Je suis nouveau à Prolog, et j'essaye d'écrire un petit programme qui donnera une phrase aléatoire d'un DCG.Prolog - DCG - phrase aléatoire
Mon idée précédente était d'utiliser findall/3 pour faire une liste de toutes les phrases possibles, puis d'utiliser random_member/2.
Il a travaillé pendant un certain temps, jusqu'à ce que la grammaire est devenu plus grand et je commençais à avoir des erreurs de pile à cause de la récursivité ...
je alors pensé à une autre façon: faire un ensemble de tous les termes possibles à une donnée moment, en appliquant random_member pour obtenir le prochain terme, appelez récursivement cette même fonction, jusqu'à ce que j'obtienne la liste vide ...
Mais comment puis-je obtenir un ensemble de toutes les réponses possibles à un prédicat incomplet? Et comment puis-je l'obtenir dans un mis?
Pour plus d'informations, mon DCG ressemble à ceci:
s --> pronoun(X), verb(X), location.
pronoun(1) --> [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> [here].
location --> [there].
Mon idée de la solution (où la liste est la liste des termes déjà concaténés):
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)>
...
Merci d'avance! :)
Je ne savais pas que cela était possible! Merci beaucoup ! – Clung