List 为什么列表不能作为函数在clojure中获取其索引元素?
Vector和map可以充当从键获取其元素的函数List 为什么列表不能作为函数在clojure中获取其索引元素?,list,clojure,List,Clojure,Vector和map可以充当从键获取其元素的函数 ([1 2 3] 2) ;=> 3 ({:a 1 :b 2} :a) ;=> 1 但为什么我不能这样做的名单 ('(1 2 3) 2) ;clojure.lang.PersistentList cannot be cast to clojure.lang.IFn(java.lang.ClassCastException) 我认为在这种情况下,错误消息是非常具有描述性的。持久列表不实现IFn,因此不能作为函数。这是Clojure的设
([1 2 3] 2) ;=> 3
({:a 1 :b 2} :a) ;=> 1
但为什么我不能这样做的名单
('(1 2 3) 2)
;clojure.lang.PersistentList cannot be cast to clojure.lang.IFn(java.lang.ClassCastException)
我认为在这种情况下,错误消息是非常具有描述性的。持久列表不实现IFn,因此不能作为函数。这是Clojure的设计选择,其原因可能是
List
数据结构不是为随机访问(通过索引获取元素)而设计的,因为此操作的复杂性是O(n)
,这比vector的O(log(n))
,,我认为在这种情况下,错误消息非常具有描述性。持久列表不实现IFn,因此不能作为函数。这是Clojure的设计选择,其原因可能是List
数据结构不是为随机访问(通过索引获取元素)而设计的,因为此操作的复杂性是O(n)
,这比vector的O(log(n))
可能重复的