gpt4 book ai didi

Haskell - 这是一个闭包吗?

转载 作者:行者123 更新时间:2023-12-02 04:07:36 27 4
gpt4 key购买 nike

有一段源代码源自 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 是一个闭包吗?

最佳答案

我同意 Lennart 和 Daniel 的观点,即闭包是一个特定于实现的术语,并且一般来说没有明确定义。此外,除了实现问题之外,我没有听到 Haskellers 过多谈论闭包。当使用其他语言的程序员随意谈论“闭包”时,他们通常指的是我们所说的“lambda”。 (如“该语言有闭包吗?”。)

无论如何,我们来谈谈 GHC。

GHC(或者,更准确地说,STG)调用闭包任何不是构造函数应用程序的堆对象。

(如果您认为这是一个广泛的定义,请将其与原始的 STG 论文进行比较,其中甚至构造函数也被称为闭包。)

你的inf肯定是一个STG闭包;它是一个将在堆上分配并返回给调用者的 thunk。

关于Haskell - 这是一个闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com