【问题标题】:Is a single constant value considered an expression?单个常量值是否被视为表达式?
【发布时间】:2018-06-01 23:58:42
【问题描述】:

在阅读了this answer 上的一个 CSS 问题后,我想知道:

在计算机科学中,单个常量值是否被视为表达式?

换句话说,7px 是一个表达式吗? 7 怎么样?

引用Wikipedia,强调我的:

编程语言中的表达式是一个或多个显式值、常量、变量、运算符和函数的组合,编程语言解释 [...] 并计算为 产生 [...] 另一个价值。这个过程与数学表达式一样,称为求值。

引用MS Docs,强调我的:

表达式是一个或多个操作数零个或多个运算符的序列,可以求值为单个值、对象、方法或命名空间。表达式可以包含文字值 [...]。

这两个似乎都表明值是表达式。但是,有人可能会争辩说,一个值不会被评估,因为它已经只是一个值,因此不符合条件。

引用Techopedia,强调我的:

[...] 在结构方面,专家指出,表达式本质上需要至少一个“操作数”或被操作的值,并且必须有一个或多个运算符。 [...]

这表明即使x 也没有资格作为表达式,因为它缺少一个或多个运算符

【问题讨论】:

  • 请注意,我知道this related question。但是,那里的答案并没有回答这个更具体的问题。
  • @Racil 你可能是对的,但话说回来,“零个或多个运算符” 明显不同于“一个或多个运算符”,没有?
  • 是的,我同意可以增强措辞,但我认为这个问题没有真正的价值。无论哪种方式,这有什么区别?在大多数(如果不是全部)可以使用表达式的情况下,也可以使用单个值。我想我的问题是:回答这个问题我们会得到什么?
  • 好奇心?寻找明确的定义?为未来的面试问题创建材料?不确定。我想我只是想知道。这些事情让我很感兴趣,我只能假设我不是唯一一个。
  • 前两个是正当的理由,但在面试中出现这样的问题只能说明这样的面试质量低下。这就像在问“JavaScript 的含义是什么”。是的,很高兴知道,但把它作为面试问题?这绝对让我远离在这样的公司工作。面试问题应该集中在所需的技能上,而不是无关紧要的知识。

标签: expression computer-science


【解决方案1】:

这当然取决于确切的定义,但在大多数定义下,表达式是递归定义的,常量是基本情况之一。所以,是的,文字值是表达式的特殊情况。

您可以查看各种语言的语法,例如 one for Python

如果您跟踪语法,您会发现 expr 可以是包含数字文字的 atom。当您考虑以下产品时,数字文字是 Python 表达式这一事实也很明显:

comparison: expr (comp_op expr)*

这是捕获像x < 7 这样的表达式的产生式,如果7 不是有效的表达式,则不会被捕获。

【讨论】:

  • 这个答案(尤其是第一段之后的文字)与问题无关。您可以在期望表达式的地方使用值这一事实绝不构成将值视为表达式。编程语言充满了在某些地方使用不同事物的例子。例如,某些语言允许您将整数分配给字符串变量,并为您隐式将其转换为字符串。这是否意味着根据您的逻辑将整数视为字符串?
  • 问题是关于编程概念,而不是编译器和编程语言的行为。
  • @RacilHilan 在 Python 中我可以使用7 表达式是必需 的事实意味着在Python 中7 是一个表达式。我不认为 Python 在这里是特殊的。快速检查一下官方的 C 语法会发现它也认为7 是一个表达式。如果大多数编程语言都有一个称为“表达式”(或类似的东西)的非终结符,并且定义这些非终结符的语法允许像 7 这样的文字表达式,那么说有一个柏拉图式的“表达式”理想定义是任意的不包括那个。
  • 我没有说你的描述是错误的。没错,我所知道的所有语言都接受期望表达式的值。我提出的问题是关于“定义”这个词。您正在描述编程语言中的定义,这可能与其他领域(例如数学、物理等)中的定义不同。例如,在数学中,我们认为整数是实数,但在类型化编程语言中,整数和浮点数是两个不同的东西。
  • @RacilHilan 无论如何,第一段已经有点决定性(其余的答案更多的是确认。表达式具有树状结构。定义表达式的最自然方式是以这样一种方式,表达式树的子树本身就是表达式树。这导致叶子是 1 节点表达式树,常量是叶子的一种可能类型。不过,我可以理解您的观点,即定义的精度很重要,并且像 Python 这样的语言的实践并不能解决问题。
【解决方案2】:

在计算机科学中,单个常量值是否被视为表达式?

这完全取决于上下文。例如,FORTRAN、BASIC 和 COBOL 都有行号。这些是不是表达式的数值常量值。

在其他情况下(甚至在那些语言中),数字常量可能是一个表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多