2015-10-27 40 views
-4

mystery是做什麼的?我不明白Haskell foldr

mystery xs = foldr f [] xs 

f next soFar = soFar ++ [next] 

謝謝。

+1

我堅信這是一個家庭作業問題。請提供您嘗試解決問題的方法。 – Bakuriu

+1

爲什麼大量downvotes ..請保持haskell社區友好在這裏 - 即使它的功課沒有問題 - 只是不要在你的答案一次破壞一切 - 謝謝 – Carsten

回答

1

不,foldr f [] xs =/= []。讓我們看看,

mystery xs 
    = foldr f [] xs 
    -- (assuming xs == (x:t), i.e. non-empty:) 
    = foldr f [] (x:t) 
    -- (by definition of `foldr`:) 
    = f x (foldr f [] t) 
    -- (by definition of `mystery`:) 
    = f x (mystery t) 
    = mystery t ++ [x] 

那麼,mystery做什麼?例如,它對列表[a,b,c]有什麼作用?

mystery [a,b,c] 
    = mystery [b,c] ++ [a] 
    = (mystery [c] ++ [b]) ++ [a] 
    = ((mystery [] ++ [c]) ++ [b]) ++ [a] 
    = ... 

您可以在這裏填寫圖片。