f base と arg に正確に何を入れる必要があるかなど、bigAdd について助けが必要です。大きな追加は、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)
引数が本来あるべきものであると確信していますが、ベースはおそらく間違っており、f の書き方がわかりません。リストの追加部分は、このスケルトンのどこから来るのでしょうか? 最初にリスト内のそれぞれを int に変換してから、それらを追加して int リストに戻すか、直接追加しますか。
f、base、およびargsの型と、それらの関数がどうあるべきかを誰かが私に説明できますか? 私は困惑している。