Arbeiten mit der Liste von Listen in Prolog
Bitte helfen Sie mir dieses problem zu lösen:
Ich habe eine Liste von Listen
[[1,2],[3,4]]
Wie bekomme ich:
[1,3]
[1,4]
[2,3]
[2,4]
Oder wenn ich eine Liste von Listen
[[1,2],[3,4],[6,7]]
Wie bekomme ich:
[1,3,6]
[1,3,7]
[1,4,6]
[1,4,7]
[2,3,6]
[2,3,7]
[2,4,6]
[2,4,7]
ich glaube, das heißt der Kartesisches Produkt
InformationsquelleAutor Welcome789 | 2012-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie etwas wie das hier tun:
Ist, nehmen Sie das erste element der ersten Liste in der Eingabe-Liste und fahren rekursiv mit den verbleibenden Listen. Als eine zweite chance, überspringen Sie das element aus und wiederholen Sie mit den restlichen Elementen.
InformationsquelleAutor gusbro
das Prädikat für den Zugriff auf ein einzelnes element in der Liste ist es den meisten basic-Prolog-Baustein: Mitglied/2. Und Sie möchten eine Liste aller Listen " - Elementen: maplist/3 ist eine solche Zuordnung. Also können wir schreiben
beachten Sie, dass get1/2 es ist nur erforderlich, tauschen Sie die member/2 Argumenten: da (pure) Prolog wir beschreiben die Beziehungen zwischen Argumenten, können wir tauschen Argumente', um vereinfachen und noch mehr:
Test Ausgabe:
Bearbeiten
Einen Witz: wirklich, meine ersten Mähdrescher/2 geschrieben werden sollte, wie
+1 für eine sehr saubere Lösung
Warum dieser Befehl: findall(X, maplist(Mitglied, [[a,b,c], [1,2,3]], X), L). gibt unendliche Ausgabe?
Mitglied/2 hat auch eine Liste als zweites argument. Sonst ist es 'baut' es auf backtracking, damit es nicht zu kündigen, wenn angetrieben durch findall
InformationsquelleAutor CapelliC