こんにちは、8 パズルで A* 検索を行っていますが、主な質問が 2 つあります。
修正済み : まず、for ループのポリモーフの 2 番目の部分の行でこれを実行すると、 clojure.lang.Lazysezを clojure.lang.IFn にキャストできませんが、その理由がわかりません。
これが私のコードです:
(defn a-star
([board history]
(if (at-end? board) (println board)
(
(let [options (filter #(possible-move? % board) *moves*)
move (into (pm/priority-map) (for [move options] [move (global-man-dis (move-tile board move))]))]
(for [pair move :let [next-move (key pair)]]
(do
(println (move-tile board next-move))
(a-star (move-tile board next-move) next-move (conj history board))
)
)
)
)))
([board prev-move history]
(if (or (at-end? board) (history-check history board)) (println board)
(
(let [options (get-queue board (dont-go-back prev-move))
move (into (pm/priority-map) (for [move options] [move (global-man-dis (move-tile board move))]))]
(for [pair move :let [next-move (key pair)]]
(do
(println (move-tile board next-move))
(a-star (move-tile board next-move) next-move (conj history board))
)
)
)
))))
(defn -main [& args]
(println "insert a list all numbers no spaces or letters")
(def board (mapv (fn [^Character c] (Character/digit c 10)) (read-line)))
;(def testt [0 8 4 7 2 1 3 5 6])
;(def testt [1 2 3 5 4 6 8 0 7])
(a-star board [])
)
投稿してから試してみました: let ステートメントの周りの "else" 括弧を削除しましたが、今は何も返さ れませんFIXED else 括弧を削除し、for が遅延していて、この場合は何も出力しないため、dosq に変更しました。別の質問をもう一度個別に聞いてください