Problem mit Listen (bzw. Listen in Listen)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Listen (bzw. Listen in Listen)

    Hallo zusammen,

    ich habe ein Problem mit meinen Listen. Zur Weiterverarbeitung muss meine Liste folgende normale Form haben:

    Liste = [a, b, c, d, e, f, g, h, ...]

    Leider sieht die Liste im Moment eher so aus, mit verschachtelten Listen:

    List = [a, b, [c, d, [e, f]],g, h, ... ]

    Wie kann ich jetzt schnell und effizient die Liste in eine lineare normale Form bringen?

    Wäre super, wenn mir jemand helfen könnte.

    VG
    LuckyStar
  • Hallo,

    bei SWI-Prolog gibt es die Funktion flatten(List, Result), die genau die von dir gewünschte Aufgabe übernimmt.

    Wenn du ein anderes Prolog verwendest hilft dir vielleicht diese Implementation:

    [code:1]% Leere Liste beibehalten.
    flat([], []).

    % Innere leere Listen entfernen.
    flat([[]|Xs], NextXs) :-
    flat(Xs, NextXs), !.

    % Innere Listen rekursiv "flachklopfen" und Resultat mit der abzuarbeitenden
    % Restliste verketten.
    flat([X|Xs], NextXs) :-
    X = [_|_],
    flat(X, Y),
    flat(Xs, Ys),
    append(Y, Ys, NextXs), !.

    % Sonstige Listenelemente beibehalten.
    flat([X|Xs], NextXs) :-
    flat(Xs, Ys),
    NextXs = [X|Ys], !.
    [/code:1]

    Viele Grüße,

    Siracusa