我想弄清楚\\
在Haskell中意味着什么?
我有一个程序在编译时运行得很好,这意味着\\
是一个内置函数,因为它没有在程序中的任何地方定义。但是,在GHCi中,如果我尝试以相同的方式使用它,我会收到一个错误,说它不在范围内。
这是否意味着在每种情境中都有特殊之处?
这是我的代码;
module Main where
import Data.List
numbersA = [1, 105, 103, 7, 4, 102, 3, 101, 107, 8, 9]
numbersB = [6, 9, 7, 8, 1, 5, 3, 2, 4]
type Number = Integer
type Run = [Number]
extractRuns :: [Number] -> [Run]
extractRuns [] = []
extractRuns xs = run : extractRuns xs'
where run = buildRun (head xs) (tail xs)
xs' = xs \\ run
buildRun :: Number -> [Number] -> Run
buildRun seed numbers
| endRun = [seed]
| otherwise = seed : buildRun seed' numbers'
where endRun = successors == []
successors = filter (.#. seed) numbers
numbers' = numbers \\ [seed]
seed' = head successors
(.#.) :: Number -> Number -> Bool
x .#. y = x /= y && abs (x - y) < 10
runs = extractRuns numbersA
main = print runs
答案 0 :(得分:22)
\\
是list difference operator。您可以在GHCi中使用它,您只需先导入Data.List
。
Prelude> :m Data.List
Prelude Data.List> [1..5]\\[3,4]
[1,2,5]
在旁注中,这就是为什么我建议避免像import Data.List
这样的大量导入,以及更具体的import Data.List ( (\\) )
,这样您就可以更加了解您正在导入的内容。
答案 1 :(得分:9)
这是list difference operation。如果你知道使用hoogle,就可以很容易地搞清楚这样的事情。