有没有一种快速的方法来检查一个序列在Clojure中是否恰好有1个元素?请注意,序列可能包含nil。
如果我正确地阅读了源代码,则调用count
一个序列会花费O(n)的时间。
替代解决方案:
(and
(not (empty? a-seq))
(empty? (rest a-seq)))
医生说,调用empty?
集合coll
与调用相同(not (seq coll))
,但是他们没有指定其效率或在调用empty?
序列时会发生什么。我试图在github存储库中搜索empty?
实现方式,但是它忽略了搜索中的问号,并且对“ empty”的点击率很高。我可以想象empty?
并且rest
是O(1),但是话又回来了count
……
因为
user=> (empty? (cycle [1]))
false
(函数终止的事实),我假设empty?
在恒定时间内求值,即在恒定时间内(seq coll)
初始化一个序列。
user=> (source empty?)
(defn empty?
"Returns true if coll has no items - same as (not (seq coll)).
Please use the idiom (seq x) rather than (not (empty? x))"
{:added "1.0"
:static true}
[coll] (not (seq coll)))
nil
您的代码可以很好地完成任务。也许我会说:
user=> (defn single-elem? [s]
#_=> (and
#_=> (seq s)
#_=> (empty? (rest s))))
#'user/single-elem?
user=> (single-elem? [1])
true
user=> (single-elem? [1 2])
false
user=> (single-elem? [])
nil
user=> (single-elem? {:foo :bar})
true
user=> (single-elem? {:foo :bar :fez 42})
false
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句