2014-09-22 116 views
2

如果没有列出的项目也无法表示字符,那么erlang会将列出的数字转换为字符,我遇到问题。避免将数字转换为erlang中的字符

我正在写一个函数来分隔一个正整数中的所有数字,并将它们放在一个列表中,例如: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]]的结果中包含digitize(8)的空白列表)

+2

可能重复的[我可以禁用打印列表的小整数作为字符串在Erlang壳?](http://stackoverflow.com/questions/2348087/can-i-disable-printing-lists-of-small-integers -as-strings-in-erlang-shell) – legoscia 2014-09-22 16:32:58

+2

另请参阅[此答案](http://stackoverflow.com/a/7372958/113848)。 – legoscia 2014-09-22 16:33:51

+1

是的,你实际上没有问题。这是Erlang中字符串和列表含糊不清的结果。 “\ b \ t”与[8,9]相同,只在shell中打印不同(或者在格式调用中使用〜p时)。 – 2014-09-22 16:37:17

回答

2

如果您查看注释,您将看到shell比打印数据本身更麻烦。你的逻辑很好,我不会改变它。你可以在你的代码中引入一些io:format/2的用法,但我想这会让代码的其他部分更难使用这个函数。

其他方法是更改​​shell设置本身。有shell:stings/1 functions禁用打印列表作为蜇,它应该做你想要的。只要记住要在完成shell的工作时将它改回来,因为当你开始使用一些“字符串”返回函数时它可能会引入一些混淆。

相关问题