所有语言结构都可以是具有越位规则的语言中的一流语言吗?

2 lisp python expression if-statement indentation

在类似LISP的语言中,所有语言结构都是一等公民.

请考虑Dylan中的以下示例:

let x = if (c)
          foo();
        else
          bar();
        end;
Run Code Online (Sandbox Code Playgroud)

在LISP中:

(setf x (if c (foo) (bar)))
Run Code Online (Sandbox Code Playgroud)

在Python中你必须写:

if c:
    x = foo();
else:
    x = bar();
Run Code Online (Sandbox Code Playgroud)

因为Python会使语句和表达式失效.

所有语言结构都可以使用符合off-side规则的语言(具有基于inningtion的语法)作为表达式,以便您可以将它们分配给变量或将它们作为参数传递?

Jos*_*eld 9

Python具有以下语法执行相同的操作:

x = foo() if c else bar()
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 5

我没有在这里看到与first-classness的关系 - 你没有将if 语句传递给函数,而是它返回的对象,它在python中与lisp一样完全是第一类.然而,就语句/表达式二分法而言,显然它是可能的:例如Haskell具有基于缩进的语法,但作为纯函数语言显然没有语句.

我认为Python的分离更多地与禁止使用像"if x = 4:"等危险结构相比,而不是任何语法限制.(虽然我认为它失去了比这更多的东西 - 有时候足够的弹性足以射击你的脚是非常有价值的,即使你冒险失去一些脚趾一次又一次.)