1

HTDP (How to Design Programs) の 36.4 章では

私はこの警告を見つけました:

警告: 状態変数は関数のパラメーターではありません。

しかし、以前聞いた限りでは、関数型プログラミングでは、状態変数を参照すると関数が壊れてしまいます。それらはもはや純粋な関数ではありません。それらはテストが難しく、予測不可能な作業を行い、メモ化できません...などです。状態変数は、一部のグローバル定数として参照されるだけでなく、パラメーターとしても渡される必要があります。

だから私は疑問に思う

  • HTDPは何か間違っていると主張していますか?
  • 一部の関数型プログラミングの実践では、グローバル状態変数が許可されていますか? また
  • 私は間違った考えを持っていますか?

前もって感謝します。

免責事項: 私はこの本がとても好きで尊敬しており、多くのことを学びました。実際、私はこの本について良い言葉を友人に広めたいと思っています。だから誤解しないでください。

4

1 に答える 1

2

関数型プログラミングについて聞いたことと、リンクした章に書かれていることと矛盾するものはないと思います。ただし、ここでは 2 つの概念を混同しています。関数型プログラムでの変更可能な状態の存在 (純粋性の問題) と、評価される順序、および書き留めるために使用できる構文の制限です。

考慮してください: 熱心な評価戦略を使用している場合、その章で説明されている種類の「状態変数」を渡すと、それを逆参照する効果があり、変数のを関数の引数として取得します。同様に、変数がパラメーターとして関数にバインドされている場合、呼び出しごとに異なるビットのメモリが取得されます。ここにはさまざまなオプションがあります。一部の言語では参照を値として渡すことが許可されているという事実は、普遍的なものではありません。

したがって、これらは実際にはグローバル変数 (または親スコープからアクセスされる変数) を記述しているだけであり、その性質上、パラメーターとして関数に渡す必要はありません。特定の言語で参照渡しが許可されている場合、これはそれほど明確な区別ではない可能性があります。

于 2013-11-15T08:28:30.917 に答える