相关疑难解决方法(0)

使用默认值而不是丢弃值来压缩?

我正在寻找haskell中的函数来压缩两个长度可能不同的列表.
我可以找到的所有zip函数只删除比另一个更长的列表的所有值.

例如:在我的练习中,我有两个示例列表.
如果第一个比第二个短,我必须用0填充.否则我必须使用1.
我不允许使用任何递归.我只需要使用更高阶的函数.

我可以使用任何功能吗?
到目前为止,我真的找不到任何解决方案.

haskell functional-programming list higher-order-functions

15
推荐指数
4
解决办法
3221
查看次数

Monoidal Functor是适用的,但是Applicative定义中的Monoid类型类是什么?

适用于Monoidal Functor:

mappend :: f         -> f   -> f
$       ::  (a -> b) ->   a ->   b
<*>     :: f(a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

但是我没有在应用类型类的定义中看到有关Monoid的任何参考,你能告诉我为什么吗?

定义:

class Functor f => Applicative (f :: * -> *) where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b
  GHC.Base.liftA2 :: (a -> b -> c) -> f a -> f b -> f c
  (*>) :: f a …
Run Code Online (Sandbox Code Playgroud)

haskell applicative

12
推荐指数
3
解决办法
855
查看次数

为什么ZipList不是列表的默认应用实例

我目前正在Haskell学习Applicatives.如果我没有错,则列表有两个不同的Applicative实例(ListZipList- 第二个被定义为包装List值的newtype).该ZipList应用性情况下,似乎对我来说更直观.

这可能是一个愚蠢的问题,但是有一个特定的原因ZipList不是列表的默认应用实例.

pure (+) <*> [1,2,3] <*> [4,5,6]
-- [5,6,7,6,7,8,7,8,9]

pure (+) <*> ZipList [1,2,3] <*> ZipList [4,5,6]
-- ZipList [5,7,9]
Run Code Online (Sandbox Code Playgroud)

是因为Applicative List的分布式版本也恰好有Monad实例吗?

haskell applicative

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