NB. Definitions used in Data Structures Chapter NB. Stacks NB. A cluge to fix broken object code as stddefs locale NB. now contains the definitions in stddefs.ijs make_z_ 'stddefs.ijs' stack_tag =: box 'stack' the_empty_stack =: box stack_tag make_stack =: monad def 'the_empty_stack' stackp =: monad def 'stack_tag match first open y' empty_stackp =: monad def 'the_empty_stack match y' push_stack =: monad define ('item obj') =. y if. not stackp box obj do. error 'wrong type second input to push_stack' ; obj else. box obj append box item end. ) top_stack =: monad define if. not stackp y do. error 'wrong type input to top_stack' ; y else. open last open y end. ) pop_stack =: monad define if. not stackp y do. error 'wrong type input to pop_stack' ; y else. box drop_last open y end. ) size_stack =: monad define if. not stackp y do. error 'wrong type input to size_stack' ; y else. _1 + tally open y end. ) print_stack =: monad define if. not stackp y do. error 'wrong type input to print_stack' ; y elseif. 0 = size_stack y do. 'end of stack' elseif. 1 do. display top_stack y print_stack pop_stack y end. ) NB. Queues queue_tag =: box 'queue' the_empty_queue =: box queue_tag make_queue =: monad def 'the_empty_queue' queuep =: monad def 'queue_tag match first open y' empty_queuep =: monad def 'the_empty_queue match y' enter_queue =: monad define ('item queue') =. y if. not queuep box queue do. error 'wrong type second input to enter_queue' ; queue else. box queue_tag append (box item) append rest queue end. ) front_queue =: monad define if. not queuep y do. error 'wrong type input to front_queue' ; y else. open last open y end. ) remove_queue =: monad define if. not queuep y do. error 'wrong type input to remove_queue' ; y else. box drop_last open y end. ) size_queue =: monad define if. not queuep y do. error 'wrong type input to size_queue' ; y else. _1 + tally open y end. ) print_queue =: monad define if. not queuep y do. error 'wrong type input to print_queue' ; y elseif. 0 = size_queue y do. 'end of queue' elseif. 1 do. display front_queue y print_queue remove_queue y end. ) NB. A simple list application people =: ('howland' ; 'jack' ; 'computer science professor') ; ('clinton' ; 'bill' ; 'president usa') ; ('clinton' ; 'hillary' ; 'president usa') ; ('perot' ; 'ross' ; 'wanted to be president') ; < ('bush' ; 'george' ; 'used to be president') lookup =: monad define ('name database') =. y if. 0 = tally database do. '' else. if. name match head head database do. head database else. lookup name ; box rest database end. end. ) lookup =: monad define ('name database') =. y if. nullp database do. '' else. if. name match head head database do. head database else. lookup name ; box rest database end. end. )