避免在erlang中将数字转换为字符

时间:2014-09-22 16:30:53

标签: list erlang integer

我遇到问题,只要列出的项目都不能代表某个字符,就会将列出的数字转换为字符。

我正在编写一个函数来将正整数中的所有数字分开并将它们放在一个列表中,例如:digitize(123)应该返回[1,2,3],依此类推。

以下代码可以正常使用,除非列表仅包含8&9和/或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]]的{​​{1}})

1 个答案:

答案 0 :(得分:2)

如果查看注释,您会发现shell打印数据的方式比数据本身更为严重。你的逻辑是正确的,我不会改变它。您可以在代码中引入io:format/2的一些用法,但我想这会使代码的其他部分更难使用此函数。

其他方面是改变shell设置本身。有shell:stings/1 functions禁止打印列表作为叮咬,它应该完全符合您的要求。只要记住在你完成shell的时候就把它改回来,因为当你开始使用一些“字符串”返回函数时,它会引起一些混乱。