小编abl*_*din的帖子

如何从冻结集中获取任意元素?

我想从冻结集中获取一个元素(当然,不修改它,因为frozensets是不可变的).到目前为止我找到的最佳解决方案是:

s = frozenset(['a'])
iter(s).next()
Run Code Online (Sandbox Code Playgroud)

按预期返回:

'a'
Run Code Online (Sandbox Code Playgroud)

换句话说,有没有任何方法可以从冻结集中"弹出"一个元素而不实际弹出它?

python iterator set immutability

13
推荐指数
3
解决办法
1万
查看次数

在Haskell树中更改索引

(很抱歉有很长的上下文描述,但我找不到更简单的方法来解释我的问题)请考虑以下类型:

import Data.Array

data UnitDir = Xp | Xm | Yp | Ym | Zp | Zm
    deriving (Show, Eq, Ord, Enum, Bounded, Ix)

type Neighborhood a = Array UnitDir (Tree a)

data Tree a = Empty | Leaf a | Internal a (Neighborhood a)
    deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

显然,Tree可以定义Functor为如下实例:

instance Functor Tree where
    fmap _ Empty           = Empty
    fmap f (Leaf x)        = Leaf (f x)
    fmap f (Internal x ts) = Internal (f x) $ …
Run Code Online (Sandbox Code Playgroud)

haskell functor traversable foldable

2
推荐指数
1
解决办法
150
查看次数

Haskell在`Num`实例上划分

请考虑GHCI的以下摘录:

Prelude> :t sum [1,2,3]
sum [1,2,3] :: Num a => a
Prelude> :t fromIntegral (length [1,2,3])
fromIntegral (length [1,2,3]) :: Num b => b
Prelude> :t sum [1,2,3] / fromIntegral (length [1,2,3])
sum [1,2,3] / fromIntegral (length [1,2,3]) :: Fractional a => a
Run Code Online (Sandbox Code Playgroud)

据我所知,这两个sum [1,2,3]fromIntegral (length [1,2,3])的实例Num.令我困惑的是,为什么编译器将操作数转换为Fractional?我认为数字转换必须在Haskell中显式化.

谢谢!

haskell type-conversion division

1
推荐指数
1
解决办法
207
查看次数