【发布时间】: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 中加载你的模块”。我什至可以截屏,因为上面写着四行。