Seite 1 von 1

Liste in Linkssequenz umwandeln

Verfasst: Donnerstag 26. Januar 2023, 10:39
von pre.tooo
Aloha liebe Gemeinde,

ich stehe aktuell vor dem Problem eine Liste in eine Linkssequenz umwandeln zu müssen. Bevor jemand fragt: das habe ich mir nicht selber ausgedacht sondern unser Übungsgruppenleiter in der Uni.
Jetzt zu meiner eigentlichen Frage: Linkssequenzen werden doch eigentlich als Tupel dargestellt und können daher nicht verändert werden, solange das Programm läuft. Also dürfte es doch auch nicht möglich sein während der Laufzeit ein leeres Tupel mit den Listenelementen aufzufüllen oder gibt es da eine Variante die ich nur noch nicht kenne?

Info-Sheet Linkssequenzen
Bild

Beste Grüße
Simon

Re: Liste in Linkssequenz umwandeln

Verfasst: Donnerstag 26. Januar 2023, 11:52
von __deets__
Das ist richtig. Also musst du sie von innen nach aussen aufbauen. Zb durch recursion.

Re: Liste in Linkssequenz umwandeln

Verfasst: Donnerstag 26. Januar 2023, 13:03
von pre.tooo
__deets__ hat geschrieben: Donnerstag 26. Januar 2023, 11:52 Also musst du sie von innen nach aussen aufbauen.
Alles klar, habe eine Lösung gefunden.

Re: Liste in Linkssequenz umwandeln

Verfasst: Donnerstag 26. Januar 2023, 13:15
von Sirius3
Etwas Code-Golf:

Code: Alles auswählen

left_sequence = lambda items: (it:=iter(items)) and ((a, left_sequence(it)) if (a:=next(it, it)) is not it else ())

Re: Liste in Linkssequenz umwandeln

Verfasst: Samstag 28. Januar 2023, 20:10
von __blackjack__
Für Code-Golf sind die Namen etwas lang und es wird auch ohne Not jedes beliebige iterierbare (endliche) Objekt verarbeitet statt nur Listen. Eine Lösung für Listen bekommt man in 37 Zeichen hin.

Eine Lösung für beliebige iterierbare Objekte würde ich mit `reduce()` und `more_itertools.always_reversible()` schreiben. Hier mal mit Hy, nicht das ich am Ende noch Hausaufgaben 1:1 löse:

Code: Alles auswählen

#!/usr/bin/env hy
(import functools [reduce]
        hyrule *
        more-itertools [always-reversible])
(require hyrule *)


(defn list->cons-list [items]
  (reduce (fn [a b] #(b a)) (always-reversible items) #()))


(defmain []
  (pprint (list->cons-list [1 2 3])))

Re: Liste in Linkssequenz umwandeln

Verfasst: Sonntag 29. Januar 2023, 12:27
von grubenfox
als ich den Hy-Code sah, da fühlte ich mich an alte Zeiten erinnert, als ich mich mal kurze Zeit mit Common Lisp beschäftigt hatte und hatte mich gefragt, warum kommt er jetzt hier mit irgendwas das sich Hy nennt und wie Lisp aussieht?. Nach einer kurzen Suche im Web dann :shock: "was zur Hölle? Gibt es denn zu allem was man sich nicht ausdenken kann ein Python-Modul?" :shock: :roll: :P akuter Anfall von völliger Verblüffung! Danke dafür... :wink: