//deep-bindによる。シンボルが見つからなかったら登録。 //見つかったらそこに値をいれておく。 void bindsym(int sym, int val){ int addr; addr= assoc(sym,ep); if(addr == 0) assocsym(sym,val); else SET_CDR(addr,val); }
//----------------------------- void initcell(void){ int addr; for(addr=0; addr < HEAPSIZE; addr++){ heap[addr].flag = FRE; heap[addr].cdr = addr+1; } hp = 0; fc = HEAPSIZE; //0番地はnil、環境レジスタを設定する。初期環境 ep = makesym("nil"); assocsym(makesym("nil"),NIL); assocsym(makesym("t"),makesym("t")); sp = 0; ap = 0; }
//----------------------------- void initcell(void){ int addr,addr1; for(addr=0; addr <= HEAPSIZE; addr++){ heap[addr].flag = FRE; heap[addr].cdr = addr+1; } H = 0; F = HEAPSIZE; //0番地はnil、環境レジスタを設定する。初期環境 E = makeNIL(); assocsym(makeNIL(),makeNIL()); assocsym(makeT(),makeT()); S = 0; A = 0; }
void bindarg(int varlist, int arglist){ int arg1,arg2; push(ep); while(!(IS_NIL(varlist))){ arg1 = car(varlist); arg2 = car(arglist); assocsym(arg1,arg2); varlist = cdr(varlist); arglist = cdr(arglist); } }
void bindarg(int lambda, int arglist){ int arg1,arg2; push(E); while(!(IS_NIL(lambda))){ arg1 = car(lambda); arg2 = car(arglist); assocsym(arg1,arg2); lambda = cdr(lambda); arglist = cdr(arglist); } }