如何使用clojure.core.logic获得50范围内的所有3的倍数?

时间:2016-04-06 04:13:15

标签: clojure logic fizzbuzz

我正在尝试理解core.logic并遇到一堆稀疏文档和过时的教程。

如果我能在lib上取得不错的进展,我想记录一些事情并帮助社区,但到目前为止,这是艰难的...

我目前的问题基本上是“fizzbuzz”,因为我正在努力学习反对做项目欧拉问题的方法。

这个谜题的一个简单部分就是在50的范围内获得3的所有倍数,但以下内容会引发错误:

(run* [q]
  (membero q (range 50))
  (conde
   [(== (mod q 3) 0)]))

=> clojure.core.logic.LVar cannot be cast to java.lang.Number

有什么想法?此外,任何提及更多core.logic的参考? core.logic仍然是“一件事”,还是停滞不前,因为git repo会建议?

1 个答案:

答案 0 :(得分:1)

@Andre的评论为我解决了这个问题: https://github.com/clojure/core.logic/blob/f3f2b4c6c4a906c1fa512720aa09cb1abe312cd1/src/test/clojure/clojure/core/logic/tests.clj#L1242

(defnc dev3c [x]
  (zero? (mod x 3)))

(run* [x]
  (membero x (range 50))
  (dev3c x))