clojure相关内容

Clojure - 如何让我的宏在系统宏之前扩展?

如果我这样做,例如: (defmacro qqq [] '(toString [this] "Qqq"))(物化对象(qqq)) 失败是因为 reify 看到的是 (qqq) 而不是 (toString [this] "Qqq"). 通常的解决方案是一个用我自己的东西包装“reify"调用的宏,但它更长,更具侵入性. 如何使我的宏比通常的宏更强大? 期待类似: (defma ..
发布时间:2022-01-11 20:08:47 其他开发

为 Clojure 宏定义同义词

所以从 Clojure 宏开始创建同义词一个函数,我发现 def 不能用来定义宏的同义词.以下是我尝试过的 Clojure 不允许的示例. ;(def def-function defn);(def case cond);(定义函数 fn) 是否可以在 Clojure 中为宏定义同义词/别名?是否需要使用 defmacro? 解决方案 可以使用宏: 用户=>(defmacro def ..
发布时间:2022-01-11 20:07:36 其他开发

是“透明"的吗?宏可能吗?

我想编写一个 Clojure with-test-tags 宏来包装一堆表单,并在每个 deftest 表单的名称中添加一些元数据 -具体来说,在 :tags 键中添加一些东西,这样我就可以使用一个工具来运行带有特定标签的测试. with-test-tags 的一个明显实现是递归遍历整个主体,根据我找到的每个 deftest 表单进行修改.但是我最近一直在阅读 Let Over Lambda ..
发布时间:2022-01-11 20:07:27 其他开发

如何实现一个 Lisp 宏系统?

我已经在 node.js 上实现了自己的 Lisp,我可以像这样运行 s-expression: (断言 (= 3 (+ 1 2)))(def even? (fn [n] (= 0 (bit-and n 1))))(断言(甚至?4))(assert (= false (even?5))) 现在我想添加宏 - defmacro 函数 - 但这是我卡住的地方.我想知道如何在其他 Lisps 中 ..
发布时间:2022-01-11 20:01:22 其他开发

clojure 的 defmacro 中的多重参数

我在 Clojure 中遇到了一个与 defmacro 相关的奇怪问题,我有类似的代码 (defmacro ttt([] (ttt 1))([a] (ttt a 2))([a b] (ttt a b 3))([a b c] `(println ~a ~b ~c))) 我用 (ttt) 运行,它假设变成 (println 1 2 3),并打印“1 2 3",但我得到的是 ArityExcept ..
发布时间:2022-01-11 19:45:54 其他开发

线程宏->带有匿名函数

我了解 Clojure 中的 `-> 主题宏将所有提供的函数应用于给定参数.但是,它似乎不适用于匿名函数.例如: 用户>(-> 4 增加 增加 减少)5 但是: 用户>(-> 4 #(+ % 1) #(- % 1) #(+ % 1)) 返回错误: clojure.lang.Symbol 不能转换为 clojure.lang.IPersistentVector[抛出的类 java.lang ..
发布时间:2022-01-11 19:37:40 其他开发

Clojure-如何在向量中添加连续对?

尝试编写一个递归函数,将连续对添加到向量中. [1 2 3 4] =>[3 5 7] 几乎卡住了,这就是我目前所拥有的: (def tmp [ 1 2 3 4])用户>(map #(+ (second %) (first %)) (partition-all 2 tmp )) 这是错误的,因为它只添加了对而不是连续的对.我得到 [3 7] 而不是 [3 5 7] 解决方案 这是另一 ..
发布时间:2022-01-09 16:19:17 其他开发

如何在关联后获取 clojure 数组映射以维护插入顺序?

我有一个 array-map 我正在 asoc 将一些值放入其中.在一定大小之后,返回的值是 PersistentHashMap 而不是原来的 PersistentArrayMap.我在一些网站上读到过这种行为.即使在 assoc 之后,有什么方法可以强制插入顺序? 我确实有一个单独的函数,它将接受一个 ash-map 和一个键向量,并按此顺序返回一个带有键的“新鲜" array-map,但 ..
发布时间:2022-01-08 14:38:54 其他开发

将 clojure 中的两个列表压缩为连接字符串列表

而不是压缩映射两个列表来获取: (zipmap ["a","b","c"] ["c","d","e"]) = {"c" "e", "b" "d", "a" "c"} 我想将第一个列表的第一个元素与第二个列表的第一个元素连接起来,依此类推: ("ce","bd","ac") 或以相反的顺序. 解决方案 您可以使用 map 做到这一点.map 可以接受多个集合,它从每个集合中取出下一个 ..
发布时间:2022-01-02 23:27:22 其他开发

Clojure Web 应用程序的良好 Web 服务器/Servlet 容器?

我正在为我的 compojure web 应用程序寻找一个好的生产 web 服务器/servlet 容器.将 Jetty 或 Tomcat 或其他服务器用于使用 compojure 的 Clojure Web 应用程序的优缺点是什么?是否有关于将 Web 服务器与 Clojure 一起用于生产或工具的好的文档? 我更喜欢灵活、易于配置并且有关于如何配置和使用它的良好文档的网络服务器. ..
发布时间:2022-01-02 23:27:14 Java开发

列表中的元素对

我想将 [1,2,3,4] 转换为 [[1 2] [2 3] [3 4]] 或 [(1 2) (2 3) (3 4)].在 clojure 我有 (partition 2 1 [1,2,3,4]).我怎样才能在haskell中做到这一点?我怀疑标准api中有这样的功能,但我找不到. 解决方案 为此的标准技巧是使用它自己的 tail zip 列表: >让 xs = [1,2,3,4] in ..
发布时间:2022-01-02 23:26:44 其他开发

为什么 `lein uberjar` 评估用 `def` 定义的变量?

我试图在创建 uberjar 时了解“Lieningen"行为.以下是重现行为的最小示例: (ns my-stuff.core(:gen-class))(def some-var (throw (Exception. "boom!")))(defn -main [& args](print some-var)) 当使用 lein run 执行时,它显然会失败并抛出异常.但是,我不明白为什么执行 ..
发布时间:2022-01-02 23:26:34 其他开发

除非使用 Leiningen REPL,否则 Clojure jdbc create-table 语句不会运行

我有一个小的 Clojure 程序,它使用 Clojure JDBC 工具来创建一个HSQL 数据库中的表.但是,如果我从 Leiningen 的 REPL 运行它,它似乎只会实际创建表.如果我使用 lein run 或从我的 IDE (IntelliJ) 运行代码,它不会创建表.没有异常报告.在这两种情况下,输出都只是“(0)". 这是代码片段: (nstramway.core(:req ..
发布时间:2022-01-02 23:26:28 其他开发

如何在不强制实现的情况下找到惰性序列的长度?

我目前正在阅读 O'reilly Clojure 编程书,其中关于惰性序列的部分内容如下: 惰性序列有可能(尽管非常罕见)知道其长度,因此在不知道其内容的情况下将其作为计数的结果返回. 我的问题是,这是如何做到的,为什么如此罕见? 遗憾的是,本书在这一部分中没有具体说明这些内容.我个人认为在实现之前知道惰性序列的长度非常有用,例如,在同一页面中是使用 map 使用函数处理的惰性文 ..
发布时间:2022-01-02 23:26:19 其他开发