标签: clojure

在Clojure中代表一棵树

在Clojure中表示树的惯用方法是什么?例如:

     A
    / \
   B   C
  /\    \
 D  E    F
Run Code Online (Sandbox Code Playgroud)

性能并不重要,树木不会超过1000个元素.

clojure data-structures

43
推荐指数
2
解决办法
8950
查看次数

有人可以用简单的术语解释Clojure的不引号拼接吗?

我正在撞墙试图理解一些使用非引号拼接的Clojure宏,我似乎无法找到任何需要它们的明显扩展.任何人都可以用虚拟术语向我解释一下吗?

clojure

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

什么是Clojure时间和日期库?

我在http://clojure.org/libraries找不到处理时间和日期的库.有没有,或者这是我必须弄清楚如何直接用Java做的事情?

clojure

43
推荐指数
2
解决办法
2万
查看次数

Clojure多方法与协议

我是Clojure新手并且正在寻找何时使用协议以及何时使用多方法的一些具体示例.我知道协议通常适用于创建类型层次结构和典型的OOP事物,它们是在多方法之后添加到语言中的,并且协议通常具有更好的性能,所以我的问题是:

协议是否意味着取代多方法?如果没有,你能给我一个例子,我会使用多方法而不是协议吗?

clojure multimethod

43
推荐指数
3
解决办法
6099
查看次数

如何在Clojure中启动一个线程?

我已经阅读了很多关于Clojure在并发性方面有多棒的内容,但我读过的教程中没有一个实际上解释了如何创建一个线程.你刚才做(.start(Thread.func)),还是有另外一种我错过的方式?

concurrency multithreading clojure

42
推荐指数
5
解决办法
2万
查看次数

在Clojure中开发RESTful Web服务的良好起点是什么?

我正在寻找轻量级的东西,至少应该支持以下功能:

  • 支持通过元数据轻松定义操作
  • 将请求中的参数提取到clojure映射或作为函数参数的包装器
  • 支持多种形式的身份验证(基本,表单,cookie)
  • 基于api方法元数据的基本授权
  • 会话对象包装在clojure映射中
  • 从REPL实时编码(无需重启服务器)
  • 将返回值自动序列化为json和xml
  • 有好的(可插入的)url参数处理(例如/ action/par1/par2而不是/ action?par1 = val1&par2 = val2)

我知道为这些选项中的每一个推出自己的微框架相对容易,但是如果像这样的东西已经存在,为什么要重新发明轮子呢?特别是如果它是:

  • 活跃项目的贡献者/用户数量不断增加
  • 至少有在线基础文档和教程.

rest frameworks web-services clojure

42
推荐指数
2
解决办法
8757
查看次数

Clojure懒惰序列使用

我无法理解如何在Clojure中创建一个懒惰的序列.

宏的文档对我来说一点也不清楚:

用法:(lazy-seq&body)获取一个返回ISeq或nil的表达式体,并生成一个Seqable对象,该对象仅在第一次调用seq时调用body,并将缓存结果并在随后的所有内容中返回seq电话.

我见过的所有例子似乎都是这样的:

; return everything in the sequence starting at idx n
(defn myseq-after-n [n]
  (...)
)

(def my-lazy-seq
  (lazy-seq (conj [init-value] (myseq-after-n 2)))
)
Run Code Online (Sandbox Code Playgroud)

所以,我没有得到的第一件事是,因为lazy-seq不在调用conj之外,它是如何阻止conj在评估时生成无限序列的?

我的第二个问题是,懒惰的序列定义总是采用这种一般形式吗?

functional-programming clojure lazy-evaluation

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

Java和Clojure与Leiningen合作

是否有可能在使用leiningen的项目中与Clojure一起轻松管理和编译本机Java类?

我工作在一个相当低的水平(使用netty nio),并认为一些管道类实际上更容易处理作为原始java在构造代码和性能方面.

java integration clojure leiningen clojure-java-interop

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

是否有用于更新嵌套数据结构的Haskell习惯用法?

假设我有以下数据模型,用于跟踪棒球运动员,球队和教练的统计数据:

data BBTeam = BBTeam { teamname :: String, 
                       manager :: Coach,
                       players :: [BBPlayer] }  
     deriving (Show)

data Coach = Coach { coachname :: String, 
                     favcussword :: String,
                     diet :: Diet }  
     deriving (Show)

data Diet = Diet { dietname :: String, 
                   steaks :: Integer, 
                   eggs :: Integer }  
     deriving (Show)

data BBPlayer = BBPlayer { playername :: String, 
                           hits :: Integer,
                           era :: Double }  
     deriving (Show)
Run Code Online (Sandbox Code Playgroud)

现在让我们说经常是牛排狂热分子的经理想要吃更多的牛排 - 所以我们需要能够增加经理人饮食中的牛排含量.以下是此功能的两种可能实现:

1)这使用了大量的模式匹配,我必须得到所有构造函数的所有参数排序正确...两次.它似乎不会很好地扩展或者非常易于维护/读取.

addManagerSteak :: BBTeam -> BBTeam
addManagerSteak (BBTeam …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming static-typing clojure

42
推荐指数
3
解决办法
7233
查看次数

是不是与Clojure原则相反的core.async?

我见过很多Clojure程序员热衷于新的core.async库,虽然看起来非常有趣,但我很难看到它是如何符合Clojure原则的,所以我有这些问题:

  1. 它在任何地方都使用可变状态,因为函数名称通过带有感叹号来表示,例如alt!,put!,>!和其他.如果您从频道中输入或获取值,则会在该位置修改该频道.是否与Clojure哲学相反,它更倾向于使用不可变数据结构,纯函数等等?或者是core.async仅在无法避免可变事物的情况下使用?
  2. 因为"go"是一个宏(从而修改代码结构)并确保"<!" 直接在go-block中使用,不能使用"<!" 在另一个函数里面,像这样:

    (defn take-and-print [c]
     (println (<! c)))
    
    (def ch (chan 1))
    (>!! ch 123)
    
    (go (take-and-print ch))
    
    Assert failed: <! used not in (go ...) block
    
    Run Code Online (Sandbox Code Playgroud)

    在我看来,这可以防止简单性和可组合性.为什么不是问题?

  3. 也许作为前两个问题的结果,core.async的许多代码使用较低级别的构造,例如loop/recur而不是map/filter/reduce.这不是倒退吗?

我在哪里错过了这一点?

提前致谢.

clojure core.async

42
推荐指数
4
解决办法
5798
查看次数