【问题标题】:Whet does it means to append a integer to a list in erlang?将整数附加到erlang中的列表是什么意思?
【发布时间】:2015-12-14 01:38:15
【问题描述】:

进行列表附加的常规方法是通过:

10> [1,2,3] ++ [4].
[1,2,3,4]

但是在我将其转换为以下方式后,我实际上不明白这里的结果是什么意思:

11> [1,2, 3] ++ 4.  
[1,2,3|4]

谁能给我一个解释?非常感谢。

【问题讨论】:

  • 使用++ 作为在列表尾部附加值的手段实际上不是“正常”的方式。如果左侧操作数是一个大列表,++ 的运行时成本会很高。 “正常”的方式是先累积[Head | Rest],然后再反向。
  • 是的,我知道使用 head-first 语义要好得多。但我只想弄清楚[1,2,3|4] 在 Erlang 中的含义。 @迷宫乐
  • 我也想知道这一点,因为我一直假设,如果你有表达式[Head|Rest]Rest 必须是一个列表......显然不是这样以你的例子(Rest 似乎是整数 4)

标签: erlang


【解决方案1】:

Erlang 列表在 Getting Started with Erlang User's Guide 章节 Sequential Programming 和子章节 Lists 中进行了描述。运算符| 将列表的头部与尾部分开。正确的列表以空列表结束。 , 的语法只是语法糖。

1> [1|[2|[3|[]]]].
[1,2,3]

类似于 Lisp 中的CONS 函数。如果列表不以空列表结尾,则该列表称为不正确列表。

2> [1|[2|[3|4]]]. 
[1,2,3|4]

您通过附加数字而不是正确的列表来制作不正确的列表。 ([4] 是正确的列表 [4|[]]。)请参阅我的answer to how is a list constructured by the erlang vm?,了解它在 BEAM VM 内部的工作原理。

【讨论】:

  • 谢谢!很大的帮助:]
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多