Haskell新手在这里.我的观察是:
zip
并且zip3
是重要的功能 - 包含在前奏中,由许多其他语言实现,代表了数学中的常见操作(换位)
在参数结构方面不通用
易于用传统语言实现 - C或C++(比如20小时工作); python已经将它作为内置版本
为什么zip
这么受限制?有抽象,概括吗?n大小的元组出了什么问题?
因为建议的副本回答了大部分内容,所以我将重点关注您的后续评论中的问题.
1)为什么固定n = 2的标准实现
zipWith
用于2个参数,repeat
用于0个参数.这足以获得任意的拉链.例如,1参数版本(也称为map
)可以实现为
map f = zipWith ($) (repeat f)
Run Code Online (Sandbox Code Playgroud)
和3参数版本
zipWith3 f = (.) (zipWith ($)) . zipWith f
Run Code Online (Sandbox Code Playgroud)
等等.较大拉链的实现有一个很好的模式(从这个小样本大小来看,这一点并不明显).这个结果类似于CT中的结果,即任何具有0元和2元产品的类别都具有所有有价值的产品.
我想,答案的另一半是类型级数(这是任意arips拉链最常用的实现技术)是可能的但是使用起来很烦人,并且避免它们往往会降低术语和类型级别噪声.
2)我需要传递列表的数量,这是笨重的
使用ZipList
.你不需要传递列表的数量(虽然你需要为每个列表编写一个中缀运算符 - 我认为这是一个非常轻的要求,因为即使在Python中你需要在每个列表之间使用逗号).
凭经验:我没有发现任意性拉链这样的共同需求,我会将其标记为"笨重".
3)即使我定义了自己的zip,也会与Prelude.zip发生冲突.
那么选择另一个名字......?
归档时间: |
|
查看次数: |
180 次 |
最近记录: |