Это можно сделать в схеме / ракетке с
(apply map list (list (list 1 5) (list 2 6) (list 3 7) (list 4 8)))
который в DrRacket возвращает
'((1 2 3 4) (5 6 7 8))
По сути, вызов (apply map list <i>[a b c ... n]</i>)
(в псевдокод ), это то же самое, что вызов
(map list a b c ... n)
Список аргументов "раскрыт" , так сказать.
(lambda x x)
можно использовать и вместо list
:
(apply map (lambda x x) (list ....... ))
Это потому, что map
можно использовать с несколькими списками в качестве входных данных, а не только с одним. В таком случае количество аргументов лямбда-функции должно соответствовать количеству входных списков.
Особый случай - (lambda x ...)
, где x
не заключено в скобки. Это означает, что такая лямбда-функция может применяться к любому количеству аргументов, которые все будут собраны и переданы в в виде списка . Так что (lambda x x)
будет действовать так же, как встроенный list
, и может рассматриваться как его реализация.
И, кстати, это не «слияние», это «транспонирование».