Haskell错误:变量不在范围内
我对Haskell有点陌生,但我已经解决这个问题好几个小时了,运气不好 我试图实现类似于过滤器的东西,除了谓词和列表被传递给函数,它返回两个列表的元组,一个由谓词过滤,另一个不由谓词过滤Haskell错误:变量不在范围内,haskell,Haskell,我对Haskell有点陌生,但我已经解决这个问题好几个小时了,运气不好 我试图实现类似于过滤器的东西,除了谓词和列表被传递给函数,它返回两个列表的元组,一个由谓词过滤,另一个不由谓词过滤 divideList :: (a -> Bool) -> [a] -> ([a],[a]) divideList p xs = (f, nf) where f = doFilter p xs nf = doFilter (not . p) xs doFilter :: (a -> B
divideList :: (a -> Bool) -> [a] -> ([a],[a])
divideList p xs = (f, nf) where
f = doFilter p xs
nf = doFilter (not . p) xs
doFilter :: (a -> Bool) -> [a] -> [a]
doFilter _ [] = []
doFilter p (x:xs) = [x | p x] ++ doFilter p xs
第二个功能,doFilter
工作正常。它将过滤器应用于其列表,并吐出相应的列表。(即,如果我只使用doFilter(>3)[1,2,3,4,5,6]
它将正常工作)
我的问题是第一个函数。当我使用divideList(>3)[1,2,3,4,5,6]
时,我得到了许多变量不在范围内
错误。错误如下所示:
AddListOperations.hs:20:23: error:
Variable not in scope: p :: a -> Bool
AddListOperations.hs:20:25: error: Variable not in scope: xs :: [a]
AddListOperations.hs:21:31: error:
Variable not in scope: p :: a -> Bool
AddListOperations.hs:21:34: error: Variable not in scope: xs :: [a]
就像我说的,我和Haskell混了几天,所以如果我遗漏了任何重要信息,请告诉我。缩进
f
和nf
:
divideList :: (a -> Bool) -> [a] -> ([a],[a])
divideList p xs = (f, nf) where
f = doFilter p xs
nf = doFilter (not . p) xs
毕竟,您的where
阻塞会在哪里停止
顺便说一下,
divideList
是数据中的分区。List
多亏了Alec,我发现我所需要做的就是缩进下面的语句,其中
:
divideList :: (a -> Bool) -> [a] -> ([a],[a])
divideList p xs = (f, nf) where
f = doFilter p xs
nf = doFilter (not . p) xs
您需要缩进f=…
和nf=…
,否则无法知道它们是否已附加到divideList
。我不敢相信这就是所需的全部。。。非常感谢您,partition
就是您想要的函数。谢谢您,我刚刚意识到我所需要的只是一些缩进。分区是否基于谓词(la筛选器)分隔列表?