/************************************************************************* name: database_cellphone.pl version: description: Database for MiniMobilePhone author: Peter Bohlin, Staffan Larsson, Stina Ericsson *************************************************************************/ :- module( database_cellphone, [ consultDB/3, updateDB/2 ] ). :- use_module( library(lists), [ member/2, select/3, append/3 ] ). :- dynamic entry/2, sec_code/1. /*---------------------------------------------------------------------- consultDB( +Beliefs, +Query, -Answer ) -- Returns (if it succeeds) an Answer to a Query given background Beliefs and a Domain ----------------------------------------------------------------------*/ consultDB( _^Query, Known, Query ):- db( Facts ), select( Query, Facts, KnownFacts ), % check that known facts are consistent with db post \+ ( member( Fact, KnownFacts ), \+ implies( Known, Fact ) ). implies( Bel, Fact ) :- member( Fact, Bel ). updateDB( add_entry, Known ) :- member( name_to_add(Name), Known ), member( number_to_add(Number), Known ), %to_number( Number1, Number ), assert( entry(Name,Number) ). updateDB( delete_entry, Known ) :- member( entry_to_delete(Name), Known ), entry(Name,Number), retract( entry(Name,Number) ). updateDB( change_security_code, Known ) :- member( current_security_code(CurrCode), Known ), member( new_security_code(NewCode), Known ), %to_number( CurrCode1, CurrCode ), %to_number( NewCode1, NewCode ), retract( sec_code(CurrCode) ), assert( sec_code(NewCode) ). to_number( N, N ) :- number( N ), !. to_number( A, N ) :- atom_chars( A, Cs ), number_chars( N, Cs ). to_atom( N, N ) :- atom( N ), !. to_atom( N, A ) :- number_chars( N, Cs ), atom_chars( A, Cs ). %%% db( -Facts ) db( [ task(change_security_code), current_security_code(_UserInputCode), security_codeDB(CodeDB) ] ) :- sec_code(Code0), CodeDB = Code0. % Alex % to_atom(Code0,CodeDB). db( [ the_security_code(_UserInputCode), security_codeDB(CodeDB) ] ) :- sec_code(Code0), CodeDB = Code0. % Alex % to_atom(Code0,CodeDB). /* % NB Binding NewSC does not work db( [ current_security_code(CurrSC), new_security_code(NewSC), security_code_changed_toDB(NewSC) ] ). */ /* db( [ current_security_code(CurrSC), new_security_code(NewSC), security_code_changed_toDB(ChangedCode) ] ) :- retract(sec_code(CurrSC)), assert(sec_code(NewSC)), sec_code(ChangedCode). */ db( [ search_for_name(Name), pb_numberDB(Number) ] ) :- entry(Name,Number). db( [ entry_to_delete(Name), pb_numberDB(Number) ] ) :- entry(Name,Number). /* db( [ entry_to_delete(Name), entry_deletedDB(Number) ] ) :- entry(Name,Number), retract(entry(Name,Number)). db( [ name_to_add(Name), number_to_add(Number), entry_addedDB(Name) ] ) :- assert(entry(Name,Number)). */ %%% db facts for the mobile phone domain %% security code sec_code('9999'). %% phone book %entry(Name,Number). entry(anna,565644). entry(john,338896). entry(mia,543912). %% security_code_defined(Code) :- user:val(lexicon,Lexicon), Lexicon: lex_security_code(Code).