我最近看到一些Clojure或Scala(对不起,我不熟悉它们),他们在列表或类似的东西上拉链。什么是zip,它是从哪里来的?什么是zip(函数式编程?)
41
A
回答
70
Zip是当你输入两个输入序列,并产生一个输出序列,其中来自同一位置的输入序列中的每两个元素都使用某个函数进行组合。在Haskell一个例子:
输入:
zipWith (+) [1, 2, 3] [4, 5, 6]
输出:
[5, 7, 9]
以上是更通用的定义;有时,zip
具体指的是将元素组合为元组。例如。在Haskell再次:
输入:
zip [1, 2, 3] [4, 5, 6]
输出:
[(1, 4), (2, 5), (3, 6)]
而且更宽泛的版本被称为 “拉链带”。您可以将“zip”视为“zipWith”的特例:
zip xs ys = zipWith (\x y -> (xs, ys)) xs ys
19
zip是一种常见的函数式编程方法,如地图或折叠。你会发现这些函数在早期的Lisp中一直到ruby和python。它们旨在对列表执行常见的批处理操作。
在这种特殊情况下,zip会带两个列表并从这些列表中创建一个新的元组列表。例如,假设你有一个带有(1,2,3)和另一个带有(“一个”,“两个”,“三个”)的列表 如果你将它们压缩在一起,你会得到List( 1, “1”),(2, “两节”),(3, “三化”))
或阶命令行,你会得到:
scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))
当我第一次看到它在Python中,不知道函数式编程,我认为它与压缩格式有关。在我学习了更多关于函数式编程的知识后,我越来越多地使用它。
6
帕维尔的回答非常多地描述它。我只是提供了一个F#例如:
let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
的z
值将是包含项目的元组在相同的位置从两个序列的序列:
[(1, "hello"); (2, "world")]
7
你可以使用下面的代码在Python:
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
9
Unfortunatley我没有足够的积分,甚至离开顶部答案评论,但
zip xs ys = zipWith xs ys (\x y -> (xs, ys))
是错误,它应该是:
zip xs ys = zipWith (\x y -> (x,y)) xs ys
或者干脆:
zip = zipWith (\x y -> (x,y))
相关问题
- 1. python中zip的反函数是什么?
- 2. 为什么函数式编程很好?
- 3. 函数式编程的好处是什么?
- 4. 组合性在函数式编程中是什么意思?
- 5. 函数式编程中的副作用是什么?
- 6. 什么是“不可变变量”意味着函数式编程
- 7. 什么是另一种编写python3 zip的方式
- 8. ZIP代表什么(压缩格式,而不是邮政编码)
- 9. 什么是数据流中的python zip函数的等价物?
- 10. 什么取代了函数式编程中的MVC模式?
- 11. 函数式编程函数
- 12. Java:如何编写`zip`函数?什么应该是返回类型?
- 13. 以下函数式编程模式的正确术语是什么?
- 14. 什么是编码技术叫?函数[]()
- 15. 函数式编程
- 16. 函数式编程和数据库交互的最佳实践是什么?
- 17. 在编程中,什么是表达式?
- 18. 什么是正式编程语言?
- 19. 函数式编程SOLID用于函数式编程
- 20. 以无点式编写函数的一般方案是什么?
- 21. 函数式编程教程
- 22. 为什么在main中隐式声明函数? C编程
- 23. 什么自平衡树在函数式编程中最简单?
- 24. 函数式编程中的currying有什么价值?
- 25. 什么是流行的“网络就绪”函数式编程语言?
- 26. 分叉列表(函数式编程)的操作的正确术语是什么?
- 27. 什么是用于学习函数式编程的良好用例?
- 28. android:为alertdialog项目编写函数的过程是什么?
- 29. actionscript函数中的线程是什么?
- 30. 什么是Spring的元数据编程?
Scala中不等价的。在scala中,你将不得不做一个zip,然后一张地图 – drudru 2009-07-12 08:39:13
谢谢,现在我明白了! – 2009-07-12 08:39:54
那么,它并不是真的“不等价”,它只是说Scala没有`zipWith`。显然,你可以按照`zipWith`来定义`zip`,或者``zip`和`map`来定义`zipWith`。 – 2009-07-12 08:41:37