View source with formatted comments or as raw
    1:- use_module(library(scasp)).    2:- use_module(library(scasp/human)).    3
    4:- use_module('PAS_rules').    5:- use_module('PAS_guide').    6:- use_module('PAS_patient').    7
    8case(1,
    9     [ case_measurement(age, 76),
   10       case_evidence(african_american),
   11       case_evidence(male),
   12
   13       %* Assessments *%
   14       case_evidence(nyha_class_4),
   15       case_evidence(accf_stage_c),
   16
   17       %* Contraindications *%
   18       case_contraindication(continuous_positive_airway_pressure),
   19
   20       %* Diagnoses *%
   21       case_diagnosis(ischemic_heart_disease),
   22       case_diagnosis(hypertension),
   23       case_diagnosis(diabetes),
   24       case_diagnosis(atrial_fibrillation),
   25
   26       %* Dosages *%
   27
   28       %* Evidence *%
   29       case_evidence(sleepApnea),
   30       case_evidence(angina),
   31
   32       %* Illness History *%
   33       case_history(stroke),
   34       case_history(ischemic_attack),
   35
   36       %* Measurements *%
   37       case_measurement(lvef, 0.35),
   38       case_measurement(heart_rate, 72),
   39       case_measurement(creatinine, 1.9),
   40       case_measurement(glomerular_filtration_rate, 55),
   41       case_measurement(potassium, 4.2),
   42
   43       %* Medication History *%
   44       case_history(ace_inhibitors),
   45       case_history(beta_blockers)
   46     ]).
   47
   48load_case(Case) :-
   49    case(Case, Data),
   50    patient_data(Data).
   51
   52%!  solve(+Query, +Case)
   53%
   54%   Solves Query and display the result in _human_ format. The latter is
   55%   a hack for now, suppressing the normal output.
   56%
   57%   Examples
   58%
   59%      ?- solve(chose(ace_inhibitors), 1).
   60
   61solve(Query, Case) :-
   62    load_case(Case),
   63    setup_call_cleanup(
   64        set_output(false, false, State),
   65        ( scasp(Query),
   66          scasp_justification(Tree, []),
   67          human_justification_tree(Tree),
   68          save_tree(Tree, us)
   69        ),
   70        restore_output(State)).
   71
   72set_output(Model, Justification, s(OldModel, OldJustification)) :-
   73    current_prolog_flag(scasp_show_justification, OldJustification),
   74    current_prolog_flag(scasp_show_model, OldModel),
   75    set_prolog_flag(scasp_show_justification, Justification),
   76    set_prolog_flag(scasp_show_model, Model).
   77
   78restore_output(s(OldModel, OldJustification)) :-
   79    set_prolog_flag(scasp_show_justification, OldJustification),
   80    set_prolog_flag(scasp_show_model, OldModel).
   81
   82%!  save_tree(+Tree, +File)
   83%
   84%   Write the justification tree to File.   Used for comparison with the
   85%   original version.
   86
   87save_tree(Tree, File) :-
   88    message_to_string(scasp_justification(Tree,
   89                                          [ depth(1)
   90                                          ]),
   91                      String),
   92    setup_call_cleanup(open(File, write, Out),
   93                       write(Out, String),
   94                       close(Out)).
   95
   96%% %---------- Anticoagulation: There are 4 reasons to recommend it
   97% ?- recommendation(anticoagulation).
   98% ?- chose(anticoagulation).
   99
  100%% %---------- There is one reason to recommend beta_blockers
  101% ?- recommendation(beta_blockers).
  102%% %---------- Beta_blockers concomitants the choice of diuretics
  103% ?- chose(beta_blockers).
  104
  105%% %---------- Aldosterone_antagonist vs. Ace_inhibitors: They are incompatible
  106%% %           While we can observe the reasons to be recommended
  107% ?- recommendation(aldosterone_antagonist), recommendation(ace_inhibitors).
  108%% %---------- We can not choose both of them at the same time
  109% ?- chose(aldosterone_antagonist), chose(ace_inhibitors).      % NO MODELS
  110%% %---------- E.g., Ace_inhibitors can be chosen:
  111%% %  if Aldosterone_antagonist is discarded
  112%% %  if arbs is also discarded
  113%% % and if diuretics is chosen (it is concomitant)
  114% ?- chose(ace_inhibitors).
  115
  116
  117%% %---------- Second-line choices: arbs is the second choice for ace_inhibitors:
  118%% %           Scenario A: ace_inhibitors can be chosen -> arbs is not recommended
  119% ?- chose(arbs).   % NO MODELS
  120
  121%% %           Scenario B: ace_inhibitors has contraindication -> arbs is recommended
  122% contraindication(ace_inhibitors).  % UNCOMMENT THIS FACT
  123% ?- chose(arbs).
  124
  125%% %---------- Multiple indispensables treatments: hydralazine/isosorbide_dinitrate...
  126% ?- chose(hydralazine).