1

私の理解では、forallステートメントは並列に実行されますが、forステートメントはシリアルに実行されます。実際、次のコードはこの予想を裏付けているようです (つまり、forallスレッドのためだけのランダム シーケンス)。

for i in 1..5 do writeln( i * 10 );
10
20
30
40
50

forall i in 1..5 do writeln( i * 10 );
10
50
20
30
40

一方、式として右側にforall(または同等の [...] ) を使用すると、

var A = ( forall i in 1..5 do i * 10 );
var B = [ i in 1..5 ] i * 10;

var X = ( forall a in A do a );
var Y = [ a in A ] a;

var P = ( for i in 1..5 do i * 10 );  // for comparison

writeln( "A = ", A );
writeln( "B = ", B );
writeln( "X = ", X );
writeln( "Y = ", Y );
writeln( "P = ", P );

すべての結果が同じになります (つまり、10 から 50 に並べ替えられます)。

A = 10 20 30 40 50
B = 10 20 30 40 50
X = 10 20 30 40 50
Y = 10 20 30 40 50
P = 10 20 30 40 50

これはforall、代入の右辺の式が常にシリアルに実行されるということですか? forもしそうなら、対応する [...] もこのコンテキストの式と同等ですか?

4

1 に答える 1