1

不久前,我获得了软件抽象的第二版,当我需要重新记忆如何拼写elems函数的名称时,我想“哦,很好,我可以查看新版本,而不是试图阅读我难以辨认的手写第一版结尾文件中的注释。”

但我在索引中找不到“seq”或“elems”或任何其他辅助函数的名称,也没有seq在附录 B 的语言参考中看到任何提及该关键字的内容。

以下一项或多项似乎很可能是这种情况;哪个?

  • 我错过了一些东西。(什么哪里?)
  • 附录 B 中没有涵盖该seq关键字,因为严格来说,它不像set其他一元运算符那样是关键字。(请说明!)
  • 在第二版出版后,Alloy 4 中增加了对序列的支持,因此需要通过参考快速指南中关于 Alloy 4 中新特性的讨论和网站上的Alloy 4 语法来扩充本书。(啊,好的。页面很慢,位很快。)
  • 其他 ...

我想,为了在这里提出一个普遍有用的问题,我要问的是:Alloy Analyzer 4.2(或任何 4.*)实现的语言与软件抽象第二版中定义的语言之间到底有什么关系?

4

1 回答 1

3

当前的实现对应于这个在线文档。

序列真的不是语言的一部分。x: seq A可以看作是 的语法糖x: Int -> A,并且所有的实用函数(例如 、、first)都是库定义的(在 中)。实际的实现要复杂一些(只是为了让用户编写类似的东西并同时让类型检查器满意),但从概念上讲就是这样。lastelemsutil/sequencex.elems

于 2013-05-29T23:52:18.393 回答