如何在Haskell中追加两个列表并将结果存储到第一个列表中



我目前正在尝试编写一个需要两个列表串联的代码。但我想把这个结果存储到第一个列表中(就像C中的strcat((一样(。有办法做到这一点吗?

是的,可以随心所欲。您需要创建一个可变变量,例如状态变量,或者使用STM,并将值存储在其中

然而,这不是一个好主意。首先,这很复杂。但更重要的是,到目前为止,最好接受Haskell作为一种不可变语言的一般设计,并且只有在绝对需要时才使用可变数据。

术语"不可变"意味着一旦变量被赋值,它就不会再次更改。不可变变量,更准确地称为values,有一些重要的好处。有些语言,比如F#和Rust,默认情况下有不可变的变量,如果你希望变量是可变的,你必须指定它是可变的。Haskell只是更进一步。

strcat的Haskell版本如下所示:

strcat :: String -> String -> String
strcat s1 s2 = s1 ++ s2

s1s2的值在顶部,连接的值在底部,但仅作为其他函数的输入。没有存储任何内容。Haskell中的函数最好被认为是有数据流过它们。

每种语言都有自己的习语,当你使用这种语言时,如果你坚持使用这些习语,事情会更容易。像C或Python这样的语言的真实性与Haskell的真实性是双重的。

这是不可能的,因为Haskell中的所有值都是不可变的。

最新更新