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
。