mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
115 lines
3.2 KiB
Mathematica
115 lines
3.2 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module advisor_impl.
|
|
|
|
:- interface.
|
|
|
|
:- type weather
|
|
---> sunny
|
|
; rainy
|
|
; foggy
|
|
; windy.
|
|
|
|
:- type activity
|
|
---> go_to_work
|
|
; go_out_to_the_nature
|
|
; visit_the_golf_club
|
|
; wash_your_car
|
|
; go_out_to_the_town
|
|
; visit_the_bridge_club
|
|
; enjoy_yourself_at_home
|
|
; it_is_fun_to_learn_Japanese
|
|
; you_had_better_stay_in_bed.
|
|
|
|
:- pred what_to_do_today_may(weather, activity).
|
|
:- mode what_to_do_today_may(in, in) is semidet.
|
|
:- mode what_to_do_today_may(in, out) is nondet.
|
|
:- mode what_to_do_today_may(out, in) is nondet.
|
|
:- mode what_to_do_today_may(out, out) is nondet.
|
|
|
|
:- implementation.
|
|
|
|
what_to_do_today_may(W, A) :-
|
|
what_to_do_today(first_of_may, W, A).
|
|
|
|
:- type day
|
|
---> monday
|
|
; tuesday
|
|
; wednesday
|
|
; thursday
|
|
; friday
|
|
; saturday
|
|
; sunday
|
|
; eastern
|
|
; first_of_may
|
|
; christmas
|
|
; new_years_day
|
|
; friday_the_13th.
|
|
|
|
:- type day_type
|
|
---> workday
|
|
; weekend
|
|
; feastday
|
|
; badday.
|
|
|
|
:- type weather_type
|
|
---> nice
|
|
; nasty.
|
|
|
|
:- pred what_to_do_today(day, weather, activity).
|
|
:- mode what_to_do_today(in, in, out) is nondet.
|
|
:- mode what_to_do_today(out, in, in) is nondet.
|
|
:- mode what_to_do_today(in, in, in) is semidet.
|
|
:- mode what_to_do_today(in, out, out) is nondet.
|
|
|
|
what_to_do_today(Today, Weather, Program):-
|
|
kind_of_day(Today, Daykind),
|
|
kind_of_weather(Weather, Weatherkind),
|
|
proposal(Daykind, Weatherkind, Program).
|
|
|
|
:- pred kind_of_day(day, day_type).
|
|
:- mode kind_of_day(in, out) is det.
|
|
:- mode kind_of_day(out, in) is multi.
|
|
:- mode kind_of_day(out, out) is multi.
|
|
|
|
kind_of_day(monday, workday).
|
|
kind_of_day(tuesday, workday).
|
|
kind_of_day(wednesday, workday).
|
|
kind_of_day(thursday, workday).
|
|
kind_of_day(friday, workday).
|
|
kind_of_day(saturday, weekend).
|
|
kind_of_day(sunday, weekend).
|
|
kind_of_day(eastern, feastday).
|
|
kind_of_day(first_of_may, feastday).
|
|
kind_of_day(christmas, feastday).
|
|
kind_of_day(new_years_day, badday).
|
|
kind_of_day(friday_the_13th, badday).
|
|
|
|
:- pred kind_of_weather(weather, weather_type).
|
|
:- mode kind_of_weather(in, out) is det.
|
|
:- mode kind_of_weather(out, in) is multi.
|
|
:- mode kind_of_weather(out, out) is multi.
|
|
|
|
kind_of_weather(sunny, nice).
|
|
kind_of_weather(rainy, nasty).
|
|
kind_of_weather(foggy, nasty).
|
|
kind_of_weather(windy, nasty).
|
|
|
|
:- pred proposal(day_type, weather_type, activity).
|
|
:- mode proposal(in, in, out) is nondet.
|
|
:- mode proposal(out, in, in) is nondet.
|
|
|
|
proposal(workday, _, go_to_work).
|
|
proposal(weekend, nice, go_out_to_the_nature).
|
|
proposal(weekend, nice, visit_the_golf_club).
|
|
proposal(weekend, nice, wash_your_car).
|
|
proposal(weekend, nasty, go_out_to_the_town).
|
|
proposal(weekend, nasty, visit_the_bridge_club).
|
|
proposal(weekend, nasty, enjoy_yourself_at_home).
|
|
proposal(weekend, _, it_is_fun_to_learn_Japanese).
|
|
proposal(badday, _, you_had_better_stay_in_bed).
|
|
proposal(feastday, Weather, Program) :-
|
|
proposal(weekend, Weather, Program).
|