Haskell: Speicheradresse einer Liste abrufen
Gibt es eine Möglichkeit, die Adresse des Datenelements (z. B. eines Listenelements) in Haskell abzurufen?
combineLists :: [a] -> [a] -> [a]
combineLists [] y = y
combineLists (x:xs) y = x : combineLists xs y
*Main> let x=[1,23, 12, 45]
*Main> x
[1,23,12,45]
*Main> let y =[90, 56, 78]
*Main> y
[90,56,78]
*Main> let z = combineLists x y
*Main> z
[1,23,12,45,90,56,78]
Jetzt würde z
vollständig durch Kopieren von Elementen aus x und y (interne Haskell-Darstellung) oder konstruiert
wäre z so etwas wie: z = [[Kopie aller Elemente von x] y]
Ich wollte sehen, ob & y == & z [4] (z [4] = 90).
Es gibt auch eine Möglichkeit, die interne Darstellung mit etwas ähnlichem wie ctypes in Python zu sichern.
Vielen Dank.
Sie können StableName
oder verwenden reallyUnsafePointerEquality#
(notieren Sie sich den Namen und verwenden Sie ihn nicht in echten Programmen; Sie benötigen auch die MagicHash- Erweiterung, um ihn aufzurufen), um zu überprüfen, ob sich zwei Ausdrücke auf dasselbe Objekt beziehen. Siehe Welche Vorteile haben StableNames gegenüber realUnsafePtrEquality # und umgekehrt? für die Unterschiede.