Prolog Binärbäume ich peil gar nichts

  • hallo,

    ich muss von der uni aus mit prolog arbeiten. hab jetzt schon fleißig gegoogelt und diverse skripte, anleitungen tuts etc. gefunden. Aber ich hab es bisher nicht geschafft aus den Prädikten die ich mir aus den skripten 1:1 rauskopiert hb irgendwas sinnvoll zu produzieren.

    hab mir das hier mal kopiert

    liste_zu_baum([X],baum(X,nil,nil)).
    liste_zu_baum([X|Xs],baum(W,L,R)):-
    liste_zu_baum(Xs,baum(W1,L1,R1)),
    in_baum_einfuegen(X,baum(W1,L1,R1),baum(W,L,R)).

    in_baum_einfuegen(X,nil,baum(X,nil,nil)).
    in_baum_einfuegen(X,baum(W,L,R),baum(W,L1,R)):-
    X=<W,in_baum_einfuegen(X,L,L1).
    in_baum_einfuegen(X,baum(W,L,R),baum(W,L,R1)):-
    X>W,in_baum_einfuegen(X,R,R1).

    und in einer textdatei gespeichert um ds ganze dann mit consult zu laden.

    Kann mir wer verraten was ich jetzt auf der kommandozeile in prolog eingeben muss um mir tatsächlich einen binärbaum zu erzeugen.

    liste_zu_baum([5,6,3,4,2], baum(5, Links, Rechts)).

    sowas funktionirt irgendwienicht, jedenfalls krieg ich da immer "false" zurück, was wohl andeutet das was falsch ist.

  • die frage ist alt, fand ich aber trotzdem interesant, deine anfrage ist natürlich falsch, rechter und linke seite sind nicht definiert.
    zu dieser anfrage kommt auf jeden fall:

    ?- liste_zu_baum([1,2,3,4,5,6],X).
    X = baum(6, baum(5, baum(4, baum(3, baum(2, baum(1, nil, nil), nil), nil), nil), nil), nil)

    ob dass der baum sein soll den du mal gebraucht hast weiß ich nicht, aber ich sehe keine struktur in der rekursion.

    eigentlich wollte ich fragen wie kann man einen binärbaum sonst darstellen in prolog... ich versuche es gerade mit preorder-durchläufe, leider kenn ich mich nicht genug aus, soll ich auf die länge der liste achten, denn sonst weiß ich nicht wann ich einen rechten knoten binden muss...