几个月前,我在这里写了一些关于“什么是变量?”这个问题的猜测。[山,现在想进一步探讨这个问题。计算机科学词典[DictCS表示一个变量是:
对于喜欢麻烦问题的人来说,这是很棒的东西。选项3推卸责任,选项4不能让我们走得太远,选项1和选项2是我们试图确定和调和的两个观点。(读者不应推断出对这个定义的谴责或对一个更好定义的承诺。)
1月份那篇关于变量的文章获得了一些评论。Vincent Di Carlo在引用中提到了Simon Funk的工作,他观察并说明了将变量视为容器的一些困难,以及使用预测来缓解这种困难[恐慌]。
彼得·奥赫恩提到了克里斯托弗·斯特雷奇,为此我称赞并感谢了他。但仔细一想,这还不够。斯特雷奇在这个问题上的评论值得更多的关注。他提出了l值的复杂性(地址或位置;变量标识符,换句话说,在赋值的左边)。他在那个地方显示了表达式,并显式地允许函数。我们完全习惯了赋值语句的左侧带有像A[i]这样的表达式,这是一个带有特定元素索引的数组名。当然,这需要评估;实际上,这个l值是一个函数。l值的例子如A[i+1]使其更有说服力。 The variable itself varies, in other words, an affordance that has been played down in our more mechanical and precise development of programming languages.
这可能暗示了我试图展示的非正式观点。这是一个虚构的故事,发生在我的小镇上,每个人都认识当地的商人。
我对一个朋友说:“我犯了一个错误——缝纫机修理工的名字不是维克多,但我记不起是什么了。”她说(现在仔细读):“不,不是维克多。其实不是美世。”正确的,当然……在那之前,维克多在同一家店做吸尘器修理工。但默瑟是缝纫店的老板,不是修理工。她知道我在想默瑟。至于那个为默瑟工作的缝纫机修理工——我们叫他x吧——他没有参与,我也不知道他的真实姓名,只知道他既不是维克多也不是默瑟。
相关句子的大致翻译如下:
不是(X) =维克多我们说这是假的!
不是美世(X) =我们认为这是真的!
我避免用任何接近符号逻辑的符号来表达它们,因为害怕引起某种建模的怪物。这里的变量是什么?它是X的唯一意义是它不是。X是箔纸。如果X是本金,我们可以这样推理:
X ! =维克多
X ! =美世
两者都是正确的,因此标准语义学的强加并不能特别说明问题,也不能解释我的朋友在什么意义上是正确的。这不是我在故事里说的;相反,我无耻地分配了l值不是(X).据我回忆,有一两次,当我走进店里时,我就感受到了否定的存在,我叫修理工“默瑟先生”,他最后回答说:“我不是默瑟。”这地方是他的。”我忘记了细节,但想起了否定,并把它引向了错误的方向。回忆它是否意味着否定本身是某个变量的值,或者否定是一个具有名称作为其值的变量?
我无法回答这个问题。在某些系统的法则下,作为正式表示的练习,这将是有趣的,也许为占位符生成一个影子引用,最终正确地解析为Mercer,从而表示x缺少标识符。Funk所讨论的谓词可能为我们提供了方法。然而,值得注意的是,我们容忍、交流、交换和利用所有这些变幻莫测的事物。我们没有明显的不适,而是笑着承认了这种古怪。William Kent指出,即使我们不能在属性和关系之间做出原则性的区分,这些术语仍然是有用的,这可能是最有趣的结果[Kent]。
因此,当我们的学生问什么是变量时,我们可以给出《计算机科学词典》给出的一个变量,或者简单地说,比如“内存位置的表达式”。他们几乎从不问。他们通过接触和经验来学习,就像我们一样。
让我们把最后一句话留给斯特雷奇,以支持他提出的座右铭:
如果我们在真正梳理出重要的概念之前就试图将自己的想法正式化,结果虽然可能很严谨,但价值却非常小——它可能会使人们更难发现真正重要的概念,因此弊大于利。我们的座右铭应该是“没有洞察力就没有公理化”。
Andrew Butterfield和Gerard Ekembe Ngondi,编辑。2016.计算机科学词典.牛津大学出版社,第七版。
[放克]Simon Funk, 2013。在知识表示.
[希尔]罗宾·k·希尔。2019年1月31日。什么是变量?Blog@CACM。
[肯特]肯特,威廉。数据和现实。北荷兰出版公司。5.0章。属性。
[斯特雷奇]克里斯托弗·斯特雷奇,1967。编程语言的基本概念.这些计算机编程国际暑期学校的课堂讲稿发表在《高阶与符号计算》,13,11 - 49,2000,Kluwer学术出版社。
罗宾·k·希尔他是怀俄明大学计算机科学系的讲师,也是哲学与宗教研究系和怀俄明人文研究所的附属机构。她自1978年以来一直是ACM的成员。
没有发现记录