【问题标题】:What does the double-backslash \\ mean in Haskell?Haskell 中的双反斜杠 \\ 是什么意思?
【发布时间】:2013-02-12 04:46:57
【问题描述】:

我想弄清楚 \\ 在 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

【问题讨论】:

  • 先试试Hoogle
  • 我总是先尝试谷歌...但是 Hoogle?没听说过...谢谢!它有我的答案!
  • 或者在 GHCi 中加载你的模块并执行:i (\\)
  • @CatPlusPlus: (\\) 不在Prelude 中,但 OP 必须知道首先加载 Data.List
  • @amindfv 我很确定我说的是“或者在 GHCi 中加载你的模块”。我什至可以截屏,因为上面写着四行。

标签: haskell syntax


【解决方案1】:

\\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 ( (\\) ),这样您就可以更清楚自己正在导入的内容。

【讨论】:

    【解决方案2】:

    它是list difference operation。如果您知道使用hoogle,则很容易弄清楚这样的事情。

    【讨论】:

    • 刚刚听说过。在发布问题之前,我会始终咨询 Hoogle。谢谢
    猜你喜欢
    • 2015-02-02
    • 2013-10-24
    • 2016-04-06
    • 2021-09-04
    • 2021-06-15
    • 2014-07-15
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多