Clojure OCaml中的螺旋打印

Clojure OCaml中的螺旋打印,clojure,ocaml,Clojure,Ocaml,有一个著名的练习是以螺旋方式打印矩阵(表示为向量的向量),我想用OCaml来做 给定以下矩阵,它应该打印1 2 3 4 5 6 7 8 9 [ [1 2 3] [8 9 4] [7 6 5] ] 优雅的实现将第一个子向量添加到累加器中,并使用旋转后的剩余数字递归调用该函数 旋转后的剩余零件在第一次迭代后如下所示 [ [4 5] [9 6] [8 7] ] 在Clojure中,我执行以下操作来旋转向量: (reverse (apply map vector [[8 9

有一个著名的练习是以螺旋方式打印矩阵(表示为向量的向量),我想用OCaml来做

给定以下矩阵,它应该打印1 2 3 4 5 6 7 8 9

[ [1 2 3] 
  [8 9 4] 
  [7 6 5] ] 
优雅的实现将第一个子向量添加到累加器中,并使用旋转后的剩余数字递归调用该函数

旋转后的剩余零件在第一次迭代后如下所示

[ [4 5] 
  [9 6] 
  [8 7] ]
在Clojure中,我执行以下操作来旋转向量:

(reverse (apply map vector [[8 9 4] [7 6 5]]))
([4 5] [9 6] [8 7])

我想知道OCaml中是否有类似的东西。我找到了List.map,但不确定其他的。我应该实现从每个子向量读取最后一个元素的功能吗?

下面是旋转函数的一个可能实现:

let rotate ll =
    let cons x y = x :: y in
    let init = List.map (fun _ -> []) (List.hd ll) in
    let rres = List.fold_right (List.map2 cons) ll init in
    List.rev rres
以下是一个示例会话:

$ ocaml
        OCaml version 4.01.0

# #use "rot.ml";;
val rotate : 'a list list -> 'a list list = <fun>
# rotate [[8; 9; 4]; [7; 6; 5]];;
- : int list list = [[4; 5]; [9; 6]; [8; 7]]
$ocaml
OCaml版本4.01.0
##使用“rot.ml”;;
val rotate:'列表->'列表=
#旋转[8;9;4];[7;6;5];;
-:int list=[4;5];[9;6];[8;7]]

以下是旋转功能的可能实现:

let rotate ll =
    let cons x y = x :: y in
    let init = List.map (fun _ -> []) (List.hd ll) in
    let rres = List.fold_right (List.map2 cons) ll init in
    List.rev rres
以下是一个示例会话:

$ ocaml
        OCaml version 4.01.0

# #use "rot.ml";;
val rotate : 'a list list -> 'a list list = <fun>
# rotate [[8; 9; 4]; [7; 6; 5]];;
- : int list list = [[4; 5]; [9; 6]; [8; 7]]
$ocaml
OCaml版本4.01.0
##使用“rot.ml”;;
val rotate:'列表->'列表=
#旋转[8;9;4];[7;6;5];;
-:int list=[4;5];[9;6];[8;7]]

谢谢!就是这个,谢谢!就是这样。