在clojure中,你有几个函数对vector和list有不同的作用.我有两个问题.
1)它有什么用?我相信clojure的创造者有很好的理由去做,但我不知道.
2)无论数据在列表或向量中,如何使这些函数的类型安全变体以相同的方式运行?
定义的函数conj具有以下行为
(conj [1 2 3] 4)
[1 2 3 4]
(conj '(1 2 3) 4)
(4 1 2 3)
Run Code Online (Sandbox Code Playgroud)
我想有一个函数my-conj具有以下行为
(my-conj [1 2 3] 4)
[1 2 3 4]
(my-conj '(1 2 3) 4)
(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
还有其他功能(cons,into,peek,pop)具有相同的行为,因此如果这种结构可以很容易地适应所有这些,那就太好了.
由于数据结构的实现方式,使它们的行为略有不同更为有效.例如,很容易在列表的开头添加项目(概念上只是将项目链接到现有列表的开头),但很难在向量的开头添加项目(概念上将现有项目移动到索引),反之亦然.
替代方案将是一致的,但最坏情况复杂度要差得多.
(请参阅http://www.innoq.com/blog/st/2010/04/clojure_performance_guarantees.html获取性能保证表)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |