在我对Code Review.SE问题的回答中,我建议OP可以考虑使用记录来表示棋子.由于片段记录都是相同的,除了名称,我想我可以通过编程生成它们,如下所示:
(map #(defrecord % [color])
["Rook" "Pawn" "Queen" "King" "Knight" "Bishop"])
Run Code Online (Sandbox Code Playgroud)
那种方式有用,但我的唱片名不是片名; 他们是随机的gensyms:而不是user.Rook我得到的user.p1__910.如果我这样做了(p1__910. :black),它确实有效并创造了一个记录,但你可能会明白为什么我对此并不满意.
我还尝试了以下两种变体:
(map #(defrecord % [color])
['Rook 'Pawn 'Queen 'King 'Knight 'Bishop])
;; Same result as above.
(map #(defrecord (symbol %) [color])
["Rook" "Knight" "Pawn" "Queen" "King" "Bishop"])
;; CompilerException java.lang.ClassCastException: clojure.lang.PersistentList
;; cannot be cast to clojure.lang.Symbol, compiling:(NO_SOURCE_PATH:1:7)
Run Code Online (Sandbox Code Playgroud)
我的做法有什么问题?如何从名单列表中生成一堆相同的记录?这甚至可能吗?
每当我尝试在 JDB 中使用模运算符(甚至像 一样简单的东西print 5 % 4)求值时,我都会收到错误消息com.sun.tools.example.debug.expr.ParseException: Unknown operation: %和5 % 4 = null。
这只是我第二次使用 JDB,所以我可能做错了什么,但我找不到任何关于可能是什么的指导。我确实使用该选项编译了我的文件-g。它看起来像是 JDB 中的一个错误,只是我找不到任何错误报告,而且我无法想象如此明显的错误是如何通过的。我在 Windows 8 下使用 JDB 1.6 和 Java SE 1.7.0_11。无论我从 Windows 命令提示符还是从 Cygwin 运行 JDB,都会发生此错误。