我需要有关 bigAdd 的帮助,比如我应该为 f 基数和 arg 输入什么。Big add 应该接受 2 个 int 数组并将总和输出到另一个 int 数组中,例如
# bigAdd [9;9] [1;0;0;2];;
- : int list = [1;1;0;1]
# bigAdd [9;9;9;9] [9;9;9];;
- : int list = [1;0;9;9;8]
我到目前为止
let rec padZero l1 l2 =
if List.length l1 > List.length l2 then (padZero l1 ([0]@l2))
else if List.length l2 > List.length l1 then (padZero ([0]@l1) l2)
else (l1, l2)
let rec removeZero l = match l with
|[]->
|h::t-> if h == 0 then removeZero t else l
let bigAdd l1 l2 =
let add (l1, l2) =
let f a x = failwith "to be implemented" in
let base = failwith "to be implemented" in
let args = failwith "to be implemented" in
let (_, res) = List.fold_left f base args in
res
in
removeZero (add (padZero l1 l2))
编辑:所以现在我有
let bigAdd l1 l2 =
let add (l1, l2) =
let f a x = failwith "to be implemented" in
let base = 0 in
let args = List.combine l1 l2 in
let (_, res) = List.fold_left f base args in
res
in
removeZero (add (padZero l1 l2)
我很确定 args 是它应该是的,但基数可能是错误的,我不知道如何写 f. 在这个骨架中,列表的添加部分究竟来自哪里?我是否首先将列表中的每个转换为 int,然后添加它们并将其转换回 int 列表或直接添加它们,如果是,如何以及在骨架中的位置。
有人可以向我描述 f、base 和 args 的类型以及它们的功能应该是什么吗?我很混乱。