Ergebnis 1 bis 5 von 5

Thema: Prolog: Liste sortieren

  1. #1
    Unregistriert
    Gast

    Standard Prolog: Liste sortieren

    Möchte Prolog dazu bringen, aus einer gegebenen Liste eine sortierte zu ermitteln:

    getfirst([H|T], H).
    issmaller(X,Y) :- Y >= X.
    issort([]).
    issort([H|[]]).
    issort([H|T]) :- getfirst(T,H2), issmaller(H,H2), issort(T).
    countelem([],E,0).
    countelem([H|T],H,N) :- N is N2 + 1, countelem(T,H,N2).
    countelem([H|T],E,N) :- countelem(T,E,N).
    ispermut([],[]).
    ispermut([H1|T1],[H2|T2]) :- countelem([H1|T1],H1,N), countelem([H2|T2],H1,N), ispermut(T1,T2).
    dosort(L1,L2) :- issort(L2), ispermut(L1, L2).

    Die Relation countelem bereitet Schwierigkeiten. Erhalte die Meldung:
    ERROR: is/2: Arguments are not sufficiently instantiated

    Die Argumente sind nicht ausreichend instanziiert. Was bedeutet das?
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Unregistriert
    Gast

    Standard AW: Prolog: Liste sortieren

    Zitat Zitat von Unregistriert Beitrag anzeigen
    Möchte Prolog dazu bringen, aus einer gegebenen Liste eine sortierte zu ermitteln:

    getfirst([H|T], H).
    issmaller(X,Y) :- Y >= X.
    issort([]).
    issort([H|[]]).
    issort([H|T]) :- getfirst(T,H2), issmaller(H,H2), issort(T).
    countelem([],E,0).
    countelem([H|T],H,N) :- N is N2 + 1, countelem(T,H,N2).
    countelem([H|T],E,N) :- countelem(T,E,N).
    ispermut([],[]).
    ispermut([H1|T1],[H2|T2]) :- countelem([H1|T1],H1,N), countelem([H2|T2],H1,N), ispermut(T1,T2).
    dosort(L1,L2) :- issort(L2), ispermut(L1, L2).

    Die Relation countelem bereitet Schwierigkeiten. Erhalte die Meldung:
    ERROR: is/2: Arguments are not sufficiently instantiated

    Die Argumente sind nicht ausreichend instanziiert. Was bedeutet das?
    es gibt verschiedene methoden Listen zu sortieren, mit welche willt u das machen??#
    außerdem was für listen willst du sortieren und nach welchen kriterien...

    ein beispiel von mir :
    % dieser programm sortiert listen von integerzahlen.
    mysort([],End) :- End = [].
    mysort([Pivot|List],End) :-
    findall(E, ( member(E,List), E > Pivot ), Right), % finde rechte Seite
    erase(Right,List,Left), % finde linke Seite
    mysort(Left,EndLeft), quicksort(Right,EndRight), % sortiere linke und rechte Seiten
    EndList = [EndLeft,Pivot,EndRight], flatten(EndList,End). % füge Listen zusammen!

    erase(Erase,List,End) :-
    findall(X,(member(X,List), not(member(X,Erase))),End).

    ist angelehnt an dem quicksort verfahren...

    grüß
    EDdie

  3. #3
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog: Liste sortieren

    Also so funktioniert es zumindest:
    Code:
    mysort([], []).
    mysort([X], [X]).
    mysort([Pivot|Tail], Result) :- leftFromPivot(Pivot, Tail, Left), rightFromPivot(Pivot, Tail, Right), flatten([Left, Pivot, Right], Result).
    
    leftFromPivot(Pivot, [], []).
    leftFromPivot(Pivot, [H|T], U) :- H > Pivot, leftFromPivot(Pivot, T, U).
    leftFromPivot(Pivot, [H|T], [H|U]) :- H =< Pivot, leftFromPivot(Pivot, T, U).
    
    rightFromPivot(Pivot, [], []).
    rightFromPivot(Pivot, [H|T], U) :- H =< Pivot, rightFromPivot(Pivot, T, U).
    rightFromPivot(Pivot, [H|T], [H|U]) :- H > Pivot, rightFromPivot(Pivot, T, U).
    Was das Problem angeht, diese Zeile ist auf jeden Fall problematisch:
    Code:
    countelem([H|T],H,N) :- N is N2 + 1, countelem(T,H,N2).
    N2 existiert noch nicht, und du willst N die N2+1 zuweisen, das geht nicht, du musst es so machen:
    Code:
    countelem([H|T],H,N) :- countelem(T,H,N2), N is N2 + 1.

  4. #4
    HTML Newbie
    Registriert seit
    29.08.2010
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog: Liste sortieren

    Zitat Zitat von The User Beitrag anzeigen
    Also so funktioniert es zumindest:
    Code:
    mysort([], []).
    mysort([X], [X]).
    mysort([Pivot|Tail], Result) :- leftFromPivot(Pivot, Tail, Left), rightFromPivot(Pivot, Tail, Right), flatten([Left, Pivot, Right], Result).
    
    leftFromPivot(Pivot, [], []).
    leftFromPivot(Pivot, [H|T], U) :- H > Pivot, leftFromPivot(Pivot, T, U).
    leftFromPivot(Pivot, [H|T], [H|U]) :- H =< Pivot, leftFromPivot(Pivot, T, U).
    
    rightFromPivot(Pivot, [], []).
    rightFromPivot(Pivot, [H|T], U) :- H =< Pivot, rightFromPivot(Pivot, T, U).
    rightFromPivot(Pivot, [H|T], [H|U]) :- H > Pivot, rightFromPivot(Pivot, T, U).
    ....so funktioniert bei mir aber nicht...
    Code:
    ?- mysort([2,5,1,3,6,4],R).
    R = [1, 2, 5, 3, 6, 4] ;
    false.
    linke und rechte Seite muss noch geordnet werden...
    habs so erweitert...

    Code:
    mysort([], []).
    mysort([X], [X]).
    mysort([Pivot|Tail], Result) :- 
    	leftFromPivot(Pivot, Tail, Left), mysort(Left, SortedLeft),
    	rightFromPivot(Pivot, Tail, Right), mysort(Right, SortedRight), 
    	flatten([SortedLeft, Pivot, SortedRight], Result), !.
    
    leftFromPivot(_Pivot, [], []).
    leftFromPivot(Pivot, [H|T], U) :- H > Pivot, leftFromPivot(Pivot, T, U).
    leftFromPivot(Pivot, [H|T], [H|U]) :- H =< Pivot, leftFromPivot(Pivot, T, U).
    
    rightFromPivot(_Pivot, [], []).
    rightFromPivot(Pivot, [H|T], U) :- H =< Pivot, rightFromPivot(Pivot, T, U).
    rightFromPivot(Pivot, [H|T], [H|U]) :- H > Pivot, rightFromPivot(Pivot, T, U).
    
    
    
    ?- mysort([2,5,1,3,6,4],R).
    R = [1, 2, 3, 4, 5, 6].
    
    ?-

  5. #5
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog: Liste sortieren

    Hupps, sorry, stimmt.

Ähnliche Themen

  1. Navigation: Liste oder nicht Liste?
    Von Macrosdesign im Forum HTML & CSS Forum
    Antworten: 3
    Letzter Beitrag: 23.07.2009, 13:42
  2. Sortieren einer einfach verketteten Liste
    Von Flippo im Forum Forum für alle anderen Programmiersprachen
    Antworten: 4
    Letzter Beitrag: 02.11.2008, 00:21
  3. Prolog Liste zum String
    Von uwerothfeld im Forum Forum für alle anderen Programmiersprachen
    Antworten: 0
    Letzter Beitrag: 19.09.2007, 10:42
  4. Zuweisen einer Liste aus Objekt einer neu erstellten Liste
    Von Rachgold im Forum Forum für alle anderen Programmiersprachen
    Antworten: 1
    Letzter Beitrag: 29.07.2007, 09:55
  5. Bestimmtes Element aus einer Liste suchen / zählen in PROLOG
    Von Mike XV im Forum Forum für alle anderen Programmiersprachen
    Antworten: 0
    Letzter Beitrag: 27.06.2007, 14:18

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •