next up previous contents index
Next: Aktualizace Up: Metody instance Previous: V/V   Obsah   Index

Dedukce

Pluto je LP jazyk. Používá se hlavně k získání informací, které nejsou explicitně dostupné. Předpokládejme následující příklad:

class osoba[rok_narozeni $\Rightarrow$ integer; rodice $\Rightarrow$ osoba;
static tento_rok $\Rightarrow$ integer default 2000;
vek() $\Rightarrow$ integer{age() $\rightarrow$ A:- A = tento_rok - rok_narozeni
predci() $\Rightarrow$ {osoba}predci() $\rightarrow$ $\langle$X$\rangle$:- rodice $\rightarrow$ $\langle$X$\rangle$;
predci() $\rightarrow$ $\langle$X$\rangle$:- rodice $\rightarrow$ $\langle$P$\rangle$, P.predci() $\rightarrow$ $\langle$X$\rangle$}

První metoda získá věk osoby z data rok_narozeni. Druhá metoda získá předky z atributu rodice. Konstrukce $\langle X_1...X_n \rangle $ je převzata z ROL [9] a RLOG [10] pro manipulaci s množinami. Pracuje dvěma různými způsoby: je-li uvedena v těle pravidla, označuje podmnožinu; uvedena v hlavičce, seskupuje množiny.

Definice typu a implementace metody může být v Plutu provázána. Předchozí definice třídy může být psána podobně jako v Javě:

class osoba[rok_narozeni $\Rightarrow$ integer;
rodice $\Rightarrow$ {osoba}; static tento_rok $\Rightarrow$ integer default 2000; vek() $\Rightarrow$ integer A {A = tento_rok - rok_narozeni}
predci() $\Rightarrow$ {osoba} $\langle$X$\rangle$ {rodice -> $\langle$X$\rangle$; rodice $\rightarrow$ $\langle$X$\rangle$, predci() $\rightarrow$ $\langle$X$\rangle$}]

Podobně jako v PROLOGu jsou i v Plutu pravidla vyhodnocována nedeterministicky. Pro ovlivnění vyhodnocení pravidel je použito fail a ! (cut).


next up previous contents index
Next: Aktualizace Up: Metody instance Previous: V/V   Obsah   Index
Tomáš Kubíček 2002-05-19