C'è un pezzo di codice sorgente che ha avuto origine in una risposta ad another one of my questions,Haskell - è una chiusura?
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"
dove sono abbastanza sicuro che inf
deve essere una chiusura in quanto ha accesso alle variabili dal suo campo di applicazione racchiude nel senso che utilizza i parametri passati a infFromPrefix
, ma non sono sicuro poiché essenzialmente infFromPrefix
e inf
è la stessa funzione, lo inf
consente solo una definizione più breve di . Una definizione equivalente sarebbe
infFromPrefix rules prefix = prefix ++ case stripPrefix prefix (rules $ infFromPrefix rules prefix) of
Just suffix -> suffix
Nothing -> error "Substitution does not preserve prefix"
Ho ragione, è inf
una chiusura?
Direi "no" perché "inf" non è una funzione; è una lista. – melpomene
@melpomene Penso che nei linguaggi desiderosi sia opportuno limitare le chiusure per contenere le funzioni; in lingue pigre non ne sono così sicuro. Per lo meno, sarei disposto a scommettere che GHC ha una struttura dati che chiama "chiusura" che è coinvolta nella rappresentazione di 'inf' a un certo livello. –
@melpomene Hai ragione, altrimenti le regole non lo accetterebbero come input. Saluti. –