1

在我的语言编程课程的考试中,这个问题是:

下一个程序在命令式编程中有效吗?

   int a = 0;
   z = a + 2;
   int z = 3;

没有指定或语法,或语法,或任何额外的东西。我的回答是肯定的,因为最终可能会有一种语言、一种语法和一种语法设计来有效地使用 z 而无需声明它并稍后“重新声明”z。我的成绩是 0.0,但我仍然觉得不公平。可以帮助澄清这个问题吗?感谢。

4

2 回答 2

1

你被不公平地标记了。

将以下代码段粘贴到浏览器的调试器控制台中:

(function() {
    var a = 0;
    z = a + 2;
    alert(z);
    var z = 3;
    alert(z);
})()
于 2013-12-10T18:21:49.383 回答
1

考虑到您的课程名为“语言编程”,我想必须严格解释“命令式编程”。引用当前的 tag-wiki,我们有

命令式编程是一种通过根据改变程序状态的语句显式描述其控制流来表达计算机程序或计算的逻辑的范例。

可以说,对给定的类 C 代码最合理的解释int z = 3;是变量声明(和赋值),z = a + 2;因此该行是声明前的用法。假设这是一个合法程序,它不遵循命令式范式,因为它的控制流没有被明确描述,即它不是顺序的。


也就是说,您是对的,因为没有指定的语法或句法,程序实际上可以做任何事情,包括您指定的内容、计算 π 或在监视器上显示粉红色的大象。显然,我们需要在某处画一条线。鉴于您的课程名为“语言编程”,我认为批判性地评估您对可能语言的规范的合理性是一个很好的方法。

我们有很多语言可以简单地使用以前未知的变量来隐式声明它,所以这是很合理的。但是,它的“重新声明”部分,我觉得非常不寻常和令人困惑,并认为这将是一个糟糕的语言功能。我不知道任何允许它的主要编程语言1

因此,我相信您在那种狭隘的情况下对“是”的回答充其量应该是主要答案为“否”的答案中的旁注。


  1. 类似但不相关的情况是,不同的变量具有相同的名称但范围不同,并且可以为相同的变量分配不同类型的对象。
于 2013-12-10T21:18:00.513 回答