OCaml:应用第二个参数(高阶函数)

3

我定义了一个高阶函数,代码如下:

val func : int -> string -> unit

我希望能以两种方式使用这个功能:
other_func (func 5)
some_other_func (fun x -> func x "abc")

即,通过定义一个参数来创建函数。然而,第二种用法不如第一种简洁和易读。是否有更易读的方法将第二个参数传递给另一个函数?


2
other_funcsome_other_func是高阶函数(它们操作其他函数),而不是func - Martin Jambon
2个回答

8
在Haskell中,有一个名为flip的函数可以解决这个问题。你可以自定义它:
let flip f x y = f y x

那么你可以说:

other_func (func 5)
third_func (flip func "abc")

Flip在Jane Street Core中定义为Fn.flip。在OCaml Batteries Included中定义为BatPervasives.flip。(换句话说,每个人都认为这是一个有用的函数。)


0
标题中提出的问题“更改参数顺序”已经得到回答。但是我将您的描述理解为“如何编写一个固定第二个参数的新函数”。因此,我将使用ocaml toplevel协议回答这个简单的问题:
# let func i s = if i < 1 then print_endline "Counter error."
    else for ix = 1 to i do print_endline s done;;
val func : int -> string -> unit = <fun>
# func 3 "hi";;
hi
hi
hi
- : unit = ()
# let f1 n = func n "curried second param";;
val f1 : int -> unit = <fun>
# f1 4;;
curried second param
curried second param
curried second param
curried second param
- : unit = ()
# 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接