4

math.SE では、数学表記に関する質問により、n=0 の場合にプログラミング言語がセット {1,...,n} をどのように解釈するかについての議論が発生しました。

質問は、R コードを表す数学表記を求めました。1:n

コメントによると、n=0 の場合の {1,...,n} の数学的解釈は、これが空のセットであるということです。その後のコメントは、C がこの解釈と一致していることを示唆しています。これfor (int i = 1; i < n; i++)は、0 回反復するため空のセットを返すためです。

Rの同等のステートメントが何であるかは明確ではありませんが1:0、ベクトルを返します[1,0]

したがって、for (i in 1:0) print(i)1 と 0 を繰り返します (上記の C コードに類似していると解釈します)。

これは、{1,...,n} が の正しい表記法ではないため1:nですか?

これは、R が普遍的なルールに違反していることを意味しますか?

プログラミング言語間でこのセットの一貫した解釈はありますか?

4

4 に答える 4

4

Cには、forループが実行されるセットの概念がありません。forループは、次のfor(a;b;c) d;単なる構文糖衣です。

a;
loop: if (!b) goto done;
d;
c;
goto loop;
done: ;
于 2012-06-07T02:09:09.767 に答える
4

私の回答も参照してください:下限が上限よりも大きい場合に空のシーケンスを作成するシーケンス構築- R では、まさにこの理由seq_len(n)で に優先して使用する必要があります(後者は の場合に誤動作します)。1:nn=0

于 2012-06-07T04:06:09.150 に答える
3

一部の言語では範囲の概念がサポートされています。C では、for ループに何をさせるかは任意です。0 を意味するようにすることも、逆方向にカウントすることもできます。他の言語では、2 番目の数値が最初の数値よりも小さい範囲は、減少する数列を生成することがよくあります。しかし、それは恣意的であり、普遍的なルールはありません。

于 2012-06-07T01:57:52.987 に答える