定义一个F#函数AppendManually list1 list2
,它接受两个列表并将它们连接起来
一。我不允许在列表中使用标准的F#方法(例如:@)!
例如:
AppendManually [1; 3; 5] [7]
应该返回
int list = [1; 3; 5; 7]
答案 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
,它接受两个列表,并将从头到尾遍历第二个列表,将所有元素添加到第一个列表中名单。第二个列表为空后,第一个列表以相反的顺序包含所有元素。
然后按如下方式使用此函数:以相反的顺序将第一个列表的元素添加到空列表中;以与第一次调用的结果相反的顺序排列第二个列表的元素;最后,将相反的结果再次添加到空列表中。