簡體   English   中英

你如何在Haskell中編寫函數'pair'?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM