/*-*-Macsyma-*-*/

/* DEFAR(FOO,[X,Y],X+Y) Defines a function FOO and an array FOO.
   This allows you more flexibility than you get with straight
   macsym array functions. It is possible to reset the array
   without killing the function.  
    
   -GJC 8:54am  Friday, 5 September 1980 

*/

EVAL_WHEN([translate,batch,demo],
          IF GET('MACRO1,'VERSION) = FALSE
             THEN LOADFILE(MACRO1,FASL,DSK,SHARE),
          IF GET('SUBMAC,'VERSION) = FALSE
             THEN LOADFILE(SUBMAC,FASL,DSK,SHARE2))$

EVAL_WHEN(TRANSLATE,PACKAGEFILE:TRUE,SAVEDEF:FALSE,TRANSCOMPILE:TRUE)$

DEFAR('NAME,'ARGL,'BODY)=>
 (NAME(SPLICE(ARGL)):=
  BLOCK([%_VAL:BLOCK([?EVARRP:TRUE],DECLARE(?EVARRP,SPECIAL),NAME[SPLICE(ARGL)])],
	IF %_VAL='?NOTEXIST THEN 
           (%_VAL:BODY,NAME[SPLICE(ARGL)]:%_VAL,%_VAL)
         ELSE %_VAL),
 /* kludge to init the array, (as a hashed array). */
   NAME[SPLICE(ARGL)]:'?NOTEXIST,
   NAME:'NAME);

EVAL_WHEN(DEMO,

DEFAR(LEGEND,[N],((2*N-1)*'X*LEGEND(N-1)-(N-1)*LEGEND(N-2))/N),

(LEGEND[0]:RAT(1), LEGEND[1]:RAT('X)));

EVAL_WHEN(DEMO,LEGEND(5));
