有一段源代码源于对 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 的参数,但我不确定,因为本质上 infFromPrefixinf 是相同的函数,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 确实不是一个闭包:

10-08 13:15