标签: clojure

如何将地图输出放入单个集合中

鉴于以下内容:

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)

我使用列表来说明,但任何收集都没问题.

clojure map

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

Clojure函数错误"键必须是整数"

我在这个函数中有一个问题,虽然它编译没有错误!

该函数获得两个具有相同长度的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)

clojure

0
推荐指数
2
解决办法
2139
查看次数

在Clojure中运行Java代码的速度与Java中的Java相同

我有以下代码:

(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

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

Clojure中的标记和类似Erlang的引用

我正在寻找具有以下功能的数据结构或在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)

clojure

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

对于clojure中的循环

    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)

for-loop clojure

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

高阶函数和简短形式

为什么我们可以写

 (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)

这是一个错误吗?

macros function clojure

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

使用clojure.algo.monads编写序列 - 可能是monad

我需要帮助写一个'sequence-maybe-m'(一个monad,它结合了一个序列monad和一个monad的行为).

规则应该是:

  • 如果任何输入为nil,则整个表达式失败.
  • 否则,像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)) 
        ;; = …

monads clojure

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

用于创建记录的Clojure宏

我写了一个用于创建记录的宏

(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)

我似乎不明白发生了什么?

macros record clojure

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

如何在Clojure中将两个seq中相同索引的元素一起添加

我有

[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索引,而是使用其值搜索它.

任何人都可以帮忙吗?

clojure

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

用于处理R的大数据的编程语言

最近我有时间学习数据可视化,作为Excel图表的替代品.我的选择是R(使用ggplot2)并且已经开始学习它.

在"R简而言之"中,约瑟夫阿德勒说:

通常,我使用像Perl这样的工具在R中使用之前预处理大文件.

我建议使用像Perl,Python或Ruby这样的脚本语言来预处理大型复杂的文本文件,并将它们转换为易于理解的形式.(作为一个方面说明,我通常写出在Excel字段名称和长度的列表,然后使用Excel公式来创建R或Perl代码加载它们.

这个想法落后于Unix哲学 - 让每个工具都能很好地完成工作,并让它们协同工作.因此,从长远来看,我打算学习:

  • R用于可视化,和
  • 另一种用于未来数据处理的编程语言.

问题出现在哪种语言学习?

我没有计算机科学背景,同时Perl对我来说太难了.我在网上做了一些搜索,发现Haskell和Clojure非常有趣.由于这里有很多程序员+统计员,我想知道,哪一个作为大数据处理目的与R一起顺利?

缺口

haskell r clojure

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

标签 统计

clojure ×10

macros ×2

for-loop ×1

function ×1

haskell ×1

map ×1

monads ×1

r ×1

record ×1