微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

..在哪里定义?

如何解决..在哪里定义?

我只是想知道..是否实际上已在Haskell代码中的任何地方定义,例如在the Prelude中? enumFromTo是同一件事吗?我不知道这是什么定义?

enumFromTo x y  =  map toEnum [fromEnum x .. fromEnum y]

[ e1 .. e3 ]  =  enumFromTo e1 e3

解决方法

这是报表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中的每个Enum类型必须至少提供toEnum :: Int -> afromEnum :: 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类型本身,在库中的某个地方定义了 specific 定义,因此enumFromTo的默认定义不用于Int ,因此没有恶性循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。