Clojure 我在用atom吗?错了,还是有别的事。。。。?
基本上Clojure 我在用atom吗?错了,还是有别的事。。。。?,clojure,compiler-errors,Clojure,Compiler Errors,基本上 =>(atom?5) CompilerException java.lang.RuntimeException:无法解析符号:atom?在此上下文中,编译:(无源路径:1) =>(原子?/a) RuntimeException无效令牌:/a clojure.lang.Util.RuntimeException(Util.java:156) RuntimeException不匹配的分隔符:)clojure.lang.Util.RuntimeException(Util.java:156)
=>(atom?5)
CompilerException java.lang.RuntimeException:无法解析符号:atom?在此上下文中,编译:(无源路径:1)
=>(原子?/a)
RuntimeException无效令牌:/a clojure.lang.Util.RuntimeException(Util.java:156)
RuntimeException不匹配的分隔符:)clojure.lang.Util.RuntimeException(Util.java:156)
=>(atom?“你好,世界”)
CompilerException java.lang.RuntimeException:无法解析符号:atom?在此上下文中,编译:(无源路径:1)
有人知道发生了什么吗??
我正在使用EclipseJuno4.2,一个逆时针方向的插件 原子?这不是一个函数 你可以用
(def x (atom 5))
(instance? clojure.lang.Atom x)
我怀疑您在scheme之类的东西中将clojure
atom
与atom
混淆了
- 在这个方案中,原子是一个基本单位李>
- 在clojure中,原子是clojure的引用类型之一(如ref和var),可以进行原子更新
Clojure中的原子与其他Lisp中的原子完全不同。在经典Lisp中,atom是单个值,定义为不为null或不是cons单元格(对): 在Clojure中,atom是一种并发引用类型。Clojure中的原子可以是单值的,也可以是集合/序列,其中更新(可变状态更改)保证以原子方式进行 在Clojure中,引用类型比Lisp中的cons列表多得多,所有Java互操作集合类型都需要考虑。这使得很难对单个值定义检查 如果你真的想,最简单的检查就是看看是否有东西可以数出来。查看
(源计数)
,它引用/count和countFrom。在这里,指定了几个类/接口,我将其包含在以下函数中:
=> (defn single-valued?
[x]
(not (or (nil? x)
(.. x getClass isArray)
(some #(instance? % x) [clojure.lang.Counted
clojure.lang.IPersistentCollection
java.util.Collection
java.util.Map]))))
=> (map single-valued? [1 "foo" \a 'x true not nil])
(true true true true true true false)
=> (map single-valued? ['(1 2 3 4)
[1 2 3 4]
{:a 1 :b 2}
#{1 2 3 4}
(seq [1 2 3 4])
(seq {:a 1 :b 2})
(seq "foo")
(int-array [1 2 3 4])
(seq [])])
(false false false false false false false false false)
由于(seq[])
的计算结果为nil
,因此不将其视为单值。当然,具有多个字段的java对象以及Clojure deftypes/defrecords都将注册为这样的对象,即使它们是复合对象。您可以创建atom吗?功能如下:
(defn atom? [x]
(not (coll? x))
)
complete
函数返回作为参数传递给它的任何谓词的相反项,因此您可以使用它生成一个atom?
:
(defn atom?
[x]
((complement coll?) x))
(atom? []) ;=> false
(atom? ()) ;=> false
(atom? {}) ;=> false
(atom? 4) ;=> true
如果
atom?
不是函数,为什么list?
是函数?我可以像使用函数一样使用list?
,但atom?
不行。这一切似乎都很可疑…@Zchpyvrlist?
不仅仅是一个“类似”的函数,而是一个在标准库中显式实现的函数,并在<代码>原子?不是。
(defn atom? [x]
(not (coll? x))
)
(defn atom?
[x]
((complement coll?) x))
(atom? []) ;=> false
(atom? ()) ;=> false
(atom? {}) ;=> false
(atom? 4) ;=> true