gpt4 book ai didi

expression - 表达式和语句之间有什么区别?

转载 作者:行者123 更新时间:2023-12-04 03:36:57 25 4
gpt4 key购买 nike

我知道这可能是重复的,但是对于我的示例,我还没有找到足够的答案。通常,语句和表达式之间有什么区别?这是我尚未完全区分的区别。我知道通常表达式应该是任何返回值的东西,例如文字或函数。通常将语句称为对解释器的命令,例如“print诸如此类”或“do ... while”。但是,我不明白。

因为print是一个打印输入(输入到输出)的函数,所以说print是一个表达式不是很有意义吗?另外,人们通常说x = 1是一条语句,但是这不能认为表达式是赋值运算符是作用在两个输入上的函数,而输出是x表示1的情况?最后,不能使用if这样的流控制结构。 。 。否则被认为是一个三参数函数,其中基于第一个输入的真值返回一个其他参数,使其成为表达式?

我可能很困惑,因为我有LISP的背景,那里的一切都是表达。似乎我不能回避大多数编程构造都是其核心的表达的想法。因此,有人可以解释所谓的语句和表达式之间的真正区别是什么吗?

最佳答案

表达式和语句的定义-即使存在诸如此类的东西-也特定于特定的语言和描述它的语法。

好吧,让我们开始吧:

  • 语句是一些未出现在表达式上下文中的“可评估代码” 1。和
  • 表达式是出现在上下文中的代码,在该上下文中,可以通过替换表达式来使用结果值。

  • {一种非常宽松的“定义”,但没有一种语言。尽管某些语言对何时可以发生和不会发生副作用进行了严格的规定-并且执行没有结果或没有副作用的代码是没有用的-但我不认为讨论这些差异的根本原因。}

    例如,让我们看一下C语言中的 printf。这是一个副作用 and it returns a value的函数;通常,返回值将被忽略。因此 printf可以同时作为一条语句出现
    printf("Hello world!");

    和一个表达
    if (8 == printf("Hello %s!", name)) { // ..

    (返回类型为 void的函数调用只能出现在C的语句上下文中,但这是由类型系统而不是解析器强加的。)

    同样,在JavaScript x = 1;x = (y = 2);中采用这两行。 x = ..是一条语句,而 y = 2是产生值的表达式。

    在这两个示例中,我们都看到,决定是否将其视为语句或表达式的是语法产生。

    相比之下,Ruby可以将“顶级”分配视为表达式:
    [1].map {|x| x = 2}

    现在让我们来看一个Python(2.x)的高峰。在这种情况下, print是一条语句,这就是为什么它们分别起作用和不起作用的原因:
    print "Look ma, no parenthesis!"
    x = lambda y: print "Whoops!" # invalid, print not an expression

    if构造上又如何-这些语句或表达式是?同样,这取决于特定的语言。在C和Java中,这显然是声明:没有办法使用诸如值的替代品。

    另一方面,Scala(和Ruby)允许将这种流控制构造用作表达式,尽管它们也可以作为语句出现:
    var emotionalResponse = if (color == "green") {
    log.cheer()
    new Cheering()
    } else {
    new Tears()
    }

    ew。这很多-而且还不全面。但是,当考虑到以上各种示例时,可以回到大约可以重述的“定义”:

    如果所讨论的构造可以出现在需要值的位置(例如,在赋值的右侧,作为函数自变量,作为另一个表达式的输入),则可以将其视为一个表达式;否则,可以将其视为一个表达式。在这种情况下,绝对是一种表达。如果该构造出现在无法通过替换访问值的位置,则该构造(或可以充当)语句。

    1要满足条件的另一类生产是声明,例如C中的函数声明或Java中的类定义,并且可以说不是语句。由于以下内容已经非常零碎,因此请注意。

    关于expression - 表达式和语句之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343679/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com