Advertisement
Guest User

Untitled

a guest
Jun 13th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 3.57 KB | None | 0 0
  1. #lang racket
  2.  
  3. (require racklog)
  4. ;;------------------------------------------ZAD 1--------------------------------------------
  5.  
  6. ;; predykat unarny %male reprezentuje zbiór mężczyzn
  7. (define %male
  8.   (%rel ()
  9.         [('adam)]
  10.         [('john)]
  11.         [('joshua)]
  12.         [('mark)]
  13.         [('david)]))
  14.  
  15. ;; predykat unarny %female reprezentuje zbiór kobiet
  16. (define %female
  17.   (%rel ()
  18.         [('eve)]
  19.         [('helen)]
  20.         [('ivonne)]
  21.         [('anna)]))
  22.  
  23. ;; predykat binarny %parent reprezentuje relację bycia rodzicem
  24. (define %parent
  25.   (%rel ()
  26.         [('adam 'helen)]
  27.         [('adam 'ivonne)]
  28.         [('adam 'anna)]
  29.         [('eve 'helen)]
  30.         [('eve 'ivonne)]
  31.         [('eve 'anna)]
  32.         [('john 'joshua)]
  33.         [('helen 'joshua)]
  34.         [('ivonne 'david)]
  35.         [('mark 'david)]))
  36.  
  37. ;; predykat binarny %sibling reprezentuje relację bycia rodzeństwem
  38. (define %sibling
  39.   (%rel (a b c)
  40.         [(a b)
  41.          (%parent c a)
  42.          (%parent c b)]))
  43.  
  44. ;; predykat binarny %sister reprezentuje relację bycia siostrą
  45. (define %sister
  46.   (%rel (a b)
  47.         [(a b)
  48.          (%sibling a b)
  49.          (%female a)]))
  50.  
  51. ;; predykat binarny %ancestor reprezentuje relację bycia przodkiem
  52. (define %ancestor
  53.   (%rel (a b c)
  54.         [(a b)
  55.          (%parent a b)]
  56.         [(a b)
  57.          (%parent a c)
  58.          (%ancestor c b)]))
  59.  
  60. (define %grandson
  61.   (%rel (a b c)
  62.         [(a c)
  63.          (%parent c b)
  64.          (%parent b a)
  65.          (%male a)]))
  66. ;(%find-all (x y) (%grandson x y))
  67.  
  68. (define %cousin
  69.   (%rel (a b c d)
  70.         [(a d)
  71.          (%parent b a)
  72.          (%parent c d)
  73.          (%sibling b c)]))
  74. ;(%find-all (x y) (%cousin x y))
  75.  
  76. (define %is_mother
  77.   (%rel (a b)
  78.         [(a)
  79.          (%parent a b)
  80.          (%female a)]))
  81. ;(%find-all (x) (%is_mother x))
  82.  
  83.  
  84. (define %is_father
  85.   (%rel (a b)
  86.         [(a)
  87.          (%parent a b)
  88.          (%male a)]))
  89. ;(%find-all (x) (%is_father x))
  90.  
  91.  
  92. ;;------------------------------------------ZAD 3--------------------------------------------
  93. (define %my-append
  94.   (%rel (x xs ys zs)
  95.         [(null ys ys)]
  96.         [((cons x xs) ys (cons x zs))
  97.          (%my-append xs ys zs)]))
  98.  
  99. (define %my-member
  100.   (%rel (x xs y)
  101.         [(x (cons x xs))]
  102.         [(y (cons x xs))
  103.          (%my-member y xs)]))
  104.  
  105. (define %select
  106.   (%rel (x xs y ys)
  107.         [(x (cons x xs) xs)]
  108.         [(y (cons x xs) (cons x ys))
  109.          (%select y xs ys)]))
  110.  
  111. ;; prosta rekurencyjna definicja
  112. (define %simple-length
  113.   (%rel (x xs n m)
  114.         [(null 0)]
  115.         [((cons x xs) n)
  116.          (%simple-length xs m)
  117.          (%is n (+ m 1))]))
  118.  
  119.  
  120. #|
  121. ;; test w trybie +- (działa)
  122. (%find-all (a) (%simple-length (list 1 2) a))
  123.  
  124. ;; test w trybie ++ (działa)
  125. (%find-all () (%simple-length (list 1 2) 2))
  126.  
  127. ;; test w trybie -+ (1 odpowiedź, pętli się)
  128. (%which (xs) (%simple-length xs 2))
  129.  
  130. ;; test w trybie -- (nieskończona liczba odpowiedzi)
  131. (%which (xs a) (%simple-length xs a))
  132.  
  133. ;; definicja zakładająca, że długość jest znana
  134. (define %gen-length
  135.   (%rel (x xs n m)
  136.         [(null 0) !]
  137.         [((cons x xs) n)
  138.          (%is m (- n 1))
  139.          (%gen-length xs m)]))
  140. ;; test w trybie ++ (działa)
  141. (%find-all () (%gen-length (list 1 2) 2))
  142. ;; test w trybie -+ (działa)
  143. (%find-all (xs) (%gen-length xs 2))
  144. |#
  145.  
  146. ;(%find-all (xs ys) (%my-append xs ys (list 1 2 3)))
  147.  
  148. ;(%which (x) (%my-append '(1 2 3) x '(1 2 3 4 5)))
  149.  
  150. ;;------------------------------------------ZAD 6--------------------------------------------
  151. (define %sublist
  152.   (%rel (xs ys)
  153.         [(null ys)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement