OCaml:if语句中的for循环

时间:2016-10-25 15:35:37

标签: if-statement for-loop ocaml

我是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循环?

2 个答案:

答案 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)

您需要删除;;

;;是一个顶级令牌,它意味着"声明结束"并且不能放在表达的中间。

将它混淆为很多语言;是一个常见的错误,但应该被认为是一个"回到全球范围"指令。