小编Nic*_*ton的帖子

30
推荐指数
2
解决办法
5365
查看次数

在向量中交换两个元素的惯用方法是什么?

是否有更好或更简洁的方法来执行以下操作?

(defn swap [v i1 i2]
  "swap two positions in a vector"
  (let [e1 (v i1)
        e2 (v i2)]
       (-> (assoc v i1 e2)
       (assoc i2 e1))))
Run Code Online (Sandbox Code Playgroud)

vector idiomatic clojure

17
推荐指数
1
解决办法
3536
查看次数

如何创建一个宏来定义clojure中的两个函数

下面的代码不像我期望的那样.

; given a function name, its args and body, create 2 versions:
; i.e., (double-it foo []) should create 2 functions: foo and foo*
(defmacro double-it             
  [fname args & body]       
  `(defn ~fname ~args ~@body) 
  `(defn ~(symbol (str fname "*")) ~args ~@body))
Run Code Online (Sandbox Code Playgroud)

上面的代码没有像我期望的那样创建两个函数.它只创建最后一个.

user=> (double-it deez [a b] (str b a))
#'user/deez*
Run Code Online (Sandbox Code Playgroud)

如何获得一个宏来定义两个函数?

lisp macros clojure

15
推荐指数
1
解决办法
2516
查看次数

谁能给出一个以编程方式使用org.apache.maven.cli.MavenCli的好例子?

我正在尝试创建一个需要在当前项目上执行maven目标的intelliJ插件.intertubes中的所有讨论都建议使用MavenEmbedder.祝你好运.2.0.4版本不受支持,并且没有关于如何使用它的参考.

我给了它一个旋转,然后跑到一堵墙里,那里没有用所需的所有田地初始化嵌入器.反光私人会员注射?真棒!为什么有人需要一种明显的方法来初始化对象?

似乎有一些人正在使用2.1版本并取得了一些成功.我一直无法在罐子甚至消息来源中找到它.

我去检查了 嵌入式项目的3.0版本:http://maven.apache.org/ref/3.0-beta-3/maven-embedder/它一起消除了MavenEmbedder对象,似乎只支持访问通过MavenCli上的main或doMain方法.有没有人使用过这些方法并且可以提供一些建议?

api maven-3

15
推荐指数
3
解决办法
8080
查看次数

如何在clojure中使用自己的命名空间之外的类型?

我和leiningen建立了一个名为techne的项目.我创建了一个名为scrub的模块,其中包含一个名为Scrub的类型和一个名为foo的函数.

技艺/ scrub.clj:

(ns techne.scrub)
  (deftype Scrub [state]
    Object
     (toString [this]
     (str "SCRUB: " state)))

(defn foo
  [item]
  (Scrub. "foo")
  "bar")
Run Code Online (Sandbox Code Playgroud)

技艺/ scrub_test.clj:

(ns techne.scrub-test                                                                                                                                             
  (:use [techne.scrub] :reload-all)                                                                                                                               
  (:use [clojure.test]))                                                                                                                                          


(deftest test-foo                                                                                                                                                 
  (is (= "bar" (foo "foo"))))                                                                                                                                                           

(deftest test-scrub                                                                                                                                               
  (is (= (Scrub. :a) (Scrub. :a)))) 
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我收到错误:

Exception in thread "main" java.lang.IllegalArgumentException: Unable to resolve    classname: Scrub (scrub_test.clj:11)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:5376)
    at clojure.lang.Compiler.analyze(Compiler.java:5190)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357)
Run Code Online (Sandbox Code Playgroud)

如果我删除测试 - 擦洗一切正常.为什么:使用techne.scrub'import'函数定义而不是类型定义?如何引用类型定义?

testing clojure deftype leiningen

12
推荐指数
1
解决办法
2384
查看次数

在Clojure中旋转列表列表矩阵

我是Clojure和函数式编程的新手.我对如何以功能方式处理这个问题感到茫然.

我有以下矩阵:

(def matrix [[\a \b \c]
             [\d \e \f]
             [\g \h \i]])
Run Code Online (Sandbox Code Playgroud)

我想把它变成这样的东西(逆时针旋转):

((\a \d \g)
 (\b \e \h)
 (\c \f \i ))
Run Code Online (Sandbox Code Playgroud)

我已经破解了这一点,它以正确的顺序给了我元素.如果我能以这种方式收集字符串中的数据,那么我可以将其与分区分开.但是我很确定doseq是错误的路径:

(doseq [i [0 1 2]]
  (doseq [row matrix]
    (println (get (vec row) i))))
Run Code Online (Sandbox Code Playgroud)

我已经涉足了嵌套的地图调用,但仍然坚持使用它.在Clojure中构建字符串或以更好的方式处理这个字符串的正确方法是什么?

clojure matrix

10
推荐指数
3
解决办法
2809
查看次数

有没有办法以编程方式获取clojure特殊形式的集合?

有类似的东西存在吗?:

(deftest fantasy
   (is (= ["let" "def" "ns" "etc."] clojure.core/special-chars)))
Run Code Online (Sandbox Code Playgroud)

clojure special-form

8
推荐指数
1
解决办法
218
查看次数

是否可以在少于O(n)的时间内从排序列表中删除重复项?

我怀疑有一种方法,如果你可以通过更快地找到一系列重复值的另一端来节省,而不是迭代通过该子列表

arrays algorithm complexity-theory big-o

8
推荐指数
1
解决办法
1809
查看次数

你如何在clojure中构建一个符号?

我想构造一个宏,给定一个符号'foo,创建一个名为的方法foo*.我怎么可以连接'foo'*

lisp symbols clojure

6
推荐指数
1
解决办法
599
查看次数

在clojure中对deftype'd对象有什么好的toString方法

(deftype Bag [state]
   Object
     (toString [bag]
       (str "Bag???" state)))
Run Code Online (Sandbox Code Playgroud)

我希望toString看起来像

clojure.core=> (def b (Bag. {:apples 1 :bannanas 4}))
#'clojure.core/b
clojure.core=> (str b)
"BAG: {:apples 1 :bannanas 4}"
Run Code Online (Sandbox Code Playgroud)

什么是表达信息的好方法?是

"Bag/{:k :v}" 
Run Code Online (Sandbox Code Playgroud)

更好?社区如何称呼您的toStrings?

clojure instantiation tostring deftype

6
推荐指数
2
解决办法
1877
查看次数

如何在 Ant 条件中使用脚本的输出

我想做类似下面的事情

<target name="complex-conditional">
  <if>
    <exec command= "python some-python-script-that-returns-true-or-false-strings-to-stout.py/>
    <then>
      <echo message="I did sometheing" />
    </then>
    <else>
      <echo message="I did something else" />
    </else>
  </if>
</target>
Run Code Online (Sandbox Code Playgroud)

如何评估在 ant 条件语句中执行某些脚本的结果?

java ant build conditional-statements

5
推荐指数
1
解决办法
1289
查看次数

在clojure中将java方法名称作为函数arg

所有,

我想创建一个函数,它接受表示java方法的符号并将其应用于某个对象:

(user=> (defn f [m] (. "foo" (m)))
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,我得到的结果与我的预期有很大不同

user=> (f 'getClass)
java.lang.IllegalArgumentException: No matching method found: m for class java.lang.String (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

2个问题:

1>为什么符号m被称为'.'的第二个arg.函数而不是绑定到m的值?

2>我将如何实际做我想做的事情?

macros function clojure

4
推荐指数
1
解决办法
398
查看次数

从基于GAE的应用程序获取Auth Cookie的正确URL是什么

我有一个Android应用程序,我想连接到基于Google App Engine的服务器.我可以从AccountManager获取身份验证令牌.看来我接下来要做的就是与auth页面交谈以获取cookie.遵循这里的精彩指示:http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app 我认为我的网址应该是:

https://MYAPP.appspot.com/_ah/login?continue=http://localhost/&auth=CrAZYl000ngToken
Run Code Online (Sandbox Code Playgroud)

但我没有重定向,而是出现500服务器错误:

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message 
and the query that caused it.
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?我应该去的URL是什么?或者我可能做错了什么?

authentication cookies google-app-engine android token

3
推荐指数
1
解决办法
2531
查看次数