Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml 如何将未指定的算术声明(或其他函数)作为参数?_Ocaml - Fatal编程技术网

Ocaml 如何将未指定的算术声明(或其他函数)作为参数?

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或折叠结构。我一直在尝试不同的格式,但到目前为止没有成功。。。谁能告诉我如何将未

比如说,

*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中不是免费的,您必须定义它。

谢谢。这帮了大忙。