繁体   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