2015-05-05 48 views
1

我是哈斯克爾的新手,所以請耐心等待。在哈斯克爾的元組內編輯列表中的第一個元素

是否可以刪除元組內的列表的第一個元素?

因此,如果我們有這樣的:

function:: [([x], y)] -> [([x], y)] 

我們可以編輯列表,以便該列表的第一個元素被刪除?所以,像元組:

[([1,2,3], 4), ([5,6,7], 8), ([9,10,11,12], 13), ([14,15], 16)] 

成爲

[([2,3], 4), ([6,7], 8), ([10,11,12], 13), ([15], 16)] 

或者這是不可能的,我是否浪費了我的時間試圖找出這個問題?

+0

是的,這是可能的。你的類型簽名本身就表明這樣的事情是可能的。 – Sibi

+0

那麼你會怎麼處理呢? – Lincoln

回答

1

首先寫入更簡單的函數([x],y) -> ([x],y)。像這樣的東西可以工作:

f ((x:xs), y) = (xs, y) 

當列表爲空時,您需要決定如何處理。一種選擇是再次返回空列表:

f ([], y) = ([], y) 

另一種方法是爲tail功能確實在這種情況下,你可以只使用你的整個實施產生錯誤。

f (xs, y) = (tail xs, y) 

接下來,你可以使用一個叫做map高階功能,讓您的最終功能。它的類型是​​3210。如果您通過f作爲第一個參數,那麼ab都是([x],y)

相關問題