我试图在Haskell的字符串末尾添加一个字符串。

    albumStr = ""
main = do
 let albumStr = albumStr ++ "nothing"
 print albumStr

每当我运行它时,它都会卡在

在控制台中,我必须终止它。

为什么?以及如何以这种方式将一个字符串添加到另一个字符串?

编辑:
如何将多个字符串添加到当前字符串的末尾而不覆盖它。

谢谢

最佳答案

与ML不同,Haskell没有rec关键字来标记递归定义。取而代之的是,所有定义都可以是递归的,这意味着在每个变量定义中,定义的变量在其定义期间已经在范围内。

因此,在let albumStr = albumStr ++ "nothing"中,albumStr右侧的=指的是在=左侧定义的一个-而不是在第1行中定义的那个。因此,该定义是无限递归的,并且永远循环。

如果要基于另一个变量定义变量,则必须给它起一个不同的名称:

let localAlbumStr = albumStr ++ "nothing"

09-25 22:30