book(et,sfipubs). book(son_of_et,sfipubs). book(i_was_a_teenage_robot,sfipubs). book(et_rides_again,sfipubs). book(biggles_and_wendy,virago). book(freda_the_fire_engine,virago). book(i_claudius,penguin). book(history_of_the_western_world,penguin). book(dictionary_of_computing,penguin). book(ttl_cookbook,sams). book(cmos_cookbook,sams). stocks(james_thin,sfipubs). stocks(james_thin,virago). stocks(james_thin,penguin). stocks(menzies,sfipubs). stocks(better_books,penguin). stocks(better_books,virago). stocks(bauermeister,penguin). stocks(bauermeister,sams). stocks(edinbooks,sfipubs). stocks(edinbooks,virago). stocks(edinbooks,sams). closed(james_thin). open(menzies). open(better_books). open(bauermeister). closed(edinbooks). can_buy(Book,Open_shops):- book(Book,Publisher),possible(Publisher,Shops),filter(Shops,Open_shops). possible(Publisher,Shops):- bagof(X,stocks(X,Publisher),Shops). filter([],[]). filter([H|T],L):- closed(H),filter(T,L). filter([H|T],[H|L]):- open(H),filter(T,L).