【问题标题】:Splitting array in erlang在erlang中拆分数组
【发布时间】:2014-04-29 02:35:06
【问题描述】:

我写了一个简单的函数把一个数组分成两部分。

split([], [], []) -> [[], []];
split([], [], Part2) -> [[], Part2];
split([], Part1, []) -> split([], [], Part1);
split([], Part1, Part2) -> [Part1, Part2];
split([Head | Tail], Part1, Part2) -> split(Tail, Part2, [Head | Part1]).

我尝试使用我的函数,但遇到了一个巨大的问题,请参见下图。该函数适用于很多示例,但如果用于输入[4,9,2],[],[],我会得到以下奇怪的结果["\t",[2,4]]

问题出在哪里? 感谢您的回答和时间。

【问题讨论】:

  • Erlang 中的字符串只是 ASCII 范围内的整数列表。 ASCII 码 9 表示制表符,所以列表 [9] 和字符串 "\t" 对于 Erlang 来说是相等的。
  • 感谢您的回答。你觉得这种行为正常吗?
  • 正如 achydragon 所说,2 "\t" 和 [9] 是打印相同值的两种不同方式。这是 erlang shell 中的一个选择,但它对您可能希望在程序中使用此结果的方式没有影响,所以是的,这是正常的。可以比较io:format("~w~n",[[9]]).io:format("~p~n",[[9]]).的结果
  • ~p“漂亮地打印它的值,这是它所做的事情之一。它还智能地将长输出分成多个缩进行

标签: functional-programming erlang erlang-shell


【解决方案1】:

这是erlang的一种行为:

8> [9].  
"\t"
9> ["\t"].
["\t"]

这是因为,从 erlang 的 POV 来看,字符串只是一系列数字。如果数字对应于可打印的字符,erlang 将尝试将数字打印为字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多