您好,所以我正在嘗試定義函式對:
pairs :: [a] -> [(a, a)]
pairs x = zip x (tail x)
但是,我使用Relude的是與普通 Prelude 相對的。這使得 tail 與Non-Empty a[a] 一起作業。當我嘗試修復它時,這導致了一些非常令人困惑的東西。將 [a] 切換為 [nonEmpty a] 等會導致問題四處移動。
關于如何更改函式以使其與 relude 一起使用的任何想法?
它似乎也有一種使用該viaNonEmpty功能的方式,但是使用它也有問題。
最終,我想要做的只是能夠獲取 [a] 并創建 [(a, a)],而 zip xs (tail xs) 方法似乎環顧四周是這樣做的慣用方式。但是,如果這種方式不可行,那么使用 relude 好吧。
非常感謝任何幫助。謝謝。
uj5u.com熱心網友回復:
您可以使用drop 1而不是tail. 這樣做更安全的原因是drop 1 [] = [], whiletail []拋出例外。
或者,您可以直接使用模式匹配:
pairs [] = []
pairs xs@(_:xs') = zip xs xs'
uj5u.com熱心網友回復:
tail如果您先處理空串列案例,則可以避免:
pairs :: [a] -> [(a, a)]
pairs [] = ...
pairs (x:xs) = zip ... ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528543.html
標籤:功能哈斯克尔
上一篇:創建自定義類的實體
