有一段源代码来源于对我的另一个问题的回答,
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
是个终结吗?
发布于 2015-10-23 07:42:02
基于Wiki在程序设计中的闭包上的文章,我认为可以说,inf
确实不是一个闭包:
特别要注意的是,嵌套函数定义本身并不是闭包:它们有一个空闲变量,该变量尚未绑定。只有在用参数的值计算封闭函数时,嵌套函数绑定的空闲变量才会创建闭包,然后从封闭函数返回。
发布于 2015-10-23 09:10:45
https://stackoverflow.com/questions/33305935
复制相似问题