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

时间:2014-04-22 19:08:13

标签: functional-programming ocaml readability higher-order-functions

我定义了这样的高阶函数:

val func : int -> string -> unit

我想以两种方式使用此功能:

other_func (func 5)
some_other_func (fun x -> func x "abc")

即,通过使用已定义的参数之一创建函数。但是,第二种用法比第一种用法更简洁和可读。是否有更可读的方法来传递第二个参数来创建另一个函数?

2 个答案:

答案 0 :(得分:7)

在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电池中定义为BatPervasives.flip。 (换句话说,每个人都同意这是一个有用的功能。)

答案 1 :(得分: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 = ()
#