Haskell List函数(map,zip等)和修复

问题描述 投票:-1回答:1

我尝试学习haskell并使用函数修复重写标准列表操作(map,foldr,zip,iterate等)。我有重复的例子:

repeat a = fix $ \xs -> a : xs

它进一步简化了

repeat a = fix (a:)
repeat = fix . (:)

任何人都可以帮我地图吗?对不起我的坏人,并提前感谢你。

list haskell y-combinator
1个回答
6
投票

要使用fix,需要在表单中编写递归定义

map = .... something involving map .... 

然后,我们让

map = fix (\m -> .... something involving m ....)

例如,

map = \f xs -> case xs of
   []   -> []
   y:ys -> f y : map f ys

所以,

map = fix (\m f xs -> case xs of
   []   -> []
   y:ys -> f y : m f ys)

或者,由于参数f对于每个递归调用都是相同的,我们可以让

map f = \xs -> case xs of
   []   -> []
   y:ys -> f y : map f ys

并获得

map f = fix (\m xs -> case xs of
   []   -> []
   y:ys -> f y : m ys)
© www.soinside.com 2019 - 2024. All rights reserved.