我在Haskell,在那里我有一条线,确实是这样写的一段代码:如何修改,而不进入无限循环的Haskell列表?
addElement :: [a] -> a -> [a]
addElement list elem = list ++ [elem]
我需要(或者至少,我是这样认为的),这样的功能对于增加的目的我正在实现的图形数据结构的顶点列表中的新顶点。现在,我可以这样称呼这个功能
newlist = addElement oldlist elem
和一切工作正常。但是,如果我写
mylist = addElement mylist elem
,然后尝试做MYLIST任何呼叫终止后(它),我进入无限循环,如果我理解正确的话,这是由于哈斯克尔懒惰的评价或者类似的东西(mylist
被扩大到addElement (addElement ... elem) elem
,如果我得到了它吧?)。
这当然是坏我的特定实现,因为我的目的,我现在每次我需要一个元素添加到列表中的时间,使新的列表。那么,如何创建一个以我想要的方式工作的元素添加功能?
mylist = addElement mylist elem'这不是一个赋值,它是一个等式。 Haskell没有更新。在上下文中显示您的尝试。你如何建立mylist? –
那么,我基本上先运行mylist = []',然后说'mylist = addElement mylist 3'。第二个调用等同于'mylist = mylist ++ [3]'。如果我然后在ghci中键入'id mylist',例如没有任何反应,我被困在循环中。所以我应该认为在Haskell中不可能有一个'addElement'函数,最终会以'id mylist'导致'[3]'? –
不,请显示您正在尝试构建mylist的整个函数。 –