每当列出的项目都不能代表字符时,我在将列出的数字转换为字符时遇到麻烦。
我正在编写一个函数来将所有数字分隔为一个正整数并将它们放在一个列表中,例如: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/