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 に答える