2013-02-12 30 views
7

我想弄清楚什麼\\在Haskell中的含義?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

請先試試Google? – Piccolo 2013-02-12 04:51:04

+21

先試試[Hoogle](http://www.haskell.org/hoogle/)? – 2013-02-12 04:51:46

+0

我總是首先嚐試Google ...但Hoogle?從來沒有聽說過...謝謝!它有我的答案! – CodyBugstein 2013-02-12 04:56:16

回答

20

\\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 ((\\))所以你可以更清楚只是要導入什麼的。

+0

很好的解釋,謝謝! – CodyBugstein 2013-02-12 04:58:56

+0

Downvoter care to comment? – jozefg 2013-02-14 03:56:02

9

這是list difference operation。如果您知道使用hoogle,將這些事情弄清楚很容易。

+5

剛剛聽說過。在發佈問題之前,我會經常諮詢Hoogle。謝謝 – CodyBugstein 2013-02-12 04:56:57

相關問題