Include Paulo Moura's Logtalk OO LP system
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@53 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
38247e38fc
commit
cc4531cd1e
134
Logtalk/LICENSE
Normal file
134
Logtalk/LICENSE
Normal file
@ -0,0 +1,134 @@
|
||||
|
||||
The "Artistic License"
|
||||
|
||||
Preamble
|
||||
|
||||
The intent of this document is to state the conditions under which a
|
||||
Package may be copied, such that the Copyright Holder maintains some
|
||||
semblance of artistic control over the development of the package, while
|
||||
giving the users of the package the right to use and distribute the
|
||||
Package in a more-or-less customary fashion, plus the right to make
|
||||
reasonable modifications.
|
||||
|
||||
Definitions
|
||||
|
||||
"Package" refers to the collection of files distributed by the
|
||||
Copyright Holder, and derivatives of that collection of files
|
||||
created through textual modification.
|
||||
|
||||
"Standard Version" refers to such a Package if it has not been
|
||||
modified, or has been modified in accordance with the wishes of
|
||||
the Copyright Holder as specified below.
|
||||
|
||||
"Copyright Holder" is whoever is named in the copyright or
|
||||
copyrights for the package.
|
||||
|
||||
"You" is you, if you're thinking about copying or distributing
|
||||
this Package.
|
||||
|
||||
"Reasonable copying fee" is whatever you can justify on the basis
|
||||
of media cost, duplication charges, time of people involved, and
|
||||
so on. (You will not be required to justify it to the Copyright
|
||||
Holder, but only to the computing community at large as a market
|
||||
that must bear the fee.)
|
||||
|
||||
"Freely Available" means that no fee is charged for the item
|
||||
itself, though there may be fees involved in handling the item.
|
||||
It also means that recipients of the item may redistribute it
|
||||
under the same conditions they received it.
|
||||
|
||||
1. You may make and give away verbatim copies of the source form of the
|
||||
Standard Version of this Package without restriction, provided that you
|
||||
duplicate all of the original copyright notices and associated
|
||||
disclaimers.
|
||||
|
||||
2. You may apply bug fixes, portability fixes and other modifications
|
||||
derived from the Public Domain or from the Copyright Holder. A Package
|
||||
modified in such a way shall still be considered the Standard Version.
|
||||
|
||||
3. You may otherwise modify your copy of this Package in any way,
|
||||
provided that you insert a prominent notice in each changed file stating
|
||||
how and when you changed that file, and provided that you do at least
|
||||
ONE of the following:
|
||||
|
||||
a.place your modifications in the Public Domain or otherwise make
|
||||
them Freely Available, such as by posting said modifications to
|
||||
Usenet or an equivalent medium, or placing the modifications on a
|
||||
major archive site such as uunet.uu.net, or by allowing the
|
||||
Copyright Holder to include your modifications in the Standard
|
||||
Version of the Package.
|
||||
|
||||
b.use the modified Package only within your corporation or
|
||||
organization.
|
||||
|
||||
c.rename any non-standard executables so the names do not conflict
|
||||
with standard executables, which must also be provided, and provide
|
||||
a separate manual page for each non-standard executable that clearly
|
||||
documents how it differs from the Standard Version.
|
||||
|
||||
d.make other distribution arrangements with the Copyright Holder.
|
||||
|
||||
4. You may distribute the programs of this Package in object code or
|
||||
executable form, provided that you do at least ONE of the following:
|
||||
|
||||
a.distribute a Standard Version of the executables and library
|
||||
files, together with instructions (in the manual page or equivalent)
|
||||
on where to get the Standard Version.
|
||||
|
||||
b.accompany the distribution with the machine-readable source of
|
||||
the Package with your modifications.
|
||||
|
||||
c.give non-standard executables non-standard names, and clearly
|
||||
document the differences in manual pages (or equivalent), together
|
||||
with instructions on where to get the Standard Version.
|
||||
|
||||
d.make other distribution arrangements with the Copyright Holder.
|
||||
|
||||
5. You may charge a reasonable copying fee for any distribution of this
|
||||
Package. You may charge any fee you choose for support of this Package.
|
||||
You may not charge a fee for this Package itself. However, you may
|
||||
distribute this Package in aggregate with other (possibly commercial)
|
||||
programs as part of a larger (possibly commercial) software distribution
|
||||
provided that you do not advertise this Package as a product of your
|
||||
|
||||
|
||||
|
||||
own. You may embed this Package's interpreter within an executable of
|
||||
yours (by linking); this shall be construed as a mere form of
|
||||
aggregation, provided that the complete Standard Version of the
|
||||
interpreter is so embedded.
|
||||
|
||||
6. The scripts and library files supplied as input to or produced as
|
||||
output from the programs of this Package do not automatically fall under
|
||||
the copyright of this Package, but belong to whomever generated them,
|
||||
and may be sold commercially, and may be aggregated with this Package.
|
||||
If such scripts or library files are aggregated with this Package via
|
||||
the so-called "undump" or "unexec" methods of producing a binary
|
||||
executable image, then distribution of such an image shall neither be
|
||||
construed as a distribution of this Package nor shall it fall under the
|
||||
restrictions of Paragraphs 3 and 4, provided that you do not represent
|
||||
such an executable image as a Standard Version of this Package.
|
||||
|
||||
7. C subroutines (or comparably compiled subroutines in other languages)
|
||||
supplied by you and linked into this Package in order to emulate
|
||||
subroutines and variables of the language defined by this Package shall
|
||||
not be considered part of this Package, but are the equivalent of input
|
||||
as in Paragraph 6, provided these subroutines do not change the language
|
||||
in any way that would cause it to fail the regression tests for the
|
||||
language.
|
||||
|
||||
8. Aggregation of this Package with a commercial distribution is always
|
||||
permitted provided that the use of this Package is embedded; that is,
|
||||
when no overt attempt is made to make this Package's interfaces visible
|
||||
to the end user of the commercial distribution. Such use shall not be
|
||||
construed as a distribution of this Package.
|
||||
|
||||
9.The name of the Copyright Holder may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
10.THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
The End
|
61
Logtalk/QUICK_START
Normal file
61
Logtalk/QUICK_START
Normal file
@ -0,0 +1,61 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
Quick start
|
||||
===========
|
||||
|
||||
|
||||
1. Open the manuals/index.html file with a web browser.
|
||||
|
||||
2. Select the Tutorial link. This will provide you with a basic understanding
|
||||
of the main Logtalk concepts.
|
||||
|
||||
3. Go back to the index.html file and select the User Manual link and then
|
||||
the Installing and running Logtalk link. This will provide you with a basic
|
||||
understanding of how to start Logtalk and compile and load Logtalk code.
|
||||
|
||||
|
||||
Assuming that Logtalk supports your Prolog compiler:
|
||||
|
||||
1. Read the NOTES file in the configs sub-directory to check if any patch
|
||||
or workaround is needed for your compiler.
|
||||
|
||||
2. Start your Prolog compiler.
|
||||
|
||||
3. Compile and load the config file for your Prolog compiler.
|
||||
|
||||
4. Compile and load the Logtalk pre-processor/runtime found in the compiler
|
||||
sub-directory.
|
||||
|
||||
Note that both the configuration files and the compiler/pre-processor
|
||||
files are Prolog files. The predicate called to load these files depends
|
||||
on your Prolog compiler. In case of doubt, consult your Prolog compiler
|
||||
reference manual or take a look at the definition of the predicate
|
||||
lgt_load_prolog_code/1 in the configuration file.
|
||||
|
||||
|
||||
Now you can try some of the included examples:
|
||||
|
||||
1. Open the examples sub-directory. There you find several sub-directories
|
||||
with ready to run examples. Select and open one of them.
|
||||
|
||||
3. Read the example NOTES file. Some examples are dependent on other
|
||||
examples or on library objects. You may need to load additional files before
|
||||
running the chosen example.
|
||||
|
||||
4. Change the working directory of your Prolog compiler to the example
|
||||
directory. If you don't know what predicate to use, check the configs/NOTES
|
||||
file or your Prolog reference manual.
|
||||
|
||||
5. Compile and load the file named <example name>.loader. This will compile
|
||||
and load all the example files. Note that the loader file is a Prolog file.
|
||||
|
||||
6. Open the example SCRIPT file. One by one, copy&paste or drag&drop the
|
||||
queries in the file to your Prolog top-level.
|
||||
|
||||
7. Enjoy!
|
122
Logtalk/README
Normal file
122
Logtalk/README
Normal file
@ -0,0 +1,122 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
CONTENTS
|
||||
|
||||
1. License
|
||||
2. Home of Logtalk package
|
||||
3. Registration
|
||||
4. Support
|
||||
5. Installation
|
||||
6. Documentation
|
||||
7. Upgrading
|
||||
8. Contributions
|
||||
|
||||
|
||||
1. LICENSE
|
||||
|
||||
The overall copyright and permission notice for Logtalk can be found in
|
||||
the LICENSE file in this directory. Logtalk follows the Perl Artistic
|
||||
license. The copyright notice and license applies to all files in this
|
||||
release (sources, documentation and examples) unless otherwise explicitly
|
||||
stated.
|
||||
|
||||
|
||||
2. HOME OF LOGTALK PACKAGE
|
||||
|
||||
The latest release of the Logtalk package is always available at the
|
||||
URL:
|
||||
|
||||
http://www.ci.uc.pt/logtalk/logtalk.html
|
||||
|
||||
At this address you can also find useful documentation and information
|
||||
about Logtalk.
|
||||
|
||||
|
||||
3. REGISTRATION
|
||||
|
||||
To register as a Logtalk user either use the registration form found at
|
||||
the Logtalk web site or send an email message to:
|
||||
|
||||
pmoura@noe.ubi.pt
|
||||
|
||||
with the following information:
|
||||
|
||||
email address, full name, organization, organization type
|
||||
(education, commercial, government,...) prolog compilers used (optional),
|
||||
platforms (mac, pc, unix,...) (optional)
|
||||
|
||||
|
||||
4. SUPPORT
|
||||
|
||||
Logtalk support is available for registered users via email to
|
||||
pmoura@noe.ubi.pt.
|
||||
|
||||
At the URL http://www.ci.uc.pt/logtalk/bugs.html you can find a list of
|
||||
known problems and download bug fixes. The latest news about Logtalk are
|
||||
available at the URL http://www.ci.uc.pt/logtalk/news.html
|
||||
|
||||
There is also a mailing list, logtalk, used to announce new releases and
|
||||
bug fixes and for discussion between Logtalk users, that you can subscribe.
|
||||
For instructions on how to subscribe send an email message to:
|
||||
|
||||
majordomo@ci.uc.pt
|
||||
|
||||
with the words:
|
||||
|
||||
help
|
||||
end
|
||||
|
||||
in the body of the message (not in the subject).
|
||||
|
||||
|
||||
5. INSTALLATION
|
||||
|
||||
Installing Logtalk is just a matter of uncompressing/unpacking the
|
||||
distribution archive file for your operating system. You can install
|
||||
Logtalk in any directory that you find convenient.
|
||||
|
||||
See the user manual for a description of the source files organization
|
||||
and for installing/using instructions (to read the user manual open the
|
||||
file manuals/index.html with a web browser).
|
||||
|
||||
|
||||
6. DOCUMENTATION
|
||||
|
||||
The reference and user manuals and the tutorial are provided in HTML format
|
||||
and are contained in the manuals directory.
|
||||
|
||||
PDF versions of all documentation are also available as a separated download
|
||||
from the Logtalk web site. The PDF files include page numbers, index and a
|
||||
table of contents and are available for printing in both A4 and US Letter
|
||||
paper formats.
|
||||
|
||||
The file RELEASE_NOTES contains descriptions of the changes made in
|
||||
Logtalk since the first public version. Read it carefully if you have
|
||||
been using a previous Logtalk version.
|
||||
|
||||
The file QUICK_START provides quick instructions for those of you in a hurry
|
||||
to run Logtalk, provided that your usual Prolog compiler is supported.
|
||||
|
||||
|
||||
7. UPGRADING
|
||||
|
||||
If you have been using a previous Logtalk version read the file UPGRADING for
|
||||
instructions on how to upgrade your programs to run under this new version.
|
||||
|
||||
|
||||
8. CONTRIBUTIONS
|
||||
|
||||
Contributions, constructive criticisms, code and suggestions are always
|
||||
welcome. If you want to contribute to this project, drop me a line to the
|
||||
support address given above.
|
||||
|
||||
|
||||
Happy Logtalking!
|
||||
|
||||
Paulo Moura
|
21
Logtalk/README.YAP
Normal file
21
Logtalk/README.YAP
Normal file
@ -0,0 +1,21 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
This version of Logtalk included in the YAP distribuition does not
|
||||
contain configuration files for other Prolog compilers. Also, the
|
||||
Logtalk compiler/pre-processor is contained in the library/logtalk
|
||||
directory.
|
||||
|
||||
Logtalk can be loaded from YAP either as described in the included
|
||||
Logtalk documentation or by using the call:
|
||||
|
||||
| ?- use_module(library(logtalk)).
|
||||
|
||||
Note that, although we load Logtalk using the @code{use_module/1}
|
||||
built-in predicate, the system is not packaged as a module not does
|
||||
it use modules in its implementation.
|
522
Logtalk/RELEASE_NOTES
Normal file
522
Logtalk/RELEASE_NOTES
Normal file
@ -0,0 +1,522 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
RELEASE NOTES
|
||||
=============
|
||||
|
||||
|
||||
2.8.4 - March 9, 2001
|
||||
|
||||
Updated config files for BinProlog 8.0, K-Prolog 5.01, XSB 2.3, and
|
||||
Amzi! Prolog 4.103~5.0.
|
||||
|
||||
New config file for Amzi! Prolog 6.1 beta.
|
||||
|
||||
Corrected an incomplete entity definition in the Logtalk XML DTD.
|
||||
Rewrite the Logtalk XSLT files for improved compatibility with XSLT
|
||||
processors regarding handling of whitespace.
|
||||
|
||||
A first cut of a XML Schema for the Logtalk XML documentation files
|
||||
(file xml/logtalk.xsd).
|
||||
|
||||
Small improvements to the documentation.
|
||||
|
||||
|
||||
2.8.3 - November 21, 2000
|
||||
|
||||
Corrected a bug where sending a message for a built-in method to an
|
||||
unknown object fails instead of generating the expected exception.
|
||||
|
||||
Put some ocorrences of atoms public, mode, and type between ()'s to
|
||||
avoid compilation errors in BinProlog 8.0 and other Prolog compilers
|
||||
that declare these atoms as operators.
|
||||
|
||||
Corrected the definition of the state space of the "Missionaires and
|
||||
Cannibals" problem in the "searching" example that resulted in some
|
||||
wrong solutions.
|
||||
|
||||
|
||||
2.8.2 - November 5, 2000
|
||||
|
||||
New .xsl file to convert .xml files to TeXML files.
|
||||
|
||||
Fixed a problem with explicit compilation options being correctly parsed
|
||||
but not processed.
|
||||
|
||||
Corrected a bug regarding default init options definition for the
|
||||
points, polygons, and bricks examples. Updated category initialization
|
||||
in roots example.
|
||||
|
||||
|
||||
2.8.1 - October 28, 2000
|
||||
|
||||
New config file for K-Prolog 5.0.
|
||||
|
||||
Improved compiler error detection and reporting of invalid directives
|
||||
and clauses.
|
||||
|
||||
Corrected a problem with some Prolog compilers where compiling a file
|
||||
containing syntax errors may not close the file after the errors are
|
||||
reported.
|
||||
|
||||
Many small improvements to all documentation.
|
||||
|
||||
Small improvements to the .xsl files and to the output of .xml files.
|
||||
|
||||
|
||||
2.8.0 - October 1, 2000
|
||||
|
||||
I have found just a few days ago that I have uploaded to the Logtalk web
|
||||
server a development version of Logtalk 2.7.0 instead of the final one!
|
||||
To avoid confusions I decided to release a new version.
|
||||
|
||||
Changed implementation of the logtalk_compile/1-2 and logtalk_load/1-2
|
||||
predicates to only accept a list of entities instead of either an entity
|
||||
or a list of entities, simplifying and improving the performance of these
|
||||
predicates. Improved error reporting for the logtalk_compile/1 and
|
||||
logtalk_load/1 predicates. Updated relevant sessions in the user and
|
||||
reference manuals.
|
||||
|
||||
Simplified the implementation of the following predicates, by sharing
|
||||
the error checking code with the corresponding extended versions:
|
||||
implements_protocol/2, imports_category/2, instantiates_class/2,
|
||||
specializes_class/2, extends_protocol/2, and extends_object/2.
|
||||
|
||||
Completed some missing library file dependencies documentation in some
|
||||
examples.
|
||||
|
||||
New version of the QUICK_START help file. Updated tutorial.
|
||||
|
||||
|
||||
2.7.0 - August 24, 2000
|
||||
|
||||
First release of the Logtalk standard library of objects, protocols and
|
||||
categories.
|
||||
|
||||
Rewritten all examples to use the new Logtalk standard library.
|
||||
|
||||
New logtalk_load/2 and logtalk_compile/2 Logtalk built-in predicates,
|
||||
accepting a list of compiler options. See the User and Reference Manuals
|
||||
for details.
|
||||
|
||||
New XSLT file for viewing .xml files in Microsoft Internet Explorer 5.5
|
||||
for Windows after installing the latest Microsoft XML Parser Preview
|
||||
Release. Small improvements in all XSLT files.
|
||||
|
||||
Starting with this version all config files need to provide a definition
|
||||
for the compare/3 predicate if it is not built-in in the corresponding
|
||||
Prolog compiler. Also, default Logtalk compiler options are now also set
|
||||
in the config files using the lgt_default_compiler_option/2 predicate.
|
||||
|
||||
Updated config file for CIAO 1.6p1. See the configs/NOTES file for
|
||||
details.
|
||||
|
||||
|
||||
2.6.2 - July 4, 2000
|
||||
|
||||
Improved performance and error checking for the built-in predicates
|
||||
create_object/4, create_protocol/3 and create_category/4.
|
||||
|
||||
Updated config file for BinProlog 7.83.
|
||||
|
||||
Many small updates to all documentation.
|
||||
|
||||
New PDF versions of the documentation formated for printing (with page
|
||||
numbers, table of contents and index)are now available in both A4 and
|
||||
US letter formats.
|
||||
|
||||
|
||||
2.6.1 - May 5, 2000
|
||||
|
||||
Modified the structure of the automatically generated XML documenting
|
||||
files to improve XSL translation performance. Added a new, more standard
|
||||
compliant, XSL file to generate HTML files and renamed the old one to
|
||||
ie5.xsl. See the xml/NOTES file for details. Corrected an error in the
|
||||
logtalk.css CSS file.
|
||||
|
||||
Modified the definitions of predicates lgt_file_extension/2 and
|
||||
lgt_file_name/2 in all config files.
|
||||
|
||||
Updated all the user manual sessions related to automatic documentation.
|
||||
|
||||
Updated all HTML documentation for future XHTML 1.0 conformance.
|
||||
|
||||
Start adding documenting directives to most examples.
|
||||
|
||||
|
||||
2.6.0 - April 27, 2000
|
||||
|
||||
Added support for documentation of objects, protocols, and categories,
|
||||
using automatic generation of XML files.
|
||||
|
||||
Added info/1 and info/2 directives for documenting objects, protocols,
|
||||
categories, and predicates. Added definition of documentation file name
|
||||
extension and default file names for the DTD and XSL files to the config
|
||||
files.
|
||||
|
||||
Improved error checking for the built-in predicates create_object/4,
|
||||
create_protocol/3 and create_category/4 to also detect invalid entity
|
||||
identifiers.
|
||||
|
||||
Updated the user and reference manuals to describe the new automatic
|
||||
documenting features.
|
||||
|
||||
Updated all HTML documentation to conform to HTML 4.01 strict standard.
|
||||
|
||||
Corrected some wrong cross-reference links and titles in the reference
|
||||
and user manuals HTML pages.
|
||||
|
||||
PDF versions of the manuals and tutorial are now available in both A4
|
||||
and US letter formats.
|
||||
|
||||
Corrected two errors in the searching example, one in the definition of
|
||||
the farmer problem state space and the other when backtracking over
|
||||
performance reports.
|
||||
|
||||
|
||||
2.5.2 - March 7, 2000
|
||||
|
||||
Updated manuals to clarify some limitations of declaring and defining
|
||||
dynamic predicates inside categories and documented a way of using the
|
||||
built-in local method this/1 to access object parameters.
|
||||
|
||||
Removed references to parametric categories from the Logtalk
|
||||
documentation (at runtime we can only access object parameters,
|
||||
not category parameters).
|
||||
|
||||
Corrected two wrong declarations of built-in methods (forall/2 and
|
||||
retractall/1) in the Logtalk pre-processor.
|
||||
|
||||
Corrected bug where predicates declared in dynamic entities may have
|
||||
a "static" instead of a "dynamic" property.
|
||||
|
||||
Corrected a bug in category compilation that prevented a dynamic category
|
||||
from being abolished. Speedup predicate definition lookups for categories.
|
||||
|
||||
|
||||
2.5.1 - February 18, 2000
|
||||
|
||||
Two new examples: birds, a bird identification expert system adopted
|
||||
(with permission) from an Amzi example, and viewpoints, a set of
|
||||
prototypes showing how to do property sharing and value sharing in
|
||||
Logtalk.
|
||||
|
||||
Renamed config file yap421.config to yap430.config to match the name of
|
||||
the new YAP 4.3.0 public release (named 4.2.1 while on beta testing).
|
||||
|
||||
Partial config file for Trinc Prolog R3.
|
||||
|
||||
|
||||
2.5.0 - December 29, 1999
|
||||
|
||||
The Logtalk pre-processor now accepts arbitrary clauses and directives
|
||||
to appear in a file before an opening entity directive. The clauses and
|
||||
directives are added unchanged to the compiled file.
|
||||
|
||||
Improved performance for all kinds of message sending.
|
||||
|
||||
Two new examples: reflection, showing how to implement a simple
|
||||
class-based reflective system, and symdiff, showing how to use
|
||||
parametric objects to implement symbolic expression differentiation
|
||||
and simplification.
|
||||
|
||||
Updated config file for the beta 8 release of SWI-Prolog 3.3.0.
|
||||
|
||||
|
||||
2.4.0 - December 1, 1999
|
||||
|
||||
Logtalk is now an Open Source project, available under Perl's Artistic
|
||||
license.
|
||||
|
||||
Two new examples: instmethods, ilustrating the use of instance defined
|
||||
methods, and classvars, showing how to implement class variables.
|
||||
|
||||
Updated Logtalk grammar to explicitly allow for user-defined types
|
||||
in mode/2 directives.
|
||||
|
||||
New config files for SWI-Prolog 3.3.0, SICStus Prolog 3.8 and CIAO
|
||||
Prolog 1.4p0 (incomplete).
|
||||
|
||||
Updated config file for B-Prolog 4.0.
|
||||
|
||||
Updated config file for GNU Prolog to use the new call_with_args()
|
||||
built-in predicate added in version 1.1.0.
|
||||
|
||||
Updated config file for YAP Prolog to use the new call_with_args()
|
||||
built-in predicate added in version 4.2.1.
|
||||
|
||||
|
||||
2.3.1 - September 22, 1999
|
||||
|
||||
Logtalk pre-processor updated to only report one warning per redefined
|
||||
Logtalk or Prolog built-in predicate.
|
||||
|
||||
Changed some occurrences of atom "public" to "(public)" in
|
||||
compiler/logtalk.pl file to avoid syntax errors in Prolog compilers
|
||||
(like BinProlog) that define "public" as an operator. Also put some
|
||||
terms between ()'s to avoid syntax errors with ALS Prolog 3.1
|
||||
|
||||
Update config file for ALS Prolog to work with version 3.1.
|
||||
|
||||
Updated configs/NOTES file include a workaround to use Logtalk with
|
||||
XSB 2.0, some guidelines on how to write loader utility files for
|
||||
BinProlog 7.50, and a bug in ALS Prolog 3.1 that affects Logtalk.
|
||||
|
||||
|
||||
2.3.0 - September 12, 1999
|
||||
|
||||
Metapredicate information is now stored with the other predicate
|
||||
properties, instead of being discarded after compiling the clauses of
|
||||
a metapredicate. Added predicate property metapredicate/1. It is now
|
||||
possible to assert clauses for dynamic metapredicates.
|
||||
|
||||
Corrected a bug in the processing of metacalls in pseudo-object user.
|
||||
|
||||
Corrected a bug in the implementation of private inheritance.
|
||||
Improved performance of protected inheritance.
|
||||
|
||||
Corrected failure of processing initialization/1 and op/3 directives in
|
||||
create_object/4, create_category/4 and create_protocol/3 built-in
|
||||
predicates.
|
||||
|
||||
Corrected a bug when calling private static category predicates from
|
||||
importing objects. Simplified code generated for categories.
|
||||
|
||||
Rewrite code for the built-in method current_predicate/1 to avoid
|
||||
duplicated or wrong results when overriding predicate declarations
|
||||
and to ensure that all possible argument type errors are detected.
|
||||
|
||||
Changed compilation of classes that do not instantiate any (meta)class
|
||||
in order to throw the correct exception when a message is sent to them.
|
||||
|
||||
Changed compilation of root objects (that do not instantiate, specialize
|
||||
or extend other objects) so that calls to "super" (^^/1) fail (as they
|
||||
should) instead of generating a "predicate does not exist" error message.
|
||||
|
||||
Changed implementation of "super" calls (^^/1) to avoid a potential
|
||||
endless loop problem when using these calls from the inheritance root
|
||||
object of a reflexive class-based systems.
|
||||
|
||||
Pre-processor now checks for callable and object identifier errors.
|
||||
Runtime now checks for non-instantiated messages.
|
||||
|
||||
Added new example (inheritance) about public, protected and private
|
||||
inheritance.
|
||||
|
||||
Updated metapredicates, lo, kernel, and types examples. Most of the
|
||||
code in the last two examples is being updated to form the basis of an
|
||||
upcoming Logtalk standard library.
|
||||
|
||||
Small changes in the pre-processor/runtime code for compatibility with
|
||||
ECLiPSe 4.2.2. Updated config files for this Prolog compiler.
|
||||
|
||||
Rewrite some predicates in the config files for SWI-Prolog and LPA
|
||||
Mac & WIN Prologs for improved performance.
|
||||
|
||||
New tutorial session about events and monitors.
|
||||
|
||||
Updated documentation to match the changes made in this version.
|
||||
|
||||
|
||||
2.2.0 - July 10, 1999
|
||||
|
||||
Implemented public, protected and private object inheritance, protocol
|
||||
implementation and category importation.
|
||||
|
||||
New Logtalk built-in predicates instantiates_class/3, extends_object/3,
|
||||
extends_protocol/3, specializes_class/3, imports_category/3 and
|
||||
implements_protocol/3. The third argument returns the relation scope.
|
||||
|
||||
Pre-processor now checks most directive errors.
|
||||
|
||||
Changed ^^/1 (super call) implementation to only allow the use of a
|
||||
single predicate call for argument and to retain the original sender
|
||||
of the message (see the updated sicstus example).
|
||||
|
||||
Fixed bug that prevented directives with a variable number of arguments
|
||||
(like dynamic(), public(), uses(), ...) being recognized.
|
||||
|
||||
Changed definition of predicate read_term/3 in the configs files of Amzi!,
|
||||
Aquarius, Arity, Eclipse, IC, K, LPA Mac&WIN, Master and XSB to always
|
||||
instantiates the singleton variables list to the empty list. Needed to
|
||||
prevent backtracking problems in logtalk_load/1 and logtalk_compile/1
|
||||
predicates.
|
||||
|
||||
Removed choice-point in processing metacalls in predicate definitions.
|
||||
|
||||
A banner with the Logtalk version is printed after loading the runtime/
|
||||
pre-processor.
|
||||
|
||||
Removed variables example. The category attributes is now part of the
|
||||
kernel example. Corrected some warmless syntax errors in directives in
|
||||
kernel/attributes.lgt, kernel/monitor.lgt and miscellaneous/queens.lgt.
|
||||
|
||||
Changed name of blocks example to bricks and object "block" to "brick"
|
||||
in order to avoid problems with some Prolog compilers that use the atom
|
||||
"block" for operators or built-in predicates.
|
||||
|
||||
|
||||
2.1.0 - May 11, 1999
|
||||
|
||||
Fixed some bugs in the definition of the pseudo-object user when sending
|
||||
the message predicate_property/2.
|
||||
|
||||
Renamed config file for Calypso to GNU Prolog.
|
||||
|
||||
New config file for LPA WinProlog 4.0.
|
||||
|
||||
Corrected the omission in the documentation of the Logtalk grammar of the
|
||||
built_in entity property.
|
||||
|
||||
New tutorial pages about building reflective class-based systems.
|
||||
|
||||
Modified pre-processor to compile throw/1 as a control structure to
|
||||
ensure compatibility with the GNU-Prolog compiler.
|
||||
|
||||
Modified pre-processor to ensure compatibility with Prolog compilers that
|
||||
use immediate update semantics instead of the ISO logical database update.
|
||||
|
||||
Improved simplification of compiled object and category clauses.
|
||||
|
||||
Rewrite and clean up pre-processor code for better compiler performance.
|
||||
|
||||
Several updates to the examples files.
|
||||
|
||||
Changed all example loader files to wrap the call to logtalk_load/1 inside
|
||||
an initialization/1 directive for ISO standard compliance.
|
||||
|
||||
|
||||
2.0 GM - February 9, 1999
|
||||
|
||||
Removed some redundant choice-points that are being created when
|
||||
compiling Logtalk entities.
|
||||
|
||||
Small compilation speed optimizations.
|
||||
|
||||
Logtalk compiled files now contain the declarations for the message
|
||||
sending operators to ensure compatibility with some Prolog compilers.
|
||||
|
||||
Changed the way Logtalk pre-processor writes directives to ensure
|
||||
compatibility with some Prolog compilers. Corrected a bug in the
|
||||
processing of the op/3 directive.
|
||||
|
||||
Updated PrologII+ config file for version 4.5.
|
||||
|
||||
Changed the definitions of catch/3 and throw/1 in the config files for
|
||||
LPA Prolog compilers.
|
||||
|
||||
New config file for MasterProlog 4.1; removed config file for the
|
||||
old BIM Prolog 4.0.
|
||||
|
||||
Corrected an error in the config file for OpenProlog in the definiton
|
||||
of the write_term/3 predicate.
|
||||
|
||||
Added a safer definition for write_term/3 predicate in the config
|
||||
files for Amzi, Aquarius, Arity, Eclipse, IC, K, LPA Mac, LPA Win,
|
||||
and XSB Prolog compilers.
|
||||
|
||||
Added a QUICK_START file.
|
||||
|
||||
|
||||
2.0 Beta 3 - February 1, 1999
|
||||
|
||||
Closed some encapsulation holes in the implementation of super calls.
|
||||
|
||||
Changed Logtalk pre-processor to use write_term/3 instead of write/2 and
|
||||
writeq/2 to workaround some compatibility problems with some Prolog
|
||||
compilers.
|
||||
|
||||
Changed mode operators priority and type to be compatible with the ISO
|
||||
standard.
|
||||
|
||||
Modified definition of predicate read_term/3 in the config file for Amzi
|
||||
compiler to return the atom end_of_file instead of '!EOF' at the end of
|
||||
a file (this prevented Logtalk to complete compilation any file under
|
||||
this compiler). Improved detection of built-in predicates while compiling.
|
||||
|
||||
Removed config file for wamcc. This compiler have been replaced by
|
||||
Calypso (developed by the same author).
|
||||
|
||||
Updated K-Prolog config file for version 4.50.
|
||||
|
||||
Improved documentation of template config file.
|
||||
|
||||
Added SCRIPT files to the kernel and types examples.
|
||||
|
||||
Updated Tutorial and User and Reference Manuals.
|
||||
|
||||
New end user license.
|
||||
|
||||
|
||||
2.0 Beta 2 - November 16, 1998
|
||||
|
||||
Built-ins logtalk_compile/1 and logtalk_load/1 updated to match
|
||||
the documentation regarding thrown errors and to accept a list of
|
||||
entities to compile/load.
|
||||
|
||||
Modified the examples loader utility files to make only a call to
|
||||
logtalk_load/1 by using a list of entities. This should make it easy to
|
||||
modify these files for compilers that don't support arbritrary queries
|
||||
in a file.
|
||||
|
||||
Logtalk runtime no longer tries to catch some of the errors thrown
|
||||
by ::/2.
|
||||
|
||||
Added to all config files a Logtalk predicate to check if a file
|
||||
exists in the current working directory (used by the logtalk_load/1
|
||||
and logtalk_compile/1 Logtalk built-in predicates).
|
||||
|
||||
New configs files for the K-Prolog 4.14 and Calypso 1.0b6 Prolog
|
||||
compilers.
|
||||
|
||||
Completed the config file for Open Prolog 1.03d38 (with the exception
|
||||
of lgt_current_date/3 that still have a dummy definition).
|
||||
|
||||
Added a missing definition for Logtalk predicate forall/2 to the config
|
||||
file for Prolog II+ 4.4.
|
||||
|
||||
Modified Logtalk pre-processor/runtime to avoid syntax errors when
|
||||
running on Open Prolog or Calypso and to remove some redundant
|
||||
choice-points that are being created when compiling categories and
|
||||
protocols.
|
||||
|
||||
Modified some examples that use operators to avoid syntax errors in
|
||||
some Prolog compilers.
|
||||
|
||||
Modified the implementation of the built-in method
|
||||
predicate_property/2 to avoid duplicate answers and to throw an
|
||||
instantiation error if the first argument is not bound.
|
||||
|
||||
Modified definition of the pseudo-object user to hide Logtalk pre-
|
||||
processor predicates from the current_predicate/1 built-in method and
|
||||
to ensure that the predicate_property/2 built-in method returns
|
||||
Logtalk defined predicate properties for built-in Logtalk and Prolog
|
||||
predicates.
|
||||
|
||||
Modified Prolog code generated by the pre-processor to further minimize
|
||||
possible conflicts with user defined predicates.
|
||||
|
||||
Added a lgt_predicate_property/2 predicate to the config files to
|
||||
improve Logtalk portability.
|
||||
|
||||
Updated Tutorial and User and Reference Manuals.
|
||||
|
||||
|
||||
2.0 Beta 1 - October 18, 1998
|
||||
|
||||
Added basic support for implementation multi-inheritance.
|
||||
|
||||
Logtalk pre-processor updated to try to detect misspelt local
|
||||
predicate calls.
|
||||
|
||||
First public beta.
|
||||
|
||||
|
||||
2.0 Alpha 1 - July, 1998
|
||||
|
||||
First release for registered users.
|
36
Logtalk/UPGRADING
Normal file
36
Logtalk/UPGRADING
Normal file
@ -0,0 +1,36 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
|
||||
Upgrading from Logtalk 1.x
|
||||
==========================
|
||||
|
||||
Logtalk 2.x is not compatible with programs written for version 1.x.
|
||||
However, you should be able to translate most programs to make them
|
||||
run under this new version. Most of the examples provided with previous
|
||||
versions have been rewritten to run under version 2.x. Use them as
|
||||
translation examples.
|
||||
|
||||
|
||||
Upgrading from a previous Logtalk 2.x version
|
||||
=============================================
|
||||
|
||||
If your Logtalk programs depend on some of the example files, it is
|
||||
advisable that you check your code against the new version before
|
||||
throwing away the older release.
|
||||
|
||||
Logtalk source files will need to be recompiled because of the changes
|
||||
done in the version 2.5.0 to improve message sending performance.
|
||||
|
||||
Logtalk version 2.7.0 provides the first cut of the Logtalk standard library.
|
||||
Most examples have been rewritten to take advantage of the library.
|
||||
|
||||
Logtalk version 2.8.0 introduces a small change on the logtalk_compile/1-2
|
||||
and logtalk_load/1-2 predicates that may imply updating your loader utility
|
||||
files: the first argument is now always a list of entities even if we want
|
||||
to compile or laod a single entity.
|
64
Logtalk/examples/birds/NOTES
Normal file
64
Logtalk/examples/birds/NOTES
Normal file
@ -0,0 +1,64 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
To load all objects in this example consult the birds.loader utility
|
||||
file.
|
||||
|
||||
You will also need to also load the library/hierarchies.loader file.
|
||||
Note that the *.loader files are Prolog files.
|
||||
|
||||
This folder contains an example of a bird identification expert system
|
||||
adopted with permission from the book "Adventure in Prolog" by Amzi! inc.
|
||||
The book is available on-line in HTML format at the URL:
|
||||
|
||||
http://www.amzi.com
|
||||
|
||||
Please refer to the book for more information on the original example.
|
||||
|
||||
|
||||
The bird identification hierarchy is organized as a prototype hierarchy
|
||||
as follows:
|
||||
|
||||
<order>
|
||||
<family>
|
||||
<bird>
|
||||
|
||||
order
|
||||
falconiforms
|
||||
falcon
|
||||
peregrine_falcon
|
||||
sparrow_hawk
|
||||
vulture
|
||||
california_condor
|
||||
turkey_vulture
|
||||
passerformes
|
||||
flycatcher
|
||||
ash_throated_flycatcher
|
||||
great_crested_flycatcher
|
||||
swallow
|
||||
barn_swallow
|
||||
cliff_swallow
|
||||
purple_martin
|
||||
tubenose
|
||||
fulmar
|
||||
albatross
|
||||
black_footed_albatross
|
||||
laysan_albatross
|
||||
waterfowl
|
||||
duck
|
||||
female_mallard
|
||||
male_mallard
|
||||
pintail
|
||||
goose
|
||||
canada_goose
|
||||
snow_goose
|
||||
swan
|
||||
trumpeter_swan
|
||||
whistling_swan
|
||||
|
||||
|
72
Logtalk/examples/birds/SCRIPT
Normal file
72
Logtalk/examples/birds/SCRIPT
Normal file
@ -0,0 +1,72 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
% ask the expert system for help in identifying a bird:
|
||||
|
||||
| ?- expert::identify.
|
||||
Bird identification expert system
|
||||
|
||||
bill:sharp_hooked? (yes or no): yes.
|
||||
eats:birds? (yes or no): yes.
|
||||
feet:curved_talons? (yes or no): yes.
|
||||
head:large? (yes or no): yes.
|
||||
|
||||
What is the value for tail?
|
||||
1 : narrow_at_tip
|
||||
2 : forked
|
||||
3 : long_rusty
|
||||
4 : square
|
||||
5 : other
|
||||
Enter the number of choice> 1.
|
||||
|
||||
wings:long_pointed? (yes or no): yes.
|
||||
|
||||
Possible identification : peregrine_falcon
|
||||
|
||||
No (more) candidates found.
|
||||
|
||||
(16379 ms) yes
|
||||
|
||||
|
||||
% identify another bird:
|
||||
|
||||
| ?- expert::identify.
|
||||
Bird identification expert system
|
||||
|
||||
bill:sharp_hooked? (yes or no): no.
|
||||
bill:flat? (yes or no): no.
|
||||
bill:short? (yes or no): no.
|
||||
bill:hooked? (yes or no): yes.
|
||||
|
||||
What is the value for flight?
|
||||
1 : ponderous
|
||||
2 : powerful
|
||||
3 : agile
|
||||
4 : flap_glide
|
||||
5 : other
|
||||
Enter the number of choice> 2.
|
||||
|
||||
color:dark? (yes or no): yes.
|
||||
live:at_sea? (yes or no): yes.
|
||||
nostrils:external_tubular? (yes or no): yes.
|
||||
|
||||
What is the value for size?
|
||||
1 : large
|
||||
2 : plump
|
||||
3 : medium
|
||||
4 : small
|
||||
Enter the number of choice> 1.
|
||||
|
||||
wings:long_narrow? (yes or no): yes.
|
||||
|
||||
Possible identification : black_footed_albatross
|
||||
|
||||
No (more) candidates found.
|
||||
|
||||
(34624 ms) yes
|
||||
| ?-
|
14
Logtalk/examples/birds/albatross.lgt
Normal file
14
Logtalk/examples/birds/albatross.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(albatross,
|
||||
imports(descriptors),
|
||||
extends(tubenose)).
|
||||
|
||||
|
||||
family(albatross).
|
||||
|
||||
size(large).
|
||||
|
||||
wings(long_narrow).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/ash_throated_flycatcher.lgt
Normal file
10
Logtalk/examples/birds/ash_throated_flycatcher.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(ash_throated_flycatcher,
|
||||
imports(descriptors),
|
||||
extends(flycatcher)).
|
||||
|
||||
|
||||
throat(white).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/barn_swallow.lgt
Normal file
10
Logtalk/examples/birds/barn_swallow.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(barn_swallow,
|
||||
imports(descriptors),
|
||||
extends(swallow)).
|
||||
|
||||
|
||||
tail(forked).
|
||||
|
||||
|
||||
:- end_object.
|
41
Logtalk/examples/birds/birds.loader
Normal file
41
Logtalk/examples/birds/birds.loader
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
descriptors,
|
||||
expert,
|
||||
|
||||
order,
|
||||
|
||||
falconiforms, % orders
|
||||
passerformes,
|
||||
tubenose,
|
||||
waterfowl,
|
||||
|
||||
albatross, % families
|
||||
duck,
|
||||
falcon,
|
||||
flycatcher,
|
||||
goose,
|
||||
swallow,
|
||||
swan,
|
||||
vulture,
|
||||
|
||||
ash_throated_flycatcher, % birds
|
||||
barn_swallow,
|
||||
black_footed_albatross,
|
||||
california_condor,
|
||||
canada_goose,
|
||||
cliff_swallow,
|
||||
female_mallard,
|
||||
fulmar,
|
||||
great_crested_flycatcher,
|
||||
laysan_albatross,
|
||||
male_mallard,
|
||||
peregrine_falcon,
|
||||
pintail,
|
||||
purple_martin,
|
||||
snow_goose,
|
||||
sparrow_hawk,
|
||||
trumpeter_swan,
|
||||
turkey_vulture,
|
||||
whistling_swan])).
|
10
Logtalk/examples/birds/black_footed_albatross.lgt
Normal file
10
Logtalk/examples/birds/black_footed_albatross.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(black_footed_albatross,
|
||||
imports(descriptors),
|
||||
extends(albatross)).
|
||||
|
||||
|
||||
color(dark).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/california_condor.lgt
Normal file
10
Logtalk/examples/birds/california_condor.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(california_condor,
|
||||
imports(descriptors),
|
||||
extends(vulture)).
|
||||
|
||||
|
||||
flight_profile(flat).
|
||||
|
||||
|
||||
:- end_object.
|
12
Logtalk/examples/birds/canada_goose.lgt
Normal file
12
Logtalk/examples/birds/canada_goose.lgt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
:- object(canada_goose,
|
||||
imports(descriptors),
|
||||
extends(goose)).
|
||||
|
||||
|
||||
head(black).
|
||||
|
||||
cheek(white).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/cliff_swallow.lgt
Normal file
10
Logtalk/examples/birds/cliff_swallow.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(cliff_swallow,
|
||||
imports(descriptors),
|
||||
extends(swallow)).
|
||||
|
||||
|
||||
tail(square).
|
||||
|
||||
|
||||
:- end_object.
|
56
Logtalk/examples/birds/descriptors.lgt
Normal file
56
Logtalk/examples/birds/descriptors.lgt
Normal file
@ -0,0 +1,56 @@
|
||||
|
||||
:- category(descriptors).
|
||||
|
||||
|
||||
:- info([
|
||||
authors is 'Paulo Moura',
|
||||
version is 1.0,
|
||||
date is 2000/2/18,
|
||||
comment is 'Bird descriptors predicates.',
|
||||
source is 'Example adopted from an Amzi! Inc Prolog book.']).
|
||||
|
||||
|
||||
:- public([
|
||||
bill/1,
|
||||
cheek/1,
|
||||
color/1,
|
||||
eats/1,
|
||||
family/1,
|
||||
feed/1,
|
||||
feet/1,
|
||||
flight/1,
|
||||
flight_profile/1,
|
||||
head/1,
|
||||
live/1,
|
||||
neck/1,
|
||||
nostrils/1,
|
||||
order/1,
|
||||
size/1,
|
||||
tail/1,
|
||||
throat/1,
|
||||
voice/1,
|
||||
wings/1]).
|
||||
|
||||
:- public(descriptor/1).
|
||||
|
||||
|
||||
descriptor(bill/1).
|
||||
descriptor(cheek/1).
|
||||
descriptor(color/1).
|
||||
descriptor(eats/1).
|
||||
descriptor(feed/1).
|
||||
descriptor(feet/1).
|
||||
descriptor(flight/1).
|
||||
descriptor(flight_profile/1).
|
||||
descriptor(head/1).
|
||||
descriptor(live/1).
|
||||
descriptor(neck/1).
|
||||
descriptor(nostrils/1).
|
||||
descriptor(size/1).
|
||||
descriptor(tail/1).
|
||||
descriptor(throat/1).
|
||||
descriptor(voice/1).
|
||||
descriptor(wings/1).
|
||||
|
||||
|
||||
:- end_category.
|
14
Logtalk/examples/birds/duck.lgt
Normal file
14
Logtalk/examples/birds/duck.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(duck,
|
||||
imports(descriptors),
|
||||
extends(waterfowl)).
|
||||
|
||||
|
||||
family(duck).
|
||||
|
||||
feed(on_water_surface).
|
||||
|
||||
flight(agile).
|
||||
|
||||
|
||||
:- end_object.
|
166
Logtalk/examples/birds/expert.lgt
Normal file
166
Logtalk/examples/birds/expert.lgt
Normal file
@ -0,0 +1,166 @@
|
||||
|
||||
:- object(expert,
|
||||
imports(protected::descriptors)).
|
||||
|
||||
|
||||
:- info([
|
||||
authors is 'Paulo Moura',
|
||||
version is 1.0,
|
||||
date is 2000/2/18,
|
||||
comment is 'Expert system for bird identification.',
|
||||
source is 'Example adopted from an Amzi! Inc Prolog book.']).
|
||||
|
||||
|
||||
:- public(identify/0).
|
||||
|
||||
:- mode(identify, one).
|
||||
|
||||
:- info(identify/0,
|
||||
[comment is 'Starts a bird identification session.']).
|
||||
|
||||
|
||||
:- private(known_/3).
|
||||
:- dynamic(known_/3).
|
||||
|
||||
:- mode(known_(?nonvar, ?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
:- info(known_/3, [
|
||||
comment is 'Table of already known facts.',
|
||||
argnames is ['Answer', 'Attribute', 'Value']]).
|
||||
|
||||
|
||||
identify :-
|
||||
::retractall(known_(_, _, _)),
|
||||
write('Bird identification expert system'), nl, nl,
|
||||
forall(
|
||||
(order::leaf(Bird), check(Bird)),
|
||||
(nl, write('Possible identification : '), write(Bird), nl)),
|
||||
nl, write('No (more) candidates found.').
|
||||
|
||||
|
||||
check(Bird) :-
|
||||
forall(
|
||||
(::descriptor(Functor/Arity),
|
||||
functor(Predicate, Functor, Arity),
|
||||
Bird::Predicate),
|
||||
call(Predicate)).
|
||||
|
||||
|
||||
bill(X):-
|
||||
ask(bill, X).
|
||||
|
||||
cheek(X):-
|
||||
ask(cheek, X).
|
||||
|
||||
color(X):-
|
||||
ask(color, X).
|
||||
|
||||
eats(X):-
|
||||
ask(eats, X).
|
||||
|
||||
feed(X):-
|
||||
ask(feed,X).
|
||||
|
||||
feet(X):-
|
||||
ask(feet, X).
|
||||
|
||||
flight(X):-
|
||||
menuask(flight, X, [ponderous, powerful, agile, flap_glide, other]).
|
||||
|
||||
flight_profile(X):-
|
||||
menuask(flight_profile, X, [flat, v_shaped, other]).
|
||||
|
||||
head(X):-
|
||||
ask(head,X).
|
||||
|
||||
live(X) :-
|
||||
ask(live, X).
|
||||
|
||||
neck(X):-
|
||||
ask(neck, X).
|
||||
|
||||
nostrils(X):-
|
||||
ask(nostrils, X).
|
||||
|
||||
size(X):-
|
||||
menuask(size, X, [large, plump, medium, small]).
|
||||
|
||||
tail(X):-
|
||||
menuask(tail, X, [narrow_at_tip, forked, long_rusty, square, other]).
|
||||
|
||||
throat(X):-
|
||||
ask(throat, X).
|
||||
|
||||
voice(X):-
|
||||
ask(voice,X).
|
||||
|
||||
wings(X):-
|
||||
ask(wings, X).
|
||||
|
||||
|
||||
ask(Attribute,Value):-
|
||||
::known_(yes, Attribute, Value),
|
||||
!.
|
||||
|
||||
ask(Attribute,Value):-
|
||||
::known_(_, Attribute, Value),
|
||||
!, fail.
|
||||
|
||||
ask(Attribute,_):-
|
||||
::known_(yes, Attribute, _),
|
||||
!, fail.
|
||||
|
||||
ask(Attribute, Value):-
|
||||
write(Attribute:Value),
|
||||
write('? (yes or no): '),
|
||||
read(Answer),
|
||||
::asserta(known_(Answer, Attribute, Value)),
|
||||
Answer = yes.
|
||||
|
||||
|
||||
menuask(Attribute,Value, _):-
|
||||
::known_(yes, Attribute, Value),
|
||||
!.
|
||||
|
||||
menuask(Attribute, _, _):-
|
||||
::known_(yes, Attribute, _),
|
||||
!, fail.
|
||||
|
||||
menuask(Attribute, AskValue, Menu):-
|
||||
nl, write('What is the value for '), write(Attribute), write('?'), nl,
|
||||
display_menu(Menu),
|
||||
write('Enter the number of choice> '),
|
||||
read(Num),nl,
|
||||
pick_menu(Num, AnswerValue, Menu),
|
||||
::asserta(known_(yes,Attribute,AnswerValue)),
|
||||
AskValue = AnswerValue.
|
||||
|
||||
|
||||
display_menu(Menu):-
|
||||
display_menu(Menu, 1).
|
||||
|
||||
|
||||
display_menu([], _).
|
||||
|
||||
display_menu([Item| Rest], N):-
|
||||
write(N), write(' : '), write(Item), nl,
|
||||
NN is N + 1,
|
||||
display_menu(Rest, NN).
|
||||
|
||||
|
||||
pick_menu(N, Val, Menu):-
|
||||
integer(N),
|
||||
pic_menu(1, N, Val, Menu), !.
|
||||
pick_menu(Val, Val, _).
|
||||
|
||||
|
||||
pic_menu(_, _, none_of_the_above, []).
|
||||
|
||||
pic_menu(N, N, Item, [Item| _]).
|
||||
|
||||
pic_menu(Ctr, N, Val, [_| Rest]):-
|
||||
NextCtr is Ctr + 1,
|
||||
pic_menu(NextCtr, N, Val, Rest).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/birds/falcon.lgt
Normal file
16
Logtalk/examples/birds/falcon.lgt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
:- object(falcon,
|
||||
imports(descriptors),
|
||||
extends(falconiforms)).
|
||||
|
||||
|
||||
family(falcon).
|
||||
|
||||
wings(long_pointed).
|
||||
|
||||
head(large).
|
||||
|
||||
tail(narrow_at_tip).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/birds/falconiforms.lgt
Normal file
16
Logtalk/examples/birds/falconiforms.lgt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
:- object(falconiforms,
|
||||
imports(descriptors),
|
||||
extends(order)).
|
||||
|
||||
|
||||
order(falconiforms).
|
||||
|
||||
eats(meat).
|
||||
|
||||
feet(curved_talons).
|
||||
|
||||
bill(sharp_hooked).
|
||||
|
||||
|
||||
:- end_object.
|
12
Logtalk/examples/birds/female_mallard.lgt
Normal file
12
Logtalk/examples/birds/female_mallard.lgt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
:- object(female_mallard,
|
||||
imports(descriptors),
|
||||
extends(duck)).
|
||||
|
||||
|
||||
voice(quack).
|
||||
|
||||
color(mottled_brown).
|
||||
|
||||
|
||||
:- end_object.
|
14
Logtalk/examples/birds/flycatcher.lgt
Normal file
14
Logtalk/examples/birds/flycatcher.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(flycatcher,
|
||||
imports(descriptors),
|
||||
extends(passerformes)).
|
||||
|
||||
|
||||
family(flycatcher).
|
||||
|
||||
bill(flat).
|
||||
|
||||
eats(flying_insects).
|
||||
|
||||
|
||||
:- end_object.
|
12
Logtalk/examples/birds/fulmar.lgt
Normal file
12
Logtalk/examples/birds/fulmar.lgt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
:- object(fulmar,
|
||||
imports(descriptors),
|
||||
extends(tubenose)).
|
||||
|
||||
|
||||
size(medium).
|
||||
|
||||
flight(flap_glide).
|
||||
|
||||
|
||||
:- end_object.
|
14
Logtalk/examples/birds/goose.lgt
Normal file
14
Logtalk/examples/birds/goose.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(goose,
|
||||
imports(descriptors),
|
||||
extends(waterfowl)).
|
||||
|
||||
|
||||
family(goose).
|
||||
|
||||
size(plump).
|
||||
|
||||
flight(powerful).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/great_crested_flycatcher.lgt
Normal file
10
Logtalk/examples/birds/great_crested_flycatcher.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(great_crested_flycatcher,
|
||||
imports(descriptors),
|
||||
extends(flycatcher)).
|
||||
|
||||
|
||||
tail(long_rusty).
|
||||
|
||||
|
||||
:- end_object.
|
11
Logtalk/examples/birds/laysan_albatross.lgt
Normal file
11
Logtalk/examples/birds/laysan_albatross.lgt
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
:- object(laysan_albatross,
|
||||
imports(descriptors),
|
||||
extends(albatross)).
|
||||
|
||||
|
||||
color(white).
|
||||
|
||||
|
||||
:- end_object.
|
||||
|
12
Logtalk/examples/birds/male_mallard.lgt
Normal file
12
Logtalk/examples/birds/male_mallard.lgt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
:- object(male_mallard,
|
||||
imports(descriptors),
|
||||
extends(duck)).
|
||||
|
||||
|
||||
voice(quack).
|
||||
|
||||
head(green).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/birds/order.lgt
Normal file
6
Logtalk/examples/birds/order.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(order,
|
||||
imports(descriptors, proto_hierarchy)).
|
||||
|
||||
|
||||
:- end_object.
|
12
Logtalk/examples/birds/passerformes.lgt
Normal file
12
Logtalk/examples/birds/passerformes.lgt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
:- object(passerformes,
|
||||
imports(descriptors),
|
||||
extends(order)).
|
||||
|
||||
|
||||
order(passerformes).
|
||||
|
||||
feet(one_long_backward_toe).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/peregrine_falcon.lgt
Normal file
10
Logtalk/examples/birds/peregrine_falcon.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(peregrine_falcon,
|
||||
imports(descriptors),
|
||||
extends(falcon)).
|
||||
|
||||
|
||||
eats(birds).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/pintail.lgt
Normal file
10
Logtalk/examples/birds/pintail.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(pintail,
|
||||
imports(descriptors),
|
||||
extends(duck)).
|
||||
|
||||
|
||||
voice(short_whistle).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/purple_martin.lgt
Normal file
10
Logtalk/examples/birds/purple_martin.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(purple_martin,
|
||||
imports(descriptors),
|
||||
extends(swallow)).
|
||||
|
||||
|
||||
color(dark).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/snow_goose.lgt
Normal file
10
Logtalk/examples/birds/snow_goose.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(snow_goose,
|
||||
imports(descriptors),
|
||||
extends(goose)).
|
||||
|
||||
|
||||
color(white).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/sparrow_hawk.lgt
Normal file
10
Logtalk/examples/birds/sparrow_hawk.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(sparrow_hawk,
|
||||
imports(descriptors),
|
||||
extends(falcon)).
|
||||
|
||||
|
||||
eats(insects).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/birds/swallow.lgt
Normal file
16
Logtalk/examples/birds/swallow.lgt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
:- object(swallow,
|
||||
imports(descriptors),
|
||||
extends(passerformes)).
|
||||
|
||||
|
||||
family(swallow).
|
||||
|
||||
wings(long_pointed).
|
||||
|
||||
tail(forked).
|
||||
|
||||
bill(short).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/birds/swan.lgt
Normal file
16
Logtalk/examples/birds/swan.lgt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
:- object(swan,
|
||||
imports(descriptors),
|
||||
extends(waterfowl)).
|
||||
|
||||
|
||||
family(swan).
|
||||
|
||||
neck(long).
|
||||
|
||||
color(white).
|
||||
|
||||
flight(ponderous).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/trumpeter_swan.lgt
Normal file
10
Logtalk/examples/birds/trumpeter_swan.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(trumpeter_swan,
|
||||
imports(descriptors),
|
||||
extends(swan)).
|
||||
|
||||
|
||||
voice(loud_trumpeting).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/birds/tubenose.lgt
Normal file
16
Logtalk/examples/birds/tubenose.lgt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
:- object(tubenose,
|
||||
imports(descriptors),
|
||||
extends(order)).
|
||||
|
||||
|
||||
order(tubenose).
|
||||
|
||||
nostrils(external_tubular).
|
||||
|
||||
live(at_sea).
|
||||
|
||||
bill(hooked).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/turkey_vulture.lgt
Normal file
10
Logtalk/examples/birds/turkey_vulture.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(turkey_vulture,
|
||||
imports(descriptors),
|
||||
extends(vulture)).
|
||||
|
||||
|
||||
flight_profile(v_shaped).
|
||||
|
||||
|
||||
:- end_object.
|
14
Logtalk/examples/birds/vulture.lgt
Normal file
14
Logtalk/examples/birds/vulture.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(vulture,
|
||||
imports(descriptors),
|
||||
extends(falconiforms)).
|
||||
|
||||
|
||||
family(vulture).
|
||||
|
||||
feed(scavange).
|
||||
|
||||
wings(broad).
|
||||
|
||||
|
||||
:- end_object.
|
14
Logtalk/examples/birds/waterfowl.lgt
Normal file
14
Logtalk/examples/birds/waterfowl.lgt
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
:- object(waterfowl,
|
||||
imports(descriptors),
|
||||
extends(order)).
|
||||
|
||||
|
||||
order(waterfowl).
|
||||
|
||||
feet(webbed).
|
||||
|
||||
bill(flat).
|
||||
|
||||
|
||||
:- end_object.
|
10
Logtalk/examples/birds/whistling_swan.lgt
Normal file
10
Logtalk/examples/birds/whistling_swan.lgt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
:- object(whistling_swan,
|
||||
imports(descriptors),
|
||||
extends(swan)).
|
||||
|
||||
|
||||
voice(muffled_musical_whistle).
|
||||
|
||||
|
||||
:- end_object.
|
26
Logtalk/examples/bricks/NOTES
Normal file
26
Logtalk/examples/bricks/NOTES
Normal file
@ -0,0 +1,26 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
To load all objects in this example consult the bricks.loader utility
|
||||
file (note that the *.loader files are Prolog files).
|
||||
|
||||
You will need to load the objects in the roots and relations
|
||||
examples (consulting the corresponding roots.loader and relations.loader
|
||||
files).
|
||||
|
||||
You will also need to consult the following files in the library directory:
|
||||
events.loader, types.loader, metapredicates.loader, and hierarchies.loader.
|
||||
|
||||
This folder contains an example of representation and handling of
|
||||
relations using events. We have instances of class brick and a binary
|
||||
brick_stack relation between the bricks. Every time we move a brick, we
|
||||
want the bricks on top of it to move along. If we break the stack by
|
||||
moving a middle brick, we want to automatically destroy the
|
||||
corresponding relation tuple.
|
||||
|
||||
It's instructive to use the debugger to better understand this example.
|
||||
Set spy points in all brick instances and then activate the debugger.
|
225
Logtalk/examples/bricks/SCRIPT
Normal file
225
Logtalk/examples/bricks/SCRIPT
Normal file
@ -0,0 +1,225 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
|
||||
% create four bricks, all standing on the "ground" (use your imagination... ;-)
|
||||
|
||||
| ?- brick::new(a, [position-(8, 1)]).
|
||||
yes
|
||||
|
||||
| ?- brick::new(b, [position-(6, 1)]).
|
||||
yes
|
||||
|
||||
| ?- brick::new(c, [position-(4, 1)]).
|
||||
yes
|
||||
|
||||
| ?- brick::new(d, [position-(2, 1)]).
|
||||
yes
|
||||
|
||||
% set up ascii stack monitor so we can watch the bricks moving
|
||||
|
||||
| ?- after_event_registry::set_monitor(_, move(_,_), _, stack_monitor).
|
||||
yes
|
||||
|
||||
|
||||
% make the stack
|
||||
|
||||
| ?- brick_stack::add_tuple([c,d]).
|
||||
|.c......
|
||||
|.d...b.a
|
||||
---------
|
||||
yes
|
||||
|
||||
| ?- brick_stack::add_tuple([b,c]).
|
||||
|.b......
|
||||
|.c......
|
||||
|.d.....a
|
||||
---------
|
||||
yes
|
||||
|
||||
| ?- brick_stack::add_tuple([a,b]).
|
||||
|.a
|
||||
|.b
|
||||
|.c
|
||||
|.d
|
||||
---
|
||||
yes
|
||||
|
||||
|
||||
% check results
|
||||
|
||||
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
||||
[c,d]
|
||||
[b,c]
|
||||
[a,b]
|
||||
no
|
||||
|
||||
| ?- before_event_registry::monitors(Mb), after_event_registry::monitors(Ma).
|
||||
Ma = [brick_stack, stack_monitor]
|
||||
Mb = [brick_stack]
|
||||
yes
|
||||
|
||||
|
||||
% move all stack to new position by moving bottom brick; check results
|
||||
|
||||
| ?- d::move(9, 1).
|
||||
|.a.......
|
||||
|.b.......
|
||||
|.c.......
|
||||
|........d
|
||||
----------
|
||||
|.a.......
|
||||
|.b.......
|
||||
|........c
|
||||
|........d
|
||||
----------
|
||||
|.a.......
|
||||
|........b
|
||||
|........c
|
||||
|........d
|
||||
----------
|
||||
|........a
|
||||
|........b
|
||||
|........c
|
||||
|........d
|
||||
----------
|
||||
yes
|
||||
|
||||
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
||||
Xa = 9,
|
||||
Xb = 9,
|
||||
Xc = 9,
|
||||
Xd = 9,
|
||||
Ya = 4,
|
||||
Yb = 3,
|
||||
Yc = 2,
|
||||
Yd = 1
|
||||
yes
|
||||
|
||||
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
||||
[c,d]
|
||||
[b,c]
|
||||
[a,b]
|
||||
no
|
||||
|
||||
|
||||
% break stack in half by moving b to the "ground"; check results
|
||||
|
||||
| ?- b::move(3, 1).
|
||||
|........a
|
||||
|.........
|
||||
|........c
|
||||
|..b.....d
|
||||
----------
|
||||
|..a.....c
|
||||
|..b.....d
|
||||
----------
|
||||
yes
|
||||
|
||||
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
||||
Xa = 3,
|
||||
Xb = 3,
|
||||
Xc = 9,
|
||||
Xd = 9,
|
||||
Ya = 2,
|
||||
Yb = 1,
|
||||
Yc = 2,
|
||||
Yd = 1
|
||||
yes
|
||||
|
||||
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
||||
[c,d]
|
||||
[a,b]
|
||||
no
|
||||
|
||||
|
||||
% create new brick_stack tuple ; check results
|
||||
|
||||
| ?- brick_stack::add_tuple([d, a]).
|
||||
|..d......
|
||||
|..a.....c
|
||||
|..b......
|
||||
----------
|
||||
|..c
|
||||
|..d
|
||||
|..a
|
||||
|..b
|
||||
----
|
||||
yes
|
||||
|
||||
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
||||
Xa = 3,
|
||||
Xb = 3,
|
||||
Xc = 3,
|
||||
Xd = 3,
|
||||
Ya = 2,
|
||||
Yb = 1,
|
||||
Yc = 4,
|
||||
Yd = 3
|
||||
yes
|
||||
|
||||
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
||||
[c,d]
|
||||
[a,b]
|
||||
[d,a]
|
||||
no
|
||||
|
||||
|
||||
% move all stack to new position by moving bottom brick; check results
|
||||
|
||||
| ?- b::move(5, 1).
|
||||
|..c..
|
||||
|..d..
|
||||
|..a..
|
||||
|....b
|
||||
------
|
||||
|..c..
|
||||
|..d..
|
||||
|....a
|
||||
|....b
|
||||
------
|
||||
|..c..
|
||||
|....d
|
||||
|....a
|
||||
|....b
|
||||
------
|
||||
|....c
|
||||
|....d
|
||||
|....a
|
||||
|....b
|
||||
------
|
||||
yes
|
||||
|
||||
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
||||
Xa = 5,
|
||||
Xb = 5,
|
||||
Xc = 5,
|
||||
Xd = 5,
|
||||
Ya = 2,
|
||||
Yb = 1,
|
||||
Yc = 4,
|
||||
Yd = 3
|
||||
yes
|
||||
|
||||
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
||||
[c,d]
|
||||
[a,b]
|
||||
[d,a]
|
||||
no
|
||||
|
||||
|
||||
% clean up instances, tuples and monitors
|
||||
|
||||
| ?- brick_stack::remove_all_tuples.
|
||||
yes
|
||||
|
||||
| ?- after_event_registry::del_monitors(_, _, _, stack_monitor).
|
||||
yes
|
||||
|
||||
| ?- brick::delete_all.
|
||||
yes
|
76
Logtalk/examples/bricks/brick.lgt
Normal file
76
Logtalk/examples/bricks/brick.lgt
Normal file
@ -0,0 +1,76 @@
|
||||
|
||||
:- object(brick,
|
||||
instantiates(class),
|
||||
specializes(object)).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 1.1,
|
||||
date is 2000/10/31,
|
||||
authors is 'Paulo Moura',
|
||||
comment is 'Two-dimensional brick (or should I say square?) class.']).
|
||||
|
||||
|
||||
:- public(position/2).
|
||||
|
||||
:- mode(position(?integer, ?integer), zero_or_one).
|
||||
|
||||
:- info(position/2, [
|
||||
comment is 'Brick current position.',
|
||||
argnames is ['X', 'Y']]).
|
||||
|
||||
|
||||
:- private(position_/2).
|
||||
:- dynamic(position_/2).
|
||||
|
||||
:- mode(position_(?integer, ?integer), zero_or_one).
|
||||
|
||||
:- info(position_/2, [
|
||||
comment is 'Stores brick current position.',
|
||||
argnames is ['X', 'Y']]).
|
||||
|
||||
|
||||
:- public(move/2).
|
||||
|
||||
:- mode(move(+integer, +integer), one).
|
||||
|
||||
:- info(move/2, [
|
||||
comment is 'Moves a brick to a new position.',
|
||||
argnames is ['X', 'Y']]).
|
||||
|
||||
|
||||
position(X, Y) :-
|
||||
::position_(X, Y).
|
||||
|
||||
|
||||
move(X, Y) :-
|
||||
::retractall(position_(_, _)),
|
||||
::assertz(position_(X, Y)).
|
||||
|
||||
|
||||
default_init_option(position-(0, 0)).
|
||||
|
||||
default_init_option(Default) :-
|
||||
^^default_init_option(Default).
|
||||
|
||||
|
||||
process_init_option(position-(X, Y)) :-
|
||||
::assertz(position_(X, Y)).
|
||||
|
||||
process_init_option(Option) :-
|
||||
^^process_init_option(Option).
|
||||
|
||||
|
||||
valid_init_option(position-(X, Y)) :-
|
||||
!,
|
||||
integer(X),
|
||||
integer(Y).
|
||||
|
||||
valid_init_option(Option) :-
|
||||
^^valid_init_option(Option).
|
||||
|
||||
|
||||
instance_base_name(b).
|
||||
|
||||
|
||||
:- end_object.
|
59
Logtalk/examples/bricks/brick_stack.lgt
Normal file
59
Logtalk/examples/bricks/brick_stack.lgt
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
:- object(brick_stack,
|
||||
instantiates(constrained_relation)).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 1.0,
|
||||
date is 1998/3/23,
|
||||
authors is 'Paulo Moura',
|
||||
comment is 'Stack of bricks as a constrained binary relation.']).
|
||||
|
||||
|
||||
descriptor_([top, bottom]).
|
||||
|
||||
|
||||
domain_(top, brick).
|
||||
domain_(bottom, brick).
|
||||
|
||||
|
||||
key_([top, bottom]).
|
||||
|
||||
|
||||
cardinality_(top, 0, 1).
|
||||
cardinality_(bottom, 0, 1).
|
||||
|
||||
|
||||
delete_option_(top, cascade).
|
||||
delete_option_(bottom, restrict).
|
||||
|
||||
|
||||
add_tuple([A, B]) :-
|
||||
B::position(Xb, Yb),
|
||||
Ya2 is Yb + 1,
|
||||
{A::move(Xb, Ya2)},
|
||||
^^add_tuple([A, B]).
|
||||
|
||||
|
||||
activ_points_(top, before, []).
|
||||
activ_points_(top, after, [move(_, _)]).
|
||||
|
||||
activ_points_(bottom, before, []).
|
||||
activ_points_(bottom, after, [move(_, _)]).
|
||||
|
||||
|
||||
propagate(after, move(X, Y), Top, top, [Top, Bottom]) :-
|
||||
!,
|
||||
Y2 is Y - 1,
|
||||
(Bottom::position(X, Y2) ->
|
||||
true
|
||||
;
|
||||
::remove_tuple([Top, Bottom])).
|
||||
|
||||
propagate(after, move(X, Y), Bottom, bottom, [Top, Bottom]) :-
|
||||
!,
|
||||
Y2 is Y + 1,
|
||||
{Top::move(X, Y2)}.
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/bricks/bricks.loader
Normal file
6
Logtalk/examples/bricks/bricks.loader
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
brick,
|
||||
brick_stack,
|
||||
stack_monitor])).
|
38
Logtalk/examples/bricks/stack_monitor.lgt
Normal file
38
Logtalk/examples/bricks/stack_monitor.lgt
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
:- object(stack_monitor,
|
||||
implements(event_handlersp)).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 1.0,
|
||||
date is 1998/3/23,
|
||||
authors is 'Paulo Moura',
|
||||
comment is 'Monitor for brick movements printing an ascii representation of each brick position.']).
|
||||
|
||||
|
||||
:- uses(loop).
|
||||
:- uses(list).
|
||||
|
||||
|
||||
after(_, move(_, _), _) :-
|
||||
findall(
|
||||
(Brick, X, Y),
|
||||
(instantiates_class(Brick, brick), Brick::position(X, Y)),
|
||||
Bricks),
|
||||
setof(X, Brick^Y^ (list::member((Brick,X,Y), Bricks)), Xs),
|
||||
list::last(Xs, Xmax),
|
||||
setof(Y, Brick^X^ (list::member((Brick,X,Y), Bricks)), Ys),
|
||||
list::last(Ys, Ymax),
|
||||
loop::fordownto(Y, Ymax, 1,
|
||||
(write('|'),
|
||||
loop::forto(X, 1, Xmax,
|
||||
(list::member((Brick, X, Y), Bricks) ->
|
||||
write(Brick)
|
||||
;
|
||||
write('.'))),
|
||||
nl)),
|
||||
write('-'),
|
||||
loop::forto(X, 1, Xmax, write('-')), nl.
|
||||
|
||||
|
||||
:- end_object.
|
15
Logtalk/examples/classvars/NOTES
Normal file
15
Logtalk/examples/classvars/NOTES
Normal file
@ -0,0 +1,15 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
To load all objects in this example consult the classvars.loader utility
|
||||
file (note that the *.loader files are Prolog files).
|
||||
|
||||
This folder contains an example that shows how to implement class variables
|
||||
as defined in Smalltalk. The name shared instance variables is however much
|
||||
more accurate. In systems like Logtalk that enable the use of explicit
|
||||
metaclasses, true class variables are just the class (as an object) own
|
||||
instance variables!
|
32
Logtalk/examples/classvars/SCRIPT
Normal file
32
Logtalk/examples/classvars/SCRIPT
Normal file
@ -0,0 +1,32 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
% get the value of the class variable for each instance:
|
||||
|
||||
| ?- instance1::cv(Value1), instance2::cv(Value2), instance3::cv(Value3).
|
||||
|
||||
Value1 = 0
|
||||
Value2 = 0
|
||||
Value3 = 0
|
||||
yes
|
||||
|
||||
|
||||
% change the value of the class variable via instance1:
|
||||
|
||||
| ?- instance1::set_cv(1).
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% get the value of the class variable for the other instances:
|
||||
|
||||
| ?- instance2::cv(Value2), instance3::cv(Value3).
|
||||
|
||||
Value2 = 1
|
||||
Value3 = 1
|
||||
yes
|
7
Logtalk/examples/classvars/classvars.loader
Normal file
7
Logtalk/examples/classvars/classvars.loader
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
root,
|
||||
instance1,
|
||||
instance2,
|
||||
instance3])).
|
6
Logtalk/examples/classvars/instance1.lgt
Normal file
6
Logtalk/examples/classvars/instance1.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance1,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/classvars/instance2.lgt
Normal file
6
Logtalk/examples/classvars/instance2.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance2,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/classvars/instance3.lgt
Normal file
6
Logtalk/examples/classvars/instance3.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance3,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- end_object.
|
29
Logtalk/examples/classvars/root.lgt
Normal file
29
Logtalk/examples/classvars/root.lgt
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
:- object(root,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- private(cv_/1).
|
||||
:- dynamic(cv_/1).
|
||||
:- mode(cv_(?integer), zero_or_one).
|
||||
|
||||
:- public(cv/1).
|
||||
:- mode(cv(?integer), zero_or_one).
|
||||
|
||||
:- public(set_cv/1).
|
||||
:- mode(set_cv(+integer), one).
|
||||
|
||||
|
||||
cv_(0). % cv value is stored locally, in this class
|
||||
|
||||
|
||||
cv(Value) :-
|
||||
cv_(Value). % retrive cv value, shared for all instances
|
||||
|
||||
|
||||
set_cv(Value) :-
|
||||
retractall(cv_(_)), % retract old cv value from this class
|
||||
asserta(cv_(Value)). % assert the new value in this class
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/inheritance/NOTES
Normal file
16
Logtalk/examples/inheritance/NOTES
Normal file
@ -0,0 +1,16 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
To load all objects in this example consult the inheritance.loader utility
|
||||
file (note that the *.loader files are Prolog files).
|
||||
|
||||
This folder contains examples of public, protected and private inheritance,
|
||||
for both prototypes and classes/instances. The category "predicates" defines
|
||||
a set of three predicates, one public, one protected and one private. This
|
||||
category is imported by the root objects: "parent" for the prototypes and
|
||||
"object" for the classes/instances. Each root object have a set of three
|
||||
descendants, each one using one of the inheritance types.
|
98
Logtalk/examples/inheritance/SCRIPT
Normal file
98
Logtalk/examples/inheritance/SCRIPT
Normal file
@ -0,0 +1,98 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
|
||||
% parent interface
|
||||
|
||||
| ?- parent::interface.
|
||||
|
||||
public/0 - public
|
||||
protected/0 - protected
|
||||
private/0 - private
|
||||
interface/0 - public
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% prototype1 extends public::parent
|
||||
|
||||
| ?- prototype1::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - public
|
||||
protected/0 - protected
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% prototype2 extends protected::parent
|
||||
|
||||
| ?- prototype2::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - protected
|
||||
protected/0 - protected
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% prototype3 extends private::parent
|
||||
|
||||
| ?- prototype3::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - private
|
||||
protected/0 - private
|
||||
|
||||
yes
|
||||
|
||||
|
||||
|
||||
% object (root of the inheritance graph) interface
|
||||
|
||||
| ?- root::interface.
|
||||
|
||||
public/0 - public
|
||||
protected/0 - protected
|
||||
private/0 - private
|
||||
interface/0 - public
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% instance1 instantiates subclass1 that specializes public::root
|
||||
|
||||
| ?- instance1::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - public
|
||||
protected/0 - protected
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% instance2 instantiates subclass2 that specializes protected::root
|
||||
|
||||
| ?- instance2::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - protected
|
||||
protected/0 - protected
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% instance3 instantiates subclass3 that specializes private::root
|
||||
|
||||
| ?- instance3::interface.
|
||||
|
||||
interface/0 - public
|
||||
public/0 - private
|
||||
protected/0 - private
|
||||
|
||||
yes
|
18
Logtalk/examples/inheritance/inheritance.loader
Normal file
18
Logtalk/examples/inheritance/inheritance.loader
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
predicates,
|
||||
interface,
|
||||
|
||||
parent,
|
||||
prototype1,
|
||||
prototype2,
|
||||
prototype3,
|
||||
|
||||
root,
|
||||
subclass1,
|
||||
subclass2,
|
||||
subclass3,
|
||||
instance1,
|
||||
instance2,
|
||||
instance3])).
|
6
Logtalk/examples/inheritance/instance1.lgt
Normal file
6
Logtalk/examples/inheritance/instance1.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance1,
|
||||
instantiates(subclass1)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/inheritance/instance2.lgt
Normal file
6
Logtalk/examples/inheritance/instance2.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance2,
|
||||
instantiates(subclass2)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/inheritance/instance3.lgt
Normal file
6
Logtalk/examples/inheritance/instance3.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance3,
|
||||
instantiates(subclass3)).
|
||||
|
||||
|
||||
:- end_object.
|
22
Logtalk/examples/inheritance/interface.lgt
Normal file
22
Logtalk/examples/inheritance/interface.lgt
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
:- category(interface).
|
||||
|
||||
|
||||
:- public(interface/0).
|
||||
:- mode(interface, one).
|
||||
|
||||
|
||||
interface :-
|
||||
forall(
|
||||
(::current_predicate(Functor/Arity),
|
||||
functor(Pred, Functor, Arity)),
|
||||
(::predicate_property(Pred, Prop), scope(Prop),
|
||||
writeq(Functor/Arity), write(' - '), writeq(Prop), nl)).
|
||||
|
||||
|
||||
scope(public).
|
||||
scope(protected).
|
||||
scope(private).
|
||||
|
||||
|
||||
:- end_category.
|
6
Logtalk/examples/inheritance/parent.lgt
Normal file
6
Logtalk/examples/inheritance/parent.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(parent,
|
||||
imports(predicates, interface)).
|
||||
|
||||
|
||||
:- end_object.
|
25
Logtalk/examples/inheritance/predicates.lgt
Normal file
25
Logtalk/examples/inheritance/predicates.lgt
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
:- category(predicates).
|
||||
|
||||
|
||||
:- public(public/0).
|
||||
:- mode(public, one).
|
||||
|
||||
:- protected(protected/0).
|
||||
:- mode(protected, one).
|
||||
|
||||
:- private(private/0).
|
||||
:- mode(private, one).
|
||||
|
||||
|
||||
public :-
|
||||
write('Public predicate declared and defined in category predicates.'), nl.
|
||||
|
||||
protected :-
|
||||
write('Protected predicate declared and defined in category predicates.'), nl.
|
||||
|
||||
private :-
|
||||
write('Private predicate declared and defined in category predicates.'), nl.
|
||||
|
||||
|
||||
:- end_category.
|
7
Logtalk/examples/inheritance/prototype1.lgt
Normal file
7
Logtalk/examples/inheritance/prototype1.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(prototype1,
|
||||
imports(interface),
|
||||
extends(public::parent)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/prototype2.lgt
Normal file
7
Logtalk/examples/inheritance/prototype2.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(prototype2,
|
||||
imports(interface),
|
||||
extends(protected::parent)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/prototype3.lgt
Normal file
7
Logtalk/examples/inheritance/prototype3.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(prototype3,
|
||||
imports(interface),
|
||||
extends(private::parent)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/root.lgt
Normal file
7
Logtalk/examples/inheritance/root.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(root,
|
||||
imports(predicates, interface),
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/subclass1.lgt
Normal file
7
Logtalk/examples/inheritance/subclass1.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(subclass1,
|
||||
imports(interface),
|
||||
specializes(public::root)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/subclass2.lgt
Normal file
7
Logtalk/examples/inheritance/subclass2.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(subclass2,
|
||||
imports(interface),
|
||||
specializes(protected::root)).
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/inheritance/subclass3.lgt
Normal file
7
Logtalk/examples/inheritance/subclass3.lgt
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- object(subclass3,
|
||||
imports(interface),
|
||||
specializes(private::root)).
|
||||
|
||||
|
||||
:- end_object.
|
14
Logtalk/examples/instmethods/NOTES
Normal file
14
Logtalk/examples/instmethods/NOTES
Normal file
@ -0,0 +1,14 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
To load all objects in this example consult the instmethods.loader utility
|
||||
file (note that the *.loader files are Prolog files).
|
||||
|
||||
This folder contains an example of instance defined methods. When using
|
||||
classes and instances, methods must be declared in a class but the method
|
||||
definitions may be stored in the instances, either overriding or specializing
|
||||
the class definitions.
|
36
Logtalk/examples/instmethods/SCRIPT
Normal file
36
Logtalk/examples/instmethods/SCRIPT
Normal file
@ -0,0 +1,36 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
% instance1 definition for method "method" is found in its class:
|
||||
|
||||
| ?- instance1::method.
|
||||
|
||||
This is the default definition for the method, stored in class root.
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% instance2 overrides definition of method "method"
|
||||
|
||||
| ?- instance2::method.
|
||||
|
||||
This is an overriding definition stored in the instance2 instance itself.
|
||||
|
||||
yes
|
||||
|
||||
|
||||
% instance3 specializes definition of method "method"
|
||||
|
||||
| ?- instance3::method.
|
||||
|
||||
This is a specializing definition stored in the instance3 instance itself.
|
||||
It makes a super call to execute the default definition:
|
||||
|
||||
This is the default definition for the method, stored in class root.
|
||||
|
||||
yes
|
6
Logtalk/examples/instmethods/instance1.lgt
Normal file
6
Logtalk/examples/instmethods/instance1.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(instance1,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- end_object.
|
13
Logtalk/examples/instmethods/instance2.lgt
Normal file
13
Logtalk/examples/instmethods/instance2.lgt
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
:- object(instance2,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
method :-
|
||||
this(This),
|
||||
write('This is an overriding definition stored in the '),
|
||||
writeq(This),
|
||||
write(' instance itself.'), nl.
|
||||
|
||||
|
||||
:- end_object.
|
15
Logtalk/examples/instmethods/instance3.lgt
Normal file
15
Logtalk/examples/instmethods/instance3.lgt
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
:- object(instance3,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
method :-
|
||||
this(This),
|
||||
write('This is a specializing definition stored in the '),
|
||||
writeq(This),
|
||||
write(' instance itself.'), nl,
|
||||
write('It makes a super call to execute the default definition:'), nl, nl,
|
||||
^^method.
|
||||
|
||||
|
||||
:- end_object.
|
7
Logtalk/examples/instmethods/instmethods.loader
Normal file
7
Logtalk/examples/instmethods/instmethods.loader
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
root,
|
||||
instance1,
|
||||
instance2,
|
||||
instance3])).
|
15
Logtalk/examples/instmethods/root.lgt
Normal file
15
Logtalk/examples/instmethods/root.lgt
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
:- object(root,
|
||||
instantiates(root)).
|
||||
|
||||
|
||||
:- public(method/0).
|
||||
|
||||
|
||||
method :-
|
||||
this(This),
|
||||
write('This is the default definition for the method, stored in class '),
|
||||
writeq(This), write('.'), nl.
|
||||
|
||||
|
||||
:- end_object.
|
15
Logtalk/examples/lo/NOTES
Normal file
15
Logtalk/examples/lo/NOTES
Normal file
@ -0,0 +1,15 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
The examples in this folder are adopted from the Logic&Objects system
|
||||
by Francis G. McCabe. Detailed descriptions and the original source code
|
||||
can be found on the book "Logic and Objects" by the author published by
|
||||
Prentice Hall.
|
||||
|
||||
Note that because Logtalk lacks the functional notation of the
|
||||
Logic&Objects system, my adaptation of the book examples may have
|
||||
introduced some bugs not present in the original code.
|
14
Logtalk/examples/lpa/NOTES
Normal file
14
Logtalk/examples/lpa/NOTES
Normal file
@ -0,0 +1,14 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
This example is an adaptation of a LPA Prolog++ example.
|
||||
|
||||
To load all objects in this example consult the lpa.loader utility
|
||||
file.
|
||||
|
||||
You will also need to consult the library/hierarchies.loader file.
|
||||
Note that the *.loader files are Prolog files.
|
21
Logtalk/examples/lpa/SCRIPT
Normal file
21
Logtalk/examples/lpa/SCRIPT
Normal file
@ -0,0 +1,21 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
| ?- fault::findall.
|
||||
|
||||
Please answer all questions with yes or no.
|
||||
|
||||
The starter turns but the engine doesnt fire? no.
|
||||
The engine has difficulty starting? yes.
|
||||
The engine cuts out shortly after starting? yes.
|
||||
|
||||
Location : distributor
|
||||
Possible Fault: Worn distributor brushes
|
||||
|
||||
No (more) explanations found.
|
||||
yes.
|
6
Logtalk/examples/lpa/cylinders.lgt
Normal file
6
Logtalk/examples/lpa/cylinders.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(cylinders,
|
||||
extends(engine)).
|
||||
|
||||
|
||||
:- end_object.
|
25
Logtalk/examples/lpa/distributor.lgt
Normal file
25
Logtalk/examples/lpa/distributor.lgt
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
:- object(distributor,
|
||||
extends(sparking)).
|
||||
|
||||
|
||||
fault(f1001, 'Condensation in the distributor cap').
|
||||
fault(f1002, 'Faulty distributor arm').
|
||||
fault(f1003, 'Worn distributor brushes').
|
||||
|
||||
symptom(s1001, 'The starter turns but the engine doesnt fire').
|
||||
symptom(s1002, 'The engine has difficulty starting').
|
||||
symptom(s1003, 'The engine cuts out shortly after starting').
|
||||
symptom(s1004, 'The engine cuts out at speed').
|
||||
|
||||
effect(f1001, s1001).
|
||||
effect(f1002, s1001).
|
||||
effect(f1002, s1004).
|
||||
effect(f1003, s1002).
|
||||
effect(f1003, s1003).
|
||||
|
||||
contrary(s1002, s1001).
|
||||
contrary(s1003, s1001).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/electrical.lgt
Normal file
6
Logtalk/examples/lpa/electrical.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(electrical,
|
||||
extends(fault)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/engine.lgt
Normal file
6
Logtalk/examples/lpa/engine.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(engine,
|
||||
extends(mechanical)).
|
||||
|
||||
|
||||
:- end_object.
|
72
Logtalk/examples/lpa/fault.lgt
Normal file
72
Logtalk/examples/lpa/fault.lgt
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
:- object(fault,
|
||||
imports(proto_hierarchy)).
|
||||
|
||||
|
||||
:- info([
|
||||
authors is 'Paulo Moura',
|
||||
version is 1.0,
|
||||
date is 2000/4/22,
|
||||
comment is 'Expert system for automobile fault diagnosis.',
|
||||
source is 'Example adopted from the LPA Prolog++ documentation.']).
|
||||
|
||||
|
||||
:- public(findall/0).
|
||||
:- mode(findall, one).
|
||||
|
||||
:- private(told_by_user_/2).
|
||||
:- dynamic(told_by_user_/2).
|
||||
:- mode(told_by_user_(?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
:- public(find/1).
|
||||
:- mode(find(?nonvar), zero_or_more).
|
||||
|
||||
:- private(exhibited/1).
|
||||
:- mode(exhibited(+nonvar), zero_or_one).
|
||||
|
||||
:- public(contrary/2).
|
||||
:- mode(contrary(?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
:- public(fault/2).
|
||||
:- mode(fault(?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
:- public(effect/2).
|
||||
:- mode(effect(?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
:- public(symptom/2).
|
||||
:- mode(symptom(?nonvar, ?nonvar), zero_or_more).
|
||||
|
||||
|
||||
findall :-
|
||||
retractall(told_by_user_(_, _)),
|
||||
write('Please answer all questions with yes or no.'), nl, nl,
|
||||
forall(
|
||||
(::descendant(Where), Where::find(Description)),
|
||||
(nl, write('Location : '), write(Where), nl,
|
||||
write('Possible Fault: '), write(Description), nl)),
|
||||
nl, write('No (more) explanations found.').
|
||||
|
||||
|
||||
find(Description) :-
|
||||
::fault(Fault, Description),
|
||||
forall(::effect(Fault, Symptom), exhibited(Symptom)).
|
||||
|
||||
|
||||
exhibited(Symptom) :-
|
||||
told_by_user_(Symptom, Reply),
|
||||
!,
|
||||
Reply = yes.
|
||||
|
||||
exhibited(Symptom) :-
|
||||
::symptom(Symptom, Description),
|
||||
write(Description), write('? '),
|
||||
read(Reply),
|
||||
asserta(told_by_user_(Symptom, Reply)),
|
||||
Reply = yes,
|
||||
forall(
|
||||
(::contrary(Symptom, Contrary);
|
||||
::contrary(Contrary, Symptom)),
|
||||
asserta(told_by_user_(Contrary, no))).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/fuel_system.lgt
Normal file
6
Logtalk/examples/lpa/fuel_system.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(fuel_system,
|
||||
extends(fault)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/lights.lgt
Normal file
6
Logtalk/examples/lpa/lights.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(lights,
|
||||
extends(electrical)).
|
||||
|
||||
|
||||
:- end_object.
|
15
Logtalk/examples/lpa/lpa.loader
Normal file
15
Logtalk/examples/lpa/lpa.loader
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
cylinders,
|
||||
distributor,
|
||||
electrical,
|
||||
engine,
|
||||
fault,
|
||||
fuel_system,
|
||||
lights,
|
||||
mechanical,
|
||||
plugs,
|
||||
sparking,
|
||||
starter_motor,
|
||||
starting])).
|
6
Logtalk/examples/lpa/mechanical.lgt
Normal file
6
Logtalk/examples/lpa/mechanical.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(mechanical,
|
||||
extends(fault)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/plugs.lgt
Normal file
6
Logtalk/examples/lpa/plugs.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(plugs,
|
||||
extends(sparking)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/sparking.lgt
Normal file
6
Logtalk/examples/lpa/sparking.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(sparking,
|
||||
extends(starting)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/starter_motor.lgt
Normal file
6
Logtalk/examples/lpa/starter_motor.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(starter_motor,
|
||||
extends(starting)).
|
||||
|
||||
|
||||
:- end_object.
|
6
Logtalk/examples/lpa/starting.lgt
Normal file
6
Logtalk/examples/lpa/starting.lgt
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
:- object(starting,
|
||||
extends(electrical)).
|
||||
|
||||
|
||||
:- end_object.
|
16
Logtalk/examples/metapredicates/NOTES
Normal file
16
Logtalk/examples/metapredicates/NOTES
Normal file
@ -0,0 +1,16 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
To load all objects in this library consult the metapredicates.loader utility
|
||||
file.
|
||||
|
||||
You will also need to load the library/types.loader file (note that the
|
||||
*.loader files are Prolog files).
|
||||
|
||||
This example shows the use of metapredicates in Logtalk. Metapredicates are
|
||||
predicates whose head contains arguments that will be called as goals in the
|
||||
body of the predicate definition.
|
48
Logtalk/examples/metapredicates/SCRIPT
Normal file
48
Logtalk/examples/metapredicates/SCRIPT
Normal file
@ -0,0 +1,48 @@
|
||||
=================================================================
|
||||
Logtalk - Object oriented extension to Prolog
|
||||
Release 2.8.4
|
||||
|
||||
Copyright (c) 1998-2001 Paulo Moura. All Rights Reserved.
|
||||
=================================================================
|
||||
|
||||
|
||||
% note that "user" is a pseudo-object representing the Prolog database
|
||||
% this implies that the integer comparisons are done using the standard
|
||||
% Prolog built-in predicates
|
||||
|
||||
| ?- sort(user)::sort([3, 1, 4, 2, 9], Sorted).
|
||||
|
||||
call: partition([1,4,2,9],3,_358,_359)
|
||||
exit: partition([1,4,2,9],3,[1,2],[4,9])
|
||||
call: sort([1,2],_740)
|
||||
call: partition([2],1,_967,_968)
|
||||
exit: partition([2],1,[],[2])
|
||||
call: sort([],_1300)
|
||||
exit: sort([],[])
|
||||
call: sort([2],_1539)
|
||||
call: partition([],2,_1765,_1766)
|
||||
exit: partition([],2,[],[])
|
||||
call: sort([],_2093)
|
||||
exit: sort([],[])
|
||||
call: sort([],_2332)
|
||||
exit: sort([],[])
|
||||
exit: sort([2],[2])
|
||||
exit: sort([1,2],[1,2])
|
||||
call: sort([4,9],_2831)
|
||||
call: partition([9],4,_3058,_3059)
|
||||
exit: partition([9],4,[],[9])
|
||||
call: sort([],_3391)
|
||||
exit: sort([],[])
|
||||
call: sort([9],_3630)
|
||||
call: partition([],9,_3856,_3857)
|
||||
exit: partition([],9,[],[])
|
||||
call: sort([],_4184)
|
||||
exit: sort([],[])
|
||||
call: sort([],_4423)
|
||||
exit: sort([],[])
|
||||
exit: sort([9],[9])
|
||||
exit: sort([4,9],[4,9])
|
||||
|
||||
Sorted = [1,2,3,4,9] ?
|
||||
|
||||
yes
|
5
Logtalk/examples/metapredicates/metapredicates.loader
Normal file
5
Logtalk/examples/metapredicates/metapredicates.loader
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
:- initialization(
|
||||
logtalk_load([
|
||||
sort1,
|
||||
tracer])).
|
61
Logtalk/examples/metapredicates/sort1.lgt
Normal file
61
Logtalk/examples/metapredicates/sort1.lgt
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
% sort code adopted from an example in the SICStus Prolog User Manual
|
||||
% metapredicate example taken from Prolog Part 2, Modules - Committee Draft
|
||||
|
||||
|
||||
:- object(sort(_Type)).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 1.0,
|
||||
authors is 'Paulo Moura',
|
||||
date is 2000/7/24,
|
||||
comment is 'List sorting parameterized by the type of the list elements.']).
|
||||
|
||||
|
||||
:- uses(list).
|
||||
:- uses(tracer).
|
||||
|
||||
:- calls(comparingp).
|
||||
|
||||
|
||||
:- public(sort/2).
|
||||
|
||||
:- mode(sort(+list, -list), one).
|
||||
|
||||
:- info(sort/2, [
|
||||
comment is 'Sorts a list in ascending order.',
|
||||
argnames is ['List', 'Sorted']]).
|
||||
|
||||
|
||||
:- private(partition/4).
|
||||
|
||||
:- mode(partition(+list, +nonvar, -list, -list), one).
|
||||
|
||||
:- info(partition/4, [
|
||||
comment is 'Partition a list in two lists containing the elements smaller and larger than a pivot.',
|
||||
argnames is ['List', 'Pivot', 'Small', 'Large']]).
|
||||
|
||||
|
||||
sort([], []).
|
||||
|
||||
sort([Head| Tail], Sorted) :-
|
||||
tracer::(
|
||||
trace(partition(Tail, Head, Small, Large)),
|
||||
trace(sort(Small, Sorted1)),
|
||||
trace(sort(Large, Sorted2))),
|
||||
list::append(Sorted1, [Head| Sorted2], Sorted).
|
||||
|
||||
|
||||
partition([], _, [], []).
|
||||
|
||||
partition([Head| Tail], Pivot, Small, Large) :-
|
||||
parameter(1, Type),
|
||||
( Type::(Head < Pivot) ->
|
||||
Small = [Head| Small1], Large = Large1
|
||||
; Small = Small1, Large = [Head| Large1]
|
||||
),
|
||||
partition(Tail, Pivot, Small1, Large1).
|
||||
|
||||
|
||||
:- end_object.
|
37
Logtalk/examples/metapredicates/tracer.lgt
Normal file
37
Logtalk/examples/metapredicates/tracer.lgt
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
% example adopted from:
|
||||
% Programming Language Prolog Part 2, Modules
|
||||
% Committee Draft - January 14, 1998 X3J17/97/5
|
||||
|
||||
|
||||
:- object(tracer).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 2,
|
||||
authors is 'Paulo Moura',
|
||||
date is 2000/7/24,
|
||||
comment is 'Tracer for a goal call and exit ports.']).
|
||||
|
||||
|
||||
:- public(trace/1).
|
||||
:- metapredicate(trace(::)).
|
||||
|
||||
:- mode(trace(+callable), zero_or_more).
|
||||
|
||||
:- info(trace/1, [
|
||||
comment is '.',
|
||||
argnames is ['Goal']]).
|
||||
|
||||
|
||||
trace(Goal) :-
|
||||
write('call: '), writeq(Goal), nl,
|
||||
call(Goal),
|
||||
write('exit: '), writeq(Goal), nl.
|
||||
|
||||
trace(Goal) :-
|
||||
write('fail: '), writeq(Goal), nl,
|
||||
fail.
|
||||
|
||||
|
||||
:- end_object.
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user