这个OCAML函数有什么问题?

这个OCAML函数有什么问题?,ocaml,reverse,cons,Ocaml,Reverse,Cons,这是我的原始代码 let rec reverse l = match l with | [] -> [] | (h::t) -> (reverse t) :: h cons:运算符将元素作为左参数,将列表作为右参数。在这里,你做的是相反的,这是行不通的 在列表末尾的元素处添加元素的正确方法是使用列表连接: let rec reverse l = match l with | [] -> [] | h :: t -> (reverse t)

这是我的原始代码

let rec reverse l =
   match l with 
   | [] -> []
   | (h::t) -> (reverse t) :: h

cons
运算符将元素作为左参数,将列表作为右参数。在这里,你做的是相反的,这是行不通的

在列表末尾的元素处添加元素的正确方法是使用列表连接:

let rec reverse l =
  match l with
  | [] -> []
  | h :: t -> (reverse t) @ [h]

不过,该代码并不是最优的,您可能希望这样做。

cons
操作符将元素作为左参数,将列表作为右参数。在这里,你做的是相反的,这是行不通的

在列表末尾的元素处添加元素的正确方法是使用列表连接:

let rec reverse l =
  match l with
  | [] -> []
  | h :: t -> (reverse t) @ [h]

不过,该代码并不是最优的,您可能希望这样做。

cons
操作符将元素作为左参数,将列表作为右参数。在这里,你做的是相反的,这是行不通的

在列表末尾的元素处添加元素的正确方法是使用列表连接:

let rec reverse l =
  match l with
  | [] -> []
  | h :: t -> (reverse t) @ [h]

不过,该代码并不是最优的,您可能希望这样做。

cons
操作符将元素作为左参数,将列表作为右参数。在这里,你做的是相反的,这是行不通的

在列表末尾的元素处添加元素的正确方法是使用列表连接:

let rec reverse l =
  match l with
  | [] -> []
  | h :: t -> (reverse t) @ [h]

不过,该代码并不是最优的,您可能希望实现它。

如何实现该函数的尾部递归?我还没有真正理解尾部递归的概念,因为我刚刚开始使用OcamlWell,尾部递归的思想是,函数的递归调用将始终是函数执行的“最后”操作。用C语言来说,对函数的调用总是以
returnmyfun()
的形式进行。这里,函数的最后一个调用是
@
。尾部递归通常是通过向函数添加一个“累加器”参数来允许的,该参数将存储中间结果并由终端案例返回(这里的终端案例是
[]
)。您可以查找以下问题:对于所建议的
反向
函数,不进行尾部递归并不是最严重的问题。它的主要问题是其论点的二次复杂性。尾部递归版本是线性的。如何使这个函数尾部递归?我还没有真正理解尾部递归的概念,因为我刚刚开始使用OcamlWell,尾部递归的思想是,函数的递归调用将始终是函数执行的“最后”操作。用C语言来说,对函数的调用总是以
returnmyfun()
的形式进行。这里,函数的最后一个调用是
@
。尾部递归通常是通过向函数添加一个“累加器”参数来允许的,该参数将存储中间结果并由终端案例返回(这里的终端案例是
[]
)。您可以查找以下问题:对于所建议的
反向
函数,不进行尾部递归并不是最严重的问题。它的主要问题是其论点的二次复杂性。尾部递归版本是线性的。如何使这个函数尾部递归?我还没有真正理解尾部递归的概念,因为我刚刚开始使用OcamlWell,尾部递归的思想是,函数的递归调用将始终是函数执行的“最后”操作。用C语言来说,对函数的调用总是以
returnmyfun()
的形式进行。这里,函数的最后一个调用是
@
。尾部递归通常是通过向函数添加一个“累加器”参数来允许的,该参数将存储中间结果并由终端案例返回(这里的终端案例是
[]
)。您可以查找以下问题:对于所建议的
反向
函数,不进行尾部递归并不是最严重的问题。它的主要问题是其论点的二次复杂性。尾部递归版本是线性的。如何使这个函数尾部递归?我还没有真正理解尾部递归的概念,因为我刚刚开始使用OcamlWell,尾部递归的思想是,函数的递归调用将始终是函数执行的“最后”操作。用C语言来说,对函数的调用总是以
returnmyfun()
的形式进行。这里,函数的最后一个调用是
@
。尾部递归通常是通过向函数添加一个“累加器”参数来允许的,该参数将存储中间结果并由终端案例返回(这里的终端案例是
[]
)。您可以查找以下问题:对于所建议的
反向
函数,不进行尾部递归并不是最严重的问题。它的主要问题是其论点的二次复杂性。尾部递归版本是线性的。