Ocaml 是什么导致了这里的语法错误?

Ocaml 是什么导致了这里的语法错误?,ocaml,Ocaml,我正在尝试实现这个算法,但在第12行我一直得到一个语法错误,但我无法确定是什么导致它。我是ocaml新手,非常感谢您的帮助 “要通过Eratosthenes方法找到小于或等于给定整数n的所有素数: 创建从2到n的连续整数列表:(2,3,4,…,n)。 首先,让p等于2,第一个素数。 从p开始,通过以p的增量计数到n来枚举其倍数,并在列表中标记它们(这些将是2p、3p、4p,…;不应标记p本身)。 在列表中找到第一个未标记的大于p的数字。如果没有这样的数字,请停止。否则,让p现在等于这个新数字(即

我正在尝试实现这个算法,但在第12行我一直得到一个语法错误,但我无法确定是什么导致它。我是ocaml新手,非常感谢您的帮助

“要通过Eratosthenes方法找到小于或等于给定整数n的所有素数:

创建从2到n的连续整数列表:(2,3,4,…,n)。 首先,让p等于2,第一个素数。 从p开始,通过以p的增量计数到n来枚举其倍数,并在列表中标记它们(这些将是2p、3p、4p,…;不应标记p本身)。 在列表中找到第一个未标记的大于p的数字。如果没有这样的数字,请停止。否则,让p现在等于这个新数字(即下一个素数),并从步骤3开始重复。”


OCaml有一个表达式
让a=b在c
中。您的代码在中以
结尾,但
c在哪里?看起来您应该删除结尾处
中的

仔细看,我发现问题比这还多,对不起

OCaml中的函数大致如下所示:

let f x =
    let a = b in
    let c = d in
    val
您对
prime
的定义与此完全相同,只是它以
for
循环结束,即关键字
done

代码的其余部分形成了第二个独立的函数定义。它有这样一种形式:

let f x =
    let a = b in
    let g x = expr in
语法问题是在
中的
之后缺少一个表达式

但是,缩进的使用表明您没有试图定义两个不同的函数。如果这是真的,您需要稍微修改代码


一件可能有用的事情(对于命令式编程)是您可以编写
expr1;expr2
依次计算两个表达式。

OCaml有一个表达式
让a=b在c
中。您的代码在
中以
结尾,但
c在哪里?看起来您应该删除结尾处
中的

仔细看,我发现问题比这还多,对不起

OCaml中的函数大致如下所示:

let f x =
    let a = b in
    let c = d in
    val
您对
prime
的定义与此完全相同,只是它以
for
循环结束,即关键字
done

代码的其余部分形成了第二个独立的函数定义。它有这样一种形式:

let f x =
    let a = b in
    let g x = expr in
语法问题是在
中的
之后缺少一个表达式

但是,缩进的使用表明您没有试图定义两个不同的函数。如果这是真的,您需要稍微修改代码


一件可能有用的事情(对于命令式编程)是您可以编写
expr1;expr2
依次计算两个表达式。

OCaml有一个表达式
让a=b在c
中。您的代码在
中以
结尾,但
c在哪里?看起来您应该删除结尾处
中的

仔细看,我发现问题比这还多,对不起

OCaml中的函数大致如下所示:

let f x =
    let a = b in
    let c = d in
    val
您对
prime
的定义与此完全相同,只是它以
for
循环结束,即关键字
done

代码的其余部分形成了第二个独立的函数定义。它有这样一种形式:

let f x =
    let a = b in
    let g x = expr in
语法问题是在
中的
之后缺少一个表达式

但是,缩进的使用表明您没有试图定义两个不同的函数。如果这是真的,您需要稍微修改代码


一件可能有用的事情(对于命令式编程)是您可以编写
expr1;expr2
依次计算两个表达式。

OCaml有一个表达式
让a=b在c
中。您的代码在
中以
结尾,但
c在哪里?看起来您应该删除结尾处
中的

仔细看,我发现问题比这还多,对不起

OCaml中的函数大致如下所示:

let f x =
    let a = b in
    let c = d in
    val
您对
prime
的定义与此完全相同,只是它以
for
循环结束,即关键字
done

代码的其余部分形成了第二个独立的函数定义。它有这样一种形式:

let f x =
    let a = b in
    let g x = expr in
语法问题是在
中的
之后缺少一个表达式

但是,缩进的使用表明您没有试图定义两个不同的函数。如果这是真的,您需要稍微修改代码


一件可能有用的事情(对于命令式编程)是您可以编写
expr1;expr2
依次计算两个表达式。

添加到Jeffrey的答案中

由于我已在“”中回答了您的问题

您现在绝对需要做的是安装并使用适当的OCaml缩进工具,以及自动缩进行。意外的自动缩进结果通常表示语法错误,如忘记
。如果没有这些工具,即使是有才华的OCaml程序员也很难编写没有语法错误的OCaml代码

OCaml有很多自动压头可用:

  • Emacs和Vim的ocp缩进
  • Emacs的Caml模式和Tuareg模式
  • Vim应该有一些其他压头,但我不知道

除了杰弗里的回答

由于我已在“”中回答了您的问题

您现在绝对需要做的是安装并使用适当的OCaml缩进工具,以及自动缩进行。意外的自动缩进结果通常表示语法错误,如忘记
。如果没有这些工具,即使是有才华的OCaml程序员也很难编写没有语法错误的OCaml代码<