<<

Southern Illinois University Carbondale OpenSIUC

Publications Department of Medical Education

7-1988 Bridging the Gap between Object-oriented and Programming Timothy Koschmann Southern Illinois University Carbondale

Martha Walton Evans Illinois Institute of Technology

Follow this and additional works at: http://opensiuc.lib.siu.edu/meded_pubs ©1988 IEEE. Published in IEEE Software, Vol. 5, Issue 4 (July 1988) at 10.1109/52.17800 Personal use of this material is permitted. However, permission to reprint/republish this material for advertising or promotional purposes or for creating new collective works for resale or redistribution to servers or lists, or to reuse any copyrighted component of this work in other works must be obtained from the IEEE. This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Recommended Citation Koschmann, Timothy and Evans, Martha W. "Bridging the Gap between Object-oriented and Logic Programming." (Jul 1988).

This Article is brought to you for free and open access by the Department of Medical Education at OpenSIUC. It has been accepted for inclusion in Publications by an authorized administrator of OpenSIUC. For more information, please contact [email protected]...... -...... ~~ . .--.

LANGUAGE

between

Logic Programming

Timothy Koschmann, Xerox A/ Systems Mardha Walton EvenS. lllinois lnstitute of Technology

ajectaiented and n recent years, many programmers chronological backtracking and pattern have begun to experiment with alter- matching viaunification. 'sdeclara- Iogk progkamming native programming styles. Object- tive style provides a natural way to repre- each have dvantqges. oriented and logic programming have at- sent rule-based knowledge. Unfor- tracted growing interest among software tunately, Prolog also has deficiencies: Its lhis interface bridges designers, particularly among those work- declarative style is clumsy for tasks that are the two Wles, ing on knowledge-based applications. implicitly procedural in nature, such as lettingyou take equal Both styles of programming offer real prompting a user for a series of pieces of advantages over traditional programming information. Also, because Prolog isa rela- advan&ge ofboth. methods. tively new language in the US, it does not Object-oriented programming is partic- yet have a library of routines for graphics, ularly useful for problems in which data manipulating windows, creating menus, objects can be categorized hierarchically. or monitoring mouse events. The notions of inheritance and data en- The best solution would seem to be one capsulation encourage astructured imple- where you could use object-oriented and mentation style and enhance the main- logic programming in a common applica- tainability of programs. But object- tion, using each forwhat it does best. This oriented environments lack generalized is the philosophy behind the notion of facilities for deductive retrieval and pat- multiparadigm programming.' The ques tern matching, functions that are basic to tion that must be addressed is how you most knowledge-based applications. combine object-oriented and logic pro On the other hand, logic programming gramming so the best features of each par- languages like Prolog have built-in facili- adigm are preserved. (The box on p. 39 ties for deductive retrieval through describes each style.)

36 074Ck7459/88/0700/0036/!$01 .oO 0 1988 IEEE IEEE Software One strategymight be to implement one outside the Prolog . cause both sets of microcode are resident paradigm in the other, either by imple- You may use each layer independently. at all times, there is no special overticad as- menting objects in an existing logic en- For example, in some applications, there sociated with decoding Prolog instruc- vironment or by implementing a Prolog- may be no need for clause objects or Pro- tions versus Lisp instructions. To the pro- like search facility in an object-oriented log methods - but the ability to manipu- grammer, Lisp and Prolog appear to be environment. Both approaches have been late Loops objects from the Prolog en- two separate worlds, each with its own tried: vironment may still be valuable. name spaces and syntactical rules. Access There are several ways to implement My colleagues and I at Xerox AI Systems to the Lisp world from Prolog is achieved objects in a logic programming frame- used the interface to implement Rotamer, through built-in predicates that let you in- work. For example, Malpas has described a fairly complex knowledge-based applica- voke Lisp functions while in Prolog and a technique for implementing classes, in- ti~n.~Rotamer uses a truth-maintenance capture the returned results. stances, methods, and inheritance in Pro- system (implemented with Prolog meth- The Xerox Quintus Prolog/I.isp inter- log.? ods) to cache information acquired in the face was readily extensible to provide a The Xerox Palo Alto Research Center course of exploring a large search space. Prolog/Loops interface. The principle of has tried the opposite approach of provid- Our earlyconcernswere that the overhead data encapsulation that underlies object- ing logical variables and backtracking caused by the calling between Lisp and or i e n te d programming d ra rn a t i ca I1 y search in an object-based system: The Prolog would lead to major performance simplified the task ofwriting an interface Common Log system was designed to pre to the Loops system. In Loops, everything vide the features of a Prolog-like language is represented as objects. All communi- implemented on top of the cation to and from Loopsobjects, with the Object Specification. Our earlyconcerns were exception of some low-level data-access There is a third approach: an interface that the ovechead routines, occurs through the message between an existing object-based system between Lisp and Prolog sending mechanism. and a logic-basedsystem. Abbott calls such Therefore, only a little coding i I re- an interface a Boolean bridge.3 There are would cause mdor perfiormance prublems. quired to provide the Prolog progr? mmer two advantages to creating such a bridge: the full range of capabilities to maiipulate First, you can access all the support tools of These fears were the Loopsobjectsavailable to the Lispprtr both environments. Second, there is no gloundless. grammer. A of predicates is required so degradation of performance due to one the Prolog programmer can retrieve the language being implemented top of contents of an object’s slots, insert new another. values into the slots of a specified object, problems. These fears proved to be This article describes an interface that and send messages to an object. This func- groundless. On the Xerox Lisp Machine, was developed between Loops4and Xerox tionality is provided through three Prolog the cost in machine cycles for a call to a Quintus Prolog. Loops is an extension to procedures: get_value/3, put_value/3, Lisp function from Prolog is only slightly the Xerox AI Environment to support ob and send_message/4. ject-oriented programming; Xerox Quin- more expensive than a simple function Using the Loops access predicates, the tus Prolog is a version of Prolog that runs call in Lisp. Prolog programmer can easily create ob on Xerox Lisp Machines. jects, manipulate the contents of object The interface has three layers. At the AccessingLoopsfrom slots, and execute object methods. For ex- lowest level, a set of Prolog predicatesgives Prolog ample, you could use the following Prolog the Prolog programmer access to Loops Figure 1 shows how Prolog is imple- procedure to perform a slot-value substi- objects. This lowest level is the bridge from mented on the Xerox Lisp Machine. In tution in a Loops object: Prolog to Loops. At the next level, pro- this implementation, Prolog and Lisp gramming tools in the Loops environ- each have their own set ofmicrocode. The substitute-slot-value (Object,Slot, ment letobjectmethodsbedefinedinPro- microcode sets are stored in two different Old-value,New-value) :- get-value (Object,Slot,Old-value), log. At the highest level, the Prolog banksofcontrol-store chips. In asense, the put-valur(Object,Slot,New-value). programmer may treat Prolog clauses as Lisp Machine becomes a Prolog Machine Loops objects that can be manipulated when it is executing Prolog microcode. Be- The first goal checks to see if the value

July 1988 37

- - ...... - - ...... -. interface must allow calls to Prolog proce- that would let the methods he invoked via dures from the Lisp world. the Loops message-sending mechanism. Ideally, it should be transparent to the Prolog procedures as sender whether the method is defined in methods Lisp or Prolog. Loops was initially designed to offer the features of a -likelanguage to the Message-sending mechanism. Xerox Lisp programmer. It provides facilities to Quintus Prolog provided a way through a define classes and methods and to create Lisp function named PROILK to facilitate instances. Loops comes with a generous the creation of Prolog queries from Lisp. collection of system-defined classes and a If a Imops programmer wanted to invoke set of elegant programming tools. These the Prolog procedure foo/3, using the tools include ones that display and function call manipulate class hierarchies. You can in- (PROLOG 'foohdr (IJST 'argl *VALUE* Figure 1. Lisp and Prolog methods. voke most common programming opera- 'arg3)) tions with a mouse. would have the same effect the Prolog In the Loopsenvironment, object meth- as stored in aslot matches the targetvalue. If ods are invoked by sending a message to query this goal succeeds, the second goal will al- the object. The syntax for sending a mes foobx(arg1,X,arg3). ways succeed and will install the new value sage is The interface treats the Prolog proce- in the slot as a side effect. (tSObjectNarrie Selectoi- argl arg2 dure as though it were determinate - it The Prolog/Loops interface is com- xpv) will always return only the first answer. pletely adequate for the Prolog program- Variables are passed by substituting the mer who merely wants to write code that In this case, $ObjectName is the handle global symbol *VALUE* for each variable in will reason using the information repre- for the object to which the message is the argument list. The above call to PRO> sented (explicitly or implicitly) in the being sent, and Selector is the name of the qui would return a list containing the first Loops object world. However, some pro method to be invoked. value towhich thevariable X had been uni- grammers may want to define methods Loops methods are themselves objects. fied. that refer to Prolog procedures. Indeed, Loops methods have two components: a The PROLOG function provides a bridge they may want to define entire methodsin method object and a functional defini- from the Lisp world to the Pr, r world. Prolog. To satisfy these programmers, the tion. To work, the Inops/Prolog interface needed a way to define methods in Prolog You could simply embed calls IC, PROLOG into Inops, but these would not he true Prolog methods because they would not be visible to the Loops environment. In this simple approach to integrating Prolog % Prolog Method into Loops methods, object-oriented % Class: Class features such as method inheri- % Selector: PatternMatch Loops tance and method combination may not '$Class.PatternMatch ' (Self,Arg1 ,Arg2,.. .,Result) :- work properly. goal-1, The solution to this problem is to inte- goal-2, grate Prolog-defined methods more closely into the Loops system. This can he done by specializing the class Method in Loops to define a new class called Prolog- g0dl-K. Method. PrologMethods have four com- ponents: a method object, a functional '$Class.PatternMatch' (Self,Argl ,Arg2,.. .,Result) :- definition, the text representing the Pro goal-1, log source code, and a set of clauses that goal-2, have been interpreted or compiled into the Prolog database. Sending messages to invoke a Prolog- goal-K Method object could be done preciselythe same way you would send a message to in- voke a method defined in Lisp: When a Figure 2. for a Prolog method. message is directed to an object, the SEND

38 IEEE Software function determines which definition of Most Loops programmers define new prompted for a method name. A Prolog that method to use by checking the list of methods through a special browser win- method template similar to the one in superclasses for that object. If the appro- dow known as the Class Inheritance Lat- Figure 2 would then appear on the screen. priate method definition happens to be tice (see Figure 5 for an example). The system would fill in the Class and written in Prolog, the PROLOG function will The Class Inheritance Lattice is your in- Selector fields. It would conipose the prtr be called instead of-applying a Lisp func- terface to an object-oriented application. cedure name by concatenating the class tion to the list of arguments. The SEND With a mouse, you can select menu op name with the selector name and inserting function would return the first element of tions like Create Method, Edit Method, a $ at the beginning of the name. the list returned by PROI.OG. and Edit Class Description. In the ex- Following the convention used in Loops Itwouldalso beconvenient ifthewayyou tended interface, a menu option for creat- methods, the first argument to the Prolog define a Prolog method were compatible ing a Prolog method would be added. procedurewould be apointer to theobject with the way you define a Lisp method. If you selected this item, you would be to which the message was sent. You would

qecdentedversus logic programming Object-oriented and logic programming both represent radical de- Logic programming. In logic programming,you program by creat- partures from how programmers have traditionallydesigned programs ing a database of axioms. The program is executed by entering a and solved problems. Because both styles have the full expressive theorem and asking the system to find a proof given the set of axioms. power of a Turing machine, they are equivalent in power. But the two Prolog, the most popular exampleof this programming style, usesfirst- styles are not necessarily equivalent in the ease of implementation;that order predicate logic to derive theorems from the set of axioms in a usually depends on the application. database. Prolog are constructed of facts and rules. An ex- ample of a Prolog fact is Objectoriented programming. Object-oriented programming was first developed as aconvenientapproach to implement simulation temperature(jones,lOl ,oral) problems and distributed operating systems. The notions of objects, declarative reading of this statement might be “The patient Jones has classes, and message sending were first introduced in the Simula lan- an oral temperature of 101 degrees.” Prolog rules are if-then state- guage. Organizing code and data around the objects they represent ments of the form proved to be a very general and natural way to conceptualize applica- tions. fever(Patient) :- Objects can possess local storage in the form of slots, and they have temperature(Patient,Temp,oral), arepertoireofbehaviorscalled methods. Anobject’smethodis invoked Temp > 100. by sending a message to the object. Most object-oriented languages This rule would read, “If a patient has an oral temperature in excess use three types of objects: classes, metaclasses, and instances. of 100 degrees, that patient has a fever.” With this pair of Prolog Aclass represents a template for all members of a set of objects. For clauses, you could ask the system to prove a theorem that Jones has example, the class Programmer defines aset of objects that represent a fever. Even though there are no facts in the database about Jones or peoplewhowrite programs. The class Programmer may have asuper- fevers, Prolog could derive the theorem using the fever rule and the class, such Personor Employee, and it can in turn have subclasses as single fact about Jones’s temperature. such as LispHacker. Aclass object contains adescriptionof the class’s members. For ex- ample, the class Programmer defines a set of objects that represent Styles’ strengths. Both styles have their strengths. people who write programs. It may specify that all Programmer objects Object-oriented programming is particularly useful for problems should have a slot to store the list of programming languages they use. where data objects can be categorized hierarchically.The notions of The class Programmer may have a superclass, such a Person or Em- inheritance and data encapsulation encourage a structured imple- ployee. It can also have subclasses such as LispHacker. Members of mentation style and enhance program maintainability. Indeed, it has a class are calledinstances of the class. For example, Trn might be an been said that object-oriented programmingis to the 1980swhat struc- instance of the class LispHacker. tured programming was to the 1970s. Object-oriented programming Metaclasses are a special category of class objects whose in- has been used extensively in model building, computer-basedsimula- stances are always classes. A major convenience of the object- tions, and as a tool for knowledge representation in expert systems. oriented paradigm is that objects can inherit default characteristics Prolog, with as built-in faalities for backtracking and unification, is a (methodsandslot values) from their superclasses. Theclass Program- natural choice for any application requiring deductive retrieval. Logic mer, for example, could inherit variables such as Employer and Em- programming has been used in many areas, including computational ployee Number from the superclass Employee. linguistics, database research, and knowledge-basedsystems.

July 1988 39 the result returned by the function PRO> (PrologMethod ((Class PatternMatch) self Slot Pattern) LOG is always a list - in this case, yielding a (* tdk: “2GApr-87 16:36”) listinalist.Whatyou reallywantthen isthe (* Metamethod for finding all instance of Class with Slot values equal to Pattern) first element (the CAR) of the list returned (CAR (PROLOG (QUOTE $Class.PatternMatch) by PROID(;. (LIST self Slot Pattern (QUOTE *VALUE*))))) When you exit from the editor window after creating the functional definition for your PrologMethod, you will be asked to Figure 3. Functional definition for a Prolog Method. create a TEdit window to edit the Prolog source code for the method. Like in the functional definition, the system provides a special template to help you create the Prolog source definition for the Prolog- edit the template to specify other argu- Method of the metaclass$Class. Using the Method. The naming convention for Pre ments and to add the appropriate clauses. template provided for PrologMethods, IogMethods is similar to the Imops con- The text editor has options to interpret or you can define the functional definition as vention for the Prolog predicate that will compile the Prolog code in the window. shown in Figure 3. be associatedwith the PrologMethod. The Aswith all Loops methods, the first argu- name given to the Prolog procedure (the Example. As a simple example of a Pro- ment to the method is always bound to the functor) is constructed from the name of IogMethod’s use, say that you wanted to object to which the message was directed. the class forwhich the PrologMethod isde- create a method to search through the list In this case, you are adding two arguments fined and from the name of the selector of instances belonging to a certain class to to hold the name of the instance variable for the method. Figure 4 shows the ex- find all instances that hold a given value in and the value you want to match. The ample’s PrologMethod after editing. a specified slot. You can take advantage of global variable *VALUE* represents a Van- This simple pattern matcher could be Prolog’s built-in backtracking and unifica- able in your Prolog query. You will use this modified to use more complex patterns tion mechanisms to conduct this search. variable to hold the list of objects that such as ranges and match values for multi- You will define PatternMatch as a Prolog- match the pattern. When using *VALUE*, ple slots. The advantages of using Prolog become obvious when you design meth- ods to perform more complicated pattern matching.

% Prolog Method Rule-based approaches. 0 rg an i zi n g % Class: Class Prolog code as methods of objects is very % Selector: PatternMatch similar to how Loops handles rule-based ’$Class.PatternMatch’(Self,Slot,Pattern,MatchList) :- programming. Loops supports a rule lan- send-message (Self,’AMnstances!’,[I ,ObjectList) , guage that lets youwrite decision code in a match-objects (ObjectList,Slot,Pattern,MatchList)._ production-like, non-Lisp syntax. Loops rules are embedded in special Method ob match-objects( [I ,-,-, [I ) . jects known as RuleSetMethod objects. match-objects( [ ObjectlTail] ,Slot,Pattern, [ObjectlRest] ) :- When RuleSetMethod objects are com- get-value (Object,Slot,Pattern) , piled, the rules are simultaneously trans- match-objects(Tail,Slot,Pattern,Rest). lated into Lisp code and converted into in- match-objects( [-ITail] ,Slot,Pattern,MatchList) :- dividual Rule objects. match-objects(Tail,Slot,Pattern,MatchList). But Loops discourages you from manipulating the Rule objects. The ob jects representing the rules in RuleSet- Figure4. Example PrologMethod. Methods are not documented. In fact, most Loops programmers working with RuleSetMethods may not even be aware of their existence. They exist for the con- Prolog Object venience of the Loops system imple- menters, not for application program- mers. This sharply contrasts to how rule-based I programming is done in Intellicorp’s KEE Figure 5. Class-inheritancebrowser for PrologObject. expert-system shell. In KEE, you create

40 IEEE Software and manipulate rule objects explicitlyh In structures known as definition groups.* you can easily combine object-oriented, KEE, rules are first-class objects. KEE rule Representing source code as objects can accessoriented, and logic programming. frames have predefined slots such as PREM- significantly simplify management for The notion of representing inferential ISE, ACTION, and ASSERTION -and you can large projects undertaken by programmer data both as objects and as Prolog clauses add new slots ifyou want. teams. Using objects to represent Prolog offers special advantages to the system de- program elements would let the software signer: In Prolog, a rule ceases to exist as Prolog clauses as librarian for a project team apply these an entity in the database when it is re- objects ideas to logic programming as well. tracted. However,if the rule is also defined There are many situations where you Objects can also store information de- as an object, it can be asserted and re- may want to treat Prolog facts and rules as scribing the deductive relationships be- tractedatwillwithouteverbeingindanger objects. Different sea of clauses may repre- tween clause objects. This would include ofbeing lost from the system. This feature sent different (perhaps contradictory) information about what other clauses may is useful for implemen ting systems that are views of a problem. When clauses are rep have been used to derive this clause, as well based on propagation of constraints. If resented as objects, it is easy to switch views as what assumptions were made for this constraints are represented as Prolog by asserting and retracting sets of clause clause. You can use dependency informa- clauses, the set of constraints defining a objects. Another situation is during the de- problem could be expanded or con- sign of knowledge-ngineering tools. Rep tracted to reflect the addition or relaxa- resenting clauses as objects allows greater tion of constraints. flexibility in the design of sophisticated When orbjechiientd The ability to combine two or more prtr tools for creating and maintaining large and lo& pmglamming gramming paradigms produces an ex- knowledge bases. tremely flexible and powerful environ- styles are combined, they ment for developing applications of all Representing Prolog clausesas objects is unite synerg5sicallly. straightforward. Figure 5 shows one kinds. The advantages of such an ap- scheme that can define Prolog clausesand Loops and Prokog proach are clear for large knowledge- other objects composed of Prolog clauses. complement each other based applications: Figure 5 contains a Loops class-inheri- very constructively. For experienced developers, the use of tance browser for the class PrologObject. high-level languages in a multiparadigm PrologClause is shown as a subclassof Pre environment may be a costeffective alter- IogObject. The classes Unitclause, repre- native to the use of commercial expert-sys senting Prolog facts, and nonUnitClause, tion of this type to construct truth-mainte- tem shells, which are often constrained in representing Prolog rules, are specializa- nance systems: which are frequently used their abilities. tions of PrologClause. PrologClause ob- in expert systems to keep track of the as- Seasoned programmers should be able jects would have slots to store things like sumptions underlying a conclusion. to prototype systems - using a combina- the functor name, number of arguments, tion of object-oriented, access-oriented, and list of arguments. hen object-oriented and logic and logic programming - in little more PrologProcedure objects would be com- programming styles are com- time than it would take to prototype the posite objects containing an ordered list of W bined, they unite synergisti- application with a shell. PrologClause objects with the same func- cally: Loops and Prolog complement each The major benefit to the knowledge tor name and number of arguments. Pre other very constructively. Loops’s frame- engineer is greater flexibility in the choice logKE3 objects would be composite objects like inheritance and dataencapsulation of a knowledge-representation scheme. containing a list of PrologProcedure ob facilities, combined with Prolog’s built-in The knowledge engineer would be free to jects. Loops clauses may have more than facilities for pattern matching and deduc- design a custom system to satisfy the one superclass; auxiliary superclasses that tive retrieval, produce an ideal environ- special requirements of each application provide extraslots or methods to their sub ment for prototyping knowledge-based using the appropriate paradigm for each. classes are called mixins.’ PrologObject applications. .:. serves as a mixin for the class Prolog- Loops also supports a style of program- Method. ming known as access-oriented program- The class PrologObject provides certain ming.’ You can attach procedures to slots for storing information, such as the specified slots; these procedures get in- creation date and the author, that are in- voked whenever the slots are accessed. A herited by all its subclasses. This of slot with an attached procedure is called documentation is important when creat- an active value. You can use active values to References 1. M. Stefik,D.G.Bobrow,andKM. Kahn, “ln- ing and maintaining a large knowledge implement demons, drive gauges, and im- tegrating Access-Oriented Programming base. plement data probes, among other things. into a Multiparadigm Environment,”EEE Bobrow et al. presented the idea of or- The I,oops/Prolog interface is completely software,Jan.1986,pp. 1@18. ganizing source code into object-based compatiblewith the use of activevalues, so 2. J. Malpas, Prolog: A Rehlwnul Ianguage and

July 1988 41 1t.T Applzratzuns, Prentice-Hall, Englewood ImpLementpd with Object--0ri(.nterl and IA~C Magmine, Winter 1986, pp. 40-62. Cliffs, NJ.,1987. Programming, PhD dissertation, Computer 8. D.G. Bobrow, D.S. Fogelsong, and M.S. 3. R. Abbott, “Knowledge Abstraction,” Science Dept., Illinois Inst. of Technology, Mi11 er, “Defi n i t io n C,roil ps: Ma k i II g Cmm.ACM,Aug. 1987,pp.664-671. Chicago, 1987. Sources into First-Class Objects,” li-ans. 4. M. Stefik et al., “Knowledge Programming 6. R Fikes and T. Kehler, “The Role of Frame- ACM ConJ Objrct-Onmted Programming, in I.oops: Reprint on an Experimental based Representation in Reasoning,” ACM, NewYork, 1986. Course,”AIMagnzine,Fall 1983, pp. 3-13. Cmm.ACM, Sept. 1985, pp. 904920. 9. J. de Kleer, “An Assumption-Based TMS,” 5. T.D. Koschmann, Cm/mationnl Analysiy 7. M. Stefik and D. Bohrow, “Object-Oriented illlificznllnlirp, Vol. 28, No. 2; pp. 127- Citing n Simplt$d Truth-Mninhnnre Syytm Programming: Themes andvariations,” Al 162.

TimothyKoschmannis aseniormemberofthe engineering staff at Xrrox AI Systems. Before joining Xerox, he was the chief computer scientist for the Chicago Medical School. His research interests include reasoning systems and the design of object-oriented eriviron- ments. Koschmann received a RA in philosophy from the Uuiversity of Missouri at Kansas City, an MS in psychology from the University of Wisconsin at Milwaukee. and a PhD in corn- puter science from the Illinois Institute of Technology.

Martha Walton Evens is a professor of com- puter scirnce at the Illinois Institute of Tech- nolop. Her research interests include compu- tational linguistics and knowledge-based systems. Evens received a BA in mathematics from Bryn Mawr College, a Fulhright scholarship in Paris, an MA in mathematics from Kidcliffe College, and a PhD in coinputer scierice from Northwestern Ilniveraity. She is a past presi- dent of the ACM and a director ofAFIPS.

Address questions about this article to Koschmann at Xerox AI Systems, 3000 Des Plaines River Dr., Des Plaines, 11. 60018; AR- PAnet [email protected].

Reader Service Number 6 IEEE Software