clojure相关内容
自从我开始使用 Clojure 以来,我已经读过几次这种东西. 例如,这里:如何将映射转换为序列? 在一些推文中,我不记得确切地说是“如果你使用 flatten 你可能做错了". 我想知道,flatten 有什么问题? 解决方案 我认为这就是他们在您链接的答案中所谈论的内容: so>((comp flatten seq) {:a [1 2] :b [3 4]})(:b
..
Leiningen (https://github.com/technomancy/leiningen) 查看一些默认存储库以满足您的 project.clj 中指定的依赖项. 我想浏览这些存储库以查看 leiningen 中的现成可用的内容.这些存储库是什么?我可以从哪里查找我的特定版本的 leiningen. 解决方案 截至 2020 年 10 月,leiningen 使用以下默
..
我是 Maven 的新手,甚至是 Clojure 的新手.作为学习语言的练习,我正在编写一个蜘蛛纸牌播放器程序.我还计划在 Scala 中编写一个类似的程序来比较实现(请参阅我的帖子 https://stackoverflow.com/questions/2571267/modern-java-alternatives-closed). 我已经配置了一个包含常用 src/main/cloju
..
如果我这样做,例如: (defmacro qqq [] '(toString [this] "Qqq"))(物化对象(qqq)) 它失败是因为 reify 看到的是 (qqq) 而不是 (toString [this] "Qqq"). 通常的解决方案是用我自己的东西包装“reify"调用的宏,但它更长且更具侵入性. 如何使我的宏比通常要先扩展的宏更强大? 期待类似: (de
..
我最近在网上阅读了一些关于函数式编程的文章,我想我对它背后的概念有了基本的了解. 我很好奇涉及某种状态的日常编程问题是如何用纯函数式编程语言解决的. 例如:《C 编程语言》一书中的字数统计程序如何用纯函数式语言实现? 欢迎任何贡献,只要解决方案是纯函数式的. 这是书中的字数统计 C 代码: #include #define IN 1/* 在一个单词内 */#define
..
我很困惑如何惯用地更改通过 clojure.contrib 的 zip-filter.xml 访问的 xml 树.应该尝试这样做,还是有更好的方法? 说我有一些像这样的虚拟 xml 文件“itemdb.xml": 约翰在这附近工作.莎莉宠物店的老板.
..
我可以在没有副作用的情况下实时重新定义函数吗?defn 线程安全吗? 解决方案 “线程对于开发来说足够安全,不适用于生产." 使用 defn 重新定义函数可能会破坏调用它的函数,如果它们在调用更改时正在运行.开发中没问题,因为你可以在它中断后重新启动.如果你能控制你正在改变的函数什么时候被调用就足够安全了. defn 是一个解析为类似 的宏 (def name (fn
..
我有一个协议和几个在一个工作区中实现它的定义类型.如何列出实现以下协议的所有定义类型? 我已经找到了从 (ns-public) 过滤数据的解决方案,但我不喜欢它,因为它使用了一些“魔法"来完成工作,因为我还没有找到正确的方法来通过satisfies? 和extends? 实现我的目标. 有什么想法吗? (defprotocol 协议(foo[this] "只是一个接口方法"))(de
..
我有一个产生惰性序列的函数,称为 a-function. 如果我运行代码: (map a-function a-sequence-of-values) 它按预期返回一个惰性序列. 但是当我运行代码时: (mapcat a-function a-sequence-of-values) 它打破了我函数的懒惰.事实上,它把代码变成了 (apply concat (map a-fun
..
启动 lein 任务(实际上是 test,默认情况下使用 :test 配置文件运行).我想做的是从相当于 java -Dproperty1=value -Dproperty2=value2 任务 网上有一些参考资料表明这应该可以正常工作: project.clj: ...:profiles {:test {:jvm-opts ["-Dproperty1=value" "-Dpr
..
我有一些需要一系列随机数的函数,所以我采用了一些简单的原语,例如 #(inc (g/uniform 0 n)) 并且我似乎无法生成一系列可重复的随机数,即使我重新绑定 *rnd*,除非我按如下所示生成它们.我无法想象这是最好的方法,所以有人能指出如何做得更好吗? 注意:我将下面的每个示例运行三次,如图所示,以产生给定的结果. (ns example.show(:require [cloju
..
我将其输入到 Clojure REPL(使用 enclojure Netbeans 插件): user=>“你好世界"“你好世界"零 什么是零? 解决方案 Clojure 中的每个函数或宏调用都返回一个值,甚至是诸如 if 语句或循环结构或顶级函数定义或打印语句之类的东西, 在其他语言中是“语句".Lisp 中没有语句/表达式二分法;一切都是一种表达. 所以 println 和朋
..
我想在 REPL 的 slime 中使用 clojure.contrib.trace 命名空间中的函数.我怎样才能让史莱姆自动加载它们?一个相关的问题,如何将特定的命名空间添加到正在运行的 repl 中? 在 clojure.contrib API 上,它描述了这样的用法: (ns my-namespace(:需要clojure.contrib.trace)) 但是将它添加到我的代码中会
..
我正在尝试并行过滤元素.对于每个元素,我需要执行距离计算,以查看它是否足够接近目标点.不要介意已经存在用于执行此操作的数据结构,我现在只是在做初步实验. 无论如何,我想运行一些非常基本的实验,在其中生成随机向量并对其进行过滤.这是我的实现,可以完成所有这些 (defn pfilter [pred coll](地图第二(先过滤(pmap (fn [item] [(pred item) ite
..
当您创建嵌套的 dosync 调用时会发生什么?子事务会在父作用域内完成吗?如果父事务失败,这些子事务是否可逆? 解决方案 如果你说的是句法嵌套,那么答案是这取决于内部 dosync 是否会在同一个线程上运行作为外层. 在 Clojure 中,每当进入 dosync 块时,就会启动一个新事务如果尚未在此线程上运行.这意味着虽然执行停留在单个线程上,但可以说内部事务被外部事务包含;然而
..
对于此示例 Java 类: package foo;公共类 TestInterop{ 公共字符串测试(int i){返回“测试(整数)";}公共字符串测试(对象 i){返回“测试(对象)";}} 当我启动 Clojure 并尝试调用 test(int) 方法时,会调用 test(Object) 方法,因为 Clojure 会自动将整数装箱到 java.lang.Integer 对象中.
..
我需要从 Clojure 程序中捕获一些 printlns,我想知道如何捕获输出? 我试过了: (绑定 [a *out*](打印“h")一个) :但这不起作用 解决方案 (with-out-str (println "this should return as a string"))
..
因此从 Clojure 宏创建同义词一个函数,我发现 def 不能用于定义宏的同义词.以下是我尝试过的 Clojure 不允许的示例. ;(def def-function defn);(def case cond);(定义函数 fn) 是否可以在 Clojure 中为宏定义同义词/别名?是否需要使用 defmacro? 解决方案 您可以使用宏: user=>(defmacro de
..
即使仔细查看关于 Clojure 的文档,我也没有看到任何关于 Clojure 是否支持运算符重载的直接确认. 如果是这样,有人可以向我提供有关如何重载的快速片段,例如“+"运算符以委托给我们可以调用 myPlus 的某些预定义方法. 我对 Clojure 非常,因此非常感谢有人在这里提供帮助. 解决方案 Clojure 的(和任何 Lisp 的一样)操作符是普通函数;您可以像
..
是提供给自定义的参数deftest,通过取消引用插入到适当的位置语法引用的扩展模板的适当部分. 因此自定义 deftest 的扩展是一个 let 形式,其中,首先,新测试的名称是通过装饰给定的带有 :tags 元数据的符号;然后是一个 clojure.test/deftest 表单使用这个修饰名来构造;最后是后一种形式交给eval. 这里的重点是这里的(eval form)表达式是每当
..