Erlang 为什么变量可以是列表理解中的变量?

Erlang 为什么变量可以是列表理解中的变量?,erlang,Erlang,正如我们所知,变量在erlang中不能是变量。但是考虑这个代码,为什么[1,2,3,4]的每个值都顺序地匹配N,并且不抛出异常?? 1> [2*N || N <- [1,2,3,4]]. [2,4,6,8] 1>[2*N | | N说变量不能是变量并不完全正确。更重要的是,一个变量只能被赋值一次。因此以下psuedo代码是非法的: N = 4; foo(N); N = N + 1; foo(N); 但是,以下内容是合法的: fact(0) -> 1, fact(N) -&g

正如我们所知,变量在erlang中不能是变量。但是考虑这个代码,为什么[1,2,3,4]的每个值都顺序地匹配N,并且不抛出异常??
1> [2*N || N <- [1,2,3,4]].
[2,4,6,8]

1>[2*N | | N说变量不能是变量并不完全正确。更重要的是,一个变量只能被赋值一次。因此以下psuedo代码是非法的:

N = 4;
foo(N);
N = N + 1;
foo(N);
但是,以下内容是合法的:

fact(0) -> 1,
fact(N) -> N * fact(N-1).

当我们称之为事实(4)N将为每个不同的函数调用取值4,然后3,然后2,然后1。上面显示的代码类似。对于列表中的每个项,N取不同的值。但是您从未多次指定N的值。

说变量不能是变量并不完全正确。更重要的是,一个变量只能指定一次。因此,以下psuedo代码是非法的:

N = 4;
foo(N);
N = N + 1;
foo(N);
但是,以下内容是合法的:

fact(0) -> 1,
fact(N) -> N * fact(N-1).

当我们称之为事实(4)N将为每个不同的函数调用取值4,然后取3,然后取值2,然后取值1。上面显示的代码类似。对于列表中的每个项目,N取不同的值。但您从未多次指定N的值。

否则您将如何表示列表理解?否则您将如何表示列表理解?是的,从不指定多次对N的值进行赋值,但是为什么[1,2,3,4]的每个值都是按顺序模式匹配到N???
[2*N | | N@huwang尽量不要将其视为赋值。这是一种表示算法的方法。您可以调用上面的
事实(N)
根据您的需要为
N
设置不同的值,对吗?在列表理解中基本上是一样的。哦,这可能是一种语法糖!@huwang从某种意义上说,对于递归函数来说,列表理解就是语法糖。更好的阅读方法是使用小型DSL表达关于如何构建列表的规则。是的,从来没有指定N的值不止一次,但是为什么[1,2,3,4]的每个值都是顺序模式匹配到N???
[2*N | | N@huwang尽量不要将其视为赋值。这是一种表示算法的方法。您可以调用上面的
事实(N)
根据您的需要为
N
设置不同的值,对吗?在列表理解中基本上是一样的。哦,这可能是一种语法糖!@huwang从某种意义上说,对于递归函数来说,列表理解就是语法糖。更好的阅读方法是使用小型DSL来表达如何构建列表的规则。