【发布时间】:2015-06-02 03:02:34
【问题描述】:
这是this follow-up question 的后续行动。 Zipp 是使用折叠的非递归、非模式匹配的 zip 实现。在无类型 lambda 演算中,我们有:
-- foldr for church encoded lists (that is, folds)
foldr cons nil list = list cons nil
zipp_left = foldr (λ x xs cont -> (cont x xs)) (const [])
zipp_right = foldr (λ y ys x cont -> (cons (pair x y) (cont ys))) (const (const []))
zipp = λ a b -> (zipp_left a) (zipp_right b)
在 Haskell 上,不可能键入这个术语,正如 @András_Kovács 所证明的那样,但 Agda 能够做到,尽管有点复杂。是否可以在 Idris 中优雅地定义这个程序?
【问题讨论】:
-
您基本上可以复制您在 Idris 中给出的答案。
标签: functional-programming idris