У меня есть 2 списка:Erlang печать 2 Список
List1 = [1,2,3].
List2 = ["asd", "sda", "dsa"].
Как я могу напечатать этот список в следующей очереди:
1 ASD 2 SDA 3 АСС
Спасибо.
У меня есть 2 списка:Erlang печать 2 Список
List1 = [1,2,3].
List2 = ["asd", "sda", "dsa"].
Как я могу напечатать этот список в следующей очереди:
1 ASD 2 SDA 3 АСС
Спасибо.
1> lists:zipwith(fun (X1, X2) -> io:format("~p ~p ", [X1,X2]) end, List1, List2).
1 "asd" 2 "sda" 3 "dsa" [ok,ok,ok]
2>
Еще раз спасибо) – 0xAX
иногда лучше изобретать велосипед. в случае erlang - просто понять рекурсию, хвостовые звонки и как работать со списками.
f([], []) ->
ok;
f([H1|R1], [H2|R2]) ->
io:format("~p ~p", [H1, H2]),
f(R1, R2).
@shk: И поскольку любой из списков содержит одинаковое количество элементов, глава первого предложения может быть безопасно записана как 'f ([], _)', где '_' является переменная «не волнует», которая игнорирует значение. –
хорошая точка, спасибо – keymone
@ Ясир Арсанукаев: Это зависит от контекста и ожидаемой строгости функции. Более строгая версия иногда может ловить некоторые ошибки. Существует также более доброжелательная версия 'f ([H1 | R1], [H2 | R2]) -> io: format (" ~ p ~ p ", [H1, H2]), f (R1, R2); f (_, _) -> ok.' –
Упоминание причины такой печати не повредит. –
Это веселое решение для обмена аргументами: '[io: format (" ~ p ", [X]) || X <- merge (List1, List2)] 'где' merge ([], L) -> L; слияние ([H | T1], L2) -> [H | merge (L2, T1)]. '(не проверено). –