有一段源代码源于对 another one of my questions 的回答,
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"
我很确定
inf
必须是一个闭包,因为它可以从其封闭范围访问变量,因为它使用传递给 infFromPrefix
的参数,但我不确定,因为本质上 infFromPrefix
和 inf
是相同的函数,inf
只允许更简洁的定义。一个等效的定义是
infFromPrefix rules prefix = prefix ++ case stripPrefix prefix (rules $ infFromPrefix rules prefix) of
Just suffix -> suffix
Nothing -> error "Substitution does not preserve prefix"
我说得对吗,
inf
是闭包吗? 最佳答案
基于 Closures in programming 的 Wiki 文章,我认为可以说 inf
确实不是一个闭包: