.


:




:

































 

 

 

 





20.2 , QDE , . .

20.2. , . member/2 /3

%

:- (100, xfx,..>.:- (500, xfx,:].

% landmarks! Domain, [ Landl, Land2,... ]

% Landl, Land2 .. - Domain;

* ,

% correspond! Constraint):

% Constraint

%

correspond! sum! Doml:zero, Dom2:zero, Dom3:zeroM.

correspond! sum(Doml:L, Don\2: zero, Doml:L))!~

qmag I Doml:L), L \ = = zero, not [L = __) % L -

i Doml

correspond! sum(Doml:zero, Dom2:L, Dom2:U):-

qmag I Doro2:L), L \ = zero, not [L = _.._). % L -

% Dom2

correspond; sum(VI, V2, V3)):-

correspond! VI, V2, V3). i

% correspond/,

% "

* " Prolog

Correspond! dumny, dummy, dummy).

% gmag! Domain:QualMagnitude) [ Domain;Qm):-

landmarks! Domain, Lands),

gmag (Lands, QnO.

gmag(Lands, L):-
member) L, Lands),
L \== minf, L \== inf. %


20.



qmag(Lands, L1..L2):- *

concl _, [L1,L2 I _ ], Lands). l

% relative_qmag{ Domainl:QM, Domain2:Landmark, Sign):

% Sign - QM Landmark;

\ QH < Landmark, Sign - neg ..

relative_qraag(Domain:Ma..Mb, Domain:Land, Sign):-!, landmarks[ Domain, Lands),

(compare_lands(Ma, Land, Lands, neg). Sign neg,!;

Sign - pos).

rrlative_qmag(Domain:Ml, Domain:M2, Sign):-landmarks! Domain, Lands), compare_lands(Ml, M2, Lands, Sign),!.

% qdir(Qdir, Sign):

% Qdir -

% Sign

qdir[ dec, neg). gdir(std, zero). qdir(inc, pos).

% qsum(Ql, Q2, Q3]:

% Q3 = Ql + Q2,

% [pos,zero,neg]

qsum(pos, pos, pos).

qsum; pos, zero, pos).

qsumi pos, neg, pos).

gsuml pos, neg, zero),

qsuml pos, neg, neg).

qsum(zero, pos, pos).

qsum< zero, zero, zero).

qsum(zero, neg, neg).

qsumj neg, pos, pos).

gsum{ neg, pos, zero).

qsum(neg, pos, neg).

qsuml neg, zero, neg).

qsum< neg, neg, neg).

% qdirsuml Dl, D2, D3):

%

qdirsumt Dl, D2, D3I:-

qdir[ Dl, Ql), qdiri D2, Q2), qdiri D3, Q3), qsuraf Ql, Q2, Q3).

% sum(QV1, QV2, QV3):

i QVl - QV2 + QV3, % Domain:Qmag/Dir. , %

sum! D1:QM1/Dirl, D2;QM2/Dir2, D3:QM3/Dir3):-

qdirsumf Dirl, Dir2, Dir3), % : Dill + Dir2 = Dir3 qraag(D1:QM1), qmag (D2:QM2), qmag (D3:QM3),

% QM1+QM2-QM3 : not (



II. Prolog


correspond sum[ D1:V1, D2:V2, D3:V3)), * VI + V2 = V3 relative_qmag(D1;QM1, D1:V1, Signl), relative_qmag(D2:QM2, D2:V2, Sign2}, relative_qmag(D3:QM3, D3:V3, Sign3}, not qsuml Signl, Sign2, Sign3)).

% inplus (X, Y} :

* Y - - X

raplus(D1:QM1/Dir, D2:QM2/Dir):- % qmag{ D1:QM1), qmagf D2:QM2),

$ QM1, QM2 $ D1 D2: not (correspond; D1:V1, D2:V2)r

relative_qmag(D1:QM1, D1:V1, Signl),

relative_qmag(D2:QM2, D2:V2, Sign2),

Signl \== Sign2 ).

% derivf Van, Var2):

% varl Var2

deriv{ Doml :Qmagl/Dirl, Dom2:Qmag2/Dir2):-qriir(Dirl, Signl), qmag(Dom2:Qmag2),

relative_qmag(Dom2:Qmag2, Dom2:zero, Sign2), % 3ign2 - Qmag2 Signl = Sign2.

I transitionf Domain:Qmagl/Dirl, Domain:Craag2/Dir2):

% ,

* ""

transition! Dom:LI..L2/std, Dom:LI..L2/Dir2):-qdir(Dir2, AnySign).

transition! Dom:Ll,. L2/inc, Don:Li. .L2/inc).

transition! Dom:LI..L2/inc, Dora:LI.,L2/std).

transition,- Dom:LI..L2/inc, Dom:L2/inc):-L2 \== inf.

transition! Dom: LI.. L2/inc, Dom:Ij2/std}:-L2 \== inf.

transition! Dora:LI..L2/dec, Dora:LI..L2/dec;.

transition! Dem:LI,.L2/dec, Dom: LI..L2/std).

transition! Dom:LI.,L2/dec, Dom:LI /dec j LI \== minf.

transition,- Dom:Ll..L2/dec, Dom:Ll/std):-LI \== minf,

transition! Dem:Ll/std, Dom:Ll/std):-

LI \A..B. % LI

transition,- Dom:Ll/std, Dom:LI..L2/inc):-qmag< Dom:LI..L2).

transition! Dom;Ll/std, Dom:LO..Li/dec):-qmag(Dom:L0..LI}.

transition,- Dom:Ll/inc, Dom:LI..L2/inc):-qpag(Dom:LI..L2).


20.



transition! Dom:Ll/dec, Dom:LO..Ll/dec):-qmag (Dom;LQ-.LI}.

t system_trans(Statel, State2):

% ; -

%

system_trans ([], [ ]).

system_trarts< [Vail I Valsl], [Val2 I Vals2]}:-transition! Vail, Val2), system_transl Valsl, Vals2).

% legal_trans(Statel, State2):

,

legal^trans(Statel, State2): -system_ti:ans! Statel, Scate2 ),

Statel \== State2, % , legalstate{ State2J. % ,

* simulate! SystemStates, MaxLength):

% SystemStates

i , MaxLength

simulate{ [State], MaxLength):-

(MaxLength = 1 %

not legaltrans{ State, _) %

1,!

simulate! [Statel,State2 (Rest], MaxLength):-MaxLength > 1, NewMaxL is MaxLength - 1, legaltransl Statel, State2), simulate) [State2 I Rest], NewMaxL).

% simulate! InitialState, QualBehaviour, MaxLength)

simulate! InitialState, [InitialState I Rest], MaxLength):-

Iegal3tate(InitialState), %

simulate! [InitialState i Rest], MaxLength).

I compare_lands (XI, X.2, List, Sign):

I XI 2 List, Sign = neg;

% 2 XI, Sign pos; Sign zero

coTTipare_lands [ XI, 2, [First I Rest), Sign]:-XI = X2,!, Sign - zero

XI = First,!, Sign = neg

X2 = First,!, Sign = pos

cc;r.pare_lands (XI, X2, Rest, Sign).





:


: 2015-10-01; !; : 324 |


:

:

,
==> ...

1023 - | 836 -


© 2015-2024 lektsii.org - -

: 0.015 .