2016-05-02 98 views
0

我有這樣的功能:哈斯克爾交換嵌套列表

swap [] = [] 
swap [a] = [a] 
swap a = last a : (init . tail $ a) ++ [head a] 

如果我用這個有一個名單列表上,它只是轉身每個列表,而不是在每個列表中的元素。我在這裏錯過了什麼?

+3

也許你想使用'地圖交換'而不是'交換'列表的列表 – Carsten

+0

哦,我的,謝謝。沒想到它是那麼簡單:) – PythonUserNew

+0

你是什麼意思*轉身*。你的'swap'功能只能交換列表中的頭部和尾部。 –

回答

1

swap需要一個事物的列表,並交換其最後一個元素的第一個元素。由於根本沒有任何關於在內部尋找的內容,所以它絕對不會修改列表內的任何元素。

但是,如果您有一個事項列表,並且您想對列表中的每個項目執行一些修改,那麼已經有一個功能:map。並且您想要執行的修改是swap,那麼讓我們看看這些類型是如何排列的。

 map :: ( a -> b) -> [a] -> [b] 
    swap :: [a] -> [a] 
map swap ::     [[a]] -> [[a]] 

所以map swap需要列出清單,並交換各自的子表,而根本改變「較大」列表中的順序。