【问题标题】:Avoid converting numbers to characters in Erlang避免在 Erlang 中将数字转换为字符
【发布时间】: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))。

【问题讨论】:

标签: list erlang integer


【解决方案1】:

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

其他方法是更改​​外壳设置本身。有shell:strings/1 functions 禁用打印列表作为stings,它应该完全按照你的意愿做。请记住在完成 shell 内容后将其更改回来,因为当您开始使用一些“字符串”返回函数时,它可能会引起一些混乱。

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2023-03-09
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2015-04-19
    • 2010-10-09
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多