Ich verstehe die seq- Funktion und warum es notwendig ist, Strenge für Effizienz einzuführen. Was ich nicht verstehe ist, warum heißt dieses Primitiv seq
(und hat nichts mit Strenge zu tun)?
haskell
lazy-evaluation
psquid
quelle
quelle
Antworten:
TL; DR: Miranda nannte es
seq
, es wurde eingeführt, alssequence
es (wahrscheinlich) schon eine Sache für Monaden war, und($!)
warstrict
für kurze Zeit bekannt.Miranda war die Erste
Es wird genannt,
seq
weil esseq
in Miranda und früheren Sprachen genannt wurde, zumindest gemäß A History of Haskell: Faul mit der Klasse von Paul Hudak, John Hughes, Simon Peyton Jones und Philip Wadler .Beachten Sie, dass Turner nur die strengen Komponenten in der Veröffentlichung von 1985 eingeführt hat , nicht
seq
selbst, und Scheevels "NORMA Sasl-Handbuch" scheint verloren zu sein oder zumindest nicht im Internet verfügbar zu sein. Hughes These ("Hughes, 1983" oben) führt nicht einseq
.In
seq
beiden Fällen war es Teil der Mirandas-Standardumgebung und enthält auch einen Hinweis, warum es aufgerufen wurdeseq
:Die korrekte Synchronisation oder seq uss auf .
Andere mögliche Namen
Warum wurde das nicht einfach
strict
in Haskell genannt? Oder sogarsequence
?Nun, es stellt sich heraus, dass Haskell 1.3 , das eingeführt wurde
seq
, auch eingeführt hatMonad
, und somitsequence :: Monad m => [m a] -> m ()
. Dahersequence
war kein Name verfügbar.Nun, das
sequence
war nicht im Bild, schauen wir uns das anstrict
.strict
wurde in 1.3 aufgenommen, da 1.3 eineEval
Typklasse einführte :Weder
Eval
nochstrict
hat Haskell98 so wie es ist geschnitten. Stattdessen wurdeEval
es vollständig entfernt, da es für alle Typen in beiden Fällen gilt, undstrict
in umbenannt($!)
.quelle
seq
, und 1.3 verfügt über eine ordnungsgemäße.ps
HTML-Version. Wenn Sie wissen möchten, warum monadische E / A gefeiert wurden, schauen Sie sich das alte E / A-[Request] -> [Response]
Modell an. Faul mit der Klasse zu sein, ist wahrscheinlich die beste Quelle, um weiter zu schauen, abgesehen von alten Sitzungsprotokollen.