File: SCRIPT

package info (click to toggle)
yap 5.1.1-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 16,124 kB
  • ctags: 14,650
  • sloc: ansic: 122,796; perl: 22,545; sh: 3,768; java: 1,277; makefile: 1,191; xml: 739; tcl: 624; lisp: 142; awk: 9
file content (135 lines) | stat: -rw-r--r-- 2,186 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
=================================================================
Logtalk - Object oriented extension to Prolog
Release 2.27.1

Copyright (c) 1998-2006 Paulo Moura.  All Rights Reserved.
=================================================================


% start by loading the example:

| ?- logtalk_load(reflection(loader)).
...


% print the (public and protected) interface of each class:

| ?- (object, abstract_class, class)::print.

Object: object

  interface:
    new/1
    delete/1
    instances/1
    metaclass/0
    abstract_class/0
    strict_instance/0
    print/0

Object: abstract_class

  interface:
    new/1
    delete/1
    instances/1
    metaclass/0
    abstract_class/0
    strict_instance/0
    print/0

Object: class

  interface:
    new/1
    delete/1
    instances/1
    metaclass/0
    abstract_class/0
    strict_instance/0
    print/0

yes


% class is the metaclass of all classes:

| ?- class::instances(Instances), class::metaclass.

Instances = [class,abstract_class,object]
yes


% create an abstract_class, check it and print its interface:

| ?- abstract_class::new(ac), ac::abstract_class, ac::print.

Object: ac

  interface:
    metaclass/0
    abstract_class/0
    strict_instance/0
    print/0

yes


% try to create an instance of the abstract class:

| ?- ac::new(i).

uncaught exception: error(existence_error(predicate_declaration,new(i)),ac::new(i),user)


% create a new instantiable class and print its interface:

| ?- class::new(c), c::print.

Object: c

  interface:
    new/1
    delete/1
    instances/1
    metaclass/0
    abstract_class/0
    strict_instance/0
    print/0

yes


% create an instance of the new class:

| ?- c::new(i), c::instances(Instances).

Instances = [i]
yes


% because c does not declare any predicates, its instances have no interface:

| ?- i::current_predicate(Predicate).

no


% create an instance of object, root of the inheritance graph, and print its interface:

| ?- object::new(j), j::print.

Object: j

  interface:
    strict_instance/0
    print/0

yes


% delete the dynamic objects that we created:

| ?- c::delete(i), class::delete(c), abstract_class::delete(ac), object::delete(j).

yes