我是OCaml的新手,这里有什么问题( Synthax错误):
let summry var3 =
if var3 > 1 then
var4=var3
for i = var4-1 downto 0 do var3=var3+i done;;
else if var3 == 1 then var3 = 1;;
else var3 = 0 ;;
是否有可能内部的for循环?
答案 0 :(得分:1)
当您希望顶层(OCaml解释器)评估您到目前为止输入的内容时,您应该只输入;;
。如果您在语法结构的中途输入;;
,则不能指望以下文本是您目前所输入内容的一部分。此外,您需要将表达式与;
分开。如果你想在then
后面有两个表达式,你需要括号或开始/结束。
换句话说,这应该解决句法问题:
let summry var3 =
if var3 > 1 then begin
var4=var3;
for i = var4-1 downto 0 do var3=var3+i done
end
else if var3 == 1 then var3 = 1
else var3 = 0
这应该修复语法,但是你还有其他问题。我直接看到的两个是(a)OCaml运算符=
用于比较值,而不是按预期分配值; (b)您的代码以命令式样式编写,并期望使用赋值更改变量的值。 OCaml变量是不可变的。除非您特别为它们使用可变类型,否则不能更改它们的值。
答案 1 :(得分:0)
您需要删除;;
;;
是一个顶级令牌,它意味着"声明结束"并且不能放在表达的中间。
将它混淆为很多语言;
是一个常见的错误,但应该被认为是一个"回到全球范围"指令。