0

命令型プログラミングでは、ステートメントを使用して、次のようなことを行います。

a = 10
b = a * 2
print a # 20

私は、式で同等のものは次のようになるべきだと考えてきました。

print with(a=10){with(b=a*2){return b}}

これは肉屋のパイソンで書かれていますが、それは問題ではなく、私が何を意味するかを説明する必要があります. プログラム内の変数の状態を変更する (変更されたままになる) のではなく、ブロック スコープ内で、そのスコープ内のすべての式について変更します。

こういう名前がありそうですね。私は純粋関数型言語を知りませんが、代入文が存在しない場合に一時的な値を計算するには、この種のものが非常に役立つと思います。それが何と呼ばれているか、これが組み込まれている言語は何か、それに関する詳細情報はどこで入手できるか知っている人はいますか?

4

1 に答える 1

2

さて、letバインディングがあります:

let a = 10 in
let b = a * 2 in
b

これらはほとんどの関数型言語に存在しますが、構文が異なる場合もあります (私が知っている最も明白な逸脱は、 を使用する Lispです。また、割り当てられる式が参照できるものにさまざまな制限を課すand(let ((a 10)) (let ((b (* a 2))) b))もあります)。1 つの で複数のバインディングを作成することもできます。letreclet*let

正式には、短期間変数を変更するのではなく、新しい変数を使用して新しいスコープを導入することに注意してください。

于 2011-09-24T15:19:59.890 に答える