タグ付けされた質問 「functional-programming」

関数型プログラミングは、関数を使用して抽象化を構築し、副作用や状態の変化を回避することに基づくプログラミングパラダイムです。純粋な関数型プログラミングはスレッドセーフです。

8
関数型プログラミング言語を使用するのはいつですか?
C ++、C#、Javaなどのより冗長なオブジェクト指向言語よりも関数型プログラミング言語を使用することを選択する必要があるのはどのような状況ですか? 関数型プログラミングとは何かを理解していますが、実際には理解していないのは、どのような種類の問題に対して完璧な解決策であるかということです。

6
C ++の関数内で構造とクラスを定義できるのはなぜですか?
私は誤ってC ++でこのようなことをしましたが、それは機能します。なぜ私はこれを行うことができますか? int main(int argc, char** argv) { struct MyStruct { int somevalue; }; MyStruct s; s.somevalue = 5; } これを行った後、私は昔、C ++用の貧乏人の関数型プログラミングツールの一種として、このトリックについてどこかで読んだことを思い出しましたが、なぜこれが有効なのか、どこで読んだのか思い出せません。 どちらの質問への回答も大歓迎です! 注:質問を書いているとき、この質問への参照はありませんでしたが、現在のサイドバーがそれを指摘しているので、参照用にここに置きます。どちらにしても、質問は異なりますが、役立つ場合があります。

8
JavaScriptでArray.mapを使用して要素を削除する
map()関数を使用してアイテムの配列をフィルタリングしたいと思います。コードスニペットは次のとおりです。 var filteredItems = items.map(function(item) { if( ...some condition... ) { return item; } }); 問題は、フィルターで除外されたアイテムがまだ配列内のスペースを使用しているため、それらを完全に消去したいということです。 何か案が? 編集:ありがとう、私は忘れていましたfilter()、私が欲しかったのは実際にはfilter()それからmap()です。 EDIT2:それを指摘してくれてありがとう、map()そしてfilter()すべてのブラウザに実装されているわけではありませんが、私の特定のコードはブラウザで実行することを意図していませんでした。


7
コンパイラを関数型言語で書く方が簡単なのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する 私はこの質問について長い間考えていましたが、Googleでの答えもStackoverflowでの同様の質問も実際には見つかりませんでした。重複している場合は、ごめんなさい。 多くの人は、OCamlやHaskellなどの関数型言語でコンパイラやその他の言語ツールを書く方が、命令型言語で書くよりもはるかに効率的で簡単だと言っているようです。 これは本当ですか?そして、もしそうなら、なぜCのような命令型言語ではなく関数型言語で書くのが、なぜそんなに効率的で簡単なのでしょうか?また、関数型言語の言語ツールは、Cのような低水準言語よりも遅くありませんか?

19
関数型プログラミングはWeb開発に関連していますか?[閉まっている]
クローズ。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、詳細を追加し、問題を明確にしてください。 16日前に閉店しました。 この質問を改善する 私は最近関数型プログラミングについてよく見てきましたが、Clojureは特に興味深いものに見えます。私はそれが何であるかについての基本的な説明を「理解」していますが、私ができたとしても、Web開発者として日常的にどのように使用するかを理解することはできません。私が読んだことの多くは、通常のOOで見られる典型的なプログラミング状況ではなく、関数型プログラミングの数学的な側面に焦点を当てています。 スティックの端を間違えましたか?関数型プログラミングはWeb開発とはまったく関係がありませんか?そうでない場合は、「Web用」に使用されている例はありますか?

11
フォールドの早い段階で中止する
フォールドを早期に終了する最良の方法は何ですか?簡単な例として、の数を合計したいとしますが、Iterable予期しないもの(奇数など)に遭遇した場合は、終了したい場合があります。これは最初の概算です def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = { nums.foldLeft (Some(0): Option[Int]) { case (Some(s), n) if n % 2 == 0 => Some(s + n) case _ => None } } ただし、このソリューションはかなり醜く(.foreachとreturnを実行した場合のように、はるかにクリーンで明確になります)、最悪の場合、偶数以外の数値に遭遇した場合でも、反復可能全体をトラバースします。 。 では、このようなフォールドを作成するための最良の方法は何でしょうか。これを再帰的に記述する必要がありますか、それとももっと受け入れられる方法がありますか?



2
直観主義型理論に相当するコンビネータ論理とは何ですか?
私は最近、HaskellとAgda(依存型関数型プログラミング言語)を取り上げた大学のコースを修了しましたが、これらのラムダ計算をコンビネータ論理に置き換えることができるかどうか疑問に思いました。Haskellでは、これはSおよびKコンビネータを使用して可能であるように思われるため、ポイントフリーになります。アグダに相当するものは何だろうと思っていました。つまり、変数を使用せずに、依存型の関数型プログラミング言語をAgdaと同等にすることはできますか? また、どういうわけか定量化をコンビネータに置き換えることは可能ですか?これが偶然かどうかはわかりませんが、たとえば全称記号を使用すると、型シグネチャがラムダ式のように見えます。意味を変えずに型シグネチャから全称記号を削除する方法はありますか?例: forall a : Int -> a < 0 -> a + a < a フォラルを使わなくても同じことが表現できますか?

5
順列を怠惰に生成する
Clojureでそれらの遅延リストを作成できるような方法でセットの順列を生成するアルゴリズムを探しています。つまり、各順列は要求するまで計算されず、すべての順列を一度にメモリに保存する必要がない順列のリストを繰り返し処理したいと思います。 あるいは、特定のセットが与えられると、そのセットの「次の」順列を返すアルゴリズムを探しています。これにより、独自の出力で関数を繰り返し呼び出すと、元のセットのすべての順列が循環します。いくつかの順序(順序は関係ありません)。 そのようなアルゴリズムはありますか?私が見た順列生成アルゴリズムのほとんどは、それらをすべて一度に(通常は再帰的に)生成する傾向があり、非常に大きなセットに拡張することはできません。Clojure(または別の関数型言語)での実装は役に立ちますが、擬似コードから理解できます。

7
Schemeのeq?、eqv?、equal?、=の違いは何ですか?
Schemeでのこれらの操作の違いは何だろうか。Stack Overflowでも同様の質問を見たことがありますが、それらはLispに関するものであり、これら3つの演算子の比較はありません。 さまざまなタイプのコマンドをSchemeで記述していますが、次の出力が得られます。 (eq? 5 5) -->#t (eq? 2.5 2.5) -->#f (equal? 2.5 2.5) --> #t (= 2.5 2.5) --> #t なぜそうなのですか?

6
純粋関数:「副作用なし」は「同じ入力が与えられた場合、常に同じ出力」を意味しますか?
関数pureを次のように定義する2つの条件は次のとおりです。 副作用はありません(つまり、ローカルスコープへの変更のみが許可されます) 同じ入力が与えられた場合、常に同じ出力を返します 最初の条件が常に真である場合、2番目の条件が真でない場合はありますか? つまり、それは本当に最初の条件でのみ必要ですか?

8
割り当てられた値ではなく、ユニットに評価されるScala割り当ての動機は何ですか?
割り当てられた値ではなく、ユニットに評価されるScala割り当ての動機は何ですか? I / Oプログラミングの一般的なパターンは、次のようなことです。 while ((bytesRead = in.read(buffer)) != -1) { ... しかし、これはScalaでは不可能です... bytesRead = in.read(buffer) .. bytesReadの新しい値ではなく、Unitを返します。 関数型言語から除外するのは興味深いことのようです。なぜそうなったのかしら?

14
Rのmagritrrからの%>%のようなPythonの機能パイプ
R(のおかげでmagritrr)では、を介してより機能的な配管構文で操作を実行できるようになりました%>%。これは、これをコーディングする代わりに、次のことを意味します。 > as.Date("2014-01-01") > as.character((sqrt(12)^2) これを行うこともできます: > "2014-01-01" %>% as.Date > 12 %>% sqrt %>% .^2 %>% as.character 私にとってこれはより読みやすく、これはデータフレームを超えたユースケースにまで及びます。Python言語は同様のものをサポートしていますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.