相关疑难解决方法(0)

在Haskell中理解这个矩阵转置函数

这个矩阵转置函数有效,但我试图理解它的逐步执行,我不明白.

    transpose:: [[a]]->[[a]]
    transpose ([]:_) = []
    transpose x = (map head x) : transpose (map tail x)
Run Code Online (Sandbox Code Playgroud)

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

它返回:

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

我不知道连接运算符如何使用map.它是在同一函数调用中连接x的每个头?怎么样?

这是

(map head x)
Run Code Online (Sandbox Code Playgroud)

创建每个列表的头元素列表?

algorithm haskell list

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

如何在F#中编写类似ZipN的函数?

我想创建一个带有签名的函数,该函数seq<#seq<'a>> ->seq<seq<'a>>就像Zip方法一样,采用任意数量的输入序列(而不是Zip2和Zip3中的2或3)并返回序列序列而不是元组作为结果.

也就是说,给出以下输入:

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

它将返回结果:[[1; 4; 7]; [2; 5; 8]; [3; 6; 9]]

除了序列而不是列表.

我对F#很新,但是我已经创建了一个能够满足我想要的功能,但我知道它可以改进.这不是尾递归,似乎它可能更简单,但我不知道如何.我还没有找到一种很好的方式来获得我想要的签名(接受,例如,int list list作为输入)而没有第二个功能.

我知道这可以直接使用枚举器实现,但我有兴趣以功能方式实现它.

这是我的代码:

let private Tail seq = Seq.skip 1 seq
let private HasLengthNoMoreThan n = Seq.skip n >> Seq.isEmpty

let rec ZipN_core = function
    | seqs when seqs |> Seq.isEmpty -> Seq.empty
    | seqs when seqs |> Seq.exists Seq.isEmpty -> Seq.empty
    | seqs ->
        let head = seqs |> Seq.map Seq.head
        let tail = seqs |> Seq.map …
Run Code Online (Sandbox Code Playgroud)

f#

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

F#,实现fold3,fold4,fold_n

我有兴趣实现fold3,fold4等,类似于List.fold和List.fold2.例如

// TESTCASE
let polynomial (x:double) a b c = a*x + b*x*x + c*x*x*x
let A = [2.0; 3.0; 4.0; 5.0]
let B = [1.5; 1.0; 0.5; 0.2]
let C = [0.8; 0.01; 0.001; 0.0001]

let result = fold3 polynomial 0.7 A B C
// 2.0 * (0.7   ) + 1.5 * (0.7   )^2 + 0.8    * (0.7   )^3 -> 2.4094
// 3.0 * (2.4094) + 1.0 * (2.4094)^2 + 0.01   * (2.4094)^3 -> 13.173
// 4.0 * (13.173) …
Run Code Online (Sandbox Code Playgroud)

f#

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

获取列表,其中每个列表将包含来自另一个列表集合的ax位置的元素

基本上有这个:

[
[1;2;3];
[4;5;7];
[8;9;0];
]
Run Code Online (Sandbox Code Playgroud)

我想得到这个(垂直读/转90度):

[
[1;4;8];
[2;5;9];
[3;7;0];
]
Run Code Online (Sandbox Code Playgroud)

有谁知道在f#中这样做的简单方法?

f#

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

标签 统计

f# ×3

algorithm ×1

haskell ×1

list ×1