我正试图从概念的高度来理解世界水资源管理的目的,但我迄今咨询过的所有消息来源都认为,我知道的比我目前所了解的要多,而且他们从底层着手处理这个问题(细节)。他们从向我扔树开始,就像现在一样,我关心的是看到整个森林。
以下问题的答案将有助于我开展这项工作:
挑选任何一群有成就的、专业的Prolog实现者-- SISCtus人员、YAP人、ECLiPSe人--不管是谁。现在,给他们一个在现有虚拟机上实现专业的、可执行的、基于WAM的Prolog的目标,比如Erlang或Java。为了消除诸如“这取决于您的其他目标是什么”这样的答案,让我们说,除了我刚才给出的目标之外,其他任何目标都是他们开发之前实现时的目标。
我想得到的就是这个。WAM仅仅是一些帮助程序员组织代码、理解正在发生的事情、将Prolog映射到底层机器、提供可移植性等的抽象或工具,还是认为它是实现Prolog所必需的(几乎)必要的,或者至少是相当有用的“内部结束”?
谢谢。
发布于 2014-10-03 17:10:32
在回答这个有趣的问题时,我很兴奋地看到那些比我更有见识的人说了些什么,但是在不太可能的情况下,我实际上比你知道的更多,让我概述一下我的理解。当真正的专家出现并纠正我和/或提供更真实的答案时,我们都会受益。
WAM为您提供了一种实现Prolog的方法的过程描述。指定的Prolog并没有具体说明它必须如何实现,它只是讨论了应该看到的行为。因此,WAM是一种实现方法。我不认为任何流行的系统都遵循它,他们每个人都有他们自己的版本。它更像是一个架构模式和算法草图,而不是像Java虚拟机这样的规范。如果它更坚定,这本书http://wambook.sourceforge.net/可能就不需要存在了。我(非常稀疏)的理解是,主要的技巧是使用两个堆栈:一个是自Algol以来每种编程语言的常规调用/返回堆栈,另一个是用于选择点和回溯的特殊“跟踪”。(编辑:@false现在已经到来,并指出WAM寄存器是我以前从未听说过的主要技巧,这表明了我的无知。)无论如何,要实现Prolog,您需要一种正确的方法来处理搜索。在WAM之前,人们大多采用临时方法.我不会感到惊讶的是,有新的和/或更复杂的技巧,但它是一个健全的架构,广泛使用和理解。
所以你的三部分问题的答案是,我想,两者都是。VM中将有一个VM。当然,VM中的VM将以适当的语言实现,因此将使用该语言的原语来处理VM的不可见部分(堆栈和跟踪)。Clojure可以提供对语言如何与自己的实现语言共享东西的洞察力。你可以自由地按需要进行混合。
最后一个问题的答案是,WAM只是你所描述的目的的抽象,而不是它本身的目的。例如,没有像“可移植的WAM字节码”这样的东西编译Java成为可移植的JVM字节码,这可能证明它没有其他好处。如果您有一种实现Prolog的新方法,那么一定要尝试它,忘记所有关于WAM的事情。
https://stackoverflow.com/questions/26181455
复制相似问题