2009-08-06 9 views
2

LISPのような言語では、すべての言語構造が一流の市民です。オフサイトルールを持つ言語で、すべての言語構成をファーストクラスにすることはできますか?

はディランに、次の例を考えてみましょう:

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

とLISPに:Pythonで

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

あなたが記述する必要があります:Pythonは文と式をdestinguishesので

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

を。

オフサイドルール(インデントベースの構文を持つ)に準拠する言語でのすべての言語構成を式にすることができます。これを変数に割り当てたり、パラメータとして渡したりできますか?

+1

私はそれほど確かではありませんが、それは簡単な関数として同じルールで評価されないので、特別な形式です。 。 – fortran

答えて

4

私はここで最初-classnessとの関係が表示されない - あなたが関数にif声明を渡していないが、舌足らずのようにPythonで完全にファーストクラスのようになり、それが返すオブジェクト、。しかし、ステートメント/式の二分法がある限り、明らかに可能です。例えば、Haskellはインデントベースの構文を持っていますが、純粋に関数型言語は明らかにステートメントがありません。

私は、ここでのPythonの分離は、「if x = 4:」などのような危険な構成を禁じることと、構文上の制限よりも多く関係していると思います。 (これで得られる以上に失われていると思うが、時には足を撃ち落とすのに十分な柔軟性を持つことは、今でもいくつかのつま先を失うリスクがあっても非常に貴重です)。

9

Pythonの構文は次のとおりです

+0

ええ、私はOPがそうでないと言った理由はわかりません。あなたがしたい場合は、 "y = foo else bar; x = y()"でもすることができます。 – hughdbrown

+0

複数の行にまたがるとき、どのようにインデントされますか? – Svante

関連する問題