簡體   English   中英

Haskell-統一將產生無限類型

[英]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做三件事:

  1. 如果模式匹配,它會告訴您列表不為空
  2. 它將l綁定到列表的第一個元素
  3. 它將k綁定到列表的其余部分。

如果您有一個非空列表,則想將項rl進行比較。 如果它們相等,則只返回列表的其余部分。 否則,將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM