[英]How do you write the function 'pairs' in Haskell?
對函數需要做這樣的事情:
pairs [1, 2, 3, 4] -> [(1, 2), (2, 3), (3, 4)]
pairs [] = []
pairs xs = zip xs (tail xs)
你可以走得那么遠
import Control.Applicative (<*>)
pairs = zip <*> tail
但
pairs xs = zip xs (tail xs)
可能更清楚。
僅僅為了完整性,使用顯式遞歸的更“低級”版本:
pairs (x:xs@(y:_)) = (x, y) : pairs xs
pairs _ = []
構造x:xs@(y:_)
表示“具有頭部x
的列表,以及具有至少一個元素y
的尾部xs
”。 這是因為y
既可以作為當前對的第二個元素,也可以作為下一個元素的第一個元素。 否則,我們必須為長度為1的列表創建一個特例。
pairs [_] = []
pairs [] = []
pairs (x:xs) = (x, head xs) : pairs xs
打電話給連續數字的阿茲特克神:
import Control.Monad (ap)
import Control.Monad.Instances() -- for Monad ((->) a)
foo = zip`ap`tail $ [1,2,3,4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.