gpt4 book ai didi

haskell - F# 中的 ReplicateM 等效项

转载 作者:行者123 更新时间:2023-12-02 18:39:25 29 4
gpt4 key购买 nike

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#+ 中找到它它是为 ListSeq 定义的:

#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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com