實施
replaceHead :: [a] -> [a] -> [a]
功能,正如標題所說。例如:
replaceHead "okay" "mom" == "mkay"
或者:
replaceHead [0,2,3] [1,20,30] == [1,2,3]
我嘗試使用
replaceHead a b = [head b, a]
哪個不編譯。關于如何獲取 b 的第一個元素,將其與 a 的第一個元素交換,然后回傳該串列,我沒有更多想法。你能幫我嗎?感謝您提前回答!
uj5u.com熱心網友回復:
問題是這a是一個專案串列,而head b是一個專案。因此,從那時起您就不能使用第一個專案,例如 an ,而是an 。為了滿足示例輸出,我們還需要處理第一個串列的尾部,而不是整個第一個串列。[head b, a]Inta[Int]
但是,您可以tail a使用(:) :: a -> [a] -> [a]資料建構式預先添加串列:
replaceHead :: [a] -> [a] -> [a]
replaceHead a b = head b : tail a
在這里使用模式匹配可能會更好,并將其實作為:
replaceHead :: [a] -> [a] -> [a]
replaceHead (_:as) (b:_) = b : as
在這種情況下,您可能應該定義第一個和/或第二個串列為空的情況:
replaceHead :: [a] -> [a] -> [a]
replaceHead (_:as) (b:_) = b : as
replaceHead [] [] = …
replaceHead [] (b:bs) = …
replaceHead (a:as) [] = …
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316827.html
