Syntax 请解释一下Ocaml语法好吗?
我是Ocaml新手,我正在尝试了解此函数的工作原理:Syntax 请解释一下Ocaml语法好吗?,syntax,ocaml,Syntax,Ocaml,我是Ocaml新手,我正在尝试了解此函数的工作原理: let ccc c1 c2 c3 = fun (s1, s2, s3) n -> let (t1, r1) = (c1 s1 2) in if r1 = 0 then let (t2, r2) = (c2 s2 n) in ((t1, t2, s3), r2) else let (t3, r3) = (c3 s3 n) in ((t1, s2, t3), r3) ;; c1、c
let ccc c1 c2 c3 = fun (s1, s2, s3) n ->
let (t1, r1) = (c1 s1 2) in
if r1 = 0
then let (t2, r2) = (c2 s2 n) in ((t1, t2, s3), r2)
else let (t3, r3) = (c3 s3 n) in ((t1, s2, t3), r3) ;;
c1、c2、c3都是“选择器”。我知道该函数的目的是引入3个选择器,让第一个选择器选择其他两个选择器中的哪一个,但我对语法感到困惑。谁能解释一下吗?谢谢大家! 不知道哪一部分容易混淆,很难回答。下面是一些简单的例子,展示了一些更复杂的部分
# let f = fun x -> x + 1;;
val f : int -> int = <fun>
# f 3;;
- : int = 4
这定义了相同的函数f。意思完全一样,只是稍微友好一点
无论出于何种原因,您的代码都在使用这两种符号。我不确定我是否看到这样做的好理由,但它确实强调,如果您将三个函数传递给ccc
,您将获得一个函数
其他部分非常简单(尽管可能需要一些时间来适应):
函数调用是通过将对象相邻写入而形成的:
c1 s1 2
c2 s2 n
c3 s3 n
这些只是对c1
、c2
和c3
的调用
元组使用逗号(通常也使用括号)形成。因此(t1,r1)
是调用c1
返回的一对值
我假定您理解如果
/那么
/其他
,并且让
进入
。如果不是,也不难解释
实际上,我建议阅读关于OCaml的教程。这样做应该比一次只问一个问题更有效率。这里有很好的教程。如果不知道哪部分容易混淆,很难回答。下面是一些简单的例子,展示了一些更复杂的部分
# let f = fun x -> x + 1;;
val f : int -> int = <fun>
# f 3;;
- : int = 4
这定义了相同的函数f。意思完全一样,只是稍微友好一点
无论出于何种原因,您的代码都在使用这两种符号。我不确定我是否看到这样做的好理由,但它确实强调,如果您将三个函数传递给ccc
,您将获得一个函数
其他部分非常简单(尽管可能需要一些时间来适应):
函数调用是通过将对象相邻写入而形成的:
c1 s1 2
c2 s2 n
c3 s3 n
这些只是对c1
、c2
和c3
的调用
元组使用逗号(通常也使用括号)形成。因此(t1,r1)
是调用c1
返回的一对值
我假定您理解如果
/那么
/其他
,并且让
进入
。如果不是,也不难解释
实际上,我建议阅读关于OCaml的教程。这样做应该比一次只问一个问题更有效率。上有很好的教程。非常感谢您的回答!我仍然不清楚什么是s1、s2、s3
。那么n
来自哪里?最初,我们只将c1 c3
传递给ccc
函数,对吗?谢谢是c2 s2 n
是对c2
的调用,有两个参数,s2
和n
n
是内部函数(以fun
开头的函数)的第二个参数。和s1
、s2
和s3
是ccc
返回的函数的第一个参数(3元组)的一部分。那么到底传递给ccc
的是什么呢?除了(s1,s2,s3),n
,它是否是c1 c2 c3
?这是OCaml的一个棘手(而且非常酷)的部分。如果不想太深入,答案是ccc接受三个参数c1
,c2
,和c3
,并返回一个函数。它返回的函数有两个参数(一个3元组和一个名为n
的值)。谢谢:)非常感谢你的回答!我仍然不清楚什么是s1、s2、s3
。那么n
来自哪里?最初,我们只将c1 c3
传递给ccc
函数,对吗?谢谢是c2 s2 n
是对c2
的调用,有两个参数,s2
和n
n
是内部函数(以fun
开头的函数)的第二个参数。和s1
、s2
和s3
是ccc
返回的函数的第一个参数(3元组)的一部分。那么到底传递给ccc
的是什么呢?除了(s1,s2,s3),n
,它是否是c1 c2 c3
?这是OCaml的一个棘手(而且非常酷)的部分。如果不想太深入,答案是ccc接受三个参数c1
,c2
,和c3
,并返回一个函数。它返回的函数有两个参数(一个3元组和一个名为n
的值)。谢谢:)