/* Extension for remove */ object *remove (object *x, object *lst) { if (lst == NULL) return nil; else if (x == car(lst)) return remove(x, cdr(lst)); else return cons(car(lst), remove(x, cdr(lst))); } object *fn_remove (object *args, object *env) { (void) env; return remove(first(args), second(args)); } // Symbol names const char stringremove[] PROGMEM = "remove"; // Documentation strings const char docremove[] PROGMEM = "(remove x lst)\n" "Returns a copy of lst with items eq to x removed."; // Symbol lookup table const tbl_entry_t lookup_table2[] PROGMEM = { { stringremove, fn_remove, 0222, docremove }, }; // Table cross-reference functions tbl_entry_t *tables[] = {lookup_table, lookup_table2}; const unsigned int tablesizes[] = { arraysize(lookup_table), arraysize(lookup_table2) }; const tbl_entry_t *table (int n) { return tables[n]; } unsigned int tablesize (int n) { return tablesizes[n]; }