Создать список путем умножения объекта на [1..n]

Я все еще не в Haskell и мне нужна подсказка для следующей функции.

Я хочу создать список, добавив каждое умножение пары:

all :: Int -> (Int,Int) -> [(Int, Int)] 
all n, pair = ...

Например, n = 3, пара (1,2) => [(1,2), (2,4), (3,6)], которая расширяется до [(1 * (1,2)), ((2 * (1,2)), (3 * (1,2))]

Я знаю, что-то с x*pair x <- [1..n] и x*pair но я не знаю, какая встроенная функция подходит для этого!

Всего 1 ответ


Вам необходимо выполнить умножение отдельно для элементов в кортежах, а затем воссоздать кортеж. Вы можете использовать fst и snd чтобы получить элементы.

all n pair = [(x*(fst pair), x*(snd pair)) | x <- [1..n]]

Сопоставление с образцом - это еще один распространенный способ доступа к элементам кортежа.

all n (a, b) = [(x*a, x*b) | x <- [1..n]]