List 在ocaml中构建INT列表
我想写一个函数,在两个整数(包括两个整数)之间建立一个列表 rec myFunc x y将构建一个包含x和y之间的所有整数的列表,包括x和y 就目前的逻辑而言,我有如下内容:List 在ocaml中构建INT列表,list,ocaml,int,List,Ocaml,Int,我想写一个函数,在两个整数(包括两个整数)之间建立一个列表 rec myFunc x y将构建一个包含x和y之间的所有整数的列表,包括x和y 就目前的逻辑而言,我有如下内容: let rec buildList i n = let x = i+1 in if i <= n then i::(buildList x n) let iota n m = let oper = if n < m then succ else pred in let rec f1 n m
let rec buildList i n = let x = i+1 in if i <= n then i::(buildList x n)
let iota n m =
let oper = if n < m then succ else pred in
let rec f1 n m = if n = m then [n] else n :: f1 (oper n) m in
f1 n m
let rec buildList i n=let x=i+1 in如果i条件为真,则返回列表i::(buildList x n)
。如果这不是真的,你会回报什么
将else[]
添加到函数中,以在不满足条件时返回空列表。
当您没有任何else
时,编译器假定它是else()
(因此出现错误消息)。如果缺少else
条件,则您的
我建议您使用尾部递归函数:
let buildList x y =
let (x,y) = if x<y then (x,y) else (y,x) in
let rec aux cpt acc =
if cpt < x then acc
else aux (cpt-1) (cpt::acc)
in aux y []
让buildList x y=
让(x,y)=如果x我的建议,这尊重参数的顺序
let rec iota n m =
let oper = if n < m then succ else pred in
if n = m then [n] else n :: iota (oper n) m
Todo:尾部递归依赖电池组的两个备选方案
使用“展开”,其目的是构建列表
let range ~from:f ~until:u =
BatList.unfold f (function | n when n <= u -> Some (n, succ n) | _ -> None)
哇,我完全忽略了这一点。谢谢
let range ~from:f ~until:u =
BatList.unfold f (function | n when n <= u -> Some (n, succ n) | _ -> None)
# BatList.of_enum @@ BatEnum.(1--9);;
- : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]
let buildList i n =
let rec aux acc i =
if i <= n then
aux (i::acc) (i+1)
else (List.rev acc)
in
aux [] i
# buildList 1 3;;
- : int list = [1; 2; 3]
# buildList 2 1;;
- : int list = []
# buildList 0 250000;;
- : int list =
[0; 1; 2; 3; .... 296; 297; 298; ...]