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