Esempio n. 1
0
File: mlis.c Progetto: kzfm1024/misc
//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);  
}
Esempio n. 2
0
File: mlis.c Progetto: kzfm1024/misc
//-----------------------------
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;
}
Esempio n. 3
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;
}
Esempio n. 4
0
File: mlis.c Progetto: kzfm1024/misc
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);
    }
}
Esempio n. 5
0
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);
    }
}