JavaScript では、
f = function(x) {
return x + 1;
}
(5)
一見f
後継関数を割り当てる必要があるように見えますが、実際には値 6 を割り当てます。これは、ラムダ式の後に括弧が続くと、パーサーによって後置式、具体的には関数呼び出しとして解釈されるためです。幸いなことに、これは簡単に修正できます。
f = function(x) {
return x + 1;
};
(5)
期待どおりに動作します。
Python がラムダ式でブロックを許可した場合、同様の問題が発生します。
f = lambda(x):
return x + 1
(5)
しかし今回はセミコロンがないので同じようには解けません。実際には、Pythonは複数行のラムダ式を許可しないことで問題を回避していますが、複数行のラムダ式やその他の式が必要なインデントベースの構文を使用する言語に取り組んでいるため、ブロックを回避する方法を見つけようとしています後置式の開始として解析します。これまでのところ、再帰降下パーサーの各レベルには、「このステートメントで既にブロックを食べているので、postfix を実行しないでください」という行に沿ったパラメーターが必要であると考えています。
この問題に遭遇した既存の言語はありますか? もしそうなら、どのように解決しますか?