构造一个 N*N 元素的子列表列表
Consctruct a list of sublists of N*N elements
我正在尝试仅使用 List.map、List.filters 和 匿名函数[=27] 在 ocaml 中构建列表=]
我想得到的是:
- : int list list = [[2; 2]; [5; 5; 5; 5; 5]; [7; 7; 7; 7; 7; 7; 7]; [3; 3; 3];
2
[12; 12; 12; 12; 12; 12; 12; 12; 12; 12; 12; 12]; [4; 4; 4; 4]; ... ]
来自这个列表
let entiers = [2; 5; 7; 3; 12; 4; 9; 2; 11];;
到目前为止我尝试过的:
List.map (fun n acc -> acc = n if acc = 0 then [] else n :: fun n acc -1 ) entiers;;
但是我遇到语法错误,所以有点卡住了...
有人可以帮我解决这个问题吗?
谢谢!
正如@ChristopheRiolo 评论的那样,您似乎在尝试定义一个递归的匿名函数。这非常困难,因为您确实需要函数的名称才能递归调用自身。
特别是,它看起来像这个片段:
fun n (acc - 1)
旨在作为递归调用。但是,这根本不是函数调用,而是新(内部)匿名函数定义的开始。 (这是语法错误的来源,因为它不是有效的 lambda 定义。)
如果您将要映射的函数定义为调用 map
之外的具有名称的函数,效果会更好。
大致是这样的:
let rec helper n =
if n = 0 then [] else n :: helper (n - 1)
in
List.map helper ...
(这个 helper 的定义可能不正确;我只是想展示您可能想要使用的总体布局。)
我正在尝试仅使用 List.map、List.filters 和 匿名函数[=27] 在 ocaml 中构建列表=]
我想得到的是:
- : int list list = [[2; 2]; [5; 5; 5; 5; 5]; [7; 7; 7; 7; 7; 7; 7]; [3; 3; 3];
2
[12; 12; 12; 12; 12; 12; 12; 12; 12; 12; 12; 12]; [4; 4; 4; 4]; ... ]
来自这个列表
let entiers = [2; 5; 7; 3; 12; 4; 9; 2; 11];;
到目前为止我尝试过的:
List.map (fun n acc -> acc = n if acc = 0 then [] else n :: fun n acc -1 ) entiers;;
但是我遇到语法错误,所以有点卡住了...
有人可以帮我解决这个问题吗? 谢谢!
正如@ChristopheRiolo 评论的那样,您似乎在尝试定义一个递归的匿名函数。这非常困难,因为您确实需要函数的名称才能递归调用自身。
特别是,它看起来像这个片段:
fun n (acc - 1)
旨在作为递归调用。但是,这根本不是函数调用,而是新(内部)匿名函数定义的开始。 (这是语法错误的来源,因为它不是有效的 lambda 定义。)
如果您将要映射的函数定义为调用 map
之外的具有名称的函数,效果会更好。
大致是这样的:
let rec helper n =
if n = 0 then [] else n :: helper (n - 1)
in
List.map helper ...
(这个 helper 的定义可能不正确;我只是想展示您可能想要使用的总体布局。)