Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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/8/xcode/7.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错误:变量不在范围内_Haskell - Fatal编程技术网

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

我对Haskell有点陌生,但我已经解决这个问题好几个小时了,运气不好

我试图实现类似于过滤器的东西,除了谓词和列表被传递给函数,它返回两个列表的元组,一个由谓词过滤,另一个不由谓词过滤

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筛选器)分隔列表?