OCaml:列表映射具有2个输入的函数

OCaml:列表映射具有2个输入的函数,ocaml,Ocaml,我有一个函数sqrt,它接受两个浮点值,公差和数字,并给出指定公差内数字的平方根。我用近似法来做 let rec sqrt_rec approx tol number = ..................;; let sqrt tol x = sqrt_rec (x/.2.0) tol x;; 我有另一个函数映射,它接受一个函数和一个列表,并将函数应用于列表的所有元素 let rec map f l = match l with [] -> [] | h::t -> f h:

我有一个函数sqrt,它接受两个浮点值,公差和数字,并给出指定公差内数字的平方根。我用近似法来做

let rec sqrt_rec approx tol number =
..................;;
let sqrt tol x = sqrt_rec (x/.2.0) tol x;;
我有另一个函数映射,它接受一个函数和一个列表,并将函数应用于列表的所有元素

let rec map f l = 
match l with
[] -> []
| h::t -> f h::map f t;;
现在我尝试创建另一个函数all_sqrt,它基本上接受1个浮点值,1个浮点列表,并将函数sqrt映射到所有元素

let all_sqrt tol_value ip_list = List.map sqrt tol_value ip_list;;
这显然给了我错误。我试着把tol_值也做成一个列表,但它仍然会抛出错误。 错误:此函数应用于太多参数; 也许你忘了一个“;”


我认为我做的映射是错误的。

模块的
列表包含

val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
它是这样使用的:

let all_sqrt tol_value ip_list = List.map2 sqrt tol_value ip_list

我不知道O'Caml,但我知道Haskell,在我看来,您将映射应用于3个参数“sqrt tol_value ip_list”映射只接受两个参数,类型为('a->'b)->'a list->'b list,这意味着它接受一个函数(函数只接受一个输入并返回一个输出)和一个列表,然后返回一个新列表


这听起来像是家庭作业,因为您说您的解决方案仅限于某些函数。所以我会尽量给出一些建议,而不是答案

您希望对列表中的所有值使用相同的公差。想象一下,如果有一种方法可以将公差与sqrt函数结合起来,生成一个只接受一个参数的新函数。您有类型为
float->float->float
,并且您不知何故只想提供第一个float。这将返回类型为
float->float
的函数。 (正如Wes指出的,这是因为您的sqrt函数是以咖喱形式定义的。)


我所能说的是,像OCaml(和Haskell)这样的FP语言非常擅长这样做。事实上,只要你注意各种事情的先例,就很难不去做。(即,想想括号。)

我不能使用map2。不管怎样,我找到了解决办法。谢谢。OCaml中通常没有撇号,因为它不是爱尔兰语。