【发布时间】:2014-11-16 16:51:00
【问题描述】:
每当列出的项目都不能代表字符时,我在使用 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]] for digitize(8))。
【问题讨论】:
-
另见this answer。
-
是的,您实际上并没有遇到问题。这是 Erlang 中的字符串和列表不明确的结果。 "\b\t" 与 [8,9] 相同,只是在 shell 中的打印方式不同(或在格式调用中使用 ~p 时)。