View source with raw comments or as raw
    3# pred diagnosis(P,T) :: 'The diagnosis for @(P) with a temperature of @(T) is that:'.
    4diagnosis(P,T) :- fever(P,T).
    5diagnosis(P,T) :- no_fever(P,T).
    6
    7# pred fever(Person,Temp) :: '@(Person) has a fever'.
    8# pred no_fever(Person,Temp) :: '@(Person) has no fever'.
    9fever(Person,Temp) :-
   10    temp(Person,Temp),
   11    high_temp(Temp),
   12    not no_fever(Person,Temp).
   13
   14no_fever(Person,Temp) :-
   15    temp(Person,Temp),
   16    not high_temp(Temp),
   17    not fever(Person,Temp).
   18
   19high_temp(T) :- T #> 38.
   20
   21temp(P,T) :- reg_temp(P,T).
   22temp(P,T) :- not reg_person(P).
   23
   24# pred reg_temp(Person,Temp) :: 'The registered temperarture of @(Person) is @(Temp)'.
   25# pred not reg_temp(Person,Temp) :: 'We do not have a registered temperature for @(Person) of @(Temp)'.
   26reg_temp('Juan',37).
   27reg_temp('Pedro',39).
   28
   29
   30# pred not reg_person(Person) :: 'There are no registerd temperature of @(Person)'.
   31reg_person(P) :- reg_temp(P,T).
   32
   33
   34%%%%%%%%   Queries %%%%%%%
   35?- diagnosis('Luisa',T).
?- diagnosis('Juan',T). %% Juan has no fever ?- diagnosis('Pedro',T). %% Pedro has fever