gpt4 book ai didi

haskell - 为什么引入严格性的函数称为 seq?

转载 作者:行者123 更新时间:2023-12-02 01:56:44 24 4
gpt4 key购买 nike

我了解 seq功能以及为什么有必要引入严格的效率。我不明白的是,为什么这个原语叫做 seq (与严格无关)?

最佳答案

TL;DR:米兰达称它为 seq , 是在 sequence 时引入的(可能)已经是 Monads 的东西了,($!)被称为 strict很短的时间。

米兰达是第一个

它被称为 seq因为它被称为 seqMiranda和以前的语言,至少根据 A History of Haskell: Being Lazy With Class by Paul Hudak, John Hughes, Simon Peyton Jones and Philip Wadler .

Both seq and strict components of data structures were already present in Miranda for the same reasons (Turner, 1985), and indeed seq had been used to fix space leaks in lazy programs since the early 1980s (Scheevel, 1984; Hughes, 1983)



请注意 Turner only introduced the strict components in the 1985 paper ,而不是 seq本身,而 Scheevel 的“NORMA Sasl 手册”似乎已丢失或至少在 Internet 上不可用。 Hughes 论文(上面的“Hughes, 1983”)没有引入 seq任何一个。

无论哪种方式, seq was part of Mirandas standard environment并且还包含了为什么它被称为 seq 的提示。 :

`seq' applied to two values, returns the second but checks that the first value is not completely undefined. Sometimes needed, e.g. to ensure correct synchronisation in interactive programs.



正确同步或 序列 影响。

其他可能的名称

现在,为什么不简单地称为 strict在 haskell ?甚至 sequence ?

嗯,原来 Haskell 1.3 ,其中介绍了 seq ,还介绍了 Monad ,因此 sequence :: Monad m => [m a] -> m () .因此, sequence不能用作名称。

现在 sequence出图了,我们来看看 strict . strict包含在 1.3 中,因为 1.3 introduced an Eval typeclass :
seq :: Eval a => a -> b -> b
strict :: Eval a => (a -> b) -> (a -> b)
strict f = \x -> seq x (f x)

都不是 Eval也不是 strict没有按原样进入 Haskell98。相反, Eval被完全删除,因为它适用于所有类型, strict更名为 ($!) .

关于haskell - 为什么引入严格性的函数称为 seq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61479290/

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