鉴于以下内容:
user> (map (fn [x] (map #(* x %) '(1 2))) '(2 3))
((2 4) (3 6))
Run Code Online (Sandbox Code Playgroud)
在clojure中,如何以惯用方式进行更改,以便输出变为:
(2 4 3 6)
Run Code Online (Sandbox Code Playgroud)
我使用列表来说明,但任何收集都没问题.
我在这个函数中有一个问题,虽然它编译没有错误!
该函数获得两个具有相同长度的n向量,另一个具有长度的向量2^n和一个索引.该函数执行简单的计算,然后返回一个向量.
尝试调用该函数时出现问题.例如:
(check [1 2 3] [1 2 3] [1 2 3 4 5 6 7 8] 1)
java.lang.IllegalArgumentException: Key must be integer (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)
功能定义:
(defn check [row1 row2 arr j]
(
(def x1 (nth arr (nth row1 j)))
(def x2 (nth arr (nth row2 (- j 1))))
(def x3 (nth arr (nth row1 (- j 1))))
(if (<= x1 x2)
(
(def row1 (assoc row1 j x3))
row1
)
((def row1 (assoc row1 (- …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
(let [obs ^java.util.Observer (proxy [java.util.Observer] []
(update [^Object o ^String arg]
(println arg)))
network ^StockPriceNeuralNetwork (NeuralNetworkFactory/createStockMarketNeuralNetwork ^java.util.List [^java.util.Observer obs])]
(.trainForTime ^StockPriceNeuralNetwork network))
Run Code Online (Sandbox Code Playgroud)
问题来自Java,这个代码的运行速度比编译代码后从Clojure调用它快大约100倍.有没有什么方法可以从Clojure获得相同的Java性能,或者它总是会变慢?
我正在寻找具有以下功能的数据结构或在Clojure中模拟它的方法(通过http://www.erlang.org/course/advanced.html#refs):
引用是具有两个属性的erlang对象:
它们可以由程序创建(使用make_ref/0),并且可以比较它们的相等性.
Erlang引用是唯一的,系统保证不会通过>不同的make_ref调用创建两个引用.保证不是100% - 但是与100%相差不大的数量:-).
特别是来自Oz语言的名称数据类型(http://www.mozart-oz.org/documentation/tutorial/node3.html):
创建名称的唯一方法是调用分配了X的过程{NewName X}>一个保证全球唯一的新名称.名称不能伪造或打印.
虽然"不可伪造"的价值听起来很可疑,尤其是像Clojure这样的动态语言,这正是我所寻求的.Van Roy在CTM中使用此功能来创建所谓的"安全数据结构",然后在代码中的可信实体之间共享安全令牌:
declare NewWrapper in
proc {NewWrapper ?Wrap ?Unwrap}
Key={NewName}
in
fun {Wrap X}
fun {$ K} if K==Key then X end end
end
fun {Unwrap C}
{C Key}
end
end
% A secure declarative unbundled Stack
declare NewStack Push Pop IsEmpty in
local Wrap Unwrap in
{NewWrapper Wrap Unwrap}
fun {NewStack} {Wrap nil} end
fun {Push S E} {Wrap E|{Unwrap S}} end
fun {Pop S E}
case {Unwrap …Run Code Online (Sandbox Code Playgroud) n = (count somevector)
(foo [w] ( for [i (range n)
j (range w)
:let [n (* i j)]
:while ( < i j)
]
(println n)))
Run Code Online (Sandbox Code Playgroud)
当我运行它.
=>(foo 10)
ClassCastException clojure.lang.LazySeq无法施展clojure.lang.IFn HelloWorld.core /富
我真正想做的是有几个嵌套的for循环,并有一些ifs和其他内部做一些检查.
编辑::
事实证明,以下也会导致错误
(defn foo [arg]
(
for [ i (range (count vector)) ]
(
for [j arg ]
[i j]
)
) )
Run Code Online (Sandbox Code Playgroud)
IllegalArgumentException不知道如何从以下创建ISeq:java.lang.Long clojure.lang.RT.seqFrom
编辑::
以下作品
(defn foo [arg]
(def w arg)
(for [ …Run Code Online (Sandbox Code Playgroud) 为什么我们可以写
(defn factory-foo [] (fn [] (println "foo")))
(apply (factory-foo) [])
Run Code Online (Sandbox Code Playgroud)
但不是:
(defn factory-bar [] #((println "bar")))
(apply (factory-bar ) []) ;throws NPE
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
我需要帮助写一个'sequence-maybe-m'(一个monad,它结合了一个序列monad和一个monad的行为).
规则应该是:
(domonad sequence-maybe-m [a [1 2 3] b [1 2 3]] (+ a b))
;; => (2 3 4 3 4 5 4 5 6)
(domonad sequence-maybe-m [a [1 2 3] b nil] (+ a b))
;; => nil
(domonad sequence-maybe-m [a [1 2 3] b (range a)] (+ a b))
;; => (1 2 3 3 4 5) same as 'for'
(domonad sequence-maybe-m [a [1 2 3] b [1 nil 3]] (+ a b))
;; = … 我写了一个用于创建记录的宏
(defmacro def-entity [name & value]
`(do
(defrecord ~name (vector ~@value))
))
Run Code Online (Sandbox Code Playgroud)
我创建了一个实体
(def-entity p a b)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试创建一个具体的实例(def something(p."a""b"))时,我收到此消息java.lang.IllegalArgumentException:找不到类user.p(repl-1:40)的匹配ctor.所以我必须提供3个参数,像这样(def某人(p."a""b""x"))并且它放置像这样的值
(-> someone :a)
"b"
(-> neko :p)
nil
Run Code Online (Sandbox Code Playgroud)
我似乎不明白发生了什么?
我有
[1 1 1 1 1]
Run Code Online (Sandbox Code Playgroud)
和
[2 2 2 2 2]
Run Code Online (Sandbox Code Playgroud)
我想要
[3 3 3 3 3]
Run Code Online (Sandbox Code Playgroud)
我试过了
(for [x s1
y s2
:when (= (.indexOf s1 x) (.indexOf s2 y))]
(+ x y))
Run Code Online (Sandbox Code Playgroud)
它给出了错误的结果,因为.indexOf不返回其acctual索引,而是使用其值搜索它.
任何人都可以帮忙吗?
最近我有时间学习数据可视化,作为Excel图表的替代品.我的选择是R(使用ggplot2)并且已经开始学习它.
在"R简而言之"中,约瑟夫阿德勒说:
通常,我使用像Perl这样的工具在R中使用之前预处理大文件.
我建议使用像Perl,Python或Ruby这样的脚本语言来预处理大型复杂的文本文件,并将它们转换为易于理解的形式.(作为一个方面说明,我通常写出在Excel字段名称和长度的列表,然后使用Excel公式来创建R或Perl代码加载它们.
这个想法落后于Unix哲学 - 让每个工具都能很好地完成工作,并让它们协同工作.因此,从长远来看,我打算学习:
问题出现在哪种语言学习?
我没有计算机科学背景,同时Perl对我来说太难了.我在网上做了一些搜索,发现Haskell和Clojure非常有趣.由于这里有很多程序员+统计员,我想知道,哪一个作为大数据处理目的与R一起顺利?
缺口