[英]Haskell - “Type error in application”: “unification would give infinite type”
[英]Haskell - unification would give infinite type
我是Haskell的新手,我剛遇到此問題/錯誤。
我不知道發生了什么,也不太熟悉使用列表並將它們定義為(l:k)
...我真的不知道l和k被認為是什么... l是一個元素,並且k是一個列表?
無論如何,我將不勝感激有人向我解釋了這些l和k東西,或者可能是在使用list的函數中解釋了(l:t:k)
,也許是一種編寫此簡單delete函數的方法,假設該元素位於列表中,則可以所需元素的首次出現並將其刪除,並返回新列表。
delete :: Eq b => b -> [b] -> [b]
delete r (l:k)
| inside r k = [l]:delete(r k)
| otherwise = k
模式l:k
做三件事:
l
綁定到列表的第一個元素 k
綁定到列表的其余部分。 如果您有一個非空列表,則想將項r
與l
進行比較。 如果它們相等,則只返回列表的其余部分。 否則,將l
放回遞歸調用產生的列表中。
如果列表為空,則還需要通過返回一個空列表來處理。 (從[]
刪除r
會產生[]
。)
delete :: Eq b => b -> [b] -> [b]
delete r (h:t) | r == h = t -- h for head, t for tail
| otherwise = h : delete r t
delete _ [] = [] -- base case
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.