P14 - 复制每个元素

2026-09-07 00:00    #Haskell   #99题   #列表  

P14 - 复制每个元素

Duplicate elements of a list

官方模块: Problems.P14 核心函数: dupli


← P13 直接实现游程编码 | P15 每个元素重复 N 次 →


题目描述

将列表中的每个元素复制一份,即每个元素在结果中连续出现两次。

函数签名

1dupli :: [a] -> [a]

思路

遍历列表,对每个元素输出两次:x : x : dupli xs

实现

方法一:递归

1dupli :: [a] -> [a]
2dupli []     = []
3dupli (x:xs) = x : x : dupli xs

最直接的递归,每个元素放两次。

方法二:concatMap

1dupli :: [a] -> [a]
2dupli = concatMap (\x -> [x, x])

或者更简洁地:

1dupli = concatMap (replicate 2)

方法三:列表推导

1dupli xs = [x | x <- xs, _ <- [1, 2]]

_ <- [1, 2] 让每个 x 被取两次。

测试

1>>> dupli [1, 2, 3]
2[1,1,2,2,3,3]
3
4>>> dupli []
5[]
6
7>>> dupli "hi"
8"hhii"

参考


← P13 直接实现游程编码 | P15 每个元素重复 N 次 →