【问题标题】:ocaml syntax error in REPL modeREPL 模式下的 ocaml 语法错误
【发布时间】:2018-10-16 03:47:47
【问题描述】:

我的这部分代码总是向我显示一些语法错误:ocaml REPL 中预期的运算符。错误出现在“let rec projection ...”行的let 上。可能是什么? conditions 定义为 string listaTable(string list * string list* (string list) list)

 let project (conditions, aTable)=(
    let trueFalseList = match aTable with 
        _,cols,_ -> dataMatcher(cols, conditions)

    let rec projected (aTable, trueFalseList) = match aTable with
        name,[],[] -> name,[],[]
      |name,cols,[] -> newLineMaker ((List.hd cols), trueFalseList)::projected(name,(List.tl cols),[])
      |name,cols,vals -> newLineMaker ((List.hd vals), trueFalseList)::projected(name,cols,(List.tl vals)) 
  )

【问题讨论】:

    标签: syntax-error ocaml


    【解决方案1】:

    输入到 OCaml REPL 中的行本质上形成了 OCaml 模块。在模块的最外层,您可以拥有

    let name = value
    

    定义模块的全局命名值。

    在你的情况下,你有let project (conditions, aTable) = value。换句话说,您正在定义一个函数project,它接受一对值作为其参数。

    在模块最外层以外的任何地方,都没有全局名称。所以每个let后面必须跟in。在您的 project 函数的定义中就是这种情况,也是解释器所抱怨的。它期待看到in,或表达式的延续(即某种运算符)。

    尚不清楚您的函数project 应该返回什么。 project整体是什么类型?

    【讨论】:

    • 项目(conditions, aTable) (string list, (string list * string list* (string list) list)) 返回(string list * string list* (string list) list) .这个想法是一种关系代数功能,即输入一个表和一些列名,并只显示条件列表中包含的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-09-19
    • 2014-03-15
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多