ReplicateM
(Haskell
)에 해당하는 함수가 F#
에 있습니까?F에 해당하는 ReplicateM
예 :
replicateM 2 [1,2,3] =
[[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
ReplicateM
(Haskell
)에 해당하는 함수가 F#
에 있습니까?F에 해당하는 ReplicateM
예 :
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\FsControl.2.0.0-CI00073\lib\net40\FsControl.dll"
#r @"C:\packages\FSharpPlus.1.0.0-CI00015\lib\net40\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]]
Compatibility.Haskell 모듈이있다 그 함수와 다른 Haskell 바인딩들. 마지막 인수는 목록 또는 할 수있다 사실
다른 실용적 라이브러리를 사용하지 않고 당신이 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) [[]]
이 기능은 표준 라이브러리에서 사용할 수 없으므로 외부 라이브러리를 사용하지 않으려면 직접 작성해야합니다. 가장 쉬운 구현은 다음과 같습니다.
let rec replicateM m l = seq {
if m = 1 then
// If we want just one replication, generate singleton lists
for v in l do yield [v]
else
// Otherwise, iterate over all lists with m-1 replicates
for s in replicateM (m - 1) l do
// .. and append elements from 'l' to the front
for v in l do yield v::s }
문제는 replicateM을 사용하여 얻은 시퀀스에서 find 연산자를 사용하는 것입니다. 하지만 찾을 것입니다 (== m) 시퀀스에 정의되지 않은 것 같습니다. 목록을 반환하는 F #에서 replicateM의 다른 구현이 있습니까. –
작동했습니다. replicateM '(n : int) source = Seq.toList (replicateM n source) –