【发布时间】:2016-05-24 21:07:19
【问题描述】:
给定以下代码
pair :: [String] -> [(String,String)]
pair [] = []
pair (x:xs)= zip [x] xs ++ pair xs
如何使用 Fold 重写它以避免重复?
【问题讨论】:
-
你已经尝试过什么了吗?
-
我试过这个 f= foldl (++) [] 一个对列表并返回一个对列表
-
酷。最好将您的代码放入您的问题中,以便其他人知道可能导致问题/错误的原因。您还可以输入您期望的输出吗?您使用
fold的版本返回的结果与您的原始代码不同。 -
如果“避免重复”是指编写更少的代码,甚至可以避免使用
fold并尝试类似:zip xs (tail xs) -
当
x:xs的递归分支仅依赖于x和f xs时,您可以使用foldr。你的也依赖于xs。 (可以使用更复杂的折叠,无论如何都可以实现,但它不可读)
标签: haskell functional-programming