小编use*_*349的帖子

按照另一个列表的顺序对一个列表进行排序

我需要按照另一个列表的顺序对一个列表进行排序,但我不知道它是如何完成的.

例如:我可以有一个a类似于的列表:

[C, B, G, E]
Run Code Online (Sandbox Code Playgroud)

和一个列表b(设置顺序):

[A, B, C, D, E, F, G, ...]
Run Code Online (Sandbox Code Playgroud)

(例如,这些不是实际值)

然后,列表a应该以与List相同的方式b排序,从而排序为:

[B, C, E, G]
Run Code Online (Sandbox Code Playgroud)

如何按照另一个列表的顺序进行排序?

sorting haskell

10
推荐指数
2
解决办法
450
查看次数

Haskell monoid可折叠玫瑰树

我需要为Rose树数据结构创建一个可折叠的实例:

data Rose a = a :> [Rose a]
    deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

使用以下monoid和rose相关的类/实例:

instance Functor Rose where
    fmap f (a :> bs) = (f a) :> (map (fmap f) bs)

class Monoid a where
    mempty ::           a
    (<>)   :: a -> a -> a

instance Monoid [a] where
    mempty = []
    (<>)   = (++)
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

instance Foldable Rose where
    fold (a:>b) =  a <> (foldMap fold b)
Run Code Online (Sandbox Code Playgroud)

但是这不能正常工作,对于系统检查我得到错误:

*** Failed! Exception: 'Prelude.undefined': 
[] :> []
Run Code Online (Sandbox Code Playgroud)

但我不确定为什么它不起作用,任何人都可以帮助我吗?

提前致谢!

最诚挚的问候,Skyfe.

haskell class monoids

7
推荐指数
3
解决办法
2280
查看次数

Prolog:没有累加器的谓词最大值

是否有可能在max/2 没有累加器的情况下创建谓词,因此max(List, Max)当且仅当MaxList(整数列表)的最大值时才是真的?

list prolog integer-arithmetic

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

C#正则表达式:匹配单引号之间的所有内容(单引号除外)

如何在单引号之间匹配任何内容?我需要匹配attribute = 'some value'查询的WHERE子句中的所有语句。我试过了:

= '(.+)'
Run Code Online (Sandbox Code Playgroud)

但这是行不通的:以某种方式弄乱了所有单引号和匹配项。

如果有人可以帮助我,将不胜感激!

c# regex pattern-matching

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

获取R中数字序列的所有拆分

我试图[1:n]在REg 中获得序列的所有可能的分裂:

getSplits(0,3)
Run Code Online (Sandbox Code Playgroud)

应该返回序列123的所有可能的分裂,换句话说(在向量列表中):

[1] 1
[2] 1 2
[3] 1 2 3
[4] 1 3
[5] 2
[6] 2 3
[7] 3
Run Code Online (Sandbox Code Playgroud)

现在我已经创建了一个函数,它可以递归地获取这些向量,但是无法将它们组合成一个如上所述.我的功能是:

getSplits <- function(currentDigit, lastDigit, split) {
  splits=list();
  for (nextDigit in currentDigit: lastDigit)
  {
    currentSplit <- c(split, c(nextDigit));
    print(currentSplit);
    if(nextDigit < lastDigit) {
      possibleSplits = c(list(currentSplit), getSplits(nextDigit+1, lastDigit, currentSplit));
    }else{
      possibleSplits = currentSplit;
    }
    splits <- c(splits, list(possibleSplits));
  }
  return(splits);
} 
Run Code Online (Sandbox Code Playgroud)

打印每个currentSplit导致我需要的所有正确向量,但不知何故最终返回列表(拆分)将它们嵌入到更深层次的列表中,返回:

[1] 1

[[1]][[2]]
[[1]][[2]][[1]]
[1] 1 2

[[1]][[2]][[2]]
[1] 1 2 3


[[1]][[3]] …
Run Code Online (Sandbox Code Playgroud)

recursion r list vector sequence

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

Haskell点运算符:它究竟有什么区别?

我对Haskell点运算符的问题感到困惑.我读到的是它基本上创建了一个由另外两个函数组成的新函数.例如:

f(g x) = f . g
Run Code Online (Sandbox Code Playgroud)

(省略参数)

但是,如果我只是忽略了这个点,会有什么不同?喜欢:

f . g =? f g
Run Code Online (Sandbox Code Playgroud)

因为在两种情况下g都将应用于传递给它的参数,然后f将应用于该结果.

所以我没有看到这两者之间的区别,但是可能存在差异,或者当它更复杂时会有一个差异?但我现在没有看到它,所以如果有人能帮我解决这个问题,我将不胜感激!

最好的问候,Skyfe.

haskell functional-programming operators

3
推荐指数
2
解决办法
278
查看次数

Haskell:使用monad类

作为一项任务,我需要与Haskell中的monad一起工作并创建一个赌博游戏,其中有一个简单的规则:投掷6个硬币,计算头部,掷骰子,如果其结果等于或大于计算的头数,则获胜,否则你输了.我获得了以下定义赌博Monad的"框架":

data Coin = H | T
    deriving (Bounded, Eq, Enum, Ord, Show)

data Dice = D1 | D2 | D3 | D4 | D5 | D6
    deriving (Bounded, Eq, Enum, Ord, Show)

data Outcome = Win | Lose
    deriving (Eq, Ord, Show)

class Monad m => MonadGamble m where
    toss :: m Coin
    roll :: m Dice

game :: MonadGamble m => m Outcome
game = undefined
Run Code Online (Sandbox Code Playgroud)

但是我还是Monads的新手,我不知道如何使用它们.例如:游戏定义应该实现我上面解释的游戏,但是我应该如何处理这个Gambling Monad,例如,执行一个或多个抛掷/滚动并获得结果值,以便我可以使用/使用它们吗?

另外根据我的理解,Monad总是有2个默认函数:return和(>> =),但我不知道这将如何适用于MonadGable monad?

如果有人可以帮助我,我非常感谢!

最好的问候,Skyfe.

monads haskell class

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

Haskell链函数基于不同的条件

当链接函数应用于一个参数时,是否有一种有效/简单的方法,只应用满足其要求的函数才能应用?例如:

我有1个参数'Obj'和3个函数:func1,func2,func3.每个都有自己的要求,需要满足这些要求,以便将函数应用于参数.例如伪代码:

(if condition1 then func1) . (if condition2 then func2) . (if condition3 then func3) Obj
Run Code Online (Sandbox Code Playgroud)

因此,如果所有条件都合格,则所有3个函数都将应用于Obj.

有什么方法可以做到这一点吗?

haskell function chain

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

输入'|'上的Haskell解析错误

我收到以下错误:

输入'|'解析错误

用我的代码:

makeMove :: Player -> Board -> Maybe Board
makeMove p b | hasWinner b == Nothing = getMove p rb ri
                                        where rb = gameTree p b
                                              ri = minimax p rb
                                              ros2int (i' :> ri') = i'
                                              rb2b (b':rbs') = b
                                              getMove p (r:rs) (i:is) = let bs  = map rb2b rs
                                                                            is  = map ros2int is
                                                                            idx = elemIndex (maximum' is) is
                                                                            res (Nothing) = Nothing
                                                                            res (Just x) = Just ((bs)!!x)
                                                                        in res idx …
Run Code Online (Sandbox Code Playgroud)

error-handling conditional haskell

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

哈斯克尔:(也许)monad建筑

我目前正在努力研究Haskell的新元素:Monads.因此,我通过一个创建>> =运算符的例子介绍了这个例子,该运算符只在不等于Nothing的情况下执行可能类型的函数(将其实际的整数值作为参数),否则返回Nothing:

(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b
Nothing >>= _ = Nothing
(Just x) >>= f = f x
Run Code Online (Sandbox Code Playgroud)

但是,我不太确定它如何与以下用法一起使用:

eval (Val n) = Just n
eval (Div x y) = eval x >>= (\n ->
    eval y >>= (\m ->
        safediv n m))
Run Code Online (Sandbox Code Playgroud)

在我看来,(>> =)运算符只需要一个Maybe值和一个返回一个的函数,但是在这个例子中,使用代码看起来好像是一个可能值的2倍和一个函数.然而我被告知它评估x,将结果放入n,然后计算y,将结果放入y,然后在两者上执行safediv函数.虽然我没有看到(>> =)运算符在这里扮演什么角色; 这是如何运作的?

如果有人能帮我解决这个问题,我将不胜感激.

提前致谢!

最好的问候,Skyfe.

monads haskell maybe

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