2016-03-05 29 views
-4

我有以下哈斯克爾方法哈斯克爾:定義使用展開地圖功能

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)) 

我怎樣才能用這個給定的展開方法定義正序幕映射f X方法。

回答

3

如果定義:

map' :: (a -> b) -> [a] -> [b] 
map' f = unfold null (f.head) tail 

然後

\> map' show [1..5] 
["1","2","3","4","5"] 
\> map' (+1) [] 
[]