0
你好,我在一個編程語言類,我們剛剛介紹給Haskell。所以在作業中,我們必須創建一個可以移除列表中元素的多個實例的函數。我有一個以前的函數可以刪除一個元素,但我的removeMultipleElements不想運行守護語句,直接進入空列表。任何幫助表示讚賞。我確定它是一種語法,但我不確定是什麼。爲什麼守衛聲明不運行?
下面是代碼
--This one works great
removeElement x [email protected](y:ys)
| y == x = rest
| otherwise = y : rest
where
rest = removeElement x ys
removeElement _ _ = []
--this does not want to
removeMultipleElements [email protected](y:ys) [email protected](x:xs)
| elem y aList = removeMultipleElements ys (removeElement y aList)
| not (elem y aList) = removeMultipleElements ys aList
| otherwise = aList
removeMultipleElements _ _ = []
請確保發佈StackOverflow上的問題(你可以粘貼Haskell代碼,因爲它是,然後標記所有代碼,只需按下時獲得的壓痕權'ctrl' +'k'來實現這一點)。另外,請隨時添加類型簽名! – leftaroundabout
edited :)這是我的理解,類型推斷已經假定我想要做什麼。兩個返回列表。 –
@KevinD我不會建議做出這樣的假設......它可能會導致怪異的類型錯誤。如果你指定了你想要的頂級綁定的類型,那麼錯誤會更加清晰(因爲你告訴類型檢查器你想要它匹配什麼)。頂級類型簽名還使代碼更易於閱讀。 –