我的出生记录如下。如何编写一个清空列表的函数。 birthBook :: [(字符串,字符串,字符串)] birthBook = [(" DD"" 2"" 4&#34)]
答案 0 :(得分:1)
Haskell中没有这样的东西。 Haskell是一种语言,其中值不可变。这意味着一旦定义了值,就无法对其进行更改。你错误地使用命令式语言,你可以做到
birthbook = [1,2,3]
birthbook = []
print birthbook // -> []
如果您感到困惑,请查看the Haskell wiki。
纯功能程序通常对不可变数据进行操作。不是更改现有值,而是创建更改的副本并保留原始副本。由于结构的未更改部分无法修改,因此通常可以在旧副本和新副本之间共享它们,从而节省内存。
答案 1 :(得分:1)
如果通过清空列表,您正在谈论某些:
emptyBook :: [(String,String,String)] -> ()
将转为
birthBook=[(...)]
与
emptyBook birthBook
到
birthBook=[]
然后你不 - 这意味着什么是不可改变的
你做的是通过你的列表/书籍(也许是想象并把它放入状态单子) - 而不是简单地删除旧值并继续[]
或者你进入IO
并恢复命令式编程(使用IORef
s或其他东西)