我在Knuth的“计算机编程艺术”( the Art of Computer Programming)的评论中读到了以下内容:
“非常的‘实用性’意味着准CS专业的学生必须学习Kernighan在设计C时的错误,特别是一个for循环反复评估for条件这一臭名昭著的事实,这重复了大多数实现for循环的语言的行为,但却无法与之匹配。”
()
这家伙在说什么?你怎么能实现一个for循环,而这个循环不只是一个while循环的语法糖呢?
偶尔--但反复出现--我面临以下循环模式问题:
CodeSnippet1
DO WHILE LoopCondition //LoopCondition depends on some pre-calculation from CodeSnippet1
CodeSnippet2 //CodeSnippet2 relies on LoopConditon=true
CodeSnippet1
LOOP
我在这里看到的问题是CodeSnippet1的代码复制。
乍一看,我似乎应该把这个条件移到最后:
DO
CodeSnippet1
CodeSnipp
在C编程语言中,我经常做以下事情:
while ((c = getch()) != EOF) {
/* do something with c */
}
在Python中,我没有发现任何类似的东西,因为我不允许在求值表达式中设置变量。我通常以两次设置求值表达式而告终!
c = sys.stdin.read(1)
while not (c == EOF):
# Do something with c
c = sys.stdin.read(1)
在我试图找到一种更好的方法的过程中,我发现了一种只需要设置和计算表达式一次的方法,但这变得越来越丑陋……
while True:
c = sys.
在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违反了一条普遍规则?
在编程语言中对这个集合有
以下函数用于返回通过键盘输入的行的长度。但它说(C编程语言K& R) it will return the length of the line, or zero if end of file is encountered.,但当我用我的C语言基础知识分析时,它至少返回了行的长度到EOF。那么它什么时候返回0。或者我的理解是错的。有人能给我澄清一下吗?
int getline(char s[],int lim)
{
int c, i;
for (i=0; i < lim-1 && (c=getchar())!=EOF && c!=’