Haskell:使用展开定义地图功能

Joh*_*ohn -3 haskell functional-programming haskell-platform

我有以下 Haskell 方法

unfold :: (a -> Bool) -> (a -> b) -> (a -> a) -> a -> [b]
unfold p h t x
    | p x       = []
    | otherwise = (h x):(unfold p h t (t x))
Run Code Online (Sandbox Code Playgroud)

我如何使用这个给定的展开方法定义常规的前奏图 fx 方法。

beh*_*uri 6

如果你定义:

map' :: (a -> b) -> [a] -> [b]
map' f = unfold null (f.head) tail
Run Code Online (Sandbox Code Playgroud)

然后

\> map' show [1..5]
["1","2","3","4","5"]
\> map' (+1) []
[]
Run Code Online (Sandbox Code Playgroud)