标签: clojure-repl

在Clojure 1.5中缺少非用户命名空间中的doc

我该怎么办才能doc再次获得?

brew install --devel leiningen
lein new app yeehaw
cd yeehaw
; edit project.clj and replace "1.4.0" with 1.5.0-RC1"
lein repl
yeehaw.core=> (doc map)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: doc
in this context, compiling:(NO_SOURCE_PATH:1:1) 
Run Code Online (Sandbox Code Playgroud)

此更改来自CLJ-1085和此相关源.

请注意,命名空间中doc仍然可以使用常用的REPL功能user,但是在我的应用程序命名空间中将它放在我的指尖是很好的,至少在REPL中是这样.

clojure clojure-repl

9
推荐指数
2
解决办法
1184
查看次数

抑制REPL中原子保存的数据的打印?(或参考,代理人......)

以下是完全有效的Clojure代码:

(def a (atom nil))
(def b (atom a))
(reset! a b)
Run Code Online (Sandbox Code Playgroud)

它甚至在需要反向引用的情况下很有用.

但是,在REPL中使用这些东西很烦人:只要你输入a或b,REPL就会尝试打印这些引用的内容,当然会很快产生堆栈溢出错误.

那么有什么方法可以控制/改变Clojure中atoms/refs/agents的打印行为?某种类型的循环检测会很好,但即使完全抑制deref的内容也会非常有用.

clojure clojure-repl

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

如何重复Clojure REPL中的最后一行?

在bash或Ruby的IRB中,我可以运行命令或计算表达式,然后使用键盘上的向上箭头编辑并重新运行相同的代码.(这可能是我配置的内容,但我不这么认为.)

这在Clojure REPL中对我不起作用; 我^[[A按下向上箭头时只看到打字.

有没有办法"重新输入"最后一行?

clojure clojure-repl

2
推荐指数
1
解决办法
1320
查看次数

"只能从尾部位置重复,编译"错误,同时使用循环中的重复

我是Clojure的新手,为了练习,我试图为半随机数应用一个简单的算法.

几天前,我读到了clojure文档中的循环,以及它们如何使用recur,所以我试着用这行代码编写一个循环:

(def numbers_semi_random
  (fn []      
    (loop[Xn 4 count 0]                    
     (while (and (not (= Xn m)) (< count m))
       (println (mod (+ (* 5.0 Xn) 7.0) m))
       (recur (mod (+ (* 5.0 Xn) 7.0) m) (inc count))    
))))
Run Code Online (Sandbox Code Playgroud)

但是当我执行代码时,会显示此错误

CompilerException java.lang.UnsupportedOperationException: Can only recur from tail position, compiling
Run Code Online (Sandbox Code Playgroud)

发生了什么?recur是不是在功能的尾部?

functional-programming clojure clojure-repl

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

Clojure:为什么我不能在不调用它们的情况下引用类方法?

这是一个 Clojure REPL 会话:

moon.core> Double
java.lang.Double
moon.core> (Double/parseDouble "1.0")
1.0
moon.core> Double/parseDouble
CompilerException java.lang.RuntimeException: Unable to find static field: parseDouble in class java.lang.Double, compiling:(*cider-repl moon*:1:7159) 
Run Code Online (Sandbox Code Playgroud)

我可以引用Double,也可以调用 Double/parseDouble,但不能直接引用。对于 Java 标准库中的其他类方法(例如Math/absInteger/parseInt),我看到了相同的结果。为什么?

lisp jvm clojure clojure-repl

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

(Clojure) 计算任意字符在字符串中出现的次数

我正在尝试编写一个函数(字符计数),它接受一个模式和一个字符串,然后返回一个数字(计数),该数字表示模式中的任何字符在字符串中出现的次数。

例如:

(char-count "Bb" "Best buy")

会返回,2因为 1 场比赛B和 1 场比赛b,所以加在一起我们得到2

(char-count "AaR" "A Tale of Recursion")

会回来3等等


我尝试re-seq在我的函数中使用,但它似乎只适用于连续字符串。因为(re-seq #Bb "Best Buy)仅查找模式Bb,而不查找每个单独的字符。

到目前为止,我的函数是这样的:

(defn char-count [pattern text]
  (count (re-seq (#(pattern)) text)))
Run Code Online (Sandbox Code Playgroud)

但它并没有达到我想要的效果。有人可以帮忙吗?

Ps 对 clojure(以及一般的函数式编程)非常陌生。

character clojure pattern-matching string-matching clojure-repl

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