假设我有一个函数,它取坐标x和y
对于x,我有一个值序列,比如[1,2,3],对于y,我有另一个值序列,比如[4,5,6]
我怎样才能得到包含所有这些组合的列表
因此,期望的结果是:
(myfn [1 2 3] [4 5 6]) => [[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
有这样的函数吗?data>(对于[x[1 2 3]y[4 5 6]](向量x y))
data> (for [x [1 2 3] y [4 5
标签: Clojure
read-eval-print-loopslimeswank
我将emacs与clojure swank和slime一起使用,并尝试设置我的开发环境。我遇到了一个问题。当我启动repl时,我被困在一个未知的目录中,无法加载我的命名空间。因为clojure repl找不到正确的文件
有人知道如何更改当前目录吗
附言:我刚开始使用emacs和slime,所以我是个笨蛋 简短回答:
(加载文件“定义的完整路径”)
长答覆:
以下是我的引导过程:
在~/.clojure/user.clj中(启动slime/clojure时此文件自动运行):
(添加类路径)file
JVM类型擦除如何帮助Clojure?没有它Clojure能生存吗?如果JVM已经具体化了类型,会发生什么?也就是说,Clojure将如何改变?我可以告诉你,Clojure不使用JVM中的类型擦除,因此我认为没有它不会有多大改变 Clojure一点变化都没有。类型擦除仅适用于泛型的Java类型参数。所有其他类型在运行时都可用
浏览时,它根本不太使用泛型。在中,它传递对象s并执行实例检查。通过将所有内容视为一个对象,它不需要泛型,因此不需要擦除类型参数
我有一个小型compojure站点,其路线定义如下:
(defroutes example
(GET "/" [] {:status 200
:headers {"Content-Type" "text/html"}
:body (home)})
(GET "/*" (or (serve-file (params :*)) :next))
(GET "/execute/" [] {:status 200
我想修改蛋糕测试,这样它就可以运行了
问题很简单:
(deftask test #{compile}
"Run project tests."
"Specify which tests to run as arguments like: namespace, namespace/function, or :tag"
(run-project-tests))
理想情况下,我希望使用命令行参数--depth=n指定该值,其效果如下:
(binding [*stack-trace-dep
在结束语中,我们如何将和或任何其他宏应用于列表
这不起作用:
(apply and '(true false))
因为apply不能获取宏的值
那么,检查列表中所有元素是否正确的最佳方法是什么呢?您可以这样做:
(every? identity '(true false))
有关更多信息,请参阅。在Clojure中,宏不是一流的东西,它们的组成与函数不同,您不能将它们传递给其他函数,也不能应用它们。这是因为它们在任何申请之前就已经完成了
通常将宏包装在函数中以应用或将其传递给函数
匿名函数读
我对Clojure还相当陌生,所以如果这是一个完全陌生的问题,我很抱歉,但我无法在网上找到足够的答案
基本上,我的问题是,每当我尝试运行我的项目时,都会出现如下错误:
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate greeter__init.class or greeter.clj on classpath:
在本例中,greeter
在Python中,可以将列表或元组传递给函数,并让函数解压缩参数。在Clojure我怎么做?下面是一些Python代码示例:
def f (a, b, c, *d):
print "a: ", a
print "b: ", b
print "c: ", c
print "d: ", d
f (1, 2, 3, 4, 5, 6)
print
v = (4, 5, 6)
f(1, 2, 3, *v)
结果:
a: 1
b: 2
c: 3
d: (4, 5
我正在编写一个小clojure发布/订阅界面。这是非常简单的,实际上只有两种方法可以使用:pub和sub-listen。sub-listen接受一个字符串(子名称),do-pub接受两个字符串(子名称和值)
我在clojure还是个新手,在想出一个可行的方法时遇到了一些困难。我的第一个想法(事实上是我的第一个实现)是使用一个单独的代理来保存哈希:
{ subname (promise1 promise2 etc) }
当一个线程想要将它的conj的一个promise对象分到与它想要的子对象相关
我一定是对如何定义函数有些误解了。我在做这个SICP练习,“定义一个过程,它以三个数字作为参数,并返回两个较大数字的平方和。”
我在REPL中尝试了这一点,它似乎有效:
=> (reduce + (map (fn [x] (* x x)) (rest (sort '(2 1 0)))))
5
但定义一个过程并用参数替换数字会给我带来一个错误:
=> (defn my-procedure [a b c] (reduce + (map (fn [x] (* x x)) (rest (s
是否可以在Clojure中为匿名函数执行var args
例如,我如何转动:
(#(reduce + (map * %1 %2 %3)) [1 2 3] [4 5 6] [7 8 9])
变成这样的
(#(reduce + (map * [& args])) [1 2 3] [4 5 6] [7 8 9])
使用函数
我不知道如何使用#(…)语法来实现这一点,但下面是使用fn
((fn [& args] (reduce + (apply map * args))) [1 2
我在Clojure中运行程序时遇到问题。我几周前才开始学习Clojure。所以我不知道调试Clojure程序的快捷方法。My func2在(adj(a b))处引发异常,如下所示:
ClassCastException java.lang.Long不能强制转换为clojure.lang.IFn
用户/功能2
我不知道它出了什么问题。有人能指出我编码的问题吗?
在func3中,我递归调用func2,但它抛出:
ArityException传递给的参数(0)数目错误:PersistentVector
如果我输入一个向量,想要翻转元素的顺序,我会写
(reverse [1 2 3])
现在,我该如何推广这个想法,以便能够输入嵌套向量并翻转元素的顺序?给定矩阵a,函数应反转每列中的元素。根据您在注释中给出的示例,这正是反转给定包含集合的集合所做的。您想要反转您还想要反转节点吗?也就是说:[[1 2 3][4 5 6]]将是[[6 5 4][3 2 1]]?或者您只想反转叶节点?输入嵌套向量[[1 0 0][0 2 0][0 0 3]]将转换为[[0 0 3][0 0 2][1 0]]示例
我是Clojure编程新手。我已经玩了一个星期了。我阅读了《Clojure编程》一书,在反复阅读之后,我试图在REPL中剖析这个函数,但不知道这个函数是如何工作的:
(defn reduce-by [key-fn f init coll]
(reduce (fn [summaries x]
(let [k (key-fn x)]
(assoc summaries k (f (summaries k init) x))))
{} coll))
虽然这可能是主观的,但有一个具体的例子,我想帮助解决。这与泛音Clojure库的一个问题有关,它似乎应该为Leiningen提供一个“最佳实践”,并适用于比泛音更多的库
泛音是一个clojure库,旨在从其他项目中使用。泛音需要本机库才能工作,因此它在project.clj中使用:本机路径“native”,以便为所使用的本机scsynth库[Overtone/scsynth“3.5.7.0”]获得正确的路径
但是,我相信这会重置依赖泛音库的项目的传入路径。有关一些背景信息,请参阅此问题,但基本上
我使用Clojure的Java API,我有一个通过代码创建的持久性向量:
IPersistentVector vec = PersistentVector.create();
然后用值填充
我需要将这个向量的内容提取为LazySeq。我知道向量的方法seq()返回一个ISeq。有没有办法将这个ISeq转换成LazySeq
谢谢,
ChrisISeq是seqs的一个接口,因此LazySeq也实现了ISeq。seq函数类型提示其作为ISeq返回
对向量调用seq将返回一个PersistentV
我想创建一个Web小部件。它必须访问远程clojure数据结构,并显示小部件参数请求的数据结构元素。视觉风格也可以远程控制
编辑:
Youtube有以下内容:
<iframe width="560" height="315" src="//www.youtube.com/embed/Z6bFyVGvg28" frameborder="0" allowfullscreen></iframe>
<iframe width="425" height="350" fram
我有一个程序可以播放一小段音乐。我希望它在一个循环中播放一段时间,但我希望能够优雅地停止它,也许可以用按键
(顺便说一句,我尽量避免说“循环”或“按键”,因为我不想把答案引向那个方向。)
我仍然是clojure的初学者,目前我只是从REPL开始运行
是时候让我毕业了,找到一个更好的方式来运行我的音乐功能了吗
我如何告诉我的函数在需要时优雅地停止
这实际上取决于您的实际使用情况:您是想关闭音乐(即在播放时中断音乐),还是只想阻止它下次播放
后一种情况很容易处理,只要你认为应该保持沉默,就可以承诺
我试图在Clojure中读取函数集合的元数据,但是var或reader特殊表单不起作用,除非它们直接处理符号
; this works
(var my-fn)
; this doesn't
(defn val-it [x] (var x))
(val-it my-fn)
有没有办法让它在另一个函数的作用域内工作?resolve返回当前名称空间上下文中与给定符号对应的Var或class对象ns resolve允许您指定要在其中解析符号的命名空间
(resolve 'my-fn)
;= #'so
我正在学习达托米语,但还是不喜欢。如何构建引用了可变数量实体的事务
例如,这将创建具有子实体的事务,以及具有引用新子实体的子属性的族实体:
(defn insert-child [id child]
{:db/id #db/id id
:child/first-name (:first-name child)
:child/middle-name (:middle-name child)
:child/last-name (:last-name child)
:chi
所以我把它拼凑在一起,但我相信我有很多关于clojure的东西要学!我已经有了正确的答案,但对我来说这只是开始。通过找出我应该如何思考这个问题来帮助我更好地理解lisp。我是一个传统的OO开发者。。。所以lisp没有很好地进入我的脑海
(def v [:a :a :a :b :b :c :c :c])
(def a (first(partition-by identity v)))
(def b (flatten(rest (partition-by identity v))))
(vec(
我对Clojure库中的一些代码有一个问题
(defn compile-route
"Compile a route in the form (method path & body) into a function."
[method route bindings body]
`(make-route
~method ~(prepare-route route)
(fn [request#]
(let-request [~bindings requ
我试图在clojurescript中构建一个由atom支持的脚本。游标是一种类似于拉链的递归机制,用于编辑不可变的嵌套关联数据结构
我是Clojure的新手,你能帮我发现我的错误吗
(defprotocol Cursor
(refine [this path])
(set [this value])
(value [this]))
(defn- build-cursor* [state-atom paths]
(reify Cursor
(set [this value
在我的(toy)项目中添加了一个名称空间后,启动服务器后会引发一个异常:
lein run
我正在复制project.clj文件下面的内容
(defproject compoj02 "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse
听起来可能很奇怪,我正在Clojure中寻找和宏的函数版本
为什么??首先,我很好奇
其次,我想在支票中使用或。这不起作用:
(defn victor
[x]
{:post (or (nil? %) (vector %))}
;; ...
)
我希望后置条件检查victor是否返回向量或nil,但失败:
#<CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojur
当访问者提交表单时,我想关联输入他的IP地址
(POST "/form" {params :params} (assoc params :ip-address the-ip)
如何做到这一点
考虑过这样做:
(POST "/form" {params :params
client-ip :remote-addr}
(->> params keywordize-keys (merge {:ip-address client-ip})
我开始学clojure所以请原谅我的问题
我尝试实现以下功能
伪代码:
function(x y) {
if (x != oldX)
dosomething(y);
oldX = x;
}
oldX是全局变量
我怎样才能正确地用clojure的方式来做这件事
我写了一些这样的东西,但这是不是正确的方式
(defn rec [x y]
(if (not= x oldX)
(println "y"))
(def oldX x))
defs应仅为顶级(def o
我使用CLJHTTP发出GET请求,响应是一个zip文件。此zip文件的内容始终是一个CSV文件。我想将CSV文件保存到磁盘,但我不知道如何保存
如果我在磁盘上有文件,(fs/unzip filename destination)来自Raynes/fs库,效果很好,但是我不知道如何将来自cljhttp的响应强制转换为可以读取的内容。如果可能的话,我想直接解压这个文件而不需要
我所得到的最接近的数据(如果这很接近的话)会让我到达一个BufferedInputStream,但是我从那里迷失了方向
(
我想知道为什么没有用于浮动的clojure阅读器文本。比如:
1f
我找到了,但没有反应。clojure的文件也没有提到这一点。是否没有添加它的计划,如果没有,那么这背后的原理是什么?Clojure支持强制输入定义和定义的float
如果我需要写一个真正的浮点,我通常只是确保它有一个小数点1.0vs1关于@omiel的答案,您可以编写1.以获得浮点值,如果您喜欢更简洁的语法:
(class 1.)
; => java.lang.Double
事实上,32位精度整数也没有读取器文本
(c
我对clojure中的瞬变用法有点迷茫。任何帮助都将不胜感激。
示例代码:
(defn test-transient [v]
(let [b (transient [])]
(for [x v] (conj! b x))
(persistent! b)))
user> (test-transient [1 2 3])
[]
我尝试在返回之前使其持久化,结果是:
(defn test-transient2 [v]
(let [b (tran
我是莱宁根的新手
当我试图执行以下命令时
$ lein clean jar
我得到
如何在一个命令中执行多个任务?您不能直接在命令行中执行,但可以在项目.clj文件中使用别名:
:aliases
{"go" ["do" "clean," "jar"]}
因此,在命令行中,您可以:
lein go
(需要在clean后面加逗号,因为lein do希望在每个命令后面加一个逗号,以便允许向命令传递参数。)是的,可以用一个命令顺序执行多个leiningen任务
例如:
lein do clean,
标签: Clojure
setintervalclojurescriptclearinterval
基本上,我想要的是在ClojureScript中实现这段代码:
var win = window.open('foo.html', 'windowName');
var timer = setInterval(function() {
if(win.closed) {
clearInterval(timer);
alert('closed');
}
}, 1000);
我试过这个:
(let [popup (.open
我想测试一个函数
(defn -main
[& args]
(let [port (Integer/parseInt (or (first args) "8080"))]
(run-jetty
app
{:port port})))
出于明显的原因,我需要模拟运行jetty,因此我使用和redefs来验证是否传递了正确的参数。这很有效
(it "should overide the port with first arg"
(wi
通常,Clojure源文件名为(例如)foo.clj,Clojurescript源文件名为foo.cljs。我的印象是,在Clojure versions>=1.7中,如果我希望可以使用Clojure和Clojurescript中的require或use加载文件,我可以将其命名为foo.cljc
这是正确的吗?它似乎隐含在上的主要文档页面中
而且,据我所知,它从来没有被明确说明过
这不是一个关于使用reader条件指定在Clojure和Clojurescript中运行的备用代码的问题;这是更基本
在我的Clojure库testlib中,我有一个带有:gen class指令的名称空间,如下所示:
(ns com.some_long_path.NewClass
(:import (java.util List ArrayList))
(:gen-class
:name com.some_long_path.NewClass
:methods [^{:static true} [getValues [String] java.util.List]]
)
(:
我有一个函数,它处理来自共享通道的值流,并查找满足特定谓词的值:
(defn find-my-object [my-channel]
(go-loop []
(when-some [value (<! my-channel)]
(if (some-predicate? value)
value
(recur)
问题是,上面的go循环在超时后继续执行。我希望find my object在搜索进行时从my channel中吸取值,但我不
假设我有一个mapm像{“good1”1,“bad1”1,“good2”2,“bad2”2},我想删除基于映射键上某个谓词的条目,一种方法是:
(defn dissoc-by [f m] (->> m (filter (complement f)) (into {})))
(dissoc-by #(.contains (first %1) "bad") m)
=> {"good1" 1, "good2" 2}
在clojure中有没有更惯用的方法来实现这一点?这是一种非常正
如果我有一个向量[[1 2 3][4 5 6][7 8 9][[10 11][12 13][[14][15]]
如何返回向量中每个元素的位置
例如,1具有索引[0 0 0],2具有索引[0 0 1],等等
我想要像这样的东西
(some-fn [[[1 2 3] [4 5 6] [7 8 9]] [[10 11] [12 13]] [[14] [15]]] 1)
=> [0 0 0]
我知道如果我有一个向量[1 2 3 4],我可以做(.indexOf[1 2 3 4]1)=>0,但我如
我正在尝试为代码编写几个包装函数
它的基本形式(如示例页所示)为
我知道,要导入内部类,需要使用$,但是下面的每一种组合似乎都不起作用
(ns the.pain.is.real
(:require [clojure.reflect :as r])
(:import
com.arangodb.velocypack.VPackBuilder ;; fine
com.arangodb.velocypack.VPackSlice ;; fine
com.arangodb.vel
我有一个简单的ansible yaml文件,它工作得很好:
---
- hosts: 172.16.10.104
- tasks:
- name: ping
ping: ''
我使用clojure来使用clojure生成此yaml文件:
(defn -main
[& args]
(def data [{:hosts "172.16.10.104"} {:tasks ""} {:name "ping",:ping ""} ])
(def
是否有类似于select keys的功能,但对于缺少的键有默认值
我问这个问题的原因是我正在使用它来查询数据库。我发现了一个bug,在没有匹配项的情况下,使用选择键是不直观的
例如:
(delete t
(where
(select-keys {:k1 "v1" :k2 "v2"} [:k1])))
同:
(delete t
(where {:k1 "v1"}))
(delete t
(where {}))
这可以通过korma翻译为:
delete from t wh
来源:Clojure的快乐
(defn contextual-eval [ctx expr]
(eval
`(let [~@(mapcat (fn [[k v]] [k `'~v]) ctx)]
~expr)))
现在如果我打电话
(contextual-eval '{a 1 b 2} '(+ a b))
它按预期返回3
但是为什么要使用`~v而不仅仅是v
如果我删除eval。。所以函数看起来像这样
(defn contextual-eval [ctx expr]
保证某个未知值在序列中的惯用方法是什么,该值可能在序列中,也可能不在序列中(into[]val)会失败,但可能会嵌套,即[[val..](哦,如果已经在seq中,则不会嵌套)*它只是(展平(conj?(conj[]val)将始终返回[val],永远不会[[val]
如果val本身是一个向量,那么是的,(conj[]val)将返回一个元素的向量,其中一个元素就是向量val这类事情——处理一个可能是序列也可能不是序列的值——就是不惯用的。看看他在哪里具体地调用了这一点
重构您的代码,使val始终是一
有没有一种简单的方法可以使用Clojure将磁盘上的文件解压缩到目录?我发现的所有东西都是关于解压一个文件的,但我有一个包含多个文件的zip。我想把它解压缩,然后把一个特定的文件读入内存。尝试构建一个ETL工具,下载zip文件,解压它,将特定文件读入内存,然后对其执行一些操作。理想情况下,我可以使用.getnextery或类似的工具,并在与正则表达式匹配时读取内存。我发现在Clojure或Java中解压缩文件内容非常困难,因为您必须自己创建目录结构。我可以想象那里有现成的库,但我曾经使用过类似以
我一直试图将向量中映射的嵌套值映射到向量向量中,但没有成功
我掌握的数据如下:
[{:country {:name "chile", :id 1},
:subcountries [{:name "talca", :id 2}
{:name "concepcion", :id 3}
{:name "puerto montt", :id 4}]}
{:country {:name "united states", :id 5}
我正在学习clojure,我想以姓氏->名字的顺序取多个人的名字向量,并将其转换为地图向量
["Pan" "Peter" "Mouse" "Mickey"]
应该成为
[{:firstName Peter, :lastName Pan} {:firstName Mickey, :lastName Mouse}]
我试过这个,但没用
(for [[lastName firstName]
(list ["Pan" "Peter" "Mouse" "Mickey"])]
{:fi
考虑这个最小的例子
(defmacro foo []
`(list ,@(for [i [1 2 3]] (+ 1 i))))
我希望(foo)扩展到(列表2 3 4)
但是,当我尝试(macroexpand-1(foo)
语法错误宏扩展clojure.core/let at(*cider repl:localhost:43203(clj)*:366:22)。
测试/i-失败:简单符号?位于:[:绑定:形式:本地符号]规范::clojure.core.specs.alpha/local-n
标签: Clojure
clojurescripthigher-order-functions
我想创建一个helper函数来修改高阶函数返回的输出
高阶函数示例:
(def使用meta-sub(make-app-fn(make-sub:meta)))
问题是,在let中使用此选项时,如下所示:
(让[meta-sub(使用meta-sub道具:给我这个meta)])
返回键值对的映射,如下所示:
{:key-we-small-never-need-1 nil
:key-we-small-never-need-2零
:key-we-small-never-need-3零
:key-we
标签: Clojure
read-eval-print-loopheadlesstail
我正在使用以下命令为Clojure运行无头Leiningen REPL:
lein repl :headless :port 34567
是否有办法跟踪与REPL的交互?不确定您的意思是在从不同终端连接的另一个REPL中查看(重定向)标准错误/输出的内容?这可能对你有用:manscript也许?
我有一堆描述位置的地图:
(def pizzeria
{
:LocationId "pizzeria"
:Desc "Pizzeria where Timur works"
:Address "Vorgartenstraße 126, 1020 Wien"
:Comment ""
})
(def dancing-school
{
:Locatio
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 251 页