2

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

考虑 Dylan 中的以下示例:

let x = if (c)
          foo();
        else
          bar();
        end;

在 LISP 中:

(setf x (if c (foo) (bar)))

在 Python 中,您必须编写:

if c:
    x = foo();
else:
    x = bar();

因为 Python 区分语句和表达式。

遵循越位规则(具有基于缩进的语法)的语言中的所有语言结构都可以是表达式,以便您可以将它们分配给变量或将它们作为参数传递吗?

4

2 回答 2

9

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

x = foo() if c else bar()
于 2009-08-06T13:54:55.320 回答
5

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

我认为 Python 在这里的分离更多地与禁止诸如“if x=4:”之类的危险结构有关,而不是任何语法限制。(虽然我认为它失去的比它得到的更多——有时拥有足以击倒你的脚的灵活性是非常有价值的,即使你确实冒着一次又一次失去几个脚趾的风险。)

于 2009-08-06T13:52:42.857 回答