; ---------- SORTS -------------------- ( deftype X STR ) ;--------------------- ( deftype Stack LIST X ) ;--------------------- ; ---------- STATE -------------------- ( def _state ( quote S ) ) ;--------------------- ; ---------- FUNCTIONS ---------------- ( def _ops ( plus _ops ( makeff ( ( quote push ) ( quote ( ( ( X ) ( Stack ) ) ( Stack ) ) ) ) ) ) ) ;--------------------- ( def push lambda ( x s ) ( cons x s ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote top ) ( quote ( ( ( Stack ) ) ( X ) ) ) ) ) ) ) ;--------------------- ( def top lambda ( s ) ( if ( nequal s ( makeseq ) ) ( head s ) ( strcat "ERROR (precondition violated) in function " "top" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote pop ) ( quote ( ( ( Stack ) ) ( Stack ) ) ) ) ) ) ) ;--------------------- ( def pop lambda ( s ) ( if ( nequal s ( makeseq ) ) ( tail s ) ( strcat "ERROR (precondition violated) in function " "pop" ) ) ) ;--------------------- ; ---------- EVENTS ------------------- ( def _ops ( plus _ops ( makeff ( ( quote INIT ) ( quote ( ( ) NIL ) ) ) ) ) ) ;--------------------- ( def INIT lambda ( ) ( def S ( makeseq ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote PUSH ) ( quote ( ( ( X ) ) NIL ) ) ) ) ) ) ;--------------------- ( def PUSH lambda ( x ) ( def S ( push x S ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote POP ) ( quote ( ( ) ( X ) ) ) ) ) ) ) ;--------------------- ( def POP lambda ( ) ( if ( nequal S ( makeseq ) ) ( prog1 ( head S ) ( def S ( tail S ) ) ) ( strcat "ERROR (precondition violated) in function " "POP" ) ) ) ;--------------------- ( def _ops ( plus _ops ( makeff ( ( quote TOP ) ( quote ( ( ) ( X ) ) ) ) ) ) ) ;--------------------- ( def TOP lambda ( ) ( if ( nequal S ( makeseq ) ) ( head S ) ( strcat "ERROR (precondition violated) in function " "TOP" ) ) ) ;---------------------