ocaml函数的定义方法
我试图定义函数的类型ocaml函数的定义方法,ocaml,Ocaml,我试图定义函数的类型 (测试,测试)->测试 所以我写下我的代码如下: let test\u func:(测试,测试)->test=fun… 但它给了我语法错误,所以我把它改为 let test\u func:(测试,测试)测试=乐趣… 它不会给我语法错误信息 但是我不知道为什么第一个给了我语法错误 (我也尝试过这种形式。let test\u func(test,test):test这是定义函数的更好方法吗?(test,test)不是有效类型。如果要描述元组类型,正确的语法是test*test。
(测试,测试)->测试
所以我写下我的代码如下:
let test\u func:(测试,测试)->test=fun…
但它给了我语法错误,所以我把它改为
let test\u func:(测试,测试)测试=乐趣…
它不会给我语法错误信息
但是我不知道为什么第一个给了我语法错误
(我也尝试过这种形式。let test\u func(test,test):test
这是定义函数的更好方法吗?(test,test)
不是有效类型。如果要描述元组类型,正确的语法是test*test
。但是,我怀疑您实际上想用两个参数来描述函数,这将是test->test->test
,因为OCaml是一种通用语言
(test,test)test
在语法上是有效的,因为它描述了给定两个参数的参数化类型
let test_func(test,test):test
不指定整个函数类型,只指定返回类型(test,test)
这里描述了一个元组参数,其中项目分别绑定到test
和test
。我猜您实际上使用了不同的名称,否则这将无法编译
可以分别指定每个参数的类型和返回类型,如下所示:
let test_func (a: test) (b: test): test = ...
此外,这是您发布的第三个问题,您在这里展示了对OCaml中函数如何工作的理解不足,尽管已经解释了好几次。也许你应该复习你的课程材料,以确保你了解curried函数是如何工作的,或者问问老师或能一步一步指导你的人。堆栈溢出确实不能作为教程服务很好地工作。
let test_func:(test,test)test=fun…
也不能编译,因为类型test
不能同时使用2个参数(在末尾)和0个参数(在父级内部)。