Рэкет: преобразование двух списков в список пар

В Racket есть несколько методов преобразования двух списков в список пар. В этой статье блога вы познакомитесь с различными подходами, приведя попутно примеры кода. К концу вы получите четкое представление о различных методах выполнения этой задачи в Racket.

Метод 1. Использование mapи cons:
Один простой метод – использовать функцию mapвместе с . 9функция. Функция mapприменяет заданную процедуру к соответствующим элементам одного или нескольких списков, а функция consсоздает пару из двух значений.

(define (pair-up-lists lst1 lst2)
  (map cons lst1 lst2))

Пример использования:

(pair-up-lists '(1 2 3) '(a b c))  ; Output: '((1 . a) (2 . b) (3 . c))

Метод 2. Использование рекурсивной функции.
Другой подход предполагает написание рекурсивной функции для объединения списков элемент за элементом.

(define (pair-up-lists lst1 lst2)
  (cond
    [(or (empty? lst1) (empty? lst2)) '()]
    [else (cons (list (first lst1) (first lst2))
                (pair-up-lists (rest lst1) (rest lst2)))]))

Пример использования:

(pair-up-lists '(1 2 3) '(a b c))  ; Output: '((1 a) (2 b) (3 c))

Метод 3: использование понимания for/list.
Racket предоставляет понимание for/list, которое позволяет генерировать список на основе заданного шаблона. Мы можем использовать эту функцию, чтобы объединить два списка в список пар.

(define (pair-up-lists lst1 lst2)
  (for/list ([x lst1] [y lst2])
    (cons x y)))

Пример использования:

(pair-up-lists '(1 2 3) '(a b c))  ; Output: '((1 . a) (2 . b) (3 . c))