0

我有一个从 erlang shell 输入的函数:

huffman:table([$H,$E,$L,$L,$O]).

我想保持这样的 ASCII 值,但我的在输出中被更改为整数。如何使程序不将它们解释为整数?

4

3 回答 3

3

Erlang 不区分字符和整数。特别是,Erlang string-literals 之类"HELLO"的结果是 list [$H, $E, $L, $L, $O]。shell 通过启发式方法(基本上检查所有整数都是可打印的 unicode 字符)决定它是输出[72, 69, 76, 76, 79]还是"HELLO". 这是我的 shell 会话中的输出:

Erlang R16B03 (erts-5.10.4) [64-bit] [smp:4:4] [async-threads:10]

Eshell V5.10.4(使用 ^G 中止)
1> [$H,$E,$L,$L,$O]。
“你好”
2>
于 2015-01-28T10:12:49.813 回答
2

就像$H写整数 72 的另一种方式一样,没有办法将其打印为$HErlang 的内置内容。您必须编写自己的函数才能以这种方式输出值。

在您展示的示例中,您似乎需要将小整数保留为整数,同时将字母值打印为字母。像这样的东西可能会起作用:

maybe_char_to_string(N) when $A =< N, N =< $Z ->
    [$$, N];
maybe_char_to_string(N) ->
    integer_to_list(N).

这是它的输出:

3> foo:maybe_char_to_string($H).
"$H"
4> foo:maybe_char_to_string(1).
"1"
于 2015-01-28T11:14:14.260 回答
1

如果要将某些内容打印为字符串,请使用:

io:format("~s", [String]).
于 2015-01-28T10:20:49.777 回答