标签: clojure

如何使alter function/assoc函数返回nil?

我有一个非常庞大的哈希表,每当我尝试更改哈希时,都会返回整个哈希值,这会导致我的REPL崩溃.有没有办法可以让Clojure设置值并返回nil?

谢谢.

clojure

0
推荐指数
1
解决办法
76
查看次数

Sun对Clojure的态度是什么?

他们对clojure的官方立场是什么?

java clojure

0
推荐指数
1
解决办法
481
查看次数

关于类OR关键字的Clojure multimethod

假设我有这种多方法

(defmulti m (fn [v] [(:type v)]))

(defmethod m [Object] [k] (prn "Object"))

(defmethod m [:mykwd] [k] (prn "mykwd"))
Run Code Online (Sandbox Code Playgroud)

当我用子类调用它时Object,它会正确地调度到第一个实现:

(m {:type String})
"Object"
Run Code Online (Sandbox Code Playgroud)

随着:mykwd它也按预期工作:

(m {:type :mykwd})
"mykwd"
Run Code Online (Sandbox Code Playgroud)

但当我提供另一个关键字时,我得到一个例外:

(m {:type :anotherkwd})
#<CompilerException java.lang.IllegalArgumentException: No method in multimethod 'm'
for dispatch value: [:anotherkwd] (NO_SOURCE_FILE:0)>
Run Code Online (Sandbox Code Playgroud)

这个调度究竟是如何工作的?

是否可以为类继承保留此行为,并且仍然具有捕获所有关键字的"默认"实现?

编辑这个例子很简单,但我需要它来处理二进制函数.我的真正需求如下.我不知道如何申请:default它.

(defmulti m (fn [arg mp] [(class arg) (:type mp)]))
Run Code Online (Sandbox Code Playgroud)

然后,我正在寻找一种方式,当定义它的情况argnil(:type mp)是什么.这适用于value for :type是一个类,但不适用于任何关键字:

(defmethod …
Run Code Online (Sandbox Code Playgroud)

clojure multimethod

0
推荐指数
1
解决办法
1297
查看次数

Clojure编译器错误

我正在开发一个包含以下代码行的clojure程序:

(defn makeStruct 
 "Take a line of input and return a starbucks-struct"
 [input]
 (let[(apply struct storeinfo (clojure.string/split input #","))]
 )
Run Code Online (Sandbox Code Playgroud)

)

我得到这个编译器错误:

Exception in thread "main" java.lang.IllegalArgumentException: let requires an even number of forms in binding vector (clojureHW.clj:24)
Run Code Online (Sandbox Code Playgroud)

我对clojure很新,并不完全确定我在做什么,但在这种情况下,输入是一个字符串,我将它拆分为一个向量来初始化我的结构.我使用的语法let不正确吗?

compiler-errors clojure

0
推荐指数
1
解决办法
2884
查看次数

一些函数应用比率永不返回

可以请一些人解释原因

(some #(= 3 %) (range))
Run Code Online (Sandbox Code Playgroud)

返回true但是

(some #(= 4/3 %) (range)) 
Run Code Online (Sandbox Code Playgroud)

永远不回来?

functional-programming clojure

0
推荐指数
1
解决办法
64
查看次数

在柳叶刀中,柳叶刀需要任何包装或罐子文件吗?

Programmin Clojure由"Stuart Halloway"一书讲述了Lancet,非常第一步是(使用' lancet ),它抛出一些异常,

异常 user =>(使用'lancet)java.io.FileNotFoundException:无法在类路径上找到lancet__init.class或lancet.clj:(NO_SOURCE_FILE:0)

是否需要任何jar文件或某些包才能使其工作?

clojure

0
推荐指数
1
解决办法
86
查看次数

Clojure Inconsistent在执行函数期间导致clojure

Clojure问题

我在clojure中编写了以下函数:在第一个循环中,它迭代一个映射列表并创建一个映射.然后第二个循环迭代一个列表,匹配先前创建的映射数据和一个向量并返回一个新映射.但是,使用相同数据的不同运行会产生不同的结果.见下文.

(defn resolve-case-per-period
  "Constructs a map by matching data existing in input parameter vectors"
  [dd case-details periods]
  (let [cases ((fn [in] 
                 (loop [case-details in, result-map {}] 
                   (if (= (count case-details) 0) 
                     result-map 
                     (recur (rest case-details) 
                            (assoc result-map
                              (:priority (first case-details)) 
                              (:caseid (first case-details)))))))
               case-details)
         periods periods]
    (info "Mapping cases to periods step 1 completed " cases)
    (loop [periods periods, result-map {}]
      (if (= (count periods) 0)
        result-map
        (recur (rest periods) 
               (conj result-map
                     { (str (:period (first periods)))
                       (get cases …
Run Code Online (Sandbox Code Playgroud)

clojure

0
推荐指数
1
解决办法
116
查看次数

如何将ASCII转换为十六进制

如何 ASCII值转换为十六进制和二进制值(不是ASCII中的字符串表示形式)?例如,如何将十进制值26转换为0x1A?

到目前为止,我已尝试使用以下步骤进行转换(请参阅下面的实际代码):

  1. 将值转换为字节
  2. 将每个字节转换为int
  3. 通过将每个int转换为十六进制 String.toString(intValue, radix)

注意:我确实询问了有关将十六进制值写入文件的相关问题.

Clojure代码:

(apply str
  (for [byte (.getBytes value)]
    (.replace (format "%2s" (Integer/toString (.intValue byte) 16)) " " "0")))))
Run Code Online (Sandbox Code Playgroud)

Java代码:

Byte[] bytes = "26".getBytes();
for (Byte data : bytes) {
    System.out.print(String.format("%2s", Integer.toString(data.intValue(), 16)).replace(" ", "0"));
}
System.out.print("\n");
Run Code Online (Sandbox Code Playgroud)

java clojure

0
推荐指数
1
解决办法
5598
查看次数

让Leiningen在Mac OS X 10.7.2上运行

我通过MacPorts在Mac OS X 10.7.2上安装了Leiningen:

$ lein version
Leiningen 1.6.1.1 on Java 1.6.0_29 Java HotSpot(TM) 64-Bit Server VM
Run Code Online (Sandbox Code Playgroud)

我也有clojureclojure-contrib安装的软件包:

$ sudo port installed clojure*
The following ports are currently installed:
  clojure @1.3.0_0 (active)
  clojure-contrib @1.2.0_0 (active)
Run Code Online (Sandbox Code Playgroud)

为了测试我的环境,我生成了一个示例helloworld项目,如Zef Hemel所述.这是project.clj文件:

(defproject helloworld "0.1"
    :dependencies [[org.clojure/clojure
                      "1.3.0-master-SNAPSHOT"]
                   [org.clojure/clojure-contrib
                      "1.2.0-SNAPSHOT"]]
    :main helloworld)
Run Code Online (Sandbox Code Playgroud)

这是helloworld.clj文件:

(ns helloworld
  (:gen-class))

(defn -main [& args]
  (println "Hello world!"))
Run Code Online (Sandbox Code Playgroud)

当我尝试编译这个项目时,我收到了几条更新消息......

$ pwd
/Users/alexreynolds/helloworld

$ sudo lein compile
[INFO] snapshot …
Run Code Online (Sandbox Code Playgroud)

java macos clojure leiningen

0
推荐指数
1
解决办法
1517
查看次数

Clojure 初学者在这里。无法弄清楚为什么函数没有按预期创建列表

我正在尝试将嵌套向量添加到地图中,即({:cells {[xy]})。我尝试过多种方式来做到这一点,但无论我如何尝试,我都无法让它发挥作用。我不断收到“错误数量的参数(0)传递给:clojure.lang.PercientArrayMap”,或者在另一种情况下,我什至无法让我的剩余函数即(坐标生成)来编译它。我必须手动重新输入它们才能让 REPL 识别它们。一般来说,我确实是一个认真编码的初学者,所以我不知道该去哪里。这是我的功能:

(defn values-manual [grid values]
  (let [inter (interleave (coordinates-gen grid) [values])]
    (loop [[x y & remaining] inter]
      do(
         (assoc grid :cells (x y))
         (recur remaining)))))
Run Code Online (Sandbox Code Playgroud)

我选择将两个向量(网格和值)交错在一起,因为它们的大小可能不同,并且交错会自动截断为较小的向量,这对于我的输出来说是理想的。然后我访问该列表的前两个元素。然后将它们与我的“网格”地图中的 :cells 键关联起来。然后对其余元素重复。一旦我尝试运行它,它就无法工作,并且我的其他定义的函数也无法被识别。我还使用了 do() 因为我可以验证循环是否适用于多个函数。到底是怎么回事?非常感谢任何帮助。

我尝试了我能想到的一切。这是我的第一个大型编码项目。

lisp clojure

0
推荐指数
1
解决办法
122
查看次数