我试图在Haskell的字符串末尾添加一个字符串。
albumStr = ""
main = do
let albumStr = albumStr ++ "nothing"
print albumStr
每当我运行它时,它都会卡在
”
在控制台中,我必须终止它。
为什么?以及如何以这种方式将一个字符串添加到另一个字符串?
编辑:
如何将多个字符串添加到当前字符串的末尾而不覆盖它。
谢谢
最佳答案
与ML不同,Haskell没有rec
关键字来标记递归定义。取而代之的是,所有定义都可以是递归的,这意味着在每个变量定义中,定义的变量在其定义期间已经在范围内。
因此,在let albumStr = albumStr ++ "nothing"
中,albumStr
右侧的=
指的是在=
左侧定义的一个-而不是在第1行中定义的那个。因此,该定义是无限递归的,并且永远循环。
如果要基于另一个变量定义变量,则必须给它起一个不同的名称:
let localAlbumStr = albumStr ++ "nothing"