NB. Database examples from Programming Methodology Chapter 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. nullp database do. '' else. if. name match head head database do. head database else. lookup name ; < rest database end. end. ) lookup_all =: monad define ('key' ; 'datalist') =. y. if. nullp datalist do. '' else. if. key match head head datalist do. (< rest head datalist) , lookup_all key ; < rest datalist else. lookup_all key ; < rest datalist end. end. ) add_data =: monad define ('item_pair' ; 'datalist') =. y. (< item_pair) , datalist ) remove_data =: monad define ('key' ; 'datalist') =. y. if. nullp datalist do. '' else. if. key match head head datalist do. rest datalist else. (< head datalist) , remove_data key ; < rest datalist end. end. ) remove_all_data =: monad define ('key' ; 'datalist') =. y. if. nullp datalist do. '' else. if. key match head head datalist do. remove_all_data key ; < rest datalist else. (< head datalist) , remove_all_data key ; < rest datalist end. end. ) people_lookup =: monad def 'lookup y. ; < people' people_all_looker =: monad def 'lookup_all y. ; < people' people_db =: ('konstam' ; 'patricia' ; 'newspaper writer') ; ('konstam' ; 'aaron' ; 'computer science professor') ; ('eggen' ; 'maury' ; 'computer science professor') ; ('howland' ; 'jack' ; 'computer science professor') ; ('howland' ; 'glynne' ; 'nail manufacturer') ; ('clinton' ; 'bill' ; 'president usa') ; ('clinton' ; 'hillary' ; 'first lady usa') ; ('perot' ; 'ross' ; 'wanted to be president') ; < ('bush' ; 'george' ; 'used to be president') people_db write_list 'people.db' lookup_file =: monad define ('key' ; 'filename') =. y. lookup key ; < read_list filename ) lookup_all_file =: monad define ('key' ; 'filename') =. y. lookup_all key ; < read_list filename ) add_data_file =: monad define ('item_pair' ; 'filename') =. y. (add_data item_pair ; < read_list filename) write_list filename ) people_file_looker =: monad def 'lookup_file y. ; ''people.db'''