相关疑难解决方法(0)

将列表拆分为可能的元组列表

我需要将列表拆分为所有可能元组的列表,但我不确定如何这样做.

例如:

pairs ["cat","dog","mouse"]
Run Code Online (Sandbox Code Playgroud)

应该导致:

[("cat","dog"), ("cat","mouse"), ("dog","cat"), ("dog","mouse"), ("mouse","cat"), ("mouse","dog")]

我能够形成前两个,但我不确定如何得到其余的.

这是我到目前为止所拥有的:

pairs :: [a] -> [(a,a)]
pairs (x:xs) = [(m,n) | m <- [x], n <- xs]
Run Code Online (Sandbox Code Playgroud)

haskell tuples list-comprehension

24
推荐指数
3
解决办法
4896
查看次数

共同寻找所有关注网格的方法

{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
import Control.Comonad
import Data.Functor.Reverse
import Data.List (unfoldr)
Run Code Online (Sandbox Code Playgroud)

首先是一些背景(哈哈).我在非空列表上有拉链.

data LZipper a = LZipper (Reverse [] a) a [a]
    deriving (Eq, Ord, Show, Read, Functor, Foldable, Traversable)

mkZipper :: a -> [a] -> LZipper a
mkZipper = LZipper (Reverse [])
Run Code Online (Sandbox Code Playgroud)

你可以沿着拉链向两个方向走,但你可能会掉头.

fwd, bwd :: LZipper a -> Maybe (LZipper a)
fwd (LZipper _ _ []) = Nothing
fwd (LZipper (Reverse xs) e (y:ys)) = Just $ LZipper …
Run Code Online (Sandbox Code Playgroud)

haskell zipper comonad

17
推荐指数
3
解决办法
400
查看次数

如何将一个 comonad 和一个 monad 组合成一个 comonad?

假设我有

  • 共生 D
  • 单子 T
  • 一个l : D T -> T DcomonadD对 monad的分配法则T

我如何定义 comonad D T

monads haskell functional-programming scala comonad

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