Ocaml 如何将未指定的算术声明(或其他函数)作为参数?
比如说, *f是算术断言:+,-,*,/。x是整数列表。y是int rawr将f应用于x和y的每个元素,并返回累积值* 让rawr f x y=。。。。 .... rawr*[1;2;3]2应该返回1*2+2*2+3*2=12 rawr+[1;2;3]2应该返回1+2+2+3+2=12 我不需要对rawr进行编码,这只是一个随机的例子,我想把我的问题弄清楚,但我确实需要将其他函数或算术声明作为参数,特别是对于rec或折叠结构。我一直在尝试不同的格式,但到目前为止没有成功。。。谁能告诉我如何将未指定的算术声明或函数作为参数Ocaml 如何将未指定的算术声明(或其他函数)作为参数?,ocaml,Ocaml,比如说, *f是算术断言:+,-,*,/。x是整数列表。y是int rawr将f应用于x和y的每个元素,并返回累积值* 让rawr f x y=。。。。 .... rawr*[1;2;3]2应该返回1*2+2*2+3*2=12 rawr+[1;2;3]2应该返回1+2+2+3+2=12 我不需要对rawr进行编码,这只是一个随机的例子,我想把我的问题弄清楚,但我确实需要将其他函数或算术声明作为参数,特别是对于rec或折叠结构。我一直在尝试不同的格式,但到目前为止没有成功。。。谁能告诉我如何将未
谢谢 现在还不清楚您是想要采用符号公式还是OCaml函数,或者您是否需要能够接受这两种方法中的任何一种 假设您只对一个函数参数感到满意 函数作为函数的参数是像OCaml这样的FP语言不费吹灰之力就能做到的 一个典型的例子是函数List.fold_left。下面是List.fold_left的一个实现,它可能会向您展示这种东西的样子:
let rec fold_left f accu l =
match l with
[] -> accu
| a::l -> fold_left f (f accu a) l
如果像函数一样使用该参数,OCaml将发现它是一个函数。这就是类型推断的工作原理
您可以使用此功能添加数字列表:
$ ocaml
OCaml version 4.01.0
# let rec fold_left f accu l =
match l with
[] -> accu
| a::l -> fold_left f (f accu a) l
;;
val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a = <fun>
# fold_left (+) 0 [4;5;7];;
- : int = 16
#
事实上,如果您想要接受函数或某种符号表达式,则需要了解如何表示和计算符号表达式。这在OCaml中不是免费的,您必须定义它。谢谢。这帮了大忙。