2011-01-25 3 views
4

У меня есть 2 списка:Erlang печать 2 Список

List1 = [1,2,3]. 
List2 = ["asd", "sda", "dsa"]. 

Как я могу напечатать этот список в следующей очереди:

1 ASD 2 SDA 3 АСС

Спасибо.

+0

Упоминание причины такой печати не повредит. –

+0

Это веселое решение для обмена аргументами: '[io: format (" ~ p ", [X]) || X <- merge (List1, List2)] 'где' merge ([], L) -> L; слияние ([H | T1], L2) -> [H | merge (L2, T1)]. '(не проверено). –

ответ

5
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> 
+0

Еще раз спасибо) – 0xAX

6

иногда лучше изобретать велосипед. в случае erlang - просто понять рекурсию, хвостовые звонки и как работать со списками.

f([], []) -> 
    ok; 
f([H1|R1], [H2|R2]) -> 
    io:format("~p ~p", [H1, H2]), 
    f(R1, R2). 
+0

@shk: И поскольку любой из списков содержит одинаковое количество элементов, глава первого предложения может быть безопасно записана как 'f ([], _)', где '_' является переменная «не волнует», которая игнорирует значение. –

+0

хорошая точка, спасибо – keymone

+2

@ Ясир Арсанукаев: Это зависит от контекста и ожидаемой строгости функции. Более строгая версия иногда может ловить некоторые ошибки. Существует также более доброжелательная версия 'f ([H1 | R1], [H2 | R2]) -> io: format (" ~ p ~ p ", [H1, H2]), f (R1, R2); f (_, _) -> ok.' –

Смежные вопросы