当n等于0时,编程语言是否对{1,...,n}有一致的解释?

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违反了普遍规则?
编程语言之间是否存在一致的集合解释?

2
一个 for 循环根本不返回任何东西,并且不一定作用于一个集合。它执行封闭块中的代码。该代码可能会执行类似于枚举的操作,也可能不会。 - Eric J.
@EricJ. 我更新了代码可以将其用于某些操作,之前我没有包含此功能因为它是任意的。这样能澄清吗? - Abe
1
@EricJ。严谨地说,在R中,for()返回NULL,但是以隐形的方式进行。 - Gavin Simpson
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实际上并没有设计成模仿集合符号表示法,但它确实具有一些集合函数,并且还有一些更完全实现集合符号表示法的包。

4

C语言没有一个概念是一个for循环运行的集合。一个for循环for(a;b;c) d;只是一个语法糖,它实际上等同于:

a;
loop: if (!b) goto done;
d;
c;
goto loop;
done: ;

4

3

有些语言支持范围的概念,在C语言中,对于for循环的定义是任意的,你可以让它表示0,也可以让它倒数计数。在其他语言中,第二个数字小于第一个数字的范围通常会产生递减的数字序列。但这是任意的,并没有普遍规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接