List Erlang打印2列表

List Erlang打印2列表,list,functional-programming,erlang,List,Functional Programming,Erlang,我有两份清单: List1 = [1,2,3]. List2 = ["asd", "sda", "dsa"]. 如何依次打印此列表: 1 asd 2 sda 3数字减影血管造影 谢谢。有时候最好重新发明轮子。在erlang的情况下——只是为了了解递归、尾部调用以及如何使用列表 1> lists:zipwith(fun (X1, X2) -> io:format("~p ~p ", [X1,X2]) end, List1, List2). 1 "asd" 2 "sda" 3 "d

我有两份清单:

 List1 = [1,2,3].
 List2 = ["asd", "sda", "dsa"].
如何依次打印此列表:

1 asd 2 sda 3数字减影血管造影


谢谢。

有时候最好重新发明轮子。在erlang的情况下——只是为了了解递归、尾部调用以及如何使用列表

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> 
f([], []) -> 
    ok;
f([H1|R1], [H2|R2]) -> 
    io:format("~p ~p", [H1, H2]), 
    f(R1, R2).

提到这样打印的原因不会有什么坏处。这有一个有趣的参数交换解决方案:
[io:format(~p',[X])|xl;merge([H|T1],L2)->[H | merge(L2,T1)]。
(未测试)。@shk:由于两个列表中的任何一个都包含相同数量的元素,所以第一个子句的开头可以安全地写成
f([],[uu)
,其中
是“不在乎”变量,它忽略了该值。@Yasir Arsanukaev:这取决于上下文和函数的预期严格程度。更严格的版本有时会发现一些错误。还有更仁慈的版本
f([H1 | R1],[H2 | R2])->io:format(~p~p“,[H1,H2]),f(R1,R2]),f([uu2])->好。
@Hynek:Heheh确实;我完全忘记了这个特性。后一个子句用作“catch all”(如果我不混淆术语的话),并且在所有其他情况下(列表为空或大小不同)都会被调用。不过我们的函数是“防御编程”的。谢谢您的注意。:-)