Mercurial > hg > Applications > Tokio
view Examples/etc/mac @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line source
/* Three diferent descriptions of calcurate maginitude of vector */ /* data flow calcuration */ magasync_dataflow(A,B,Res):- Aab = 0, Bab = 0, G = 0, Res = 0, L = 0, Sqs = 0, G1 = 0, % initialize #abs_unit(A,Aab), #abs_unit(B,Bab), #maxmin(Aab,Bab,G,L), #calc(G,L,Sqs), #delay(G,G1), #result(G1,Sqs,Res). delay(G,G1):- @G1 = G. abs_unit(I,O):- if I < 0 then @O = -I else @O = I . maxmin(I1,I2,O1,O2):- if I1 > I2 then (@O1 = I1, @O2 = I2) else (@O1 = I2, @O2 = I1) . calc(I1,I2,O):- @O = I1 * 7 / 8 + I2 / 2 . result(I1,I2,O):- if I1 > I2 then @O = I1 else @O = I2 . /* algorithmic description */ magasync(A,B,Res):- (if A < 0 then Aab <- - A else Aab <- A ), (if B < 0 then Bab <- - B else Bab <- B ) && (if Aab > Bab then G <- Aab, L <- Bab else G <- Bab, L <- Aab) && Sqs <- G * 7 / 8 + L / 2 , G <- G && (if G > Sqs then Res <- G else Res <- Sqs). /* head is interval name */ mag_name(A,B,Res) :- int1(A,B,Res). int1(A,B,Res) :- skip, (if A < 0 then Aab <- - A else Aab <- A ), (if B < 0 then Bab <- - B else Bab <- B ) && int2(Aab,Bab,Res). int2(Aab,Bab,Res) :- skip, (if Aab > Bab then (G <- Aab, L <- Bab) else (G <- Bab, L <- Aab)) && int3(G,L,Res). int3(G,L,Res) :- skip, Sqs <- G * 7 / 8 + L / 2 , G <- G && int4(Sqs,G,Res). int4(Sqs,G,Res) :- skip, (if G > Sqs then Res <- G else Res <- Sqs) && true. /* data generator */ input_data(0,[]) :- !,empty. input_data(V,[H|T]):- V = H, @T = T, @input_data(V,T). write_fk(A) :- fin(write(A)),keep(write(A)). test1:- A=5,B=6, magasync(A,B,Res), write_fk([A,B,Res]). test2:- Va = [1,2,3,4,5,6,7], Vb = [1,2,3,4,5,6,7], input_data(A,Va),input_data(B,Vb), magasync_dataflow(A,B,Res), write_fk([A,B,Res]). test3:- A=5,B=6, mag_name(A,B,Res), write_fk([A,B,Res]).