我刚刚安装了leiningen,正在按照教程开始学习。我打字
lein更新了我的东西,然后按照说明更正了project.clj文件。然后我输入lein repl,它会很好地调出repl。
下一步是打字
(require 'my-stuff.core)
这就是我得到的
FileNotFoundException Could not locate my_stuff/core__init.class or my_stuff/core.clj on classpath: clojure.lang.RT
在clojure的两种FizzBuzz解决方案中,为什么第一种更快?
; #1
(defn fizzbuzzer [z]
"fizzbuzz checker."
(let [fizz? (zero? (rem z 3))
buzz? (zero? (rem z 5))
fizzbuzz? (and fizz? buzz?)]
(cond fizzbuzz? "FizzBuzz"
buzz? "B
两者的区别是什么
(:import (java.io ByteArrayInputStream) (java.net URL)))
及
(URL.“”//找不到URL类名错误
尽管我知道第二个声明不起作用,但我对两个导入声明之间的用法感到困惑。如果您有完整的符号(第二个案例),则不需要在其周围加上括号
(:import java.io.ByteArrayInputStream java.net.URL)
t看一看如果你有完整的符号(第二种情况),你不需要在它周围加上括号
(:import j
我正在尝试使用clojure protobuf,但当我运行lein protobuf时,出现以下错误:
> /Users/elf/.lein/cache/lein-protobuf/protobuf-2.3.0/src/protoc google/protobuf/descriptor.proto --java_out=/Users/elf/.lein/cache/lein-protobuf/protobuf-2.3.0/java/src/main/java -I. -I/Users/
就在我认为我已经在Clojure的错误中看到了这一切的时候,我得到了一个令人困惑的错误。使用lein compile编译.clj文件时,我遇到了以下异常:
java.lang.RuntimeException: Unable to resolve symbol: this in this context, compiling:(medical_notes/read_notes.clj:135:26)
read_notes.clj文件中它指向(135)的行是
{:type :compute}
我需要从edn文件中读取clojure函数,该文件输出hiccup以生成html内容。
但我被困在需要评估函数的部分。
我收到错误消息:
java.lang.RuntimeException: Unable to resolve symbol: fn in this context, compiling:(null:1:1)
及
正在clojure REPL中工作并输出预期结果
([:div "Hello"])
project.clj
(defproject infocenter "0.1
我希望能够根据哈希映射的键的值对其进行排序,在出现平局时使用键名本身
我有一个来自Clojure wiki的排序函数
目前我能做到
(-> "notarealroom" frequencies order-map)
哪个输出
{\o 3, \r 2, \a 2, \t 1, \n 1, \m 1, \l 1, \e 1}
但我希望能够对具有相同值的键进行排序,例如按字母顺序排列的\r和\a,给出如下内容
{\o 3, \a 2, \r 2, \e 1, \l 1, \m 1, \n 1
请原谅“Java完成”这个词,因为我不知道这个词的正确名称
我了解到Jython不支持100%的Java程序。具体来说,一个反例是Jython不支持Java注释:。您不能使用带有注释的Java程序并使用Jython在(J)Python中重新创建相同的程序
Clojure“Java完整”吗?如中所述,任何用Java编写的程序都可以用Clojure编写?或者,在Java中,您可以做一些在Clojure中做不到的事情吗?可以吗?是的,至少在Java6中是完全对等的(从那时起我就没有跟上)。会很有趣吗?
我试图理解Lisp-1和Lisp-2之间的区别,以及这与Clojure的关系,但我仍然无法正确理解。有谁能启发我吗?根据:
在Lisp社区中,单独的函数名称空间是否是一个优势是一个争论的来源。这通常被称为Lisp-1与Lisp-2之争。Lisp-1指的是Scheme的模型,Lisp-2指的是Common Lisp的模型
这基本上是关于变量和函数是否可以有相同的名称而不发生冲突。这意味着它不允许函数和变量同时使用相同的名称。根据:
在Lisp社区中,单独的函数名称空间是否是一个优势是一个争论的来源
浏览Clojure源代码时,我发现了一个文件。它看起来像是一些clojure运行时函数到JVM操作码的映射
然而,我不知道他们在哪里申请。下面的代码
(def ^:const pi 3.141592)
(defn circumference [^double r] (* r 2.0 pi))
编译成
public static java.lang.Object invokeStatic(double r);
0 dload_0 [r]
1 ldc2_w <Double 2.0&g
我有一个场景,其中我有一个映射,它有一个字段,这个字段将是一系列嵌套列表,以创建一个树状结构。我在列表中引用了“以便它工作,否则在它尝试执行时会出错”
(def test-map
{:tree '("1" "2" "3" '("1" "2"))})
问题是,这似乎在实际列表中添加了“quote”一词
(:tree test-map)
;("1" "2"
我正在将地图的键值打印到html,而键名空间正在消失,这是我不想要的
下面的layout调用hiccup的html5进行渲染:
(布局(str“Path”(:Path/title Path))
[:h1“Title:(:Title path)slug]
[:p(str路径)];打印“{:db/id 17592186045542,:path/title“sdf”}”
(println(键路径));在终端“(:db/id:path/title)”中打印
[:p(键路径)];打印“idtitle”
(
为什么这一系列clojure命令返回false而不是true?语句1“C”和语句2(引号C)的结果有什么区别
这个问题有点类似于Clojure(和其他Lisp)中的,是表单(引号…)的快捷方式。所以当Clojure看到这一点时:
('A 'B 'C)
读者将其“翻译”为:
((quote A) (quote B) (quote C))
每个引号形式的计算结果都是一个符号,因此(引号a)计算结果是名为a的符号。在Clojure中,符号是函数,可以应用,因此((引号a)(引号B)(引号C))实际
我在Clojure有一张这样的地图:
(def stuff #{
{:a "help" :b "goodbye"}
{:c "help2" :b "goodbye"}
{:a "steve" :b "goodbye"}
{:c "hello2" :b "sue"}
})
:我想提供一个搜索,以便:
(search stuff "help")
:将返回:
#{
{:a "help" :b "goodbye"}
我创建了一个小型的compojure web应用程序,它可以使用提供的URL显示从其他网站获取的多个值。目前,这个URL是在我的一个函数中硬编码的,现在我想根据文本字段和复选框中的值添加动态URL创建功能
以下是我的页面的外观:
(defn view-layout [& content]
(html [:body content]))
(defn view-input []
(view-layout
[:h2 "Find"]
[:form {:metho
标签: Clojure
scheduled-tasksclojure-java-interop
我正在学习Clojure中的并发性
我(斯图尔特·塞拉?)在上遇到一项索赔,声称:
Clojure函数不能在没有阻塞或Java互操作的情况下为控制流使用时间
Java interop(ScheduledThreadPoolExecutor)不知道线程本地绑定
我不理解这些说法,恳请澄清,也许是一个例子。具体而言:
ScheduledThreadPoolExecutor的现状有什么问题?因为我正在启动一个新的(绿色)线程,所以我不希望每个线程绑定都会继续
我可以安排一个普通的Clojure函
我正在使用以下代码:
(require '[clj-time.core :as time]
'[clj-time.coerce :as tc]
'[clj-time.format :as f])
(f/unparse (f/formatter "yyyyMMdd") time/now)
但它抛出了以下错误
caused by: java.lang.ClassCastException: clj_time.core$now cannot be cast to
在运行lein repl时,试图查找seesaw gui库时出现以下错误。
你知道问题是什么以及如何解决吗
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
WARNING!!! version ranges found for:
[seesaw "1.4.2" :exclusions [org.clojure/tools.trace]] -> [j18n "1.0.1"] -> [org.
使用compojure api,如中所示:
(defapi app
(swagger-ui)
(swagger-docs
{:info {:title "Sample api"}})
(GET* "/" []
:no-doc true
(ok "hello world"))
(context* "/api" []
:tags ["thingie"]
(GET* "/plus" []
:return Long
我正在使用三叉戟拓扑和OpaqueTridentKafkaSpout
我正在使用的TridentKafkanconfig的代码片段:-
OpaqueTridentKafkaSpout kafkaSpout = null;
TridentKafkaConfig spoutConfig = new TridentKafkaConfig(new ZkHosts("xxx.x.x.9:2181,xxx.x.x.1:2181,xxx.x.x.2:2181"), "topic_name");
spoutCo
我想将Clojure中的嵌套映射分解为一系列键值对。例如,让我们看一下这张地图:
{:a :b
:c {:d {:e :f
:g :h}
:i :j}}
此贴图应如下所示:
[[:a :b]
[:c {:d {:e :f
:g :h}
:i :j}]
[:d {:e :f
:g :h}]
[:e :f]
[:g :h]
[:i :j]]
输出的顺序并不重要
我正在考虑使用递归函数,tree-seq或cloju
我有两个序列,可以是向量或列表。现在我想返回一个序列,其元素与这两个序列不相同
以下是一个例子:
(removedupl [1 2 3 4] [2 4 5 6]) = [1 3 5 6]
(removeddpl [] [1 2 3 4]) = [1 2 3 4]
我现在很困惑。这是我的代码:
(defn remove-dupl [seq1 seq2]
(loop [a seq1 b seq2]
(if (not= (first a) (first b))
我有一个函数,可以处理函数的元数据。我知道我可以用以下语法获取函数的元数据:
(meta #'println)
它返回我感兴趣的元数据:
{:arglists ([& more]), :doc "Same as print followed by (newline)", :added "1.0", :static true, :line 3631, :column 1, :file "clojure/core.clj", :name println, :ns #namespace[cl
我想从我创建的模板创建一个新的lein项目,而不在.m2或clojars中安装模板。所以我想设置lein工作时使用的类路径。这是如何做到的?有没有理由不在.m2中安装模板?否则可能使用CLASSPATH=。。。lein new projectname?这只是一个智力练习,看看如何在不打开lein launcher(/usr/bin/lein或其他任何东西)的情况下完成它,有一个代码来表示类路径环境变量(它是它的前缀);没有尝试过它,但没有考虑到任何不在.m2中安装模板的原因?否则可能使用CLAS
考虑这样一个数据集:
(def data [{:url "http://www.url1.com" :type :a}
{:url "http://www.url2.com" :type :a}
{:url "http://www.url3.com" :type :a}
{:url "http://www.url4.com" :type :b}])
;; (go (put! result-c (concat (<! (nt
假设我想找到sin/cos函数。在haskell中,我会启动,搜索“sin”或“cos”,阅读类型签名,然后完成
在Clojure中,到目前为止,我能做的最好的事情(对于Clojure.core中没有的函数)是启动google,输入“Clojure-sin”或“Clojure-cos”——然后得到一个关于Quil/sin和Quil/cos的包——然后开始思考
2a。这个被子包是什么?
2b。我想把这个包裹收进来只是为了得到好处吗?
2c。是否有“更标准”的软件包也提供sin/cos
==
因此,
我正在浏览clojure.core的源代码:
(defmacro and
([] true)
([x] x)
([x & next]
`(let [and# ~x]
(if and# (and ~@next) and#))))
为什么不
(defmacro and
([] true)
([x] x)
([x & next]
`(if ~x (and ~@next) ~x)))
因为参数x是一种形式,可以是任何表达式,可以在中计算
Clojure是一种Lisp方言,继承了Lisp的同音象似性。同源性使元编程更容易,因为代码可以被视为数据:语言中的反射(在运行时检查程序的实体)依赖于单一的同质结构,并且它不必处理复杂语法中出现的几种不同结构
更同质的语言结构的缺点是,语言构造(如循环、嵌套ifs、函数调用或开关等)彼此更相似
在clojure中:
;; if:
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s)
我需要放置一个Clojure服务来通过HTTP调用与另一个服务通信,在java中,我们可以使用RestTemplate这样做:
ResponseEntity<Product[]> responseEntity = new RestTemplate().getForEntity(
"http://localhost:8001/products/store/all", Product[].class);
Response
我已经使用clojure几个月了,有一件事我真的不明白,为什么名称空间名称中的破折号必须在文件系统中表示为下划线。有人能给我解释一下吗?是否可以在文件名中也使用破折号?您的意思是磁盘上的.class文件在Clojure中的函数有破折号的地方有下划线?我确信我读到过,这与JVM在这些文件名中不支持破折号有关。(或者至少不能保证它支持他们。)
这只是类文件名的一个限制,Clojure仍然默默地处理这个问题。您自己的代码仍然可以处理文件名中带有破折号的文件
很抱歉,我现在没有这方面的参考资料。这是Ja
讽刺的是,Sphinx的文档对编写扩展毫无帮助。因此,从Python和Javascript的内置模式开始,我已经有了一些基本元素。我可以使用以下指令为函数编写文档:
.. clj:ns:: clojure.core
.. clj:fn:: (filter f coll)
:param f: predicate
:param coll: collection
Built-in!
但是,HTML输出会生成C/Python样式的签名。前面的示例生成如下内容:
filter(f
我在webnoir中有以下函数,用于从磁盘提供映像
(defpage [:get "/GetPhoto"] {:keys [photoName]}
(def file (io/input-stream (str photoName ".jpg")))
(resp/set-headers {"Content-Type" "image/jpeg"} file))
我假设应该关闭该文件,但当我在函数末尾添加(.close file)时,访问URL时会出现错误ja
在clojure中给定一个函数x,如何通过编程获得参数数量的计数
例如:
如果您有权访问保存函数的var,则可以通过以下方式访问其元数据来获取参数计数:
(defn arities [v]
(->> v meta :arglists (map count)))
(defn a [])
(defn b [_ _])
(map arities [#'a #'b])
;= ((0) (2))
arities将返回一个包含函数所有arities的seq。这样做的缺点是,对于可变参数
我正在阅读,在那个教程中,它说函数print str将内容打印到返回的字符串中。那么这是否意味着:
(打印str a b c…)
我尝试使用我的REPL,它的行为与我上面假设的一样,但我只想知道它是否真的是,或者我在这里遗漏了什么…函数print str将返回一个字符串,类似于REPL在被要求评估参数时报告的字符串,例如用于人类消费。函数str调用对象的.toString。对于字符串参数,结果与您指出的相同
对于其他对象,这通常是不正确的
((juxt print-str str) 1N)
我正在做一些与clojure的线程相关的事情
现在我在REPL中工作,在REPL中编写和更新代码
我的问题是,有时会有一些未来的运行。我因为一些错误失去了裁判。我阻止它们的唯一方法是重新启动repl
我想知道,如果我没有参考,是否有任何方法可以停止运行未来(线程)?Clojure公共API提供了停止运行未来的唯一方法,如下所示:
(shutdown-agents)
但这不会影响你未来的工作。相反,你可以打断他们
(import 'clojure.lang.Agent)
(.shutdownNo
我想测试一个集合是否是暂时的。我尝试了以下功能:
(defn transient? [coll]
(extends? clojure.lang.ITransientCollection (type coll)))
但它不起作用:
user=> (transient? {})
NullPointerException clojure.core/implements? (core_deftype.clj:512)
user=> (transient? (transient {
我正在使用下面的代码尝试访问PUT请求中的一些json输入,但是返回的是:body{},我不确定我做错了什么
(ns compliant-rest.handler
(:use compojure.core ring.middleware.json)
(:require [compojure.handler :as handler]
[compojure.route :as route]
[ring.util.response :refer
我一直在尝试使用clojurejavashell进入cd/home/ics/icsdev。我一直在犯错误,但不知道为什么。我已经阅读了源代码并寻找示例
ics-db.core=> (sh "cmd" "cd /home/ics/icsdev")
IOException error=2,
No such file or directory
java.lang.UNIXProcess.forkAndExec (UNIXProcess.java:-2)
我还玩了:in,得到
我花了一整天的时间研究Clojure(和Lisp)中的词汇和动态范围界定。当我以为自己终于明白了时,我举了这个例子,并对它没有返回我所期望的结果感到非常惊讶:
(def non-dynamic-var "this is a non dynamic var")
(def ^:dynamic dynamic-var "this is a dynamic var")
(defn function-using-dynamic-var []
(println dynamic-var))
(defn
这个周末我决定学习clojure。我被reduce卡住了。我得到了一个类强制转换异常
(reduce #((cond (= %1 0) %2 :else %1)) 0 '(1 1 1))
ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/eval2092/fn--2093 (form-init1869535703328200664.clj:1)
我不确定我到底做错了什么。非常感谢您的帮助:)函
所有内容都在标题中,但下面是一个示例用例:
函数的第一个参数如下所示:
(my-fn "a.b.c" ...)
在较新的版本中,它现在变成:
(my-fn ... ["a", "b", "c"])
是否可以:需要库的特定版本?
例如:
:require my.util.lib :as newlib ;; new version
:require my.util.lib@v0.0.1 :as lib ;; old library
然后,它将允许每个文件迁移这个库使用情况文件。如评论中
我很难理解core.logic中conjo目标的以下行为
首先,一切似乎都很好
(l/run* [q]
(l/conjo q 2 3 [1 2 3] )) => ([1])
当q=[1]时,目标成功了,因为(conj[1]23)==[1 2 3]
另一方面,当我要求2lvar时,我得到了以下我不理解的结果。我期待着a=[1]和b=2
(l/run* [a b]
(l/conjo a b 3 [1 2 3] )) => (([_0 _1] :- (clojure.core.l
以这种方式使用“重新查找”时:
(re-find #"(\d{3})" "abc1245")
我得到:
["124" "124"]
当我只期望一个值时。发生了什么事?这是因为括号创建了一个正则表达式“组”。看
例如。区别在于:
(re-find #"(\d{3})" "abc1245") => ["124" "124"] ; #1
(re-find #"\d{3}" "abc1245") => "124" ; #2
(re-s
我一直遇到如下错误:
#object[Error Error: No protocol method XXX.YYY defined for type undefined: ]
其中,XXX.YYY部分是可变的。此代码位于*.cljc文件中,在JVM Clojure中运行良好,但在ClojureScript中失败。原因可能是什么?这个模糊的错误消息可能是由于对JVM类的不小心引用导致的,这些类没有使用#?(:clj…和#?(:cljs…读卡器条件进行适当保护。对于上面的示例,问题代码如下:
(
对于作业,我需要从clojure中的文本文件创建一个映射,这是我的新手。我特别使用了一个散列映射…但有可能我应该使用另一种类型的映射。我希望这里有人能帮我回答这个问题。我确实尝试过将哈希映射更改为排序映射,但它给了我同样的问题
文件中每行的第一个字符是键,整行是值。钥匙是0-9999之间的数字。共有10000行,行中第一个数字后面的每个数字都是0到9999之间的随机数。
我想我已经成功地创建了hashmap。至少,当我运行代码时,它不会给我一个错误。但是,当我尝试遍历它时,打印键0-9999的每
在函数调用中使用pprint时,不会得到函数的结果:
(defn my-func [] (+ 1 2))
(pprint my-func)
相反,我没有得到任何输出。如何使pprint打印3?my func计算为varmy func引用的fn,您应该看到表单的输出
#object[user$my_func 0x50029372 "user$my_func@50029372"]
要调用my func,您需要使用
(my-func)
因此,您可以使用
(pprint (my-func))
m
假设我想将参数p1和p2应用于函数调用列表:
(defn some-func []
(let [p1 a p2 b]
(f1 p1 p2)
(f2 p1 p2)
(f3 p1 p2)
...
))
做这件事的好方法和简洁方法是什么?您可能需要回顾一下。我可以做你想做的事
不过要注意,juxt有点晦涩难懂,可能会使您的代码难以阅读。您可能需要查看。我可以做你想做的事
不过要小心,juxt有点晦涩难懂,会让你很难读懂你的代码。假设你只想要副作用,我会使用doseq来
是否有更简洁和/或优雅的方式来表达let中的最后一行
(let [a ... ; int
b ... ; int
xs ... ; list
y ... ; int
z ... ; int
]
(into [a b] cat [xs [y z]]))
结果应该是一个向量。上面的表达式对于它完成的简单任务来说看起来相当复杂。在Python中,这将是
[a,b]+xs+[y,z]这可以更好地捕捉两个追加操作的相似性。一个更长的变体可以
请说明如何将以下函数重新构造为可读性更强、括号更少的函数
(defn forwardDifference2nd [fn x h]
(->
(/ (+ (-
(fn (+ (+ x h) h))
(* (fn (+ x h)) 2.0))
(fn x))
(Math/pow h 2))))
源代码
以下是一个例子:
(defn forwardDifference2nd [f x h]
(let [fh #(
因此,我使用0.1.11版本的re-graph,并尝试从端点获取数据。获取数据后,我检查了浏览器中的“网络”选项卡,找到了预期的数据,之后它应该会激活我的回调函数,但它似乎不起作用(但有时它起作用,在刷新页面几次后,它就不再起作用)。这是代码
;; how I init re-graph
(rf/dispatch [::re-graph/init
::conf/graphql-client-name
{:ws-url url
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 251 页