发布于 2010-04-07 05:13:04
(map vector '(1 2 3) '(4 5 6))
做你想做的事:
=> ([1 4] [2 5] [3 6])
Haskell需要一个zipWith
(zipWith3
,zipWith4
,...)集合函数,因为它们都需要是特定类型的;特别是,它们接受的输入列表的数量需要固定。( zip
,zip2
,zip3
,...系列可以被看作是zipWith
系列的一个特化)。
相比之下,Clojure和其他Lisp对可变参数函数有很好的支持;map
就是其中之一,可以用类似于Haskell的方式用于“元组”
zipWith (\x y -> (x, y))
在Clojure中构建"tuple“的惯用方法是构造一个简短的向量,如上所示。
(为了完整起见,请注意,具有一些基本扩展的Haskell确实允许使用可变的are函数;不过,使用它们需要对语言有很好的理解,而普通的Haskell 98可能根本不支持它们,因此固定的are函数对于标准库是更好的。)
发布于 2013-07-23 17:55:25
(partition 2 (interleave '(1 2 3) '(4 5 6)))
=> ((1 4) (2 5) (3 6))
或者更一般地说
(defn zip [& colls]
(partition (count colls) (apply interleave colls)))
(zip '( 1 2 3) '(4 5 6)) ;=> ((1 4) (2 5) (3 6))
(zip '( 1 2 3) '(4 5 6) '(2 4 8)) ;=> ((1 4 2) (2 5 4) (3 6 8))
发布于 2010-04-07 05:17:38
(map vector [1 2 3] [4 5 6])
https://stackoverflow.com/questions/2588227
复制相似问题