2013-02-12 14 views
7

私は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

+21

最初に[Hoogle](http://www.haskell.org/hoogle/)を試してみますか? –

+0

私はいつもGoogleを最初に試しています...しかしHoogle?聞いたことがない...ありがとう!それは私の答えがある! – CodyBugstein

答えて

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

+0

コメントしますか? – jozefg

9

list difference operationです。あなたがhoogleを使用することを知っているなら、このようなことを理解するのは簡単です。

+5

ちょうどそれを聞いた。私は常に質問を投稿する前にHoogleに相談します。ありがとうございました – CodyBugstein

関連する問題