From: LeonardoBizzoni Date: Sun, 17 Dec 2023 09:35:58 +0000 (+0100) Subject: Fatta la `fieldx` X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=21de6f1b15d029984de6988e2968d2883cad14ce;p=ObjectOriented-Prolog-Lisp Fatta la `fieldx` --- diff --git a/Prolog/README.org b/Prolog/README.org index 560b835..e9d4925 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -107,7 +107,7 @@ make(InstanceName, ClassName, Fields) :- is_instance(InstanceName, ClassName), check_fields(InstanceName, Fields). -check_fields(InstanceName, []). +check_fields(_InstanceName, []). check_fields(InstanceName, [=(Field, Value) | Other]) :- field(InstanceName, Field, Value), check_fields(InstanceName, Other). @@ -127,12 +127,21 @@ check_fields(InstanceName, [=(Field, Value) | Other]) :- *** Esempio pratico -** fields +** fieldx *** Definizione - +- Non ho capito se così va bene +- Non ho capito a cosa serve +- Non ho capito quando va usato *** Implementazione #+begin_src prolog :tangle oop.pl +fieldx(Instance, [FieldName], Res) :- + field(Instance, FieldName, Res), + !. +fieldx(Instance, [FieldName | Others], Res) :- + is_instance(Instance), + field(Instance, FieldName, Value), + fieldx(Value, Others, Res). #+end_src *** Esempio pratico diff --git a/Prolog/oop.pl b/Prolog/oop.pl index 24325bc..452d766 100644 --- a/Prolog/oop.pl +++ b/Prolog/oop.pl @@ -81,14 +81,20 @@ make(InstanceName, ClassName, Fields) :- is_instance(InstanceName, ClassName), check_fields(InstanceName, Fields). -check_fields(InstanceName, []). +check_fields(_InstanceName, []). check_fields(InstanceName, [=(Field, Value) | Other]) :- field(InstanceName, Field, Value), check_fields(InstanceName, Other). :- dynamic field/3. - +fieldx(Instance, [FieldName], Res) :- + field(Instance, FieldName, Res), + !. +fieldx(Instance, [FieldName | Others], Res) :- + is_instance(Instance), + field(Instance, FieldName, Value), + fieldx(Value, Others, Res). :- dynamic is_class/1. :- dynamic is_child_of/2.