Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Function &引用;及;ocaml中的函数_Function_Ocaml - Fatal编程技术网

Function &引用;及;ocaml中的函数

Function &引用;及;ocaml中的函数,function,ocaml,Function,Ocaml,我正在做一个ocaml项目,我正在学习语法。我看到一个具有以下格式的程序: let foo1 = function |(x, y) -> foo2 (x,y) z and foo2 a s= (*stuff in here*) 我关心的是和在那里做什么。我试着在网上寻找这可能意味着什么,但似乎什么也找不到。它也可能只是一个打字错误…任何建议都将不胜感激。谢谢 和用于定义相互递归的函数/数据类型 如果没有和,您不能从foo1调用foo2,也不能从foo2调用foo1,您

我正在做一个ocaml项目,我正在学习语法。我看到一个具有以下格式的程序:

 let foo1 = function
    |(x, y) -> foo2 (x,y) z
 and foo2 a s=
    (*stuff in here*)

我关心的是
在那里做什么。我试着在网上寻找这可能意味着什么,但似乎什么也找不到。它也可能只是一个打字错误…任何建议都将不胜感激。谢谢

用于定义相互递归的函数/数据类型

如果没有
,您不能从
foo1
调用
foo2
,也不能从
foo2
调用
foo1
,您只能使用其中一个

您还需要在示例中使用
rec
,才能使其正常工作。没有
rec
就像正常的
let

以下是两个相互递归的函数定义:

let rec some_fun1 _ =
    print_endline "fun1";
    some_fun2 ()

and some_fun2 _ =
    print_endline "fun2";
    some_fun1 ()

(正如我上面所说,如果没有
rec
,这是行不通的)

用于定义相互递归的函数/数据类型

如果没有
,您不能从
foo1
调用
foo2
,也不能从
foo2
调用
foo1
,您只能使用其中一个

您还需要在示例中使用
rec
,才能使其正常工作。没有
rec
就像正常的
let

以下是两个相互递归的函数定义:

let rec some_fun1 _ =
    print_endline "fun1";
    some_fun2 ()

and some_fun2 _ =
    print_endline "fun2";
    some_fun1 ()

(正如我上面所说,没有
rec
这是行不通的)

没有
rec
,它就像一个
let
,但有一个约束,即第二个定义也不能引用第一个。“没有rec,就像正常的let”不一定。
let
中的表达式在
let
之外的范围内求值。因此,如果嵌套了
let
s,则第二个
let
表达式将在第一个
let
的范围内求值;然而,如果使用
,它们都将在外部范围内进行计算。例如,
let x=2 in let y=3 in let x=y和y=x in y
的计算结果为2,但
let x=2 in let y=3 in let x=y in let y=x in y
的计算结果为3而无
rec
,这类似于
let
,但有一个约束,即第二个定义也不能引用第一个定义。“没有rec,就像正常的let一样“不一定。
let
中的表达式在
let
之外的范围内求值。因此,如果嵌套了
let
s,则第二个
let
表达式将在第一个
let
的范围内求值;然而,如果使用
,它们都将在外部范围内进行计算。例如,
let x=2 in let y=3 in let x=y和y=x in y
计算结果为2,但
let x=2 in let y=3 in let x=y in let y=x in y
计算结果为3