Guest User

Untitled

a guest
Jul 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. (ns hanoi)
  2.  
  3. (def num-disks 3)
  4.  
  5. (defn move
  6. [from to state]
  7. (conj state (format "Move from %s to %s" from to)))
  8.  
  9. ; Hier hatte ich erst einen Denkfehler, ich habe imperativ gedacht und wollte den Zustand
  10. ; während der Verarbeitung ändern, so dass er den immer gerade 'aktuellen' Zustand widerspiegelt.
  11. ; Funktional muss man aber anders denken, d.h. man muss die Zustände erweitern nicht ändern.
  12. ; Dabei wird also niemals der Zustand geändert, sondern auf dem Stack, on the fly erweitert.
  13. ; Mit dem erweiterten Zustand muss man dann weiterarbeiten, daher das ->> Konstrukt
  14. ; Was ich noch nicht verstehe ist warum es mit dem -> (Thread-Operator) nicht funktioniert.
  15. ; -> fügt das Argument an das zweite Stelle der Form ein
  16. ; ->> fügt das Argument an letzter Stelle der Form ein
  17. (defn towers-of-hanoi
  18. [n from to via state]
  19. (if (= n 1)
  20. (do
  21. (move from to state))
  22. (do
  23. (->> state
  24. (towers-of-hanoi (dec n) from via to)
  25. (move from to)
  26. (recur (dec n) via to from)))))
  27.  
  28. #_(towers-of-hanoi 3 :1 :2 :3 [])
  29.  
  30. (defn orig-towers-of-hanoi
  31. [n from to via]
  32. (if (= n 1)
  33. (println (format "Move from %s to %s" from to))
  34. (do
  35. (orig-towers-of-hanoi (dec n) from via to)
  36. (println (format "Move from %s to %s" from to))
  37. (recur (dec n) via to from))))
  38.  
  39.  
  40. #_(orig-towers-of-hanoi 3 "a" "b" "c")
Add Comment
Please, Sign In to add comment