【问题标题】:A roadblock working with erlang's List使用 erlang 列表的障碍
【发布时间】:2017-06-23 16:28:56
【问题描述】:

我正在使用 erlang 中的列表,它每次都填充一个值,我想通过将其值乘以 10 来修改此列表。但是当我尝试这样做时,发生了以下事情:

 E=[4*10].
"("

我搜索了 ascii 表,发现 ascii 值 40 只存储了符号“(”。 任何人都可以对此有所了解并告诉我如何通过仅在 List 内执行乘法来获得 E=[40] 吗?

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    字符串在 Erlang 中表示为字节列表,因此 "(" 与 [40] 完全相同。

    它只是一个语法糖。每次 Erlang 显示一个列表时,如果它包含“可显示”的 ASCII 字符,它将显示字符串而不是数字列表。

    您可以使用用户格式来控制显示:

    io:format("Number ~w is character ~c\n", [40 40]).
    

    【讨论】:

    • 但是如果我必须使用该列表中的值进行任何进一步的数学计算会发生什么,它仍然是一个数字并且计算会顺利进行还是会是一个“(”,因此将给出一个例外,因为我将在“(”上应用数学计算,如加法)
    • @abhishekranjan 在 shell 中你可以使用shell:strings(false)
    • 如果对列表的第一个元素进行操作,就是对数字40进行操作,所以没有问题。单个元素是一个数字,但作为一个整体,列表 [40] 它相当于“(”。
    • @abhishekranjan,你只需要习惯这个 Erlang 的怪癖:默认情况下,整数列表会在输出时转换为相应的 ascii 字符——如果数字对应于“可打印”的 ascii 字符。如果你不喜欢这样,那么不要接受默认行为——而是使用io:format() 让erlang 显示数字。我认为这是 Erlang 的一个可怕特性——但它就是这样......(续)
    • 如果默认情况下 erlang always 将整数列表输出为整数,这对我来说似乎更合乎逻辑和一致。然后您可以使用io:format() 更改默认行为并将列表输出为字符串——但我没有发明erlang!
    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2011-10-16
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多