在将Clojure的core.async与所谓的Reactive Extensions (Rx)和FRP进行比较时,我似乎有点困惑。 他们似乎也在处理类似的asynchronous性问题,所以我想知道主要的区别是什么,在哪些情况下,哪一个更受欢迎。 有人可以解释吗? 编辑:为了鼓励更深入的答案我想提出更具体的问题: Core.async允许我编写同步代码。 但据我了解,FRP只需要一层嵌套的callback(处理逻辑的所有函数都作为parameter passing给FRP API)。 似乎这两种方法都不需要callback金字塔 。 的确,在JS中我必须多次编写function() {…} ,但是主要的问题, 嵌套的callback函数在FRP中也没有了。 我得到它的权利? “ FRP与控制stream程完成消息的交stream”您能(某人)给出一个更具体的解释吗? 难道我不能像我通过频道那样通过玻璃钢的可观察端点吗? 总的来说,我明白这两种方法在历史上来自哪里,而且我也尝试过两种教程。 不过,我似乎被不明显的差异“瘫痪”了。 是否有一些代码很难用其中一种编写代码,而使用其他代码 ? 那build筑原因是什么?
我很难理解Clojure中rest和rest的区别。 官方网站关于懒惰的页面表明,偏好应该是用rest ,但是这并不能真正解释两者之间的差别。 任何人都可以提供一些见解吗?
这个周末我决定尝试一下Scala和Clojure。 我精通面向对象的编程,所以Scala很容易被用作语言,但是想要尝试函数式编程。 这是困难的地方。 我似乎无法将自己的头脑变成一种写作function的模式。 作为一个专业的function程序员,你如何解决一个问题? 给定一个值列表和一个确定的求和时间段,你将如何生成一个新的列表中的简单移动平均值? 例如:给定列表values (2.0,4.0,7.0,6.0,3.0,8.0,12.0,9.0,4.0,1.0)和period 4,函数应返回:(0.0,0.0,0.0,4.75,5.0, 6.0,7.25,8.0,8.25,6.5) 花了一天的时间仔细研究之后,我可以在Scala中得到最好的结果是: def simpleMovingAverage(values: List[Double], period: Int): List[Double] = { (for (i <- 1 to values.length) yield if (i < period) 0.00 else values.slice(i – period, i).reduceLeft(_ + _) / period).toList } 我知道这是非常低效的,我宁愿做一些事情: where n < period: ma(n) = 0 where n = period: ma(n) = […]
有什么区别; 和;; 当在Clojure开始评论? 我看到我的文本编辑器以不同的颜色对待它们,所以我认为它们在概念上有所不同。 我也看到, Marginalia对待他们是不同的: ; Stripped entirely ;; Appears in text section of marginalia (defn foobar [] ; Appears in code section of marginalia output ;; Again, appears in code section of marginalia output 6)
如何从Java进程中更改Java进程的CLASSPATH? 在你问我“你为什么要这么做?”之前 我马上解释一下。 当你运行一个Clojure REPL时,通常需要在你的CLASSPATH中加载更多的jar文件来加载一个Clojure源文件,而且我想这样做,而不必重新启动Clojure本身(当在Slime上使用它时不是一个真正的select在Emacs上)。 这就是原因,但我不希望这个问题被标记为某种奇怪的语言的某些奇怪的编辑器,并被大多数可能有答案的Java开发人员所忽视。
当我这样做的时候(/ 411 125) ,我不会用小数来表示。 我怎么做?
STM(软件事务内存)框架和语言扩展最近似乎越来越受到关注。 特别是Clojure有一个很好的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志。 GHC Haskell也有一个非常优雅的STM monad ,它也允许交易组成。 最后,为了使我自己的号angular变得有些小,我最近实现了一个Scala的STM框架,它静态地强制引用限制。 所有这些都是有趣的实验,但它们似乎仅限于这个领域(实验)。 所以我的问题是:有没有人在现实世界中看过或使用过STM? 如果是这样,为什么? 它带来了什么样的好处? 性能呢? (关于这一点,似乎有很多矛盾的信息)你会再次使用STM还是更喜欢使用一些像演员一样的其他并发抽象?
如: (println clojure-version) ?
任何想法什么???? 应该? 有内置的吗? 什么是完成这个任务的最好方法? (def v ["one" "two" "three" "two"]) (defn find-thing [ thing vectr ] (????)) (find-thing "two" v) ; ? maybe 1, maybe '(1,3), actually probably a lazy-seq
我理解Clojure中的关键字是:keyword。 但是::用于什么? 为什么它看起来像一个绑定? user=> :foo :foo user=> ::foo :user/foo