在编程的上下文中,“value”是什么意思?

7
您能否在不涉及特定编码技术、特定语言或体系结构的情况下,为编程上下文中的“值”提供精确的定义?

1
@Vag,不是的,我是说意义取决于上下文。“价值是什么”太模糊了。你是指价值是什么?我们在谈论整数、浮点数、字符、字符串、布尔值吗?你是指变量吗?你是指编程中代码的值吗?我只是在寻找一个精确的问题,并认为代码可能有助于聚焦你的思路,从而让你的问题更加明确。 - Lazarus
2
我认为当程序员使用术语“值”时,他们会在特定的上下文中使用,主要是他们正在处理的代码。这将把这个讨论归结为一种架构,即二进制计算,并且该定义随后对我们可用。我确实认为您正确地指出,在一般/理论计算术语中,“值”太模糊了,无法超越概括进行定义。在一般情况下无法有具体的定义。 - Lazarus
3
@Vag:投票支持重新开放,但请注意措辞。 - Michael Petrotta
2
@Vag:你可以更好地表达你的问题。如果你这样做了,我敢打赌你会在这里得到更好的回应。你没有付出太多努力。 - Michael Petrotta
2
也许我可以建议一种不涉及具体编码技术、特定编程语言或架构的情况下,关于程序中“值”的精确定义的表述方法吗? - Gian
显示剩余22条评论
7个回答

7

我刚好翻阅了皮尔斯的《类型与编程语言》-他在文本中提供了一个相当精确的“值”在编程环境中的定义:

[...] 定义了一组术语的子集,称为,这些术语是可能的评估最终结果。

这似乎是一个相当简洁的定义 - 也就是说,我们取所有可能的术语的集合,然后在所有评估完成后可能剩下的那些就是值。


请注意,它与我之前提出的定义完美地吻合。然而,还有一个问题,如果语言的语义是在没有评估概念的情况下给出的呢?例如,可能是类似汇编的语言。我的定义在这种情况下也适用。 - Vag
预状态/后状态似乎是高级语言中评估的合理类比? - Gian

5
这里,我来试试:一个值是计算机可以操作的存储信息(在信息论意义上)。我不会说一个值有意义;寄存器中的随机数可能没有意义,但它仍然是一个值。

我点赞这个回答,因为我认为它是我们能够得到的最接近的答案,如果我们将“信息”解释为“一系列有序的符号”。如果我们采用这个定义,它与我基于图灵带的定义是同构的。 - Gian
反思一下,我对“可以被计算机操纵”感到不舒服。这只适用于一等值。从一等值中,我们可以得到高阶值,我们可以进行推理,但是如果没有将它们编码为一等表示形式,计算机就无法操纵它们。 - Gian
我看到我们的定义之间确实存在着实质性的差异。例如,你会说任何函数都是一个值,因为显然可以将其唯一地表示为一些位序列。而我更愿意使用“值”来仅指那些更简单、更“原子化”的东西,这些东西确实是由计算机直接操作的。也许你的定义更好,但我的定义更符合我在听到“值”时脑海中的想法。 - mqp
@mquander,我认为一个随机数只编码了1个信息..它的值,你如何解释这个数字取决于你,而且正是在这里模糊性产生了。这个值必须对计算机有意义,不是吗?如果它对设备没有任何意义(我有点扭曲“意义”,因为计算机通常被认为是非感知的),那么它怎么能操作它呢? - Lazarus
1
让我自己试一试:
  1. 不提及某个编程语言P,其语义S中的“值”概念是没有意义的。
  2. 如果存在等价于S的还原语义RS,则值就是这些能够还原为它们自身的RS中的术语。
  3. 如果存在与S等价的“命令式”语义IS(即其中提到了一个存储器),则值就是可以存储在IS的存储器中的元素。
  4. 如果不存在像(2)或(3)中定义的这样的语义,则在P的上下文中,“值”这个词就毫无意义。
- Vag
显示剩余15条评论

5

根据对“位(bit)”的定义被认为不可接受的持续反馈,我认为这个定义可能更好一些(虽然仍有缺陷):

一个值是指在可能是无限的图灵机纸带上能被表示的任何东西。

编辑:我正在进一步完善这个定义。

一个值是指可能无限序列的任何符号的可能解释集合中的成员。

这等同于基于图灵机纸带的早期定义,但实际上具有更好的概括性。


你不妨这样说,一个值是可以映射到整数的任何内容。 这与原语句相同但更清晰。 - mqp
为什么要使用整数?毕竟,图灵完备的机器可以表示其他数字形式。毕竟,整数只是浮点数的一种方便表示,其指数为0。 - Lazarus
1
是的,但它可以将任何其他数字形式一一映射到整数。例如,它不能直接表示无理数,除非您可以将该无理数定义为其他某些东西的函数。(但它可以表示有理数,因为它们可以映射为整数。) - mqp
1
最后我终于理解了你的回答。它背后有很多合理性。但我想正确的定义应该在我们两者之间。 - Vag
1
@Gian:我认为这只是在最狭义的意义上赋予含义,但我们已经陷入了英语语义的争论中。我理解你定义的广度,但我认为我无法超越“值”的概念,以及将价值赋予某物作为给予其意义和/或背景的行为。这可能是因为我的年龄原因 :) - Lazarus
显示剩余36条评论

3

简而言之,值是指对变量(包含该值的对象)分配的某种含义。

例如,type=boolean; name=help; variable=存储位置;value=存储在该位置中的内容;

进一步细分:

X = 2; 其中X是一个变量,而2是存储在X中的值。


这是否意味着name的值是help? - Chyanit Singh

0

你有在维基百科上查看文章吗?

在计算机科学中,值是一系列按照某些数据类型进行解释的比特序列。同样的比特序列可以根据不同的类型来解释它的含义而具有不同的值。例如,该值可以是整数或浮点值,也可以是字符串。


2
维基百科的解释是不正确的:“在计算机科学中,值是一系列按照某种数据类型进行解释的比特序列。”如果我制造一台没有比特的计算机,它仍然可以操作值。 - Vag
1
嗯......没有比特的计算机......也许你应该先阅读一下维基百科关于计算机的文章......:S - Macmade
2
Macmade,我不明白你的意思。有很多没有比特的计算机:http://en.wikipedia.org/wiki/Ternary_computer - mqp
1
@Gian,你可能被术语所困扰了。在二进制计算机科学(可能是最常见的计算机科学),我们使用比特来讨论,在三进制计算机科学中,我们会交替使用三位数,而在量子计算中,我们会使用量子位。无论使用哪个词,句子都保持不变:“一个值在寄存器或内存存储器中表示为一组位/三位数/量子位(无论是电子、机械、磁性等)。” 在你的领域中是否有更好的定义?如果有,请分享,因为这样很愚蠢 :) - Lazarus
2
我不同意“二进制计算机科学”本质上就是计算机科学,尽管我以前从未听说过这个术语。大多数计算机科学可以在没有涉及计算机的情况下完成,其余部分通常是通过引用抽象到比特级别以上的机器来完成的。我想不出有多少“计算机科学”真正关心实现后事物如何表示。 - Gian
显示剩余13条评论

0

请阅读上一个答案 :) https://dev59.com/V0_Sa4cB1Zd3GeqP-jpK#3300766 - Vag

0

值(Value) = 值是我们称为“内容”存储在变量中的东西

变量(Variables) = 用于存储数据值的容器

例如:想象一个名为“电影”(Variables)的文件夹,里面是其内容,即《加勒比海盗》、《神奇动物在哪里》和《爱乐之城》,这便是我们所谓的值(Values)


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