F#使用递归逐个打印列表中的所有元素

时间:2018-06-10 10:10:33

标签: f#

想象一下,我有一个函数printList,它将列表作为一个参数,并在一个新行中逐个打印列表中的所有元素,然后列表中的位置,同时在它们之间有空格。

E.G

1: 4
2: 9
3: 12

如何在没有任何内置功能的情况下使用递归在F#中实现此功能?

我认为它可能看起来像这样,但我对int, unit类型有问题。

let rec printList l = function
    match l with
    | [] -> 0
    | head::tail -> // something

1 个答案:

答案 0 :(得分:3)

我可以给你两个建议,以便你可以实现printList功能:

  • 您必须使printList成为非递归函数并定义本地递归辅助函数,以便跟踪值的索引。
  • match表达式的所有分支必须返回相同的类型,此处您需要的是unit type

如果您仍然遇到困难,我会提供以下解决方案。

解决方案

let printList list =
  let rec helper index list =
    match list with
    | [] -> ()
    | head :: tail ->
      printfn "%d: %A" index head
      helper (index + 1) tail

  helper 1 list