#include #include #include "memsim-decl.h" int first(int lst){ if(lst < MSIZE && lst != EMPTY){ return(memory[lst]); } else{ printf("Out of bounds\n"); abort(); } } int rest(int lst){ if(lst <= MSIZE) return(memory[lst+1]); else printf("Out of bounds\n"); abort(); }; int cons(int first, int rest){ int temp=0; if(next_mem >= MSIZE && free_list == EMPTY){ printf("Cons out of memory fool\n"); abort(); } else{ if(free_list == EMPTY){ temp = next_mem; memory[next_mem] = first; memory[next_mem + 1] = rest; next_mem += 2; } else{ temp = free_list; memory[free_list] = first; free_list = memory[free_list + 1]; memory[temp + 1] = rest; } } return(temp); } void give_back(int ptr){ int p=ptr; while (memory[p+1] != EMPTY) { p = memory[p+1]; } memory[p+1] = free_list; free_list = ptr; }