嵌套函数中的Ocaml语法错误

bli00

我已经盯着这段代码看了一段时间,但不明白为什么我会收到语法错误:

let rec e_closure (m:nfa_t) (l:int list) = match m with
    | (_, _, (ts:transition list)) -> 
        List.sort_uniq (List.fold_left 
                            (fun (lst:int list) (state:int) -> 
                                List.fold_left 
                                    (fun (lst2:int list) (t:transition) -> 
                                        match t with 
                                        | ((start:int), (letter:char option), (end:int)) -> (if ((start = a) && (isEpilson letter)) then end::lst2 else lst2) 
                                        | _ -> raise (NFAError "e_closure match failure (nested)")) lst ts) l l)
    | _ -> raise (NFAError "e_closure match failure")
;;

在不深入了解这个复杂代码的情况下,它的功能是返回给定 NFA(非确定性有限自动机)的状态的 epsilon 闭包列表。它的例外类型在代码中进行了注释。

我得到的错误信息在第 8 行,说明Error: Syntax error: operator expected.

我怀疑了解代码的功能无关紧要,但这里仍然是:

isEpsilon是一个函数,如果transition匹配则返回 true None

NFAError 是用户定义的错误。

用户定义的类型是:

type char option = None | Some of char
type transition = int * char option * int
type nfa_t = int * int list * transition list

上面列出的顺序中每种类型的示例:

None
(1, None, 2)
(1, [2;3], [(1, None, 2); (1, Some 'a', 3)])

使用函数的一个例子e_closure

e_closure (1, [2,3], [(1, None, 2); (1, Some 'a', 3)]) [1] = [1;2]

也就是说,该函数查看 list [(1, None, 2); (1, Some 'a', 3)],返回一个 int list 包含其第二个参数中的每个元素以及该参数所有元素的每个 epsilon 转换。在这种情况下,由于第二个参数是 [1],它将返回[1;2],转换(1, Some 'a', 3) 不是 epsilon 转换,因此不包括在内。

该代码使用该函数fold_leftsort_uniq在 Ocaml 的本机模块List 中找到

杰弗里·斯科菲尔德

您正在end用作标识符,但它是 OCaml 中的关键字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数中的OCaml语法错误

来自分类Dev

递归函数中的OCaml语法错误

来自分类Dev

函子中的OCaml语法错误

来自分类Dev

在ocaml中获取语法错误

来自分类Dev

纠正嵌套函数的ANTLR语法错误

来自分类Dev

函数中if语句的Postgresql语法错误

来自分类Dev

我函数中的Haskell语法错误

来自分类Dev

函数中的声明语法错误

来自分类Dev

SQL创建函数中的语法错误

来自分类Dev

我的函数中的Haskell语法错误

来自分类Dev

函数中的Postgres语法错误

来自分类Dev

PHP中的函数语法错误

来自分类Dev

函数中的声明语法错误

来自分类Dev

OCaml 中列表的相互递归语法错误

来自分类Dev

嵌套ifs的语法错误

来自分类Dev

PostgreSQL中嵌套的大小写条件,语法错误?

来自分类Dev

嵌套游标在mysql中但显示语法错误

来自分类Dev

OCaml列表语法错误

来自分类Dev

函数定义的语法错误

来自分类Dev

js函数中的“语法错误,意外令牌=”

来自分类Dev

箭头函数返回的对象中的“意外令牌”语法错误

来自分类Dev

在bash中,函数内部的Heredoc返回语法错误

来自分类Dev

Python 3中的def函数语法错误

来自分类Dev

C语言内联函数中的语法错误

来自分类Dev

在MySQL中创建自己的函数时出现语法错误

来自分类Dev

C ++模板成员函数中的语法错误

来自分类Dev

Python 3中的def函数语法错误

来自分类Dev

在python中定义2个函数时的语法错误

来自分类Dev

PostgreSQL中date_part函数的语法错误