acm-header
登录

ACM通信

BLOG@CACM

什么是变量?


Robin K. Hill,怀俄明大学

什么是变量?-值的名称。什么是属性?-属性的名称。这些是我们大多数人在日常生活和日常计算机科学中发现的足够的工作定义。考虑是否有更多的是考虑一个本体论,本体论的变量。对于学生和外行人,是否有一个很好的全面的“变量”定义?

不过,首先让我们讨论在变量与现实的本体相遇时出现的突出主题—为某个领域中的某些真实事物进行本体的专业设计,这是由在数据库中捕获某个企业的商业需求驱动的。问题是,“我们需要记录什么?”

要回答这个问题——这里面有钱——需要对现实世界的一些活动领域有广泛的了解,比如缝纫、债务抵押债券、军事部署或波尔多葡萄酒。纳和麦吉尼斯],以及用某种数据语言表示这些知识的技能。在实体-关系模型下工作,专家将引出并记录领域中需要公开的实体、属性和关系。

工作本体论的原理是几个计算机哲学家研究的课题。目标通常是知识表示和共享,目标通常是组织性的。Barry Smith和其他研究人员将抽象或形式与特定领域相结合[Smith2004,Smith2008].基本形式本体提供了工程中的模板和工具,并解决了从这些实践中产生的哲学问题[水牛本体].

那不是我们要讨论的。这里所关心的问题(这里没有钱)需要探究这个重要的抽象概念——变量——的本质。我们不关注“产生差异的区别”的细粒度级别(归因于Donald McKay [McKay]),而是关注具有关联值的标识符级别。奎因说“是一个有界变量的值”,这是一个有趣的概念,但不是我们寻求的非正式解释。我们想要清晰地表达——朝向一个全面的定义——变量在计算机编程中使用的本体。我们会喃喃自语:“税率的变量是什么?”或者“这个变量的名字容易让人误解”,或者“我们不需要月份的变量,因为它是日期的函数。”在计算中被如此无情地使用的东西的本体论一定会告诉我们一些关于计算的事情。

让我们考虑几个可能提供方向的问题。(事实上,问题是我们到此为止。)

  • 如果变量是值的名称,那么常量呢?这种区别在编程中很容易解释,但在编程之外就不那么容易了。是常量的一个特例var,其中附加了一些额外的属性“可变性”var对象?那么属性数据库设计;那是什么?做attr分解成var而且常量?William Kent在1978年提出了关于属性本体论的问题,注意到它的麻烦,并得出结论,属性和关系之间实际上没有区别。
  • 变量和值的区别是什么?变量是一个东西还是一个东西的某个属性?说我们不需要一个月的变量,就是说这个值(而不是变量)可以从其他地方派生出来。因为变量在替换值时“消失”,变量的一个常见视图是“占位符”。它为什么占有一席之地?谓语呢?命题吗?一个实体?换句话说,变量的形状或类别是什么?它是某物的属性,关于某物的完整陈述,还是某物本身? Again, in a program (or in its formalization in denotational semantics), this is clear; the difference between variable and value is embedded firmly in the process.
  • 那么多重实例化呢,即变量的所有出现都绑定到相同的值?说“该变量有一个误导性的名称”是谴责代码的几个子字符串。我们如何在一个全面的定义中包含这个方面(在正式语义中也是直接的)?
  • 变量是我们知道的还是不知道的?变量的代数定义是“未知”。然而,我们对变量了解很多x出现在这样的方程中F (x) = ax^2 + bx +c.我们知道它是一个适合这种设置的对象,也就是一个数字,它就属于这里,它的值受到与其他值的给定关系的限制。未知的是哪个数字。我们总是在相当微弱的意义上“知道”变量,即我们掌握它的需要和目的。在程序中,变量的值是我们在源代码(人类的产品)中不知道的东西。在执行过程中,一旦绑定,在某种意义上,值是“已知的”,但已知对象是什么或谁?

定义的艺术有它自己的哲学。SEP-Definition].这个领域的专家遇到困难不会感到惊讶,但计算机科学家可能会对来自平凡和熟悉的想法的微妙和复杂的问题感到惊讶。

参考文献

[水牛本体]水牛本体站点。纽约州立大学布法罗分校。2019年1月29日访问。

威廉·肯特,1978。数据和现实。北荷兰出版公司。5.0章。属性。

唐纳德·麦凯,1969年。信息、机制与意义。麻省理工学院出版社。

[诺伊和麦吉尼斯]Natalya F. Noy和Deborah L. McGuinness。未标明日期。本体开发101:创建第一个本体的指南。

[SEP-Definition] Gupta, Anil. 2015。定义。斯坦福哲学百科全书。编辑爱德华·n·扎尔塔。2019年1月31日接入。

[史密斯2004]巴里。超越概念:本体作为现实表征。在第三届信息系统形式本体国际会议论文集(FOIS 2004).动力。73 - 84。IOS出版社。

巴里·史密斯。“本体(科学)”。信息系统中的形式化本体。编辑C. Eschenbach和M. Grüninger。第五届信息系统形式本体国际会议论文集(FOIS 2008).后卫,21-35。IOS出版社。DOI: 10.3233 / 978-1-58603-923-3-21

罗宾·k·希尔他是计算机科学系的讲师,也是哲学和宗教研究系以及怀俄明大学人文研究所的附属机构。她自1978年以来一直是ACM的成员。


评论


彼得奥赫恩

我想知道作者会如何看待Christopher Strachey在20世纪60年代为编程语言的语义奠定概念基础时给出的答案?

斯特雷奇风趣地说:“数学的一个重要特点是我们习惯给事物命名。奇怪的是,数学家倾向于称这些东西为‘变量’,尽管它们最重要的特性恰恰是它们不会变化。”

但斯特雷奇接着谈到了l值、r值和商店的状态,如果我没有误解的话,他至少提供了一个准确的描述,回答了文章中的问题……并影响了未来几代程序员(例如,Kerhnihan和Ritchie在他们的《C编程语言》一书中对C语言的描述就使用了这些想法)。

我很好奇斯特雷奇的分析中是否遗漏了什么?(我不知道外行人怎么想,但我个人会把斯特雷奇的区别教给计算机科学专业的学生。)

见,例如,
《编程语言的基本概念》高阶和符号计算13(1/2):11-49 (2000)
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.332.3161&rep=rep1&type=pdf
这是60年代课堂笔记的重印版。

注:我当然同意事情会变得混乱,并欣赏作者提出这个反复出现的问题。


罗宾山

我欢迎你提到克里斯托弗·斯特雷奇,他的许多精辟的观察都在他的其他重大成就中消失了。事实上,正如他所描述的,L值和R值很好地涵盖了程序处理,这是精确的。

但非正式的“变量”观点并不准确。我的档案里有一份斯特雷奇的记录。我相信无论是l值(左边,赋值中指定的内存位置)还是r值(右边,由不同方式表示的值组成的表达式)都没有捕捉到我们关于变量的想法,尽管,或者可能因为,他如此出色地阐述了微妙之处。

我提出的问题涉及(在人类思维中)对变量概念的概念性处理。我认为,我们的概念混合了值的概念和标识符的概念,可能涉及(模糊的)内存地址的概念,但仍然独立于内存地址,也可能涉及相互矛盾的固定和可变性概念。事实上,我们很难准确地引出我们的概念是什么,更不用说它具有什么品质了。

谢谢你提出这一点。


文森特·迪卡洛

从计算机当前如何将知识存储为存储在内存中位置的值的问题出发,Simon Funk建议使用纯谓词表示知识

https://sifter.org/~simon/journal/20130713.h.html

https://sifter.org/~simon/journal/20130802.html

https://sifter.org/~simon/journal/20140330.html

其结果之一是,价值观和类型之间的区别是最好避免的历史灾难。


显示3评论

登录为完全访问
»忘记密码? *创建ACM Web帐户
Baidu
map