Erlang,列表推导式语法

10

我在 Erlang 中看到了这段代码:

[X-$0 || X<-someFun()]

在那行代码中,我发现-$0语法非常有用。

我读了一下代码并估计它的意思,但我不是很确定:它是拆分所有数字吗?

我想看到那个语法的解释或man页面,但我找不到。有人可以给我指出正确的页面吗?

2个回答

18
那段代码的作用是将someFun()的输出(需要返回一个列表)作为输入,对列表中的每个元素赋值给变量X,然后从该值中减去字符0的ASCII值。最终得到的列表就是整个表达式的值。
实际上,它所做的事情(我自己已经写了这段代码数十次)是假设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相关的内容)。这是一本非常好的书,强烈推荐。


1

列表推导式的常规文档页面位于Erlang参考手册第6.22节和编程示例第3节。

这两个页面都在主文档页面上(单击左侧菜单栏上的Erlang编程文件夹)。

Erlang文档非常棒 - 只是它的布局有点不太好看...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接