【发布时间】:2019-04-08 16:34:05
【问题描述】:
我需要在 OCaml 中编写一个函数,在两个不同的递归中添加两个列表的元素:简单和尾。我做了一个简单的:
let rec add1 a b =
match (a, b) with
([], []) -> []
| (head1::tail1, []) -> head1 :: add1 tail1 []
| ([], head2::tail2) -> head2 :: add1 [] tail2
| (head1::tail1, head2::tail2) -> head1 + head2 :: add1 tail1 tail2
;;
它的工作原理是这样的:
add1 [1;2;3] [4;5;6;7];;
这个回报:
int list = [5; 7; 9; 7]
[1+4; 2+5; 3+6; 0+7] : 0 添加到 7 因为在第一个列表中该位置没有元素。
所以,我的问题是:
如何使用尾递归实现它?
【问题讨论】:
-
你必须处理两个列表长度不同的情况吗?
-
是的,我需要,在我的第一个函数中,如果在其中一个列表中的相似位置上没有元素,我必须添加 0
标签: function functional-programming ocaml