Es gibt ein Stück Sourcecode ist, die another one of my questions in einer Antwort entstand,Haskell - ist das ein Verschluss?
infFromPrefix :: Eq a => ([a] -> [a]) -> [a] -> [a]
infFromPrefix rules prefix = inf where
inf = prefix ++ case stripPrefix prefix (rules inf) of
Just suffix -> suffix
Nothing -> error "Substitution does not preserve prefix"
, wo ich ziemlich sicher bin, dass inf
ein Verschluss sein müssen, da sie Zugriff auf Variablen von seinem umgebenden Gültigkeitsbereich im Sinne hat, dass es verwendet die an infFromPrefix
übergebenen Parameter, aber bin unsicher, da im Wesentlichen infFromPrefix
und inf
die gleiche Funktion ist, erlaubt die inf
nur eine prägnantere Definition. Eine äquivalente Definition würde
infFromPrefix rules prefix = prefix ++ case stripPrefix prefix (rules $ infFromPrefix rules prefix) of
Just suffix -> suffix
Nothing -> error "Substitution does not preserve prefix"
Am sein, die ich korrigieren, ist inf
ein Verschluss?
Ich würde "Nein" sagen, weil 'inf' keine Funktion ist; Es ist eine Liste. – melpomene
@melpomene Ich denke in eifrigen Sprachen ist es sinnvoll, die Schließungen auf Funktionen zu beschränken; in faulen Sprachen bin ich mir nicht so sicher. Zumindest wäre ich bereit zu wetten, dass GHC eine Datenstruktur hat, die es "Schließung" nennt, die auf irgendeiner Ebene "Inf" darstellt. –
@melpomene Sie haben Recht, sonst würden Regeln es nicht als Eingabe akzeptieren. Prost. –