2011-02-01 4 views
1

comment puis-je définir un choisir/2 pour donner des réponses infiniesChoisissez/2 réponses multiples SWI prolog

choose(List, Elt) :- 
    length(List, Length), 
    random(0, Length, Rand), 
    nth1(Rand, List, Elt). 

mon choix/2 ne donne qu'une réponse

exemples:

?- choose([1,2,3],Elt). 
Elt = 1; 
Elt = 1; 
Elt = 3; 
... 

Répondre

2

Simple: Ajouter comme deuxième clause

choose(List, E) :- choose(List, E). 

à votre programme. Au fait, vous semblez vouloir nth0/3 au lieu de nth1/3. Et un meilleur nom, plus déclaratif à la place de "choose/2" est par exemple "list_choice/2".

2

Essayez d'utiliser la répétition:

choose(L, O) :- repeat, member(O, L).

il sera revenir en arrière dans tous les membres de la liste, puis répétez le fera pour essayer tous les membres encore.

?- choose([1,2,3],Out). Out = 1 ; Out = 2 ; Out = 3 ; Out = 1 ; Out = 2 ; Out = 3 ;