Вы можете, конечно, обработать любой список, даже список кортежей в понимании списка.Это форма, которая отличается.Вы видите в двух великих ответах перед этим, форма (a, b) или (x, y).Они оба означают одно и то же.Они означают два элемента в кортеже.Проблема с обработкой формы кортежа состоит в том, что выходные данные представляют собой отдельные списки элементов.Вот почему concat
так ценен.
Мне очень нравится понимание списков, и классическая форма для выравнивания списков любого вида с использованием списков приведена выше.
IЯ относительно новичок в Haskell и не мог понять, как fold
s может создать список, а не одно значение, например sum
или product
.
Подобные вопросы неоценимы, потому что они помогают мне понять.
Версия foldr
приводит к списку.Список, который вы хотите.Почему это список, а не одно значение?Это потому, что foldr
создает серию последовательно все больших и больших списков, последний из которых является ответом.
Вот foldr
версия функции для выравнивания списка кортежей.
foldr (\(a,b) l-> a:b:l) [] [(1,2),(3,4),(5,6)]
[1,2,3,4,5,6]