我目前正在学习 Ocaml,即使我可以创建一个没有空格的列表,如 ['1';'2';'3';'4';'5';'6'],我也无法创建子列表。我找不到我的问题的任何来源,所以也感谢您的解释。
type chiffre = int (*0-9*);;
type chiffreCar = char (* '0' - '9'*)
type nombre = chiffre list;;
type txtnb = chiffreCar list ;;
let rec les_nb (a:txtnb) : txtnb =
match a with
| [] -> []
| ' ' :: tl -> les_nb(tl)
| hd::tl ->hd :: les_nb(tl) ;;
我们可以使用左折叠来迭代列表并将其分组,让我们有机会轻松跟踪添加到输出列表中的最后一个项目。
这将向后构建结果列表,我们将得到一些空格重复的空列表,但我们可以轻松反转这些列表并过滤掉空列表。
# let lst = ['1'; '2'; '3'; ' '; ' '; '4'; '5'; ' '; '6'];;
val lst : char list = ['1'; '2'; '3'; ' '; ' '; '4'; '5'; ' '; '6']
# let rec group lst =
lst
|> List.fold_left
(fun i x ->
match i, x with
| [], ' ' -> i
| _, ' ' -> [] :: i
| [], _ -> [[x]]
| y::ys, _ -> (x :: y) :: ys)
[]
|> List.filter @@ (<>) []
|> List.rev
|> List.map List.rev;;
val group : char list -> char list list = <fun>
# group lst;;
- : char list list = [['1'; '2'; '3']; ['4'; '5']; ['6']]