Thread View: comp.lang.prolog
1 messages
1 total messages
Started by Harry Virtanen INF
Mon, 16 Nov 1992 10:32
Object Prolog
Author: Harry Virtanen INF
Date: Mon, 16 Nov 1992 10:32
Date: Mon, 16 Nov 1992 10:32
88 lines
3348 bytes
3348 bytes
Hi!
There has been some discussion on Object Prolog in this newsgroup. I have
programmed (in prolog), just for the fun of it, an Object Prolog interpreter
that at the moment supports:
1) an object with its associated set of methods and attributes.
2) "dynamic objects"
3) a demon 'demon(Object,Attribute)' which, if it exists, will react to a
change in the value of the Attribute in the Object.
4) a special object 'myself' which enables to send a message from a method to
the object in which the method was declared.
5) a demon called 'init' which, if present in the set of methods of an object,
will be activated when a new instance of the object is created.
6) an inheritance network
7) multiple inheritance. An object may inherit the methods and attributes from
several parent objects.
8) message passing between objects. Search for an appropriate method is
depth-first.
9) Objects as values to attributes. Does not however support recursive
attributes, nor two objects that refer to each other through their
attributes.
and here is a stupid example:
animal
with_attributes
[(age:0)]
with_methods
[(setage(Age):-
age:Age),
(show:-
age:Age, write(Age),nl)].
bird
with_attributes
[(skin:feathers),
(name:unknown)]
with_methods
[(init:-
write('A bird has been born'),nl),
(fly(Me,Tree):-
write('Im flying to a tree'),nl,
ontree(Me) send_to Tree)].
bird is_a animal.
tree
with_attributes
[(inhabitant:bird)]
with_methods
[(ontree(What):-(inhabitant:bird:name):What)].
demon(tree,(inhabitant:bird:name)):-
(inhabitant:bird:name):Value,
write('The name of the inhabitant of the tree has changed to '),
write(Value),nl.
test:-
use_objects,
new_instance(theNightHawk,bird), % new bird
new_instance(oak,tree), % new tree
ontree(Whats) send_to oak, % whats on the tree
write(Whats),write(' is on the tree'),nl,
fly(theNightHawk,oak) send_to theNightHawk, % make the bird fly, hmm?
% this I have to work on
show send_to theNightHawk, % show age of nighthawk
setage(30) send_to theNightHawk, % set his age to 30
show send_to theNightHawk, % check age
ontree(What) send_to oak, % what is now on the oak
write(What),write(' is on the tree'),
clear_all.
The output of the test program will (suprise, suprise) be:
A bird has been born
unknown is on the tree
Im flying to a tree
The name of the inhabitant of the tree has changed to theNightHawk
0
30
theNightHawk is on the tree
Comments and questions are wellcome!
Harry "the bird" Virtanen
Abo Akademi University
Abo, Finland
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads