Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns hanoi)
- (def num-disks 3)
- (defn move
- [from to state]
- (conj state (format "Move from %s to %s" from to)))
- ; Hier hatte ich erst einen Denkfehler, ich habe imperativ gedacht und wollte den Zustand
- ; während der Verarbeitung ändern, so dass er den immer gerade 'aktuellen' Zustand widerspiegelt.
- ; Funktional muss man aber anders denken, d.h. man muss die Zustände erweitern nicht ändern.
- ; Dabei wird also niemals der Zustand geändert, sondern auf dem Stack, on the fly erweitert.
- ; Mit dem erweiterten Zustand muss man dann weiterarbeiten, daher das ->> Konstrukt
- ; Was ich noch nicht verstehe ist warum es mit dem -> (Thread-Operator) nicht funktioniert.
- ; -> fügt das Argument an das zweite Stelle der Form ein
- ; ->> fügt das Argument an letzter Stelle der Form ein
- (defn towers-of-hanoi
- [n from to via state]
- (if (= n 1)
- (do
- (move from to state))
- (do
- (->> state
- (towers-of-hanoi (dec n) from via to)
- (move from to)
- (recur (dec n) via to from)))))
- #_(towers-of-hanoi 3 :1 :2 :3 [])
- (defn orig-towers-of-hanoi
- [n from to via]
- (if (= n 1)
- (println (format "Move from %s to %s" from to))
- (do
- (orig-towers-of-hanoi (dec n) from via to)
- (println (format "Move from %s to %s" from to))
- (recur (dec n) via to from))))
- #_(orig-towers-of-hanoi 3 "a" "b" "c")
Add Comment
Please, Sign In to add comment