list - 避免在 Erlang 中将数字转换为字符

标签 list erlang integer

每当列出的项目都不能代表字符时,我在将列出的数字转换为字符时遇到麻烦。
我正在编写一个函数来将所有数字分隔为一个正整数并将它们放在一个列表中,例如:digitize(123)应该返回 [1,2,3]等等。
以下代码可以正常工作,除非列表仅包含 8 和/或 9:

digitize(_N) when _N =:= 0 -> [];
digitize(_N) when _N > 0 -> _H = [_N rem 10], _T = digitize(_N div 10), _T ++ _H.
例如: 而不是 digitize(8)返回 [8] ,它给了我非图形字符 "\b"digitize(89)返回 "\b\t" .这仅适用于数字 8 和 9 以及当它们单独放在列表中时。 digitize(891)将正确返回 [8,9,1]例如。
我知道这样做的原因,但如何在不改变结果的情况下解决它? (例如:在结果中包含空列表,如 [[],[8]] for digitize(8) )。

最佳答案

如果您查看评论,您会发现与数据本身相比,shell 打印数据的方式存在更多问题。你的逻辑是正确的,我不会改变它。你可以介绍一些 io:format/2 的用法进入你的代码,但我想这会让在代码的其他部分使用这个函数变得更加困难。

解决它的另一种方法是更改​​ shell 设置本身。有 shell:strings/1 functions这将禁用打印列表作为刺痛,它应该完全按照您的意愿行事。请记住在完成 shell 内容后将其改回,因为当您开始使用某些“字符串”返回函数时,它可能会引起一些困惑。

关于list - 避免在 Erlang 中将数字转换为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978873/

相关文章:

list - 检查两个列表是否以任意顺序具有相同的元素

erlang - Erlang 中确定一个项目是字符串还是列表

sockets - 为什么 socket 关闭了Erlang

java - 为什么使用整数而不是 double ?

C# ulong 溢出/下溢以某种方式允许

python - 如何将列表 "one by one"写入 python 中的二进制文件?

python - 如何比较列表中的4个连续元素?

python - 对起点和终点字符串列表进行排序

erlang - 我怎样才能知道什么时候是 erlang 中的主管重新启动的进程的最后一个周期

java - C/C++ 等价于 java Integer.toHexString