【问题标题】:problems in printing each digit of a number in erlang在erlang中打印数字的每个数字的问题
【发布时间】:2015-09-20 01:31:45
【问题描述】:

我正在尝试编写一个程序,该程序将读取一个数字,然后将该数字的每个数字输出到一个列表中。但是,在我尝试使用数字 8 和 9 之前,大多数情况看起来都很好。程序只输出 \b \t 而不是。
如果输入的数字包含8或9,同时还有其他数字,例如283,则正常打印。否则,如果只有 8 或 9,例如899,那么它将给我 8 和 9 的二进制表示(如果我没记错的话)。
我的程序如下:
digitize(0)-> 0;
digitize(N) when N < 10 -> [N];
digitize(N) when N >= 10 -> digitize(N div 10)++[N rem 10].

【问题讨论】:

  • 你不需要第一个子句,事实上如果你传递一个 0 它会返回错误的结果:digitize(0) 应该返回[0],但是由于那个子句它返回0 .如果您放弃该条款并保留其他两个条款,您会得到正确的答案。此外,您不需要对最后一个子句进行保护,因为之前的 N < 10 已经为最后一个子句留下了大于或等于 10 的所有内容。
  • @SteveVinoski 是的,感谢您的提示! =)
  • 很好,我遇到了同样的问题。

标签: erlang


【解决方案1】:

该函数返回预期的列表,但 shell 将数字列表显示为字符串的 ASCII 码字符(因为这正是 Erlang 中的字符串 ;没有特殊的字符串类型)。您可以通过在提示符处输入[8, 8](例如)来查看它,并通过调用shell:strings(false)(以及当您再次需要正常行为时调用shell:strings(true))禁用此行为。

【讨论】:

    【解决方案2】:

    Erlang 中的字符串不是单独的类型,而是数字列表。列表打印有一个启发式方法来检测它何时可能是一个字符串。如果它认为它是一个字符串,它将被打印出来。 \b 是退格符,\t 是制表符,它们是 ASCII 码 8 和 9

    另见:

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      相关资源
      最近更新 更多