正如我所理解的,当您使用如下表达式创建新列表时,Erlang不会复制L1,它只是复制H.
L2 = [H|L1]
Run Code Online (Sandbox Code Playgroud)
Erlang是否具有持久的数据结构(请参阅持久性数据结构)dict,也就是说,当您在树中添加/删除/修改节点时,只复制了少量元素(如Clojure中)?
我正在考虑在clojure程序中使用一些Dataflow编程技术,但是我很难从使用Java,C#或其他在现实世界中使用这些技术的主流语言的项目中找到大量信息.如果有人有任何关于此事可以分享的经验,我将不胜感激.
我试图在mac os 10.6.4上安装Leiningen,遵循这里的说明 - http://alexott.net/en/clojure/ClojureLein.html.正在下载程序包,但找不到lein命令.可能是什么问题呢?
有人知道未来Guava或Java8是否会提供受更多功能实现启发的持久性集合实现,例如在Clojure或Scala中(提供快照,由于共享树结构而进行有效修改等)?
我试图使用'extend'在Clojure中使用map定义记录方法.以下适用于Clojure 1.4.0:
(defprotocol PointMethods
(add [self other])
(distance [self]))
(defrecord Point [x y]
PointMethods
(add [self other]
(Point. (+ (:x self) (:x other)) (+ (:y self) (:y other))))
(distance [self]
(Math/sqrt (+ (* (:x self) (:x self)) (* (:y self) (:y self))))))
(def p1 (Point. 2 3))
(def p2 (Point. 1 1))
(def p3 (add p1 p2))
(println p3)
(println (distance p3))
Run Code Online (Sandbox Code Playgroud)
但是这个版本失败了:
(defprotocol PointMethods
(add [self other])
(distance [self]))
(defrecord Point [x y])
(extend Point
PointMethods
{:add
(fn [self …Run Code Online (Sandbox Code Playgroud) 考虑下面的(最小)leiningen项目
./project.clj:
(defproject repro "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.5.1"]
[midje "1.5.1"]])
Run Code Online (Sandbox Code Playgroud)
./repro/src/repro/core.clj:
(ns repro.core)
Run Code Online (Sandbox Code Playgroud)
./repro/test/repro/core_test.clj:
(ns repro.core-test
(:require [repro.core :refer :all]
[midje.sweet :refer :all]))
(facts "about numbers"
(fact "trivial"
1 => 1) )
Run Code Online (Sandbox Code Playgroud)
如果我安装了leiningen midje插件,它将在命令提示符下运行,如下所示:
lein clean
lein midje
~~> All checks (1) succeeded.
Run Code Online (Sandbox Code Playgroud)
但是,如果将leiningen项目导入Intellij 12.1.5 Community Edition,则会出现大量堆栈跟踪:
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
...
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
at clojure.lang.Namespace.find(Namespace.java:188)
at clojure.core$find_ns.invoke(core.clj:3728)
at clojure.core$the_ns.invoke(core.clj:3760)
at clojure.core$ns_name.invoke(core.clj:3767)
at midje.Bootstrap$bootstrap.invoke(Bootstrap.clj:8)
at …Run Code Online (Sandbox Code Playgroud) 在Haskell中是否有任何函数,在给定Haskell语法输入的情况下,返回一个等效表达式,并扩展所有语法糖?
例如,在Clojure中,我可以传递'a给读者,它将返回(quote a),这有助于我了解这'只是quote函数的含糖形式.
在启用了UTF-8的控制台上的Linux:
Clojure 1.6.0
user=> (def c \?)
#'user/c
user=> (str c)
"?"
user=> (def c \)
RuntimeException Unsupported character: \ clojure.lang.Util.runtimeException (Util.java:221)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:221)
Run Code Online (Sandbox Code Playgroud)
我希望能够轻松地拥有一个表情丰富的表情符号Clojure应用程序,但看起来我会查找并输入表情符号代码?或者我错过了一些明显的东西?
我正在使用Linux Mint和OpenJDK. java -version显示这个:
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK Client VM (build 24.79-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
每当我运行基于Java的应用程序时 lein,我都会收到此警告:
OpenJDK Client VM warning: TieredCompilation is disabled in this release.
Run Code Online (Sandbox Code Playgroud)
这与我的兴趣无关,所以我宁愿在命令输出中看不到它.我该如何隐藏或禁用它?