Ich habe versucht, dafür zu googeln, aber alles, was ich bekam, waren Geschichten über kleine Prominente. Angesichts der fehlenden Dokumentation, was ist ein DList?Was ist ein DList?
Antwort
Es ist eine andere Liste, nach dem Vorbild der "Difference List as functions"
scala> val (l1, l2, l3) = (List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
l1: List[Int] = List(1, 2, 3)
l2: List[Int] = List(4, 5, 6)
l3: List[Int] = List(7, 8, 9)
Effiziente Prepending:
scala> l1 ::: l2 ::: l3
res8: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
Ineffiziente Anfügen. Dies schafft eine Zwischenliste (l1 ++ l2), dann ((l1 ++ l2) ++ l3)
scala> l1 ++ l2 ++ l3 // inefficient
res9: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
DList
speichert den Appends auf und benötigt nur eine komplette Liste zu erstellen, effektiv Aufruf:
scala> List(l1, l2, l3) reduceRight (_ ::: _)
res10: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
Ist nicht regelmäßig vor Scala listet mit ::: immer noch linear in der Länge der Präfixe auf oder gibt es zusätzlichen Code, der ihre Unveränderlichkeit ausnutzt, um besser zu werden? –
Mit einem 'DList' ist die Gesamtoperation immer noch'O (n * m)', wobei 'n' die Anzahl der Chunks und' m'die Chunk-Größe ist. Mit '++' ist die Operation 'O (n * n * m)' – retronym
Es ist ein Datentyp im nicht-kanonischen scalaz-Paket, nützlich für typisierte Listen mit Konstantenzugriff an beiden Enden. (Der Trick ist für "scala" Google und "DLIST".)
Ich nahm an, es war nicht scala-spezifische –
DList wurden gefunden, um den Stapel überlaufen und wurden von Scalaz gelöscht: http://code.google.com/p/scalaz/Ausgaben/Detail? id = 19 –
@WillSargent DList wurde zurück zu Scalaz im Jahr 2011 hinzugefügt https://github.com/scalaz/scalaz/commit/0c299ee4c15049310f2a5b229f46f5d5621d6702 –
DList, ein Datentyp für Elemente desselben Typs mit konstanter Zeit append/prepend Operationen darstellen.
Link funktioniert nicht mehr :( – marios
Difference Listen eine Liste artigen Datenstruktur, die O (1) Operationen unterstützt anhängen.
Append und andere Operationen, die eine Liste ändern, werden über die Funktionszusammensetzung der Änderungsfunktionen dargestellt, anstatt die Liste direkt zu kopieren.
Ein Beispiel von Haskell's dlist library:
-- Lists as functions
newtype DList a = DL { unDL :: [a] -> [a] }
-- The empty list
empty = DL id
-- The append case: composition, a la Hughes
append xs ys = DL (unDL xs . unDL ys)
-- Converting to a regular list, linear time.
toList = ($[]) . unDL
Die Technik geht mindestens auf Hughes 84, Eine neuartige Darstellung von Listen und ihre Anwendung auf die Funktion "reverse", R. John Hughes 1984 zurück. , wo er vorschlägt, Listen als Funktionen darzustellen und als Funktionszusammensetzung anzufügen, die z umgekehrt, um in linearer Zeit zu laufen. Vom Papier:
- 1. Was ist ein PHP-Framework und was ist ein guter?
- 2. Google AMP: Was ist ein Layout? Was ist ein Behälter?
- 3. Was ist ein Protokoll?
- 4. Was ist ein Objekt?
- 5. Was ist ein "Pinsel"?
- 6. Was ist ein UIViewController
- 7. Was ist ein Kontextwechsel?
- 8. Was ist ein Inferenztyp?
- 9. Was ist ein Pastenskript?
- 10. Was ist ein Gruppenleiter
- 11. Was ist ein Bitmuster?
- 12. Was ist ein CGVector?
- 13. Was ist ein tGrid?
- 14. Was ist ein LPTHREAD_START_ROUTINE?
- 15. Was ist ein ImageObserver?
- 16. Was ist ein "Doppelstapelfehler"?
- 17. Was ist ein Pushlock?
- 18. Was ist ein Arbeitssatz?
- 19. Was ist ein Jamfile?
- 20. Was ist ein Zustandsraum?
- 21. Was ist ein Handler
- 22. Was ist ein Rauchtest?
- 23. Was ist ein Ereignishandle?
- 24. Was ist ein StackOverflowError?
- 25. Was ist ein Datenbankindex?
- 26. Was ist ein `char *`?
- 27. Was ist ein Endpunkt?
- 28. Was ist ein SSTable?
- 29. Was ist ein Tabellenpräfix?
- 30. Was ist ein Stammverzeichnis?
klickte ich nur auf diese Frage für eine Chance, ein spöttisches Kommentar über Prominente zu machen. Aber es war schon da in der Frage ... +1 –