home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / EXAMPLES / CH05EX12.PRO < prev    next >
Encoding:
Text File  |  1990-03-26  |  2.8 KB  |  108 lines

  1. /*
  2.    Copyright (c) 1986, 90 by Prolog Development Center
  3. */
  4.    
  5. trace
  6. domains
  7.    name, sex, occupation, object, vice, substance = symbol
  8.    age=integer
  9.  
  10. predicates
  11.    person(name, age, sex, occupation)
  12.    had_affair(name, name)
  13.    killed_with(name, object)
  14.    killed(name)
  15.    killer(name)
  16.    motive(vice)
  17.    smeared_in(name, substance)
  18.    owns(name, object)
  19.    operates_identically(object, object)
  20.    owns_probably(name, object)
  21.    suspect(name)
  22.  
  23. /* * * Facts about the murder * * */
  24. clauses
  25.    person(bert, 55, m, carpenter).
  26.    person(allan, 25, m, football_player).
  27.    person(allan, 25, m, butcher).
  28.    person(john, 25, m, pickpocket).
  29.  
  30.    had_affair(barbara, john).
  31.    had_affair(barbara, bert).
  32.    had_affair(susan, john).
  33.  
  34.    killed_with(susan, club).
  35.    killed(susan).
  36.  
  37.    motive(money).
  38.    motive(jealousy).
  39.    motive(righteousness).
  40.  
  41.    smeared_in(bert, blood).
  42.    smeared_in(susan, blood).
  43.    smeared_in(allan, mud).
  44.    smeared_in(john, chocolate).
  45.    smeared_in(barbara, chocolate).
  46.  
  47.    owns(bert, wooden_leg).
  48.    owns(john, pistol).
  49.  
  50. /* * * Background knowledge * * */
  51.  
  52.    operates_identically(wooden_leg, club).
  53.    operates_identically(bar, club).
  54.    operates_identically(pair_of_scissors, knife).
  55.    operates_identically(football_boot, club).
  56.  
  57.    owns_probably(X, football_boot) :-
  58.       person(X, _, _, football_player).
  59.    owns_probably(X, pair_of_scissors) :-
  60.       person(X, _, _, hairdresser).
  61.    owns_probably(X, Object) :-
  62.       owns(X, Object).
  63.  
  64. /* * * * * * * * * * * * * * * * * * * * * * *
  65.  * Suspect all those who own a weapon with   *
  66.  * which Susan could have been killed.       *
  67.  * * * * * * * * * * * * * * * * * * * * * * */
  68.  
  69.    suspect(X) :-
  70.       killed_with(susan, Weapon) ,
  71.       operates_identically(Object, Weapon) ,
  72.       owns_probably(X, Object).
  73.  
  74. /* * * * * * * * * * * * * * * * * * * * * * * * * *
  75.  * Suspect men who have had an affair with Susan.  *
  76.  * * * * * * * * * * * * * * * * * * * * * * * * * */
  77.  
  78.    suspect(X) :-
  79.       motive(jealousy) ,
  80.       person(X, _, m, _) ,
  81.       had_affair(susan, X).
  82.  
  83. /* * * * * * * * * * * * * * * * * * * * *
  84.  * Suspect females who have had an       *
  85.  * affair with someone that Susan knew.  *
  86.  * * * * * * * * * * * * * * * * * * * * */
  87.  
  88.    suspect(X) :-
  89.       motive(jealousy) ,
  90.       person(X, _, f, _) ,
  91.       had_affair(X, Man) ,
  92.       had_affair(susan, Man).
  93.  
  94. /* * * * * * * * * * * * * * * * * * * * * * * * * * *
  95.  * Suspect pickpockets whose motive could be money.  *
  96.  * * * * * * * * * * * * * * * * * * * * * * * * * * */
  97.  
  98.    suspect(X) :-
  99.       motive(money) , person(X, _, _, pickpocket).
  100.  
  101.    killer(Killer) :-
  102.       person(Killer, _, _, _) ,
  103.       killed(Killed) ,
  104.       Killed <> Killer , /* It is not a suicide */
  105.       suspect(Killer) ,
  106.       smeared_in(Killer, Goo) ,
  107.       smeared_in(Killed, Goo).
  108.