囲まれた関数に拡張されないような方法でスコープが定義されている言語はありますか? 言い換えれば、次のようなコード (Python のような構文) を持つ言語があります。
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
関数内で x が定義されていないため、エラーが発生しますfact
か?
一般に、関数のスコープに定義された関数が含まれない言語はありますか?
編集:有益なコメントをありがとう。私がこれについて考えた理由は、含まれる関数によって提供されるすべての環境にアクセスできる内部関数の状況が、 OOP に対する彼の議論で Joe Armstrong によって説明された状況に疑わしいほど近いように聞こえるからです。
オブジェクト指向言語の問題は、オブジェクト指向言語が持ち歩く暗黙の環境をすべて持っていることです。あなたはバナナが欲しかったのですが、手に入れたのはバナナとジャングル全体を持ったゴリラでした.
また関連するのは、 Newspeakという言語にはグローバルな名前空間がないと聞いたことですが、それがどのように機能するのかはわかりません。
以下のブライアンのコメントで提起された、組み込み関数 ( __builtins__
Pythonspeak または他の多くの言語のシステムからインポートされた関数) の問題は、すべての関数でインタープリター/コンパイラーによって人為的に導入されることを想像できます。結局のところ、彼らはほとんどの場合、そもそもその言語で特別に扱われています。もう 1 つのオプションは、オブジェクトのメソッドとしてそれらを関数にパラメーターとして渡すか、内部からモジュールとしてインポートすることです。