]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Esempi incredibili e Fixato il predicato fieldx
authorkier-mirko <mirkotolentino1@gmail.com>
Sat, 23 Dec 2023 12:06:47 +0000 (13:06 +0100)
committerkier-mirko <mirkotolentino1@gmail.com>
Sat, 23 Dec 2023 12:06:47 +0000 (13:06 +0100)
Prolog/README.org
Prolog/oop.pl

index ffc0f24fb658d95e322a55a2a3840a4f84991996..b23a6f2df5e7f21d1584c45b62e8ec8df9d0e84d 100644 (file)
@@ -58,8 +58,21 @@ def_class(ClassName, Parents, Parts) :-
 #+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
 
@@ -116,6 +129,13 @@ make(InstanceName, ClassName, Fields) :-
 #+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
@@ -128,7 +148,10 @@ make(InstanceName, ClassName, Fields) :-
 #+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
@@ -143,11 +166,13 @@ fieldx(Instance, [FieldName], Res) :-
 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
index f42fa2be4c572ed8139553019a0340a20a411343..3ec30c9a6a94b65aa8ca89c34a64ff4af73abc13 100644 (file)
@@ -96,7 +96,7 @@ fieldx(Instance, [FieldName], Res) :-
 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.