标签: foldable

如何在Haskell中折叠状态?

我有一个简单的函数(实际上用于项目Euler的一些问题).它将数字列表转换为十进制数.

fromDigits :: [Int] -> Integer
fromDigits [x] = toInteger x
fromDigits (x:xs) = (toInteger x) * 10 ^ length xs + fromDigits xs
Run Code Online (Sandbox Code Playgroud)

我意识到这种类型[Int]并不理想.fromDigits应该能够采取其他输入,如序列,甚至可能foldables......

我的第一个想法是用"折叠状态"替换上面的代码.上述函数的正确(=最小)Haskell类别是什么?

haskell list fold traversable foldable

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

如果可以使用Foldable定义map,为什么在Foldable的定义中没有提到Functor

我读过,map可以定义使用foldr,即它是一个原始的递归函数.至少对于名单.

现在我的问题:为什么Functor不是可折叠的子类型?如果fmap只能根据foldr列表来定义,那么它们的特殊性是什么?

查看mapfoldr 的定义:

myMap f xs = foldr step [] xs
    where step x ys = f x : ys
Run Code Online (Sandbox Code Playgroud)

我可以使用Monoids来:

myMap f xs = foldr step mempty xs
    where step x ys = f x : ys
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,我对Haskell魔术师来说还远远不够cons.

haskell functor foldable

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

对于可折叠设备

forflip traverse

forMflip mapM

依此类推for_,等等。

关于什么foldMap?很孤独。

flip foldMap = ?

haskell functional-programming foldable

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

文件夹和文件夹可以相互定义吗?

可以foldrfoldl 彼此定义吗?

赫顿在Haskell编程说

我们需要手动定义什么?Foldable 该类实例的最小完整定义 是定义 foldMapfoldr,因为可以使用默认定义和列表实例从这两个函数之一派生该类中的所有其他函数。

那么如何foldl 定义foldr呢?

可以foldr根据进行定义foldl,以便我们可以Foldable通过定义类型来定义类型foldl

为什么在Foldablefold在来定义foldMap这方面的定义foldr,而在列表可折叠,一些专业化fold来讲被定义foldl为:

maximum :: Ord a => [a] -> a
maximum = foldl max

minimum :: Ord a => [a] -> a
minimum = foldl min

sum :: Num a => [a] -> a
sum = foldl (+) 0

product :: …
Run Code Online (Sandbox Code Playgroud)

haskell fold foldable

-6
推荐指数
1
解决办法
299
查看次数