タグ付けされた質問 「side-effect」

2
Arrayの「すべて」または「一部」の副作用は悪いですか?
私は常に、if状態に副作用があることは悪いことだと教えられてきました。つまり、 if (conditionThenHandle()) { // do effectively nothing } ... とは対照的に; if (condition()) { handle(); } ...そして、私はそれを理解しています。私はそれをしなかったので私の同僚は幸せです、そして私たちはすべて金曜日の17:00に家に帰り、誰もが楽しい週末を過ごします。 今、ECMAScript5はto every()やsome()to Arrayなどのメソッドを導入しており、非常に便利だと思います。彼らよりもしているクリーナーfor (;;;)のは、あなたに別のスコープを与え、そして変数によって要素にアクセスできるようにします。 入力を検証するときにしかし、私は自分自身を使用して、より頻繁に--より-ない見つけるevery/をsome使用し、その後、入力を検証する条件にevery/ some 再使用可能なモデルへの入力を変換するために、体内で。 if (input.every(function (that) { return typeof that === "number"; })) { input.every(function (that) { // Model.findById(that); etc } } else { return; } ...私がやりたいことは、 if (!input.every(function …

6
プログラミング言語や副作用のないプログラムについて理由を説明する方が簡単なのはなぜですか?
リチャード・P・ガブリエルから「Yの理由」を読みました。Yコンビネーターに関する読みやすい記事ですが、めったにありません。記事は、階乗関数の再帰的な定義から始まります。 (letrec ((f (lambda (n) (if (< n 2) 1 (* n (f (- n 1))))))) (f 10)) そしてそれはletrec副作用で定義できることを説明します: (let ((f #f)) (set! f (lambda (n) (if (< n 2) 1 (* n (f (- n 1)))))) (f 10)) また、記事の残りの部分ではletrec、Yコンビネーターを使用して定義することもできると説明しています。 (define (Y f) (let ((g (lambda (h) (lambda (x) ((f …

1
ループ副作用の関数型プログラミング
関数内にローカル変数またはforループがあることが純粋な関数型プログラミングと見なされないのはなぜか、頭を回そうとしています。 この関数を考えると: int as_int(char *str) { int acc; /* accumulate the partial result */ for (acc = 0; isdigit(*str); str++) { acc = acc * 10 + (*str - '0'); } return acc; } 変数accはどのような状況で副作用になりますか?並行環境でも、関数の呼び出しごとに独自のaccのコピーがあります。そのため、関数型プログラミングで許可されていない理由がよくわかりません。

3
参照の透明性はどのように適用されますか?
FP言語では、同じパラメーターを使用して関数を何度も呼び出すと、同じ結果が繰り返し返されます(つまり、参照透過性)。 しかし、このような関数(疑似コード): function f(a, b) { return a + b + currentDateTime.seconds; } 同じパラメータに対して同じ結果を返すことはありません。 これらのケースはFPでどのように処理されますか? 参照の透明性はどのように適用されますか?それともそうではなく、プログラマが自分で行動するかどうかに依存しますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.