小编mik*_*era的帖子

Clojure的重构技术

我熟悉在C#和Java中重构相当大的代码库,但Clojure是一个不同的野兽,特别是因为它:

  • 在典型代码中混合使用宏和函数(即您可能希望从宏重构为函数,反之亦然?)
  • 在大多数情况下使用动态类型(因此您不会对重构代码的正确性进行编译时检查)
  • 功能而不是面向对象的风格
  • 对当前IDE中的重构支持较少
  • 对代码库中的循环依赖性不太宽容(使得更难移动代码/定义块!)

鉴于上述情况,在Clojure中进行代码重构的最佳方法是什么?

refactoring clojure

26
推荐指数
2
解决办法
1826
查看次数

JavaFX 2作为Maven依赖项

是否可以在pom.xml中将JavaFX 2.0作为Maven中的依赖项引用,以便一切顺利进行?

我在这个问题中看到可以在本地安装jfxrt.jar,但理想情况下我想要一个更简单的方法,可以正确地解析和下载依赖,而无需任何本地黑客....

java maven javafx-2

26
推荐指数
3
解决办法
8万
查看次数

库/名称空间的Clojure文档

如何将文档字符串和/或注释作为一个整体添加到Clojure库/命名空间,即不仅仅是命名空间中的特定函数?

我注意到clojure源(comment ...)在某些地方用来做这个(例子),是推荐的吗?

documentation docstring clojure

26
推荐指数
2
解决办法
3047
查看次数

多行Clojure文档字符串

我注意到Clojure多行文档字符串似乎在大多数情况下都是手动格式化的,包括clojure.core中的那些.示例来自https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj:

(defn flatten
  "Takes any nested combination of sequential things (lists, vectors,
  etc.) and returns their contents as a single, flat sequence.
  (flatten nil) returns an empty sequence."
  {:added "1.2"
   :static true}
  [x]
  (filter (complement sequential?)
          (rest (tree-seq sequential? seq x))))
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为它意味着不同的文档字符串将具有不同的换行长度等,需要手动维护.

有没有更好的方法来格式化多行文档字符串?

documentation docstring clojure

24
推荐指数
2
解决办法
1万
查看次数

用于实时战略战争AI的算法

我正在设计一个实时策略战争游戏,AI将负责控制大型六边形地图上的大量单位(可能是1000多个).

一个单位有许多行动点,可以用于移动,攻击敌方单位或各种特殊行动(例如建造新单位).例如,一个有5个动作点的坦克可以在移动中花费3,然后在范围内向敌人射击2.不同的单位对不同的行动等有不同的成本

一些额外的说明:

  • AI的输出是任何给定单位的"命令"
  • 动作点在一段时间的开始时分配,但可以在该时间段内的任何时间点使用(这是为了允许实时多人游戏).因此,"什么也不做,以后再保存动作点"是一种潜在有效的策略(例如,炮塔无法移动等待敌人进入射程范围内)
  • 游戏实时更新,但AI可以随时获得游戏状态的一致快照(感谢游戏状态是Clojure的持久性数据结构之一)
  • 我并不期待"最佳"的行为,只是一些不明显愚蠢的事情,并提供合理的乐趣/挑战

对于能够在效率和合理智能行为之间取得适当平衡的特定算法/方法,您能推荐什么?

algorithm artificial-intelligence

23
推荐指数
4
解决办法
1万
查看次数

在Clojure中,函数,引用函数和锐引函数之间的区别

在clojure中,我想知道下面三者之间有什么区别.

(println (map + '(1 2 3) '(4 5 6))) 

(println (map '+ '(1 2 3) '(4 5 6))) 

(println (map #'+ '(1 2 3) '(4 5 6))) 
Run Code Online (Sandbox Code Playgroud)

结果是

(5 7 9) 

(4 5 6) 

(5 7 9) 
Run Code Online (Sandbox Code Playgroud)

我无法理解第二个人的行为.

我觉得第一个和第三个在clojure中是相同的,它是Lisp-1,并且不区分评估变量和同名函数.

这可能是一个基本问题,但似乎没有足够的信息.请教我.

谢谢.

function clojure quote

21
推荐指数
1
解决办法
1270
查看次数

ORM Technologies与JDBC?

我的问题是关于ORM和JDBC技术,与JDBC和其他方式相比,您决定使用ORM技术的标准是什么?

谢谢.

java orm database-connection jdbc

20
推荐指数
2
解决办法
2万
查看次数

以下Clojure协议有什么问题?

在Clojure 1.2中:

(defprotocol PP 
  (foo [bar]) 
  (foo [bar baz]))
=> PP

(extend-protocol PP 
  Object 
    (foo [bar] 1) 
    (foo [bar baz] 2))
=> nil

(foo "hello!")
=> #<CompilerException java.lang.IllegalArgumentException: No single method: foo of interface: PP found for function: foo of protocol: PP
Run Code Online (Sandbox Code Playgroud)

我哪里错了?我希望看到1作为foo函数的单参数版本的结果,因为"你好!" 显然是java.lang.Object的一个实例.

protocols clojure

20
推荐指数
1
解决办法
2642
查看次数

使用包含类型提示的宏生成Clojure代码

我正在尝试使用类型提示生成一些Clojure代码,但是每当我构建一些代码时类型提示似乎都消失了(它们在代码编译时也不起作用)

例如

`(let [^BufferedImage b (create-buffered-image)] 
   (.getRGB b 0 0))

=> (clojure.core/let [user/b (user/create-buffered-image)] (.getRGB user/b 0 0))
Run Code Online (Sandbox Code Playgroud)

我不确定为什么类型提示正在消失,但我认为它与读者处理metatdata的方式有关.

在生成的代码中创建正确类型提示的正确方法是什么?

macros code-generation metaprogramming clojure type-hinting

20
推荐指数
1
解决办法
1588
查看次数

RRB树维持什么不变量?

宽松基数平衡树(RRB-trees)是不可变向量(在Clojure和Scala中使用)的推广,它具有"有效恒定"的索引和更新时间.RRB树保持有效的索引和更新,但也允许有效的连接(log n).

作者以我难以理解的方式呈现数据结构.我不太清楚每个节点维护的不变量.

在2.5节中,他们描述了他们的算法.我认为他们确保索引到节点只需要在基数搜索后进行线性搜索的额外步骤.我不明白他们是如何得出他们的额外步骤的公式,我想也许我不确定每个变量是什么意思(特别是"总共p个子树分支").

RRB树连接算法的工作原理是什么?

algorithm tree scala clojure data-structures

19
推荐指数
1
解决办法
2441
查看次数