Ho un dubbio sulla definizione di un template e sui valori di default.
codice:
CLIPS> (clear)
CLIPS>
(deftemplate foo
(slot w (default ?NONE))
(slot x (default ?DERIVE))
(slot y (default (gensym*)))
(slot z (default-dynamic (gensym*))))
CLIPS> (assert (foo))
[TMPLTRHS1] Slot w requires a value because of its (default ?NONE) attribute.
CLIPS> (assert (foo (w 3)))
<Fact-0>
CLIPS> (assert (foo (w 4)))
<Fact-1>
CLIPS> (facts)
f-0 (foo (w 3) (x nil) (y gen1) (z gen2))
f-1 (foo (w 4) (x nil) (y gen1) (z gen3))
For a total of 2 facts.
CLIPS>
Quello che non riesco a comprendere sono le righe che vi ho evidenziato.
Innanzitutto, se non ho capito male un template va a definire dei fatti i cui campi possono assumere valori non predefiniti.
Per quanto riguarda la prima riga evidenziata la stringa ?NONE sta ad indicare che non viene definito alcun valore e quindi quando si fa a fare la prima asserzione giustamente chiede di definire un valore.
Ecco, per questa prima cosa vorrei appunto una conferma.
Per il resto delle righe il dubbio è relativo proprio ai valori. La stringa ?DERIVE dovrebbe indicare un valore nullo, almeno così mi sembra di capire da quello che il programma restituisce come output. Ovviamente vorrei una conferma anche su questa cosa.
Per le ultime 2 righe evidenziate invece non riesco davvero a comprenderle.
Mi aiutate a capirle?