Ich weiß, ich kann X is random(10).
tun, um eine zufällige Zahl von 0 bis 10 zu bekommen, aber gibt es einen ähnlichen Befehl, um ein zufälliges übereinstimmendes Element zu bekommen?Zufällige Artikel in Prolog
5
A
Antwort
3
Sie können es implementieren. Hier ist eine Version:
%% choose(List, Elt) - chooses a random element
%% in List and unifies it with Elt.
choose([], []).
choose(List, Elt) :-
length(List, Length),
random(0, Length, Index),
nth0(Index, List, Elt).
Von http://ozone.wordpress.com/2006/02/22/little-prolog-challenge/
6
SWI-Prolog v6 random_member/2
hat wie folgt definiert:
?- listing(random_member).
random:random_member(D, A) :-
length(A, B),
C is random(B),
nth0(C, A, D).
Anwendungsbeispiel:
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 1.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 1.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 2.
?- random_member(a(N), [a(1), a(2), b(3)]).
false.
?- random_member(a(N), [a(1), a(2), b(3)]).
false.
?- random_member(a(N), [a(1), a(2), b(3)]).
N = 2.
Sie wahrscheinlich verwenden möchten es im Modus (-,+)
obwohl.
Whoa da, die erste Klausel von wählen/2 ist nicht das, was Sie wollen. Wenn die Liste leer ist, sollten Sie keine Lösungen erzeugen, anstatt Elt mit der leeren Liste zu vereinheitlichen. "wähle ([], _): -!, fehlgeschlagen." würde es reparieren. Auch dies erzeugt eine unendliche Anzahl von Lösungen, die normalerweise unerwünscht ist. – rndmcnlly