我在 Erlang 中看到了这段代码:
[X-$0 || X<-someFun()]
在那一行中,我发现-$0
语法非常有用。
我阅读了代码并估计了它的含义,但我不太确定:它是否拆分了所有数字?
我想查看该语法的解释或手册页,但找不到。谁能告诉我正确的页面?
我在 Erlang 中看到了这段代码:
[X-$0 || X<-someFun()]
在那一行中,我发现-$0
语法非常有用。
我阅读了代码并估计了它的含义,但我不太确定:它是否拆分了所有数字?
我想查看该语法的解释或手册页,但找不到。谁能告诉我正确的页面?
该代码所做的是从someFun()
(需要返回一个列表)获取输出,并且对于列表中的每个元素,它将元素的值分配给变量X
,然后从该值中减去字符的 ASCII0
值。结果列表就是整个表达式的值。
在实践中(我自己已经编写了数十次此代码)它在做什么,假设这someFun/0
是一个函数,它返回一个只有数字的字符串,然后将该字符串转换为数字列表。所以,如果someFun()
返回 " 12345
",这个列表推导的结果是[1, 2, 3, 4, 5]
.
如果您熟悉map
函数的概念(如 MapReduce),那么现在听起来应该很熟悉。
这个 wikibooks 页面看起来像是对 Erlang 列表推导的一个很好的介绍:
http://en.wikibooks.org/wiki/Erlang_Programming/List_Comprehensions
Joe Armstrong 的书“Programming Erlang”,来自 Pragmatic Bookshelf,(http://pragprog.com/titles/jaerlang/programming-erlang)也很好地涵盖了列表推导(以及与 Erlang 相关的所有其他内容)。好书,强烈推荐等等。
列表推导的常规文档页面在Erlang 参考手册第 6.22 节和编程示例第 3 节中。
这两个都在主文档页面上(单击左侧菜单栏上的 Erlang 编程文件夹)。
Erlang 文档非常棒 - 只是它的布局有点笨拙......