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]).