我在Clojure中编写了几百个应用程序,它使用JLayer Java库来处理音频,我在后台运行mp3.这工作正常,但只要我在后台运行任何其他音乐,YouTube等(我正在运行Arch Linux)我的应用程序中的声音完全停止.
我浪费了最后两个小时,并尝试了几十件事来解决这个问题,所以任何建议都值得赞赏.
如果我有请求,"size=3&mean=1&sd=3&type=pdf&distr=normal"那么编写(defn request->map [request] ...)接受此请求的函数并返回映射的惯用方法是什么{:size 3, :mean 1, :sd 3, :type pdf, :distr normal}
这是我的尝试(使用clojure.walk和clojure.string):
(defn request-to-map
[request]
(keywordize-keys
(apply hash-map
(split request #"(&|=)"))))
Run Code Online (Sandbox Code Playgroud)
我对其他人如何解决这个问题很感兴趣.
在Rich Hickeys蚂蚁游戏中,他有以下代码:
(import
'(java.awt Color Graphics Dimension)
'(java.awt.image BufferedImage)
'(javax.swing JPanel JFrame))
(defn fill-cell [#^Graphics g x y c]
(doto g
(.setColor c)
(.fillRect (* x scale) (* y scale) scale scale)))
Run Code Online (Sandbox Code Playgroud)
我无法在任何地方找到文档#^意味着在这种情况下,任何帮助表示赞赏.
我想知道我是否遗漏了一些涉及矢量操作的基本内容.假设我有以下内容:
(def xs [9 10 11 12 13])
(def idx [0 2])
(def values [1 3])
Run Code Online (Sandbox Code Playgroud)
如果我想[1 10 3 12 13]在Matlab中返回向量,我会写xs(idx) = values.在Clojure中,有没有一种原始的方法来实现这一目标?现在我正在使用以下功能:
(defn xinto [seq idx val]
(apply assoc seq (interleave idx val)))
Run Code Online (Sandbox Code Playgroud)
谢谢.
我刚开始学习Clojure,如果我定义以下地图:
(def distributions {:normal {:title "Normal" :mean 0 :sd 1}
:beta {:title "Beta" :a 1 :b 3}
:gamma {:title "Gamma" :rate 1/2 :shape 1}})
Run Code Online (Sandbox Code Playgroud)
我怎么写(defn get-titles [] ...)一个会返回的函数
("Normal", "Beta", "Gamma")?
在为程序员阅读R时,我看到了这个功能
oddcount <- function(x) {
k <- 0
for (n in x) {
if (n %% 2 == 1) k <- k+1
}
return(k)
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢用更简单的风格(即在lisp中)编写它
(defn odd-count [xs]
(count (filter odd? xs)))
Run Code Online (Sandbox Code Playgroud)
我看到函数长度相当于count,我可以写奇数?所以有内置的map/filter/remove类型函数吗?
读取clojure API以进行导入我看到:ns宏中的import最好导入,但是当我使用swank/slime/emacs进行编码时,我无法使用(ns ..)s-expression来获取deps进入repl,但使用(import ...)我可以.
是什么原因:导入比导入更受欢迎,是否有快速的方法将(ns ...)s-expr中的deps从我的.clj文件导入到repl?(同样的问题可以概括为:使用和:参考..谢谢)
我想定义一个在juxt中使用的函数列表,但是我在实现它时遇到了麻烦.
下面是我想要的一个例子:
(defn sin [n] (Math/sin n))
(defn cos [n] (Math/cos n))
((juxt sin cos) 4)
>> [-0.7568024953079282 -0.6536436208636119]
Run Code Online (Sandbox Code Playgroud)
现在,而不是说((juxt sin cos) 4)我宁愿说((juxt trig) 4)在哪里
(def trig [sin cos]).我尝试((apply juxt trig) 4)了一些其他的东西,但似乎没有什么可以坚持下去.谢谢!
就在Emacs邪恶的模式之上,我已经写了一个扩展模式,让我在一个单一的按键插入数学和希腊语Unicode字符.但是代码看起来像这样(数百行):
(define-key evil-unicode-state-map "a" "?")
(define-key evil-unicode-state-map "b" "?")
(define-key evil-unicode-state-map "g" "?")
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种切割所有样板的首选方法?理想情况下,我可以编写如下内容:
(setq evil-unicode-state-map
{"a" "?"
"b" "?"
"g" "?"})
Run Code Online (Sandbox Code Playgroud) 也许这是一个愚蠢的问题..但我正在尝试让我的emacs定制细粒度..是否有直接命令改变这样的窗口?
+----------------+
| |
| |
+----------------+
| |
| |
+----------------+
Run Code Online (Sandbox Code Playgroud)
至
+----------------+------------+
| | |
| | |
+----------------+ |
| | |
| | |
+----------------+------------+
Run Code Online (Sandbox Code Playgroud)
或者我是否需要开始学习elisp?