use*_*815 4 erlang list range seq
一大早和Erlang一起玩我得到了一个奇怪的结果:
-module(bucle01).
-compile(export_all).
for(N) when N >=0 ->
lists:seq(1,N).
for(L,N) when L =< N ->
lists:seq(L,N);
for(L,N) when L > N ->
lists:reverse(for(N,L)).
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我看到了这个:
> bucle01:for(1,10).
[1,2,3,4,5,6,7,8,9,10]
> bucle01:for(10,1).
[10,9,8,7,6,5,4,3,2,1]
>bucle01:for(7,10).
[7,8,9,10]
>bucle01:for(8,10).
"\b\t\n" %% What's that !?!
>bucle01:for(10,8).
"\n\t\b" %% After all it has some logic !
Run Code Online (Sandbox Code Playgroud)
任何"Kool-Aid"到"不要喝太多"请?
Erlang中的字符串只是ASCII数字的列表.如果您的列表是数字列表或字符串,Erlang shell会尝试通过查找可打印字符来确定没有元数据.
\b(退格键),\t(制表符)和\n(换行符)都是一些常见的ASCII字符,因此shell会显示字符串而不是数字.但是,列表的内部结构完全相同.
Erlang常见问题解答也涵盖了这一点:
为什么数字列表打印不正确?
这里有一些想法可以防止这种魔法:我可以在Erlang shell中禁用小整数打印列表作为字符串吗?
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |