9

\\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
4

2 に答える 2

28

\\リスト差分演算子です。Data.List最初にインポートするだけでGHCiで使用できます。

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

ちなみに、これが、自分が何をインポートしているのかをよりよく理解できるように、のような大量のインポートを避けimport Data.List、より具体的にすることをお勧めする理由import Data.List ( (\\) )です。

于 2013-02-12T04:50:45.873 に答える
9

リスト差分操作です。hoogleの使い方を知っていれば、このようなことを理解するのは簡単です。

于 2013-02-12T04:51:45.370 に答える