Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中使用and的递归语法_Haskell - Fatal编程技术网

haskell中使用and的递归语法

haskell中使用and的递归语法,haskell,Haskell,我正在尝试创建一个递归函数,该函数获取并输入如下所示的列表列表:[[1,2],[4],[3],[1]],并返回Bool。它应该检查所有列表是否至少包含一个唯一编号。我正试图使用下面的两个函数递归地实现这一点 从第二个列表的第一个列表中删除所有元素的函数: helper :: Eq a => [a] -> [a] -> [a] helper a b = filter (`notElem` b) a 主要功能: function :: [[Int]] -> Bool fu

我正在尝试创建一个递归函数,该函数获取并输入如下所示的列表列表:
[[1,2],[4],[3],[1]]
,并返回Bool。它应该检查所有列表是否至少包含一个唯一编号。我正试图使用下面的两个函数递归地实现这一点

从第二个列表的第一个列表中删除所有元素的函数:

helper :: Eq a => [a] -> [a] -> [a]
helper a b = filter (`notElem` b) a
主要功能:

function :: [[Int]] -> Bool 
function [] = True
function (x:y:xs) = (not (null r)) and (function (r ++ xs))
    where r = helper(x,y)
但是,我从编译器中得到以下两个错误:

Couldn't match expected type ‘(t0 Bool -> Bool) -> Bool -> Bool’
              with actual type ‘Bool’

The function ‘not’ is applied to three arguments,
  but its type ‘Bool -> Bool’ has only one
  In the expression: (not (null r)) and (function (r ++ xs))
  In an equation for ‘function’:
      function (x : y : xs)
        = (not (null r)) and (function (r ++ xs))
        where
            r = helper (x, y)

我是Haskell新手,对Haskell语法不太熟悉。

第一个问题-使用多个参数调用函数。这是通过以下语法完成的:
myFunction a b
(而不是
myFunction(a,b)

原因是
(a,b)
是一个元组

第二个问题-您正在使用而不是

第三个问题-您试图将
r
xs
++
组合,但是
r
的类型是
[Int]
,而
xs
的类型是
[[Int]]
。如果您的目标是将
r
前置到
xs
,那么您可以使用

helper :: Eq a => [a] -> [a] -> [a]
helper a b = filter (`notElem` b) a

function :: [[Int]] -> Bool 
function [] = True
function (x:y:xs) = not (null r) && function (r : xs)
    where r = helper x y

不符合您的想法,您正在寻找
和&
猜测:您尝试检查第二个列表是否包含任何不在第一个列表中的元素,第三个列表应包含一个不在第一个或第二个列表中的元素,…
helper(x,y)
是错误的,因为
helper
没有将一对作为参数。改用
helper x y