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 はステートメントと式を区別するためです。
オフサイド ルール (インデント ベースの構文を持つ) に準拠する言語のすべての言語構造を式にして、それらを変数に割り当てたり、パラメーターとして渡したりすることはできますか?