我在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的整個函數。 –