【问题标题】:Operator :: OCaml运算符 :: OCaml
【发布时间】:2015-12-07 23:03:12
【问题描述】:

我是 OCaml 的初学者并尝试构建解析器,我想要一个列表来存储我班级中的所有方法。这是我的 .mly 文件中的一部分。

init_method_list: 
    { [] }
    | method_list method_decl { List.rev($1) }
;

method_list:
    method_decl { [ $1 ] }
    | method_list method_decl { $2 :: $1 }
;

谁能准确解释这里发生了什么?尤其是 :: 操作。一直在谷歌搜索,但在文档中找不到操作员。

我知道列表可以是空的,或者我们进行正确的递归调用以用类中的所有方法填充它。 method_decl 只查找表示方法的特定标记组合的匹配项。

【问题讨论】:

  • 添加$2$1?
  • 在 Ocaml 中,运算符:: 用于将'a 类型的元素连接到'a list 类型的列表。
  • 好的,谢谢,它是否将元素添加到列表的前面? @alifirat
  • 你用谷歌搜索什么?我刚刚搜索了“ocaml 教程”,第一次点击就有使用“::”的基本教程

标签: compiler-construction ocaml ocamlyacc


【解决方案1】:

正如我在评论中所说,运算符:: 用于将'a 类型的元素连接到'a list 类型的列表。一个小例子:

1 :: [2;3] 生成列表 [1;2;3] 所以是的,它将元素添加到列表的前面。

【讨论】:

  • :: 并不是一个真正的运算符,而是一个语法符号——这就是为什么它允许出现在匹配模式中而运算符不出现的原因。
【解决方案2】:

正如其他人所说, :: 将一个元素连接到相同类型的列表中。顺便说一句,如果您需要连接两个列表,可以使用 @ 符号,例如:

[1;2;3]@[4] 将给出列表 [1;2;3;4]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2015-09-18
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多