This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/engines/engines.lgt

68 lines
1.4 KiB
Plaintext
Raw Normal View History

/*
This is a simple example of category composition, i.e. importation of
categories by other categories in order to provide modified components
for building objects, using car engines.
The example defines a car engine protocol (enginep), a standard engine
(classic), and an improved version of it (sport). Both engines are then
imported in two car models (sedan and coupe).
*/
% first we define a protocol for describing the characteristics of an engine:
:- protocol(enginep).
:- public(reference/1).
:- public(capacity/1).
:- public(cylinders/1).
:- public(horsepower_rpm/2).
:- public(bore_stroke/2).
:- public(fuel/1).
:- end_protocol.
% second, we can define a typical engine as a category, which will be used
% when "assembling" cars:
:- category(classic,
implements(enginep)).
reference('M180.940').
capacity(2195).
cylinders(6).
horsepower_rpm(94, 4800).
bore_stroke(80, 72.8).
fuel(gasoline).
:- end_category.
% next, we define a souped up version of the previous engine, which differs
% from the standard one only in its reference and in its horsepower:
:- category(sport,
imports(classic)).
reference('M180.941').
horsepower_rpm(110, 5000).
:- end_category.
% with engines (and other components), we may start "assembling" some cars:
:- object(sedan,
imports(classic)).
:- end_object.
:- object(coupe,
imports(sport)).
:- end_object.