#8: keywords as functions on associations working

This commit is contained in:
Simon Brooke 2019-02-05 11:02:04 +00:00
parent 2bebee6002
commit e7ef82d23f
2 changed files with 45 additions and 32 deletions

View file

@ -91,6 +91,12 @@ struct cons_pointer c_assoc( struct cons_pointer key,
struct cons_pointer store ) {
struct cons_pointer result = NIL;
debug_print( L"c_assoc; key is `", DEBUG_BIND);
debug_print_object( key, DEBUG_BIND);
debug_print( L"`; store is \n", DEBUG_BIND);
debug_dump_object( store, DEBUG_BIND);
debug_println(DEBUG_BIND);
for ( struct cons_pointer next = store;
consp( next ); next = pointer2cell( next ).payload.cons.cdr ) {
struct cons_space_object entry =

View file

@ -308,6 +308,15 @@ c_apply( struct stack_frame *frame, struct cons_pointer frame_pointer,
}
}
break;
case KEYTV:
result = c_assoc( fn_pointer,
eval_form(frame,
frame_pointer,
c_car( c_cdr( frame->arg[0])),
env));
break;
case LAMBDATV:
{
struct cons_pointer exep = NIL;
@ -416,9 +425,7 @@ lisp_eval( struct stack_frame *frame, struct cons_pointer frame_pointer,
switch ( cell.tag.value ) {
case CONSTV:
{
result = c_apply( frame, frame_pointer, env );
}
break;
case SYMBOLTV: