作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
F# 中的 ReplicateM
(Haskell
)是否有等效函数?
示例:
replicateM 2 [1,2,3] =
[[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
最佳答案
您可以在 F#+ 中找到它它是为 List
和 Seq
定义的:
#r @"c:\packages\FSharpPlus-1.0.0\lib\net45\FSharpPlus.dll"
open FSharpPlus
List.replicateM 2 [1;2;3]
// val it : List<int list> =
// [[1; 1]; [1; 2]; [1; 3]; [2; 1]; [2; 2]; [2; 3]; [3; 1]; [3; 2]; [3; 3]]
Seq.replicateM 2 [1;2;3]
// val it : seq<int> list =
// [seq [1; 1]; seq [1; 2]; seq [1; 3]; seq [2; 1]; seq [2; 2]; seq [2; 3];
// seq [3; 1]; seq [3; 2]; seq [3; 3]]
如果您从 Haskell 进行翻译,this project 中有一个 Compatibility.Haskell 模块与该函数和其他 Haskell 绑定(bind)。
事实上,最后一个参数可以是列表或任何其他 Applicative,但如果您不想使用该库并且对仅适用于 list
的版本感到满意,您可以定义像这样:
let replicateM n x =
let k m m' = List.collect (fun x ->
List.collect(fun xs ->
[List.Cons(x,xs)]) m') m
List.foldBack k (List.replicate n x) [[]]
关于haskell - F# 中的 ReplicateM 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23657901/
我正在尝试创建一个允许用户输入字符串列表的函数。该函数获取长度并允许用户再输入 length-1 行。然后检查每条线以确保其与原始线的长度相同。但是,我遇到了一些问题,并且找不到解决方案。 问题是我可
F# 中的 ReplicateM(Haskell)是否有等效函数? 示例: replicateM 2 [1,2,3] = [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3
我正在尝试学习如何在 Scala 中编写单子(monad)代码,但我想念 Haskell 将类型限制为属于声明函数类型的类型类的能力。 例如,我正在尝试在 Scala 中从 Control.Monad
我为一个编程问题提交的两份报告仅在一个表达式上有所不同(其中 anchors 是一个非空列表,(getIntegrals n) 是一个状态单子(monad)): Submission 1 . repl
我是一名优秀的程序员,十分优秀!