Clojure读取行函数问题

我试图在Clojure程序中获取控制台输入,但是当它到达程序的那个部分时,它给了我这个错误 Exception in thread "main" java.lang.ClassCastException: clojure.lang.LineNumberingPushbackReader cannot be cast to java.io.BufferedReader “read”函数可以工作,但它不是我需要的。这是我正在使用的代码 (defn prompt-read [prompt] (p

Clojure 嵌套的dosync调用的行为如何?

创建嵌套的dosync调用时会发生什么?子交易是否在父范围内完成?如果父事务失败,这些子事务是否可逆?如果您指的是语法嵌套,那么答案是这取决于内部dosync是否将在与外部相同的线程上运行 在Clojure中,每当输入dosync块时,如果尚未在此线程上运行新事务,则会启动新事务。这意味着,当执行停留在单个线程上时,可以说内部事务被外部事务所包含;但是,如果一个dosync占据了另一个dosync中语法嵌套的位置,但恰好在一个新线程上启动,那么它自身将有一个新事务 一个(希望)说明发生了什么的例

Clojure函数的问题

各位,我昨天开始在Clojure进行Euler项目,我的解决方案有一个问题,我想不出来 我有这个功能: (defn find-max-palindrom-in-range [beg end] (reduce max (loop [n beg result []] (if (>= n end) result (recur (inc n) (conc

Clojure的科学编程堆栈

我目前大部分编程都使用Python,但我对学习Clojure很感兴趣。我需要哪些库来重现我在scipy、numpy和matplotlib中拥有的功能?有没有类似于Enthow分布的东西?从白炽灯开始: 然后看看Java科学库。我支持斯图尔特的答案——白炽灯很棒 截至2013年,它还值得一看,它为Clojure的矩阵/向量数学提供了一个高性能的NumPy/SciPy API。中期计划是让Incater和core.matrix无缝地协同工作。在Java中寻找类似的库,并从Clojure调用它们。

什么';在Clojure和其他Lisp方言中,函数名末尾使用星号的惯例是什么?

请注意,我不是在谈论符号名称中的耳罩,这是和讨论的一个问题。严格来说,我指的是一个名为foo的函数调用一个函数foo*一个普通的let绑定(let(…)并行创建单独的变量 let-star绑定(let*(…))按顺序创建变量,以便可以像这样相互计算 (let* ((x 10) (y (+ x 5))) 我可能有点偏离基准,但请看更多细节 编辑:我不确定这在Clojure中是如何反映的,我只是开始阅读编程Clojure,所以我还不知道如果我正确理解了你的问题,我已经看到过使用foo*的实例,表明

Clojure:半展平嵌套序列

我有一个包含嵌入向量列表的列表,看起来像: ([12])([34][56])([78])) 我知道这不是理想的合作方式。我想把它展平到([12][34][56][78]) 展平不起作用:它给了我(12345678) 我该怎么做?我想我需要根据每个列表项的内容创建一个新列表,而不是项目,而这部分我无法从文档中找到如何操作。如果您只想将其展平一级,可以使用concat (apply concat '(([1 2]) ([3 4] [5 6]) ([7 8]))) => ([1 2] [3 4]

可能是Clojure';s STM模型是否可以在多个JVM上工作?

我知道Clojure在多核机器上工作得很好,但我想知道它在分布在许多机器上的JVM集群上工作是否有意义?不太可能。我的意思是,它可以发挥作用;像Terracotta这样的东西声称能够在多个节点上分发逻辑JVM,但是clojure的STM/集合语义非常依赖于线程间内存共享来实现高效的wrt空间和时间 您最好使用消息传递或面向批处理的体系结构来处理系统的多节点部分。我可以这样做,但这不是一个好主意。NoSql现在之所以大是有原因的,因为它的事务在网络中不能很好地工作。研究了使用Terracotta实

如何获取Clojure中字符的ascii十进制值?

这些是ascii十进制值中的字符。。。 如何从字符中获取ascii十进制值?字符是一个数字,只是clojure将其显示为字符。最简单的方法是将该字符转换为int e、 g 我想补充一点,你可以直接对角色进行数学运算,但在Clojure中似乎不行。它表示为java.lang.Character(而不是char),并且Character不扩展java.lang.Number,因此,数学运算符在Clojure中的字符上不是开箱即用的。就像Java中的字符原语一样-我认为你也不能添加这些。作为Cloju

在clojure中,如何编写应用多个字符串替换的函数?

我想编写一个函数replace multive,它接收一个字符串和一组替换,并应用所有替换(替换可以看到以前替换的结果) 我考虑了以下界面: (replace-several "abc" #"a" "c" #"b" "l" #"c" "j"); should return "jlj" 两个问题: 它是clojure中最惯用的界面吗 如何实现这个功能 备注:要进行单个替换,在中有可用的replace,

Clojure hiccup 1.0.0-beta1错误

我正在使用hiccup-1.0.0-beta1创建一个compojure项目。运行lein-ring-server headless时,我得到以下堆栈跟踪: Caused by: java.lang.IllegalAccessError: defelem does not exist at clojure.core$refer.doInvoke(core.clj:3287) at clojure.lang.RestFn.applyTo(RestFn.java:139) at clojure.co

Clojure 如何分配nil而不是异常字符串

我的问题是,如何从异常返回nil,而不是(在使用slurp的情况下)无法加载的文件名和异常文本?详情如下 bene-cmp.core=> (load-file "src/bene_cmp/core.clj") #'bene-cmp.core/-main bene-cmp.core=> (def x (open-csv-file "test_file.csv")) #'bene-cmp.core/x bene-cmp.core=> x "test_file.csv (No su

Clojure-从序列中的向量计算唯一值

作为Clojure的新手,我似乎不知道如何做一些看似简单的事情。我就是看不见。我有一系列向量。假设每个向量有两个值,分别表示客户编号和发票编号,每个向量表示一个项目的销售。所以它看起来像这样: ([ 100 2000 ] [ 100 2000 ] [ 101 2001 ] [ 100 2002 ]) 我要计算唯一客户和唯一发票的数量。所以这个例子应该产生向量 [ 2 3 ] 在Java或另一种命令式语言中,我会循环遍历seq中的每一个向量,将客户编号和发票编号添加到一个集合中,然后计算每个集

如何在clojure的命令中编写dissoc?

我希望编写一个类似于中的assoc的函数,但删除键而不是添加键: (dissoc-in {:a {:b 0}} [:a :b]) ;;=> {:a {}} 我来到这里: (def m {:a {:b {:c 1}}}) (assoc m :a (assoc (:a m) :b (dissoc (:b (:a m)) :c))) ;;=> {:a {:b {}}} 但是整个嵌套的东西都在搅乱我的脑袋怎么样: (defn dissoc-in "Dissociates an e

Clojure 风暴>;如何将Java回调集成到喷口中

我正在尝试将Storm()集成到我的项目中。我摸索拓扑、喷口和螺栓的概念。但现在,我正试图找出一些事情的实际实现 A)我有一个使用Java和Clojure的多语言环境。我的Java代码是一个回调类,其方法触发流数据。推送到这些方法的事件数据,就是我想用作喷口的东西 因此,第一个问题是如何将进入这些方法的数据连接到喷口?我正在尝试I)传递backtype.storm.topology.IRichSpout,然后ii)传递backtype.storm.spoute.spoutoutoutputCol

Clojure 我可以逆时针配置';s REPL,以便它以源和文档启动?

我觉得很奇怪,CCW没有在命名空间中启动(source)或(doc)函数。它也没有(e)。我无法想象在我的回复中不需要这些。有没有一种方法可以让我在每次启动CCW repl时都可以使用这些文件,而不必手动键入(使用)?我认为没有办法,但您应该能够通过将鼠标悬停在符号上,或在光标位于符号上时按F2键来查看文档 通过按住Ctrl键并单击符号,或在光标位于符号上方时按F3键,可以导航到源 最后,在REPL中,右上角有一个按钮,用于打印完整的堆栈跟踪,与(e)相同。也可能有一个键绑定,不确定

Clojure’;这是一点,不是吗?

从: 一点儿也不 作用 Usage: (bit-and-not x y) (bit-and-not x y & more) Bitwise and with complement 在Clojure 1.0版中添加 Clojure的其他位函数对我来说很有意义,但我不理解这个。它相当于: (位和x(位不是y)) 此函数可用于执行子集测试。集a(表示为位掩码)是集b的子集,当且仅当(位而非a b)为零。有趣的问题。当Clojure代码被编译为JVM字节码时,对(bit和not

Clojure,符号的元数据

表示“符号和集合支持元数据” 因此,我尝试将元数据设置为符号: => a 17 => (def aa ^a 'x) => aa x => (meta aa) nil 它不像我预期的那样工作 => (def aa ^a []) => (meta aa) {:tag 17} 确实如此 这是文档中的错误吗?如果没有,你能解释一下吗 在阿瑟·乌尔费尔德回答后更新:因此我理解如下。当我写 (def aa ^a 'x) 读者把它扩展成 (

德法特在新的clojure contrib去了哪里?

因此,我四处挖掘,试图找出如何在Clojure中进行ADT,我遇到了旧的Clojure contrib,它很好,只是被替换了。好的,没什么大不了的,只要看看被替换的clojure contrib的分拆库目录,但就我而言,我找不到defadt在新的clojure contrib分拆库中的迁移位置 那么它迁移到了哪里 我一直在四处张望,但想不出来 如果您可以将字符串交给alembic.still/Distract,让它为我插入,则可以获得额外的积分。Clojure中通常的样式不是定义ADT。我认为d

clojure中的命名空间局部变量

我有一个循环,循环来自不同名称空间的多个函数。 因此,让我们假设我有(语法不完美,我肯定): 假设我需要在evaluate中保持一个running总值,running max和running min。我不想每次都返回所有这些,只想在每次循环迭代时将它们传回。我觉得最好将它们保留为“名称空间局部变量”,并将它们与核心文件分开。“clojure”的方法是什么?A.evaluate不是有效的clojure语法。我怀疑[(getTimeIncrement)]也是错误的(这传递了一个包含(getTimeI

clojure新手如何调用java对象的方法

我正在尝试下面的方法 (def myMap (HashMap.)) (doto (myMap) (.put "a" 1) (.put "b" 2)) 因此,我得到: Reflection warning, core.clj:20:3 - call to method put can't be resolved (target class is unknown). Reflection warning, core.clj:20:3 - call to method put can't b

你好,世界-Clojurescript

我是初学者 我是否可以编译现有的Clojure脚本,以便使用ClojureScript在web上运行它 假设我有一个脚本,可以在终端中打印Hello world,我想在浏览器上打印该文本。我应该用ClojureScript语法重写整个脚本,还是使用另一个编译器编译它 (ns clojure-hello-world.core (:gen-class)) (defn -main [& args] (println "Hello World")) 我会从一开始就开始。这将使您进行一

Clojure 定制Swagger/Compojure 404响应的最佳方式

在Compojure中,可以定义默认的404行为,例如 (defroutes app-routes ;; ... (route/not-found "These aren't the droids you're looking for.")) 随着我们不断增加REST端点的数量和复杂性,我们一直在考虑切换到Swagger/。大摇大摆似乎更高层次,与基本的组合完全不同。使用此库定制404行为的正确习惯用法是什么?在Swagger规范中没有定义Compojure的“遗漏所有其他内容”默认处

Clojure控制台吐出';无符号位右移';简单HelloWorld上的警告

今天我和Clojure一起迈出了我的第一步,我立刻遇到了第一个令人困惑的障碍 我构建了一个新的Leiningen(2.5.1)项目,只想运行默认代码,即: (ns wavescript.core (:gen-class)) (defn -main "I don't do a whole lot ... yet." [& args] (println "Hello, World!")) 问题在于Lighttable(0.7.2)控制台显示: 警告:无符号位右移已指: #

Clojure 如何在quil功能模式下处理慢速绘图功能

我正试图建立一个地图奎尔可视化衍生产品。我试图在quil中使用新的默认功能模式,因为它看起来可以处理大量处理鼠标事件和更新显示的工作。但是,我遇到了一个问题,即图形的一部分(背景贴图)需要花费太长的时间才能完全渲染,即使帧率非常低 根据的建议,我正在下载UnfolingMaps依赖项并将其安装到leiningen localrepo中,如下所示: $ lein localrepo install /path/to/library/Unfolding.jar unfolding 0.9.6 $ l

Clojure 从深度嵌套贴图中删除nil值

根据这张地图: {:a nil :b {:c nil :d 2 :e {:f nil :g 4}}} 我需要一个函数来删除所有的nil值,以便返回的映射是 {:b {:e {:g 4} :d 2}} 或者,如果给出: {:a nil :b {:c nil :d nil :e {:f nil :g nil}}} 结果是: nil 有一个答案,其中包含一个

Cyper clojure necons tquery:如何通过标签与{u variable}匹配?

我正在尝试使用clojure neocons执行密码查询,其中我需要为标签使用变量占位符: (def node-query "MATCH (n:{_nodetype}) RETURN n;") 添加{{u nodetype}时出现错误,但删除{u nodetype}时没有错误 "Invalid input '{': expected whitespace or a label name (line 1, column 10 (offset: 9))\\n\\\

Clojure&;泛音:千斤顶未启动

我试图使用泛音,但当我启动它时,我得到一个关于jackd的错误 bambalaam@bambalaam:~/Desktop/clojuretest$ lein repl REPL started; server listening on localhost port 59002 user=> (use 'overtone.live) --> Loading Overtone... --> Booting internal SuperCollider server... Cann

Clojure Falsy使用contains返回值?功能

我不确定我在这里做错了什么: (defstruct prefix :a :b :c :d :e) (def peN (struct prefix "pen" "pe" "pem" "peng" "peny")) (contains? peN "pen") ;=> false 我希望它会回到现实。也许我没有使用contains?正确吗 检查键,而不是值。这是确定地图是否包含该值的一种方法: (some #(= "pen" %)(vals peN)) 检查键,而不是值。这是确定地图是

Clojure 获取序列中一个项目出现的位置

从序列中,我需要获取给定项出现的所有位置 我在问自己,这是否是解决问题的好方法: (defn get-positions [item coll] (->> (map-indexed vector coll) (filter (fn [[_ v]] (= item v))) (map first))) 这也适用于字符串,它们将由第一个映射转换为序列。但是,如果我知道输入是字符串,是否有一种更具体的方法来解决此问题?既然您已经有了解决此问题的通用解决方案

Clojure 如何在Midje中创建我自己的检查器?

我在用Midje做一个项目。我试图在wiki中找到如何创建自己的检查器,但找不到 在我的例子中,我想比较两个图像是否相等。但我可能只是想比较一下文件的一些属性,因为它的大小,可能是几个像素。也许“平等”会有点灵活,因此需要一个个性化的检查器 我怎么做 谢谢。midje github repo中有一个描述如何定义您自己的跳棋 箭头右侧使用的检查器是一个接受左侧结果的简单谓词函数 在示例场景中,您可以创建自己的函数来检查文件: (defn filename-matches? [expected-na

Clojure中的一厢情愿

在计划中,我习惯于这样做 (define (f x) (g x)) (define (g x) (+ x 42)) (g 0) 也就是说,我曾经用其他无界函数来定义函数。 为什么这在Clojure不可能?例如,在Clojure REPL上,以下内容无效 (defn f [x] (g x)) (defn g [x] (+ x 42)) (g 0) 问题是,每一行都是在repl中编译的,因此在编译f时没有g函数。您应该在(defn f.之前添加(declare g),以便编译器知道此函数: us

如何在Clojure中使用reduce实现map

在本节末尾的书中,有一个挑战: 如果你想要一个真正让你大吃一惊的练习,试着用reduce 事实证明,这比我想象的要困难得多(至少对我这个Clojure初学者来说)。几个小时后,我想到了这个: (defn map-as-reduce [f coll] (reduce #(cons (f %2) %1) '() (reverse coll))) 这样做有更好的方法吗?我尤其感到沮丧的是,为了让它正常工作,我必须反转输入集合。这似乎有点不雅 请记住,您可以有效地在向量末尾插入: (defn

Clojure 当今天与星期几匹配时,Quartz会忽略每日计划的时间

我试着在一周中的某些日子将每天的工作安排在同一时间,例如每周二上午9点或周二和周三上午10点 当工作日与今天的工作日匹配时,Quartz的点火时间出乎意料。按预期在上午9点触发,除非今天的工作日与计划日一致,在这种情况下,触发器会立即触发,例如,如果今天是星期二,触发器是星期二,而不是下周上午9点触发,则触发器将立即触发。石英为什么会这样做 我发现防止这种行为的唯一方法是将触发器的开始时间覆盖到第二天,但如果当前时间早于触发器时间,则它将错过当前时间的触发器,这使得我将Quartz用作每日计划程

在Clojure中计算传递给def的符号

我通过Clojure为勇敢和真诚的人工作。在有关宏的章节中,有以下练习: 编写一个宏,使用一个宏调用定义任意数量的属性检索函数。你可以这样称呼它: (defattrs c-int :intelligence c-str :strength c-dex :dexterity) 这些函数所做的是从映射中检索值。例如:(定义字符{:name“Travis”,:intelligence 20,:strength 23,:dextrity 13}) (c-int字

Clojure和ClojureScript REPL产生不同的输出

使用以下深度优先搜索的递归定义,Clojure(JVM)和ClojureScript(使用浏览器连接的repl和lumo进行测试)repl生成两种不同的输出,即打印节点的顺序不同,Clojure repl生成重复的:f。ClojureScript命令是我所期望的行为。为什么会这样 代码: Cloure REPL输出: :a :b :c :e :d :f :g :f ;; => ((() ()) (()) (())) :a :b :d :f :c :g :e ;; => ((() (

Clojure:使用多个参数简化逻辑表达式

我是Clojure的新手,试图编写一个简化逻辑表达式的程序。例如: (or x false) => x (or true x) => true (or x y z) => (or x(or y z)) 我相信,我已经找到了将表达式简化为两个参数的方法。但是,我不知道如何简化包含两个以上参数的表达式。我试图使用第n个函数尝试对表达式进行分区,但这似乎使事情更加复杂: (defn pre-simplify [expression n] (cond (= n 0) (n

在clojure中合并不同大小的列表

我有两张单子 s=[12345] 及 p=[:a:b:c:d:e:f:h:i:j:k:l:m] 我想从p中取N个元素,其中N是1到K之间的随机数,并创建从s到p中这些N个元素的映射 生成的映射可能类似于 ((1:a)(1:b)(1:c)(2:d)(2:e)(3:f)(4:h)(4:i)(5:j)(5:k)(5:l)) 对于K=3 如果没有使用p中的所有元素,但有足够的元素覆盖s中所有元素的N为max的情况,这是可以的 我已经想出了这个方法,但是它缺少了take random N elements

何时使用Clojure';什么是闭包?

我已经编写了几个Clojure程序,但我几乎记不起我使用过闭包 在Clojure中使用闭包的最佳用例是什么 另外,您能否提供可能对初学者也有帮助的用例和示例。这是一个过于简单的示例,但当我已经有一个参数时,我使用闭包“部分应用”函数,但以后需要获得另一个参数。您可以通过在函数中执行以下操作来解决此问题: (let[x 10 f#(-x)] (f) 我一直在使用它们,但它们的使用非常简单,很难想出一个不是人为的例子 我在洛伦兹系统公司最近的一个项目中发现了这一点。Hue-f是一个函数,当给定Lo

请参阅clojure以了解引导回复

我正在尝试设置,以便在REPL中使用。我已将其放入build.boot中: (refer-clojure :exclude '[rand rand-int struct cond]) (require '[better-cond.core :refer [cond]]) 但是,当我启动boot repl时,会收到以下警告: WARNING: cond already refers to: #'clojure.core/cond in namespace: boot.user, being re

将clojure.spec用于强制是否惯用?

我在各种GIST中见过使用clojure一致性来强制数据,但也得到了一个印象(我记不起是在哪里),即强制(例如,如下所示)不是一致性的惯用用法 (s/def :conformers/int (s/conformer (fn [x] (cond (integer? x) x (re-matches #"\d+" x) (edn/read-string x)

如何使用clojure.spec生成相互关联的参数?

我有一个方法可以从成对的字符串中删除公共前缀,并且一直在尝试为它创建一个生成器。生成随机字符串对是很简单的,但是如何强制使许多对具有公共前缀呢?简单地过滤成对生成的示例数量不足,因此我尝试创建一个自定义生成器来满足需求 这就是我现在拥有的;它可以工作,但我想生成更好的参数: (ns liblevenshtein.distance (:require [clojure.spec.alpha :as spec] [clojure.spec.gen.alpha :as ge

什么';clojure中读取字符串和加载字符串的区别是什么?

我有以下表格: ((读字符串“+”)23) 它返回3 关于这一点,我有两个问题: 1) 为什么上面的表单返回3,而不是nil,或者抛出异常或其他任何东西?这张表到底是如何解析的? 2) 在这种情况下,读取字符串返回什么?它与我使用的加载字符串有何不同?(读取字符串“+”)返回一个符号+,可以解析或计算得到实际值,即+函数 load string返回表达式的结果 换句话说,加载字符串等于(eval(读取字符串“+”) 您不会得到nil或异常,因为该语言为您进行评估 编译器解析符号+以计算表达式 +

Clojure 当需要访问索引时,存储和操作2D数据的惯用方法

我正在研究代码2018的出现,其中我需要存储位置的2D地图,然后根据它们的坐标对它们进行映射+过滤。我在考虑将位置存储在2D向量中,这样向量的索引就表示了它们的坐标,因为这是我在命令式语言中应该做的 但是,大多数序列操作仅将元素传递给函数,因此无法从传递给的函数(例如,map)访问元素的索引。是的,map-indexed存在,但每次对数据进行操作时,对其进行两次嵌套调用感觉不是很干净 我看到一些人建议存储索引,或者在本例中是(x,y)坐标对,向量中的元素:[[0,0]“loc1”][[0,1]“

Clojure 使用循环递归计算winrate

我得到了以下代码,calc winrate在最后一行返回[0 0 50 0 25]。我正在尝试使其返回[0 50 33.33333333333 50 60] 我是否为wins执行增量错误?当我为每次迭代打印wins的值时 (defn to-percentage [wins total] (if (= wins 0) 0 (* (/ wins total) 100))) (defn calc-winrate [matches] (let [data (r/atom [])]

Clojure “;正确”;编写给定键和映射的函数时,返回“;正确”;

编写一个函数,给定一个键和映射,如果映射包含带有该键的条目且其值为nil,则返回true 我遇到的解决方案是: #(nil? (get %2 % true)) 有人能解释一下true在英语中的用法吗 (get %2 % true) ? 谢谢大家! 这是一个默认值,在缺少密钥的情况下将返回该值 ;; key exists (get {:a 1} :a 2) #=> 1 ;; key doesn't exist (default value is returned) (get {:a 1}

Clojure 无法将PersistentVector强制转换为类IAtom

我有一个局部变量,我必须将一些文本存储为列表/向量 我想根据一些条件给这些向量加上值,所以我想做的就是给向量加上值,最后得到这个向量的更新版本 但是当我试着使用!我总是出错 我尝试了以下两种选择: (do (let [error-list ()] (println (conj error-list "test")) (swap! error-list conj "test2"))) 结果是: 测验 主线程java.lang.ClassCastException中出现

Clojure 这段代码是惯用的吗?有更好或更简洁的方法来写这篇文章吗?

我正在尝试模拟一个扑克游戏 我的游戏状态表示在地图中,对于这个问题,我只对玩家感兴趣 {:players{:1{:money 200}:2{money 400}} 每个函数接受游戏状态和一些其他参数,并返回一个新的游戏状态,例如: (defn update-player-money "Returns new game state where player has added amount to his money" [game-state player amount]

如何在clojure中获得有意义的依赖项错误?

如果我添加以下要求: (ns project.core (:require [compojure.route :as route]) (:gen-class)) (defn -main [& {:as args}] (println "hello")) 安多 我明白了 有什么办法可以让我去吗 “未找到复合路线;未定义路线;或其他”例如,有意义的东西? 如果我把它取下来,效果很好。e、 它说你好 在Java 14.0.1 Op

如何插入clojure函数中的repl并打印堆栈跟踪

给定以下函数 (defn func [] (break!)) 我要休息!函数启动repl,在该repl中,我可以打印调用func的调用堆栈 该功能类似于Python中的ipdb,当我们想要在某个函数的运行时内部进行交互研究时,它非常方便。非常基本的版本可能是: (定义中断![](clojure.main/repl)) 这将启动一个新的嵌套REPL,当您退出它时(在Windows上使用^D--或^Z),它将继续运行 你不能计算局部变量,但是如果你写break作为宏,您至少可以在启动REPL

  1    2   3   4   5   6  ... 下一页 最后一页 共 245 页