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

8

每个数学形式都有自己的符号。暗示存在“通用符号”是非常“不合数学的”。如果您想要存在多个符号系统的数学域示例,请查看与张量或组相关的符号。

在 R 中,代码x <- 1:0返回有序向量 c(1,0)。就像代码 x <- 2:-2 返回 c(2,1,0,-1,-2) 一样。该代码x <- seq(1, length=0)返回一个长度为 0 的序列,该序列在控制台会话中打印为integer(0). R 并不是真正为模仿集合符号而设计的,但它确实具有一些集合函数,并且它还具有更全面地实现集合符号的包。

于 2012-06-07T02:05:33.347 回答
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:n用于这个原因(后者失败时行为不端n=0)。

于 2012-06-07T04:06:09.150 回答
3

一些语言支持范围的概念,在 C 中,你创建一个 for 循环是任意的,你可以让它意味着 0 或者你可以让它倒数。在其他语言中,第二个数字小于第一个数字的范围通常会产生一个递减的数字序列。但其随意性,并没有普遍的规律。

于 2012-06-07T01:57:52.987 回答