home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / examples / logbsp.lsp < prev    next >
Encoding:
Lisp/Scheme  |  1993-10-23  |  4.3 KB  |  177 lines

  1. ; Beispiele zum XP-Prolog
  2.  
  3.  
  4. ; Beispiel 1 : EQUAL, Unifikationstest
  5.  
  6. (deflog equal
  7.   ((x) (equal x x))
  8. )
  9.  
  10.  
  11. ; Beispiel 2 : INTEGER
  12.  
  13. ; (integer u), wenn u eine ganze Zahl >=0 ist.
  14. (deflog integer
  15.   (() (integer 0))
  16.   ((x y) (integer x) (and (integer y) (is x (+ y 1))))
  17. )
  18.  
  19. (defun example2 () (goal (u) (integer u)))
  20.  
  21.  
  22. ; Beispiel 3 : APPEND
  23.  
  24. ; (append (a1 ... ak) b (a1 ... ak . b))
  25. (deflog append
  26.   ((x) (append nil x x))
  27.   ((a x y z) (append (a . x) y (a . z)) (append x y z))
  28. )
  29.  
  30. (defun example3 () (goal (x y) (append x y (b r u n o))))
  31.  
  32.  
  33. ; Beispiel 4 : MEMBER
  34.  
  35. (deflog member
  36.   ((x rest) (member x (x . rest)))
  37.   ((x y rest) (member x (y . rest)) (member x rest))
  38. )
  39.  
  40.  
  41. ; Beispiel 5 : REVERSE
  42.  
  43. ; (reverse0 x y) falls y = (reverse x)
  44. ; Vorsicht: (reverse0 x (1 2)) liefert Endlosschleife.
  45. (deflog reverse0
  46.   ((x y) (reverse0 x y) (reverse2 x y nil))
  47. )
  48.  
  49. ; (reverse1 x y) falls y = (reverse x)
  50. ; Vorsicht: (reverse1 x y z) liefert nur eine Lösung.
  51. (deflog reverse1
  52.   ((x y) (reverse1 x y) (and (reverse2 x y nil) (!)))
  53. )
  54.  
  55. ; (reverse2 x y z) falls y = (revappend x z)
  56. (deflog reverse2
  57.   ((z) (reverse2 () z z))
  58.   ((a x y z) (reverse2 (a . x) y z) (reverse2 x y (a . z)))
  59. )
  60.  
  61. ; (palindrome x) stellt fest, ob eine Liste ist, die beim Umdrehen gleichbleibt.
  62. (deflog palindrome
  63.   ((x) (palindrome x) (reverse0 x x))
  64. )
  65.  
  66.  
  67. ; Beispiel 6 : Olaf Wendts MISCELL-Datei
  68. ; [Olaf Wendt: Prolog-Interpreter, implementiert in LISP,
  69. ;  Jugend forscht 1984]
  70.  
  71. (deflog mensch
  72.   (() (mensch sokrates))
  73.   (() (mensch hannibal))
  74. )
  75. (deflog fehlbar
  76.   ((x) (fehlbar x) (mensch x))
  77. )
  78.  
  79. (deflog hanoi
  80.   ((n) (hanoi n) (setzum n linken mittleren rechten))
  81. )
  82. (deflog setzum
  83.   ((a b c) (setzum 0 a b c) (!))
  84.   ((n m a b c) (setzum n a b c)
  85.      (and (is m (- n 1)) (setzum m a c b) (meldung a b) (setzum m c b a)))
  86. )
  87. (deflog meldung
  88.   ((a b) (meldung a b)
  89.      (format t "~%Lege eine Scheibe vom ~(~S~) Stab zum ~(~S~) Stab." a b))
  90. )
  91.  
  92. (deflog geh
  93.   ((knoten l) (geh knoten knoten l))
  94.   ((von nach passiert x) (geh von nach passiert)
  95.      (and (or (v von x) (v x von))
  96.           (not (member x passiert))
  97.           (geh x nach (x . passiert))
  98.   )  )
  99. )
  100. (deflog v
  101.   (() (v draußen windfang))
  102.   (() (v windfang flur))
  103.   (() (v flur eßzimmer))
  104.   (() (v flur küche))
  105.   (() (v eßzimmer küche))
  106.   (() (v eßzimmer wohnzimmer))
  107.   (() (v wohnzimmer diele))
  108.   (() (v diele arbeitszimmer))
  109.   (() (v diele bad))
  110.   (() (v bad schlafzimmer))
  111.   (() (v flur wohnzimmer))
  112.   (() (v schlafzimmer wohnzimmer))
  113. )
  114. (deflog tresor
  115.   (() (tresor arbeitszimmer))
  116. )
  117.  
  118. (deflog sentence
  119.   ((s s1 s2 s3 p p1 pp x) (sentence s s1 pp)
  120.      (and (nounphrase s s2 x p1 p)
  121.           (verbphrase s2 s3 x p1)
  122.           (anding s3 s1 p pp)
  123. ) )  )
  124. (deflog anding
  125.   ((s s1 p p1) (anding (and . s) s1 p (& p p1)) (sentence s s1 p1))
  126.   ((s p) (anding s s p p))
  127. )
  128. (deflog nounphrase
  129.   ((s s1 s2 s3 p p1 p2 p3 x) (nounphrase s s1 x p1 p)
  130.      (and (determiner s s2 x p2 p1 p)
  131.           (noun s2 s3 x p3) (relclause s3 s1 x p3 p2) ))
  132.   ((s s1 p x) (nounphrase s s1 x p p) (propernoun s s1 x))
  133. )
  134. (deflog verbphrase
  135.   ((s s1 s2 p p1 x y) (verbphrase s s1 x p)
  136.      (and (transverb s s2 x y p1) (nounphrase s2 s1 y p1 p)) )
  137.   ((s s1 p x) (verbphrase s s1 x p) (intransverb s s1 x p))
  138. )
  139. (deflog relclause
  140.   ((s s1 p1 p2 x) (relclause (that . s) s1 x p1 (& p1 p2))
  141.                   (verbphrase s s1 x p2) )
  142.  
  143.   ((s x p) (relclause s s x p p))
  144. )
  145. (deflog determiner
  146.   ((s x p1 p2) (determiner (every . s) s x p1 p2 (all x (==> p1 p2))))
  147.   ((s x p1 p2) (determiner (a . s) s x p1 p2 (exists x (& p1 p2))))
  148. )
  149. (deflog noun
  150.   ((s x) (noun (man . s) s x (man x)))
  151.   ((s x) (noun (woman . s) s x (woman x)))
  152.   ((s x) (noun (apple . s) s x (apple x)))
  153.   ((s x) (noun (dog . s) s x (dog x)))
  154. )
  155. (deflog propernoun
  156.   ((s) (propernoun (john . s) s john))
  157.   ((s) (propernoun (mary . s) s mary))
  158. )
  159. (deflog transverb
  160.   ((s x y) (transverb (has . s) s x y (has x y)))
  161.   ((s x y) (transverb (loves . s) s x y (loves x y)))
  162.   ((s x y) (transverb (eats . s) s x y (eats x y)))
  163. )
  164. (deflog intransverb
  165.   ((s x) (intransverb (lives . s) s x (lives x)))
  166.   ((s x) (intransverb (barks . s) s x (barks x)))
  167. )
  168.  
  169.  
  170. ; Beispiel 7 : NOT
  171.  
  172. (deflog not
  173.   ((pred) (not pred) (and (call pred) (!) (fail)))
  174.   ((pred) (not pred))
  175. )
  176.  
  177.