在F#中递归追加列表

时间:2017-09-20 05:45:28

标签: list f# append

定义一个F#函数AppendManually list1 list2,它接受​​两个列表并将它们连接起来 一。我不允许在列表中使用标准的F#方法(例如:@)! 例如:

 AppendManually [1; 3; 5] [7]

应该返回

  

int list = [1; 3; 5; 7]

3 个答案:

答案 0 :(得分:1)

我相信List.append会很方便。如果您不想使用它,您可以随时将一个列表折叠到另一个列表上,单独添加元素。

let a =[1; 3; 5]
let b =[7]
b |> List.foldBack (fun e acc->  e :: acc) a

答案 1 :(得分:1)

我把它整理出来了:

{{1}}

答案 2 :(得分:1)

典型的学习者问题,我想......让我们创建一个典型的学习者答案,而不是使用任何库函数:

let AppendManually l1 l2 =
    let rec rev acc = function
        | [] -> acc
        | x :: xs -> rev (x :: acc) xs
    rev [] (rev (rev [] l1) l2)

它是如何工作的?由于我们不能附加到列表的末尾,只是在前面开始,我们创建一个辅助函数rev,它接受​​两个列表,并将从头到尾遍历第二个列表,将所有元素添加到第一个列表中名单。第二个列表为空后,第一个列表以相反的顺序包含所有元素。

然后按如下方式使用此函数:以相反的顺序将第一个列表的元素添加到空列表中;以与第一次调用的结果相反的顺序排列第二个列表的元素;最后,将相反的结果再次添加到空列表中。