Es ist nicht möglich, einfach durch Design. Scalas Liste ist unveränderlich, und alles, was Sie mit einer bestehenden Liste tun können, ist im Grunde genommen den Kopf (der den Schwanz ergibt, mit anderen Worten eine Liste, die selbst unveränderlich ist) oder ein Element voranzustellen, was zu einer neuen unveränderlichen Liste führt. Sie können ein Element einer Liste nehmen und es erneut vor, aber dies wird nur eine längere Liste erstellen, wo zwei Elemente die gleiche Instanz sind, erstellt dies keinen Zyklus.
Sie könnten auch zwei Listen haben, die Teile (oder alle) ihrer Tails teilen, aber Sie können immer noch keine Loops erstellen. Dies ist einfach weil, um eine längere Liste zu erstellen, alles, was Sie tun können, an eine bereits vorhandene Liste vorangestellt ist, was bedeutet, dass in einem Listenkopf Knoten (von Entwurf) ältere Instanzen sind, die Knoten. Dies ist immer der Fall. Daraus folgt, dass das Vorhandensein von Schleifen ein Widerspruch wäre.
Also die kurze Antwort ist nein, Sie können keine Zyklen mit Scala (unveränderlich) Liste erstellen.
AS Nebenbei bemerkt, ist der Grund, warum es mit Stream
s möglich ist (wie durch senia Antwort gezeigt) und nicht mit List
s (obwohl beide unveränderlich Sammlungen sind) ist, dass Stream
s einen kritischen Bestandteil hinzu: lazyness. Stream-Knoten sind träge konstruiert (ein Knoten speichert im Wesentlichen einen -Thumb--Wert zum Inhalt des tatsächlichen Knotens), der es einem späteren Knoten ermöglicht, einen früheren (und noch nicht erstellten) Knoten zu referenzieren und somit Schleifen zuzulassen.
Dies scheint eine Klasse für einen Knoten oder ein Element in der Liste zu sein, nicht für eine Liste selbst. – Teepeemm