Je suis en train de mettre en œuvre le dîner exemple philosophe clojure Pour certaines raisons mon programme meurt toujours avec une exception en disantClojure: nième pas pris en charge sur ce type: «
» Boolean java.lang.UnsupportedOperationException : n-ième pas pris en charge sur ce type : Boolean »
Je ne comprends pas ce message d'erreur, car je l'ai déjà essayé d'obtenir des valeurs booléennes à partir d'une liste qui a parfaitement fonctionné avec nième
Je suppose que l'erreur se produit dans la instruction if dans la fonction philosophe-fil
Prints Console:
- 3 pense
- 1 est la pensée
- 4 pense
- 0 pense
- 2 est la pensée
- 0 après le sommeil
- 0 après pense
- 0 échange
- 0 est de manger
- 3 après le sommeil
- 3 après pense
code:
(ns dining-philosphers.core
(:gen-class))
(defn think [n]
(println (str n " is thinking"))
(Thread/sleep (rand 1000))
(println (str n " after sleep"))
)
(defn eat [n]
(println (str n " is eating"))
(Thread/sleep (rand 1000))
)
(def isEating (atom '(false false false false false)))
(defn philosopher-thread [n]
(Thread. #(
(while true (do
(think n)
(println (str n " after think"))
(if (or (nth @isEating (mod (- n 1) 5)) (nth @isEating (mod (+ n 1) 5)))
(println "is waiting for neighbour")
(
do
(println (str n " swap"))
(swap! isEating (fn [l] assoc l n true))
(eat n)
(swap! isEating (fn [l] assoc l n true))
)
)
)
)
)
)
)
(defn -main [& args]
(let [threads (map philosopher-thread (range 5))]
(doseq [thread threads] (.start thread))
(doseq [thread threads] (.join thread))))