From: kier-mirko Date: Sat, 23 Dec 2023 12:06:47 +0000 (+0100) Subject: Esempi incredibili e Fixato il predicato fieldx X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=8149846fd95dcd8d9a6bc4c27e5c6a1684710cc2;p=ObjectOriented-Prolog-Lisp Esempi incredibili e Fixato il predicato fieldx --- diff --git a/Prolog/README.org b/Prolog/README.org index ffc0f24..b23a6f2 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -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 diff --git a/Prolog/oop.pl b/Prolog/oop.pl index f42fa2b..3ec30c9 100644 --- a/Prolog/oop.pl +++ b/Prolog/oop.pl @@ -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.