Prolog-Knobelaufgabe

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Prolog-Knobelaufgabe
Man mag es nicht glauben, aber ich habe heute eine echt sinnvolle Anwendung für Prolog gefunden :smiley: … steh nur leider gerade vor einem kleinen Problem, vielleicht hat ja jemand eine Idee, wie ich das lösen könnte. Allgemein geht es darum, Personen mit bestimmten Eigenschaften (Führerschein, Alter, Wohnort, bla bla bla) auf Fahrzeuge aufzuteilen. Funktioniert eigentlich auch ganz gut, bis auf eine Funktion. Ich möchte nämlich eine Liste mit Elementen in zwei Listen aufteilen und dabei alle möglichen Kombinationen ohne deren Permutationen kriegen. Also zum Beispiel [1,2,3] wird zu:
[][1,2,3]
[1][2,3]
[2][1,3]
[3][1,2]
[1,2][3]
[1,3][2]
[2,3][1]
[1,2,3][]

Ich hab mich da heute schon stundenlang dran versucht, nur entweder ich bekomme doch wieder Permutationen, oder einige Ergebnisse (nachvollziehbar) doppelt und dreifach. Da gibt es bestimmt einen Trick, aber ich glaub ich bin spontan zu blöd dafür :wand: … wäre für Hilfe echt dankbar. :slight_smile:


Wenn Du alle Kombinationen willst, dann entscheidest Du Dich bei jedem Element entweder dafuer, es aufzunehmen, oder dagegen:

komb([], []).                                                                                                                                                            
komb([H|T1], [H|T2]) :- komb(T1, T2).                                                                                                                                    
komb([H|T1], T2) :- komb(T1, T2).

Sorry, folgender Code entspricht wohl eher Deinen Specs :slight_smile:

komb([], [], []).                                                                                                                                                        
komb([H|T1], [H|T2], T3) :- komb(T1, T2, T3).                                                                                                                            
komb([H|T1], T2, [H|T3]) :- komb(T1, T2, T3).

Ah danke danke danke … oh man ich hab den blöden Fehler gemacht die Abbruchbedinung auf

aufteilen(Rest, [], Rest).

gesetzt … kein Wunder, dass das nicht geht.