代码之家  ›  专栏  ›  技术社区  ›  js2010

(……)在哪里定义

  •  0
  • js2010  · 技术社区  · 5 年前

    我只是想知道 .. 实际上是在Haskell代码中定义的,比如 the Prelude ? 是 enumFromTo 同样的事?我不明白定义是什么?

    enumFromTo x y  =  map toEnum [fromEnum x .. fromEnum y]
    
    [ e1 .. e3 ]  =  enumFromTo e1 e3
    
    0 回复  |  直到 5 年前
        1
  •  22
  •   Will Ness Derri Leahy    5 年前

    这是世界的一部分 语法 报告中明确指出, section 3.10 .

    是的,它被翻译成代码使用 enumFrom 等功能:

    enter image description here

    编辑问题:您显示的定义是 Enum 打字课。就在你链接的前奏曲中说:

    class  Enum a  where
        succ, pred       :: a -> a
        toEnum           :: Int -> a
        fromEnum         :: a -> Int
        enumFrom         :: a -> [a]             -- [n..]
        enumFromThen     :: a -> a -> [a]        -- [n,n'..]
        enumFromTo       :: a -> a -> [a]        -- [n..m]
        enumFromThenTo   :: a -> a -> a -> [a]   -- [n,n'..m]
    
            -- Minimal complete definition:
            --      toEnum, fromEnum
    --             _______                                      -- ____
    -- NOTE: these default methods only make sense for types    -- **** NB
    --   that map injectively into Int using fromEnum
    --  and toEnum.
        succ             =  toEnum . (+1) . fromEnum
        pred             =  toEnum . (subtract 1) . fromEnum
        enumFrom x       =  map toEnum [fromEnum x ..]
        enumFromTo x y   =  map toEnum [fromEnum x .. fromEnum y]
        enumFromThen x y =  map toEnum [fromEnum x, fromEnum y ..]
        enumFromThenTo x y z = 
                            map toEnum [fromEnum x, fromEnum y .. fromEnum z]
    

    所以每种类型 a 就是 在里面 枚举 必须提供至少 toEnum :: Int -> a fromEnum :: a -> Int .如果它没有提供自己的定义,例如。 enumFromTo :: a -> a -> [a] 然后将使用其默认定义:

    enumFromTo :: a -> a -> [a]
    enumFromTo x  y   =  map  toEnum  [fromEnum x .. fromEnum y ]
    --        └a┘└a┘                           └a┘           └a┘
    --                                 └──Int────┘   └──Int────┘
    --                       └Int->a┘ └─────────[Int]───────────┘
    --                   └───────────────[a]────────────────────┘
    

    还有 Int 类型本身有一个 具体的 定义在库中的某个地方定义,所以 enumFromTo 不用于 智力 因此,不存在恶性循环。

    推荐文章