#+end_src
*** Esempio pratico
+#+name: def_class
+#+begin_src prolog
+def_class(foo, [], [field(foo, 42), method(foo, [Number], (field(this, foo, Foo),
+ Sum is Number + Foo,
+ write("Sum: "), writeln(Sum)))]).
+def_class(bar, [], [field(bar, "42"), method(bar, [], (write("Favorite number is "),
+ field(this, bar, Bar),
+ writeln(Bar)))]).
+def_class(foobar, [foo, bar], [field(foobar, "Baz"), method(foobar, [X, X, [X]], (!)), method(foobar, [Start, End, [Start | Ls]], (Start =< End,
+ N is Start + 1,
+ foobar(this, N, End, Ls)))]).
+
+#+end_src
** make
*** Definizione
#+end_src
*** Esempio pratico
+#+begin_src prolog
+make(f, foo).
+make(b, bar, [bar = "69"]).
+make(fb, foobar, [foo = 69, bar = "69"]).
+make(Instance, foobar).
+make(Instance, bar, [bar = "69"]).
+#+end_src
** field
#+end_src
*** Esempio pratico
-
+#+begin_src prolog
+field(fb, foobar, foo).
+field(fb, foobar, foobar).
+#+end_src
** fieldx
*** Definizione
- Non ho capito se così va bene
fieldx(Instance, [FieldName | Others], Res) :-
is_instance(Instance),
field(Instance, FieldName, Value),
- fieldx(Value, Others, Res).
+ fieldx(Instance, Others, Res).
#+end_src
*** Esempio pratico
-
+#+begin_src prolog
+fieldx(fb, [foo,bar,foobar], Result).
+#+end_src
* Predicati helper
** Predicati dinamici
fieldx(Instance, [FieldName | Others], Res) :-
is_instance(Instance),
field(Instance, FieldName, Value),
- fieldx(Value, Others, Res).
+ fieldx(Instance, Others, Res).
:- dynamic is_class/1.
:- dynamic is_child_of/2.