我定义了这样的高阶函数:
val func : int -> string -> unit
我想以两种方式使用此功能:
other_func (func 5)
some_other_func (fun x -> func x "abc")
即,通过使用已定义的参数之一创建函数。但是,第二种用法比第一种用法更简洁和可读。是否有更可读的方法来传递第二个参数来创建另一个函数?
答案 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 = ()
#