二郎列表理解奇怪的行为



我现在学习了Erlang和列表理解,发现了一个奇怪的问题。所以我有一个简单的列表理解,用一个简单公式,没有过滤器:

gen_list(List)->
[N*N || N <- List].

输出正如我所期望的那样是正确的:gen_list([2,3,4]). [4,9,16]然后我这样做:

 gen_list(List)->
[N*N*N*N || N <- List].

输出再次正确:gen_list([2,3,4]). [16,81,256]。但当我将公式定义为:gen_list(List)-> [N*N*N || N <- List].时,我得到了下一个输出:gen_list([2,3,4]). "be@"

这是什么:"be@"??为什么我只有三个N才能得到它?我甚至可以写这样的公式:N*N*N*N*N*N*N*N,输出将再次如我所期望的那样。但是有了三个N,我总是得到这样一个奇怪的结果。有人能为我解释一下吗?

我使用ArchLinux和GNU Emacs。

"be@"是Erlang在整数位于ASCII可显示范围内时表示整数列表的方法。

为了确保这是一个列表,模式匹配如下:

1> [A, B, C] = "be@".
"be@"
2> {A, B, C}.
{8,27,64}

在Erlang中,字符串实际上是一个列表,因此"\b\e@"与[8.27,64]相同。这只是因为这些数字是ascii可打印的,erlang shell会将其打印为字符串。

1>[8,27,64].
"be@"

你可以查看这些符号的ascii代码前面有一个$符号。

2> $b.
8
3> $e.
27
4> $@.
64

相关内容

  • 没有找到相关文章

最新更新