:- module(dialogue_utils, [make_dialogue_move_canonical/2, non_constraining_pattern/1, non_constraining_pattern_element/1, get_lf_from_dialogue_state/2, error_pattern/1, repeat_pattern/1, meeting_id_for_record/2, interval_for_record/2, datime_for_record/2, affiliation_for_record/2, meeting_loc_for_record/2, time_number_for_record/2, time_number_for_meeting_id/2, interval_for_meeting_id/2, attendee_for_record/2, name_for_attendee/2, affiliation_for_attendee/2, name_for_location/2, prep/2 ]). %---------------------------------------------------------------------- :- use_module(library(lists)). :- use_module('$REGULUS/PrologLib/utilities'). :- use_module('$REGULUS/Examples/Calendar/Prolog/calendar_utils'). %---------------------------------------------------------------------- make_dialogue_move_canonical(MoveIn, MoveOut) :- make_dialogue_move_canonical1(MoveIn, MoveNext), sort(MoveNext, MoveOut), !. make_dialogue_move_canonical(MoveIn, MoveOut) :- format('~N*** Error: bad call: ~w~n', [make_dialogue_move_canonical(MoveIn, MoveOut)]), fail. make_dialogue_move_canonical1([F | R], [F1 | R1]) :- make_dialogue_move_element_canonical1(F, F1), !, make_dialogue_move_canonical1(R, R1). make_dialogue_move_canonical1(Other, Other). make_dialogue_move_element_canonical1(aggregate(Type, Body), aggregate(Type, Body1)) :- make_dialogue_move_canonical(Body, Body1), !. make_dialogue_move_element_canonical1(Other, Other). non_constraining_pattern([]). non_constraining_pattern([F | R]) :- non_constraining_pattern_element(F), !, non_constraining_pattern(R). error_pattern(Pattern) :- member(error(_), Pattern). repeat_pattern(Pattern) :- member(command=repeat, Pattern). non_constraining_pattern_element(utterance_type=_). non_constraining_pattern_element(tense_information=_). non_constraining_pattern_element(query_object=_). get_lf_from_dialogue_state(InS, LF) :- member(lf=LF, InS), !. get_lf_from_dialogue_state(_InS, LF) :- LF = '*no_lf*'. meeting_id_for_record(Record, Id) :- member(meeting=Id, Record). interval_for_record(Record, Interval) :- member(meeting=Id, Record), interval_for_meeting_id(Id, Interval). interval_for_meeting_id(Id, interval(StartDatime, EndDatime)) :- database:meeting(Id, Day, Month, Year, StartTime, EndTime, _Place), StartTime = StartHours:StartMins, EndTime = EndHours:EndMins, StartDatime = datime(Year, Month, Day, StartHours, StartMins, 0), EndDatime = datime(Year, Month, Day, EndHours, EndMins, 0). datime_for_record(Record, Datime) :- member(meeting=Id, Record), database:meeting(Id, Day, Month, Year, StartTime, _EndTime, _Place), StartTime = Hours:Mins, Datime = datime(Year, Month, Day, Hours, Mins, 0). %datime_for_record(Record, Datime) :- % member(meeting=Id, Record), % meeting(Id, Day, Month, Year, _StartTime, _EndTime, _Place), % Datime = datime(Year, Month, Day, 0, 0, 0). time_number_for_meeting_id(ID, Number) :- time_number_for_record([meeting=ID], Number). time_number_for_record(Record, Number) :- datime_for_record(Record, Datime), datime_to_number(Datime, Number). attendee_for_record(Record, Attendee) :- member(attendee=Attendee, Record). affiliation_for_record(Record, Affiliation) :- member(attendee=Attendee, Record), affiliation_for_attendee(Attendee, Affiliation). meeting_loc_for_record(Record, LocID) :- member(location=LocID, Record). % person(pierrette_bouillon, pierrette, bouillon, geneva, "+41 22 379 8679", "Pierrette.Bouillon@issco.unige.ch"). name_for_attendee(Attendee, Name) :- database:person(Attendee, FirstName, Surname, _Affiliation, _Phone, _Email), member(Name, [Attendee, FirstName, Surname]). affiliation_for_attendee(Attendee, Affiliation) :- database:person(Attendee, _FirstName, _Surname, Affiliation, _Phone, _Email). % location(ID, LocName, Country, City, Organisation). name_for_location(ID, Name) :- database:location(ID, LocName, Country, City, Organisation), member(Name, [LocName, Country, City, Organisation]). prep(at_loc, temporal). prep(at_meeting, temporal). prep(date, temporal). prep(from_loc, temporal). prep(on_date, temporal). prep(in_time, temporal). prep(at_time, temporal). prep(for_time, temporal). prep(duration, temporal). prep(duration_time, temporal). prep(during_time, temporal).