Theory and Practice of Logic Programming 1 The Language Features and Architecture of B-Prolog Neng-Fa Zhou Department of Computer and Information Science CUNY Brooklyn College & Graduate Center
[email protected] submitted 5th October 2009; revised 1th March 2010; accepted 21st February 2011 Abstract B-Prolog is a high-performance implementation of the standard Prolog language with sev- eral extensions including matching clauses, action rules for event handling, finite-domain constraint solving, arrays and hash tables, declarative loop constructs, and tabling. The B-Prolog system is based on the TOAM architecture which differs from the WAM mainly in that (1) arguments are passed old-fashionedly through the stack, (2) only one frame is used for each predicate call, and (3) instructions are provided for encoding matching trees. The most recent architecture, called TOAM Jr., departs further from the WAM in that it employs no registers for arguments or temporary variables, and provides variable-size instructions for encoding predicate calls. This paper gives an overview of the language features and a detailed description of the TOAM Jr. architecture, including architectural support for action rules and tabling. KEYWORDS: Prolog, logic programming system 1 Introduction Prior to the first release of B-Prolog in 1994, several prototypes had been de- arXiv:1103.0812v1 [cs.PL] 4 Mar 2011 veloped that incorporated results from various experiments. The very first proto- type was based on the Warren Abstract Machine (WAM) (Warren 1983) as imple- mented in SB-Prolog (Debray 1988). In the original WAM, the decision on which clauses to apply to a call is made solely on the basis of the type and sometimes the main functor of the first argument of the call.