需要 mercury 中的记录语法示例
Need an example of Record Syntax in mercury
我是 mercury 的新手,我正在努力思考 Record Syntax,但参考手册是我唯一遇到过它的地方,它让我感到困惑:
Term ^ field1(Arg1) ^ field2(Arg2, Arg3) is equivalent to field2(Arg2, Arg3, field1(Arg1, Term)).
有人可以帮忙举个真实的例子吗?
记录语法是一种语法糖,手册试图解释如何
从记录语法到 Mercury 的正常语法的转换是有效的。这个
如果您想了解如何实现记录语法,那很好,但不是
如果您想学习如何使用它,非常有帮助。
我建议忽略括号中的 (Arg1, ...) 内容 - 我不是
确定它是否真的是语法的一部分,我从未见过有人使用它。
让我们创建一个表示笛卡尔平面上的点的结构。
:- type point
---> point(
pt_x :: int,
pt_y :: int
).
pt_x 和 pt_y 是字段名称,它们允许我们检索 a 的值
点的字段。例如:
format("The point's X coordinate is: %d\n", [i(Point ^ pt_x)], !IO),
format("The point's Y coordinate is: %d\n", [i(Point ^ pt_y)], !IO),
我们可以检索一个值并将其分配给一个新变量。
X = Point ^ pt_x,
而且我们还可以更新一个字段而不必写出整点
再次.
NewPoint = OldPoint ^ pt_y := NewY,
当 this 与
状态变量表示法,会出现一个额外的语法糖。
move_up(D, !Point) :-
NewY = !.Point ^ pt_y + D,
!Point ^ pt_y := NewY.
请注意,当我们读取一个值时,我们使用!.Point,这是状态变量
"the current value"。当我们更新它时,我们可以这样写:
!:Point = !.Point ^ pt_y := NewY.
然而,这个额外的语法糖允许我们写:
!Point ^ pt_y := NewY.
希望对您有所帮助。 Mercury 中还有更多示例
源代码:
https://github.com/Mercury-Language/mercury
和其他 Mercury 项目,请注意 github 语言标记是
已损坏,许多 Objective-C 文件被检测为 Mercury,许多 Mercury
东西被检测为其他文件:
我是 mercury 的新手,我正在努力思考 Record Syntax,但参考手册是我唯一遇到过它的地方,它让我感到困惑:
Term ^ field1(Arg1) ^ field2(Arg2, Arg3) is equivalent to field2(Arg2, Arg3, field1(Arg1, Term)).
有人可以帮忙举个真实的例子吗?
记录语法是一种语法糖,手册试图解释如何 从记录语法到 Mercury 的正常语法的转换是有效的。这个 如果您想了解如何实现记录语法,那很好,但不是 如果您想学习如何使用它,非常有帮助。
我建议忽略括号中的 (Arg1, ...) 内容 - 我不是 确定它是否真的是语法的一部分,我从未见过有人使用它。
让我们创建一个表示笛卡尔平面上的点的结构。
:- type point
---> point(
pt_x :: int,
pt_y :: int
).
pt_x 和 pt_y 是字段名称,它们允许我们检索 a 的值 点的字段。例如:
format("The point's X coordinate is: %d\n", [i(Point ^ pt_x)], !IO),
format("The point's Y coordinate is: %d\n", [i(Point ^ pt_y)], !IO),
我们可以检索一个值并将其分配给一个新变量。
X = Point ^ pt_x,
而且我们还可以更新一个字段而不必写出整点 再次.
NewPoint = OldPoint ^ pt_y := NewY,
当 this 与 状态变量表示法,会出现一个额外的语法糖。
move_up(D, !Point) :-
NewY = !.Point ^ pt_y + D,
!Point ^ pt_y := NewY.
请注意,当我们读取一个值时,我们使用!.Point,这是状态变量 "the current value"。当我们更新它时,我们可以这样写:
!:Point = !.Point ^ pt_y := NewY.
然而,这个额外的语法糖允许我们写:
!Point ^ pt_y := NewY.
希望对您有所帮助。 Mercury 中还有更多示例 源代码:
https://github.com/Mercury-Language/mercury
和其他 Mercury 项目,请注意 github 语言标记是 已损坏,许多 Objective-C 文件被检测为 Mercury,许多 Mercury 东西被检测为其他文件: