Advertisement
Guest User

Wolf - Goat - Cabbage problem by D.S.Larionov

a guest
Dec 8th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.88 KB | None | 0 0
  1. (defun make-state (f w g c)
  2.     (list f w g c)
  3. )
  4.  
  5. (defun farmer-side (state)
  6.     (nth 0 state)
  7. )
  8.  
  9. (defun wolf-side (state)
  10.     (nth 1 state)
  11. )
  12.  
  13. (defun goat-side (state)
  14.     (nth 2 state)
  15. )
  16.  
  17. (defun cabbage-side (state)
  18.     (nth 3 state)
  19. )
  20.  
  21. (defun farmer-take-self (state)
  22.     (safe (make-state (opposite (farmer-side state))
  23.                       (wolf-side state)
  24.                       (goat-side state)
  25.                       (cabbage-side state)
  26.           )
  27.     )
  28. )
  29.  
  30. (defun farmer-take-wolf (state)
  31.     (cond ((equal (farmer-side state) (wolf-side state))
  32.                (safe (make-state (opposite (farmer-side state))
  33.                                  (opposite(wolf-side state))
  34.                                  (goat-side state)
  35.                                  (cabbage-side state))
  36.                )
  37.            )
  38.            (t nil)
  39.     )
  40. )
  41.  
  42. (defun farmer-take-goat (state)
  43.     (cond ((equal (farmer-side state) (goat-side state))
  44.                (safe (make-state (opposite (farmer-side state))
  45.                                  (wolf-side state)
  46.                                  (opposite (goat-side state))
  47.                                  (cabbage-side state)
  48.                      )
  49.                )
  50.           )
  51.           (t nil)
  52.     )
  53. )
  54.  
  55. (defun farmer-take-cabbage (state)
  56.     (cond ((equal (farmer-side state) (cabbage-side state))
  57.                (safe (make-state (opposite (farmer-side state))
  58.                                  (wolf-side state)
  59.                                  (goat-side state)
  60.                                  (opposite (cabbage-side state))
  61.                      )
  62.                )
  63.           )
  64.           (t nil)
  65.     )
  66. )
  67.  
  68. (defun opposite (side)
  69.     (cond ((equal side 'e) 'w)
  70.           ((equal side 'w) 'e)
  71.     )
  72. )
  73.  
  74. (defun safe (state)
  75.     (cond ((and (equal (goat-side state) (wolf-side state))
  76.                 (not (equal (farmer-side state) (wolf-side state)))
  77.            ) nil)
  78.           ((and (equal (goat-side state) (cabbage-side state))
  79.                 (not (equal (farmer-side state) (goat-side state)))
  80.            ) nil)
  81.           (t state)
  82.      )
  83. )
  84.  
  85. (defun path (state goal been-list)
  86.     (cond ((null state) nil)
  87.           ((equal state goal) (reverse (cons state been-list)))
  88.           ((not (member-lis state been-list ))
  89.            (or (path (farmer-take-self state) goal (cons state been-list))
  90.                (path (farmer-take-wolf state) goal (cons state been-list))
  91.                (path (farmer-take-goat state) goal (cons state been-list))
  92.                (path (farmer-take-cabbage state) goal (cons state been-list))
  93.            )
  94.           )
  95.     )
  96. )
  97.  
  98. (defun member-lis (x lis)
  99.     (cond ((null lis) nil)
  100.           ((equal x (car lis)) t)
  101.           (t (member-lis x (cdr lis)))
  102.     )
  103. )
  104.  
  105. (defun solve-fwgc (state goal)
  106.     (path state goal nil)
  107. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement