Functional programming 在append函数下面会发生什么?
我在OCaml中得到了一个Functional programming 在append函数下面会发生什么?,functional-programming,ocaml,ml,Functional Programming,Ocaml,Ml,我在OCaml中得到了一个append函数的实现,但对我来说似乎很困惑 let rec append = function | [] -> fun y -> y | h :: t -> fun y -> h :: (append t y) 在这种情况下,fun y的用途是什么?如果您不喜欢fun,可以这样重写函数 let rec append x y = match x with | [] -> y | h :: t -> h :: append t y
append
函数的实现,但对我来说似乎很困惑
let rec append = function
| [] -> fun y -> y
| h :: t -> fun y -> h :: (append t y)
在这种情况下,
fun y
的用途是什么?如果您不喜欢fun
,可以这样重写函数
let rec append x y = match x with
| [] -> y
| h :: t -> h :: append t y
append
的类型是'a list->'a list->'a list
。您可以将其视为一个函数,它接受两个列表并返回一个列表。但是(正如OCaml中惯用的那样)该函数是使用定义的。因此,在基本级别,append
获取第一个列表,并返回类型为“列表->”的函数。返回的函数获取第二个列表,并将第一个列表作为前缀(返回结果)
值funy->y
是当第一个列表为空时append
返回的函数。如果你仔细想想,这是有道理的。如果第一个列表为空,则第二个列表将原封不动地返回。换句话说,返回的函数与标识函数(专门用于应用于列表)没有任何区别
第二种情况返回值funy->h::(append t y)
。这是相似的,但有点复杂。返回的函数需要进行一些实际的追加。它通过(递归地)将提供的第二个列表(y
)附加到第一个列表的尾部(t
),然后将第一个列表的头(h
)添加到该列表的前面来实现