Warren Abstract Machine (WAM)

栏目: IT技术 · 发布时间: 6年前

内容简介:In 1983,David H. D. Warren designed anabstract machine for the execution ofProlog consisting of amemory architecture and aninstruction set.This design became known as theThe purpose of compiling Prolog code to the more low-level WAM code is to make subsequ

In 1983,David H. D. Warren designed anabstract machine for the execution ofProlog consisting of amemory architecture and aninstruction set.This design became known as the Warren Abstract Machine (WAM) and has become the de facto standard target for Prologcompilers.

Contents

Purpose [ edit ]

The purpose of compiling Prolog code to the more low-level WAM code is to make subsequent interpretation of the Prolog program more efficient. Prolog code is reasonably easy to translate to WAM instructions, which can be more efficiently interpreted. Also, subsequent code improvements and compilations to native code are often easier to perform on the more low-level representation.

In order to write efficient Prolog programs, a basic understanding of how the WAM works can be advantageous. Some of the most important WAM concepts are first argument indexing and its relation to choice-points, tail call optimization , and memory reclamation on failure.

Memory areas [ edit ]

The WAM has the following memory areas:

  • The global stack or heap , used to store compound terms
  • The local stack for environment frames and choice-points
  • The trail to record which variables bindings ought to be undone on backtracking

Example [ edit ]

Here is a piece of Prolog code:

 girl(sally).
 girl(jane).
 
 boy(B) :- \+ girl(B).

A WAM-based Prolog compiler will compile this into WAM instructions similar to the following:

 predicate(girl/1):
    switch_on_term(2,1,fail,fail,fail),
 label(1): switch_on_atom([(sally,3),(jane,5)])
 label(2): try_me_else(4)
 label(3): get_atom(sally,0)
           proceed
 label(4): trust_me_else_fail
 label(5): get_atom(jane,0)
           proceed
 
 predicate(boy/1):
    get_variable(x(1),0)
    put_structure(girl/1,0)
    unify_local_value(x(1))
    execute((\+)/1)])

An important characteristic of this code is its ability to cope with the various modes in which the predicates can be evoked: any argument might be a variable, aground term, or a partly instantiated term. The "switch" instructions handle the different cases.

References [ edit ]

  1. David H. D. Warren (October 1983). An abstract Prolog instruction set (PDF) . Menlo Park, CA, USA: Artificial Intelligence Center atSRI International.
  2. Hassan Aït-Kaci (February 18, 1999). Warren's Abstract Machine: A Tutorial Reconstruction (PDF) . Archived from the original (PDF) on 2003-02-13.
  3. Hassan Aït-Kaci. "Warren's Abstract Machine: A Tutorial Reconstruction; the book, errata and slides" . Retrieved 7 March 2011 .

以上所述就是小编给大家介绍的《Warren Abstract Machine (WAM)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP Web 2.0开发实战

PHP Web 2.0开发实战

泽瓦斯 / 苏金国 / 人民邮电出版社 / 2008-10-1 / 59.00元

本书通过一个完整的Web 2.0应用——带有动态图库、搜索和地图功能的博客系统详细介绍了Web开发的全过程。首先讨论了Web应用的规划与设计,然后逐章实现各个具体特性,包括网站主页、用户主页、用户注册页面、账户登录和管理页面、用户博客系统、网站搜索以及应用管理等,最后介绍部署和维护。 本书适合中、高级的PHP程序员阅读。一起来看看 《PHP Web 2.0开发实战》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试