2013-02-12 45 views
7

Tôi đang cố gắng tìm ra những gì \\ có nghĩa là trong Haskell?Dấu chéo ngược kép nghĩa là gì trong Haskell?

Tôi có một chương trình chạy hoàn hảo khi được biên dịch, ngụ ý rằng \\ là một hàm tích hợp, vì nó không được định nghĩa ở bất kỳ đâu trong chương trình. Tuy nhiên, trong GHCi, nếu tôi cố gắng sử dụng nó theo cách tương tự, tôi nhận được một lỗi nói rằng nó không nằm trong phạm vi.

Điều đó có ý nghĩa gì đó đặc biệt trong từng ngữ cảnh không?

Đây là mã của tôi;

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

Dùng thử Google trước? – Piccolo

+21

Trước tiên hãy thử sử dụng [Hoogle] (http://www.haskell.org/hoogle/)? –

+0

Tôi luôn thử Google trước ... nhưng Hoogle? Chưa bao giờ nghe nói về nó ... Cảm ơn! Nó có câu trả lời của tôi! – CodyBugstein

Trả lời

20

\\list difference operator. Bạn có thể sử dụng nó trong GHCi bạn chỉ cần nhập Data.List trước.

Prelude> :m Data.List 
Prelude Data.List> [1..5]\\[3,4] 
    [1,2,5] 

Trên một sidenote, đây là lý do tại sao tôi muốn đề nghị tránh nhập khẩu khối lượng như import Data.List và cụ thể hơn import Data.List ((\\)) để bạn có thể ý thức hơn về chỉ là những gì bạn đang nhập khẩu.

+0

Giải thích tuyệt vời, cảm ơn bạn! – CodyBugstein

+0

Chăm sóc downvoter để bình luận? – jozefg

9

Đây là list difference operation. Việc tìm ra những thứ như thế này thật dễ dàng nếu bạn biết sử dụng hoogle.

+5

Chỉ nghe nói về nó. Tôi sẽ luôn hỏi ý kiến ​​của Hoogle trước khi đăng câu hỏi. Cảm ơn bạn – CodyBugstein

Các vấn đề liên quan