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

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

9
Java SE 8にはペアまたはタプルがありますか?
Java SE 8で遅延関数操作をいじってmapいます。iペア/タプルへのインデックスを作成し(i, value[i])、次にfilter2番目のvalue[i]要素に基づいて、最後にインデックスのみを出力します。 私はまだこれに苦しむ必要があります:JavaのC ++ Pair <L、R>に相当するものは何ですか?ラムダとストリームの大胆な新時代に? 更新:かなり単純化した例を紹介しました。これには、@ dkatzelが提供するきちんとしたソリューションが含まれています。ただし、一般化されません。したがって、より一般的な例を追加します。 package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, false, true, false, true}, {false, false, false, true, false, true}, {false, false, false, true, false, true}, …

7
functoolsパーシャルはどのように機能しますか?
functoolsでパーシャルがどのように機能するかについて頭をつかむことができません。ここに次のコードがあります: >>> sum = lambda x, y : x + y >>> sum(1, 2) 3 >>> incr = lambda y : sum(1, y) >>> incr(2) 3 >>> def sum2(x, y): return x + y >>> incr2 = functools.partial(sum2, 1) >>> incr2(4) 5 今ラインで incr = lambda y : sum(1, y) …


6
Java 8ストリームAPIでカウントしてグループ化する
Java 8ストリームAPIでグループ化を行う簡単な方法を見つけようとすると、この複雑な方法が出てきます。 List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, List<String>> collect = list.stream().collect( Collectors.groupingBy(o -> o)); System.out.println(collect); List<String[]> collect2 = collect .entrySet() .stream() .map(e -> new String[] { e.getKey(), String.valueOf(e.getValue().size()) }) .collect(Collectors.toList()); collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1])); 私はあなたの入力に感謝します。



9
関数型プログラミング言語と命令型プログラミング言語の違いは何ですか?
C#、Visual Basic、C ++、Javaなどのオブジェクト指向プログラミング(OOP)言語を含むほとんどの主流言語は、主に命令型(手続き型)プログラミングをサポートするように設計されていますが、Haskell / goferのような言語は純粋に機能的です。これらの2つのプログラミング方法の違いは何ですか? プログラミングの方法を選択することはユーザーの要件に依存することはわかっていますが、関数型プログラミング言語を学ぶことが推奨されるのはなぜですか?

23
Node.jsで非同期関数の長いネストを回避する方法
DBからのデータを表示するページを作成したいので、DBからデータを取得する関数をいくつか作成しました。私はNode.jsの初心者なので、理解している限り、すべてを1つのページ(HTTP応答)で使用したい場合は、すべてをネストする必要があります。 http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var html = "<h1>Demo page</h1>"; getSomeDate(client, function(someData) { html += "<p>"+ someData +"</p>"; getSomeOtherDate(client, function(someOtherData) { html += "<p>"+ someOtherData +"</p>"; getMoreData(client, function(moreData) { html += "<p>"+ moreData +"</p>"; res.write(html); res.end(); }); }); }); そのような関数がたくさんあると、入れ子が問題になります。 これを回避する方法はありますか?複数の非同期関数を組み合わせる方法に関係していると思います。これは基本的なことのようです。

2
zygohistomorphic prepromorphismsの実際のアプリケーション
はい、これらは: {-#LANGUAGE TypeOperators, RankNTypes #-} import Control.Morphism.Zygo import Control.Morphism.Prepro import Control.Morphism.Histo import Control.Functor.Algebra import Control.Functor.Extras import Control.Functor.Fix import Control.Comonad.Cofree zygohistomorphic_prepromorphism :: Functor f => Algebra f b -> GAlgebra f (ZygoT (Cofree f) b) a -> (f :~> f) -> FixF f -> a zygohistomorphic_prepromorphism f = g_prepro (distZygoT (liftAlgebra …

7
foldrとfoldl(またはfoldl ')の関係
まず、私が読んでいるReal World Haskellは、を使用foldlせず、代わりにを使用するように言っていますfoldl'。だから私はそれを信頼しています。 しかし、私はfoldrvs をいつ使うべきか迷っていますfoldl'。私の目の前では、それらがどのように機能するかについての構造がわかりますが、私は愚かすぎて、「どちらが良いか」を理解できません。どちらも同じ答えを返すので、どちらを使用しても問題にはならないように思えます(そうではありませんか?)。実際、このコンストラクトに関する私の以前の経験は、Ruby injectとClojureの経験でありreduce、これらには「左」バージョンと「右」バージョンがないようです。(サイド質問:彼らはどのバージョンを使用していますか?) 私のような賢い挑戦的なソートを助けることができるどんな洞察も大いに感謝されます!

13
Cの関数型プログラミングにはどのようなツールがありますか?
最近、C(C ++ではなく)で関数型プログラミングを行う方法について多くのことを考えています。明らかに、Cは手続き型言語であり、実際には関数型プログラミングをネイティブでサポートしていません。 言語に関数型プログラミング構造を追加するコンパイラ/言語拡張機能はありますか?GCCは、言語拡張としてネストされた関数を提供します。ネストされた関数は親スタックフレームから変数にアクセスできますが、これはまだ成熟したクロージャーから遠く離れています。 たとえば、Cで本当に役立つと思うのは、関数ポインターが必要な場所ならどこでも、ラムダ式を渡して、関数ポインターに減衰するクロージャーを作成できることです。C ++ 0xにはラムダ式が含まれます(これは素晴らしいと思います)。しかし、私はストレートCに適用できるツールを探しています。 [編集]明確にするために、私は関数型プログラミングにより適したCの特定の問題を解決しようとしているのではありません。私がやりたいのなら、私はそこにどんなツールがあるのか​​知りたいだけです。

14
JDK8とラムダ(java.util.stream.Streams.zip)を使用したスト​​リームの圧縮
ラムダb93を使用するJDK 8では、ストリームを圧縮するために使用できるクラスjava.util.stream.Streams.zipがb93にありました(これは、チュートリアル「Java8ラムダを探索する」で説明されています。DhananjayNeneによるパート1)。この機能: 2つのストリームの要素を組み合わせた結果を要素とする、レイジーで順次結合されたStreamを作成します。 ただし、b98ではこれがなくなりました。実際には、Streamsクラスはb98のjava.util.streamでさえアクセスできません。 この機能は移動されましたか。移動されている場合、b98を使用してストリームを簡潔に圧縮するにはどうすればよいですか? 私が考えているアプリケーションは、このShenのJava実装にあります。 static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) (b98の機能を使用しない)かなり冗長なコードで機能します。

2
lodashのincludeメソッドを使用して、オブジェクトがコレクション内にあるかどうかを確認するにはどうすればよいですか?
lodashを使用すると、基本的なデータ型のメンバーシップを次のように確認できますincludes。 _.includes([1, 2, 3], 2) > true ただし、以下は機能しません。 _.includes([{"a": 1}, {"b": 2}], {"b": 2}) > false コレクションを検索する次のメソッドはうまく機能するように見えるので、これは私を混乱させます: _.where([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} _.find([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} 何が悪いのですか?コレクション内のオブジェクトのメンバーシップを確認するにはどうすればよいincludesですか? 編集:質問は元々lodashバージョン2.4.1向けでしたが、lodash 4.0.0向けに更新されました

4
Swiftコンパイラエラー:文字列連結の「式が複雑すぎます」
これは何よりも面白いと思います。私はそれを修正しましたが、原因について疑問に思っています。エラーは次のとおりDataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressionsです:。なぜ文句を言うのですか?可能な限り最も単純な表現のようです。 コンパイラはcolumns + ");";セクションを指します func tableName() -> String { return("users"); } func createTableStatement(schema: [String]) -> String { var schema = schema; schema.append("id string"); schema.append("created integer"); schema.append("updated integer"); schema.append("model blob"); var columns: String …

7
lapplyとdo.callの違いは何ですか?
私は最近Rを学んでいて、2つの関数で混乱しています:lapplyとdo.call。mapLispの機能とちょうど同じようです。しかし、なぜこのような異なる名前の2つの関数があるのでしょうか。なぜRは呼び出された関数を使用しないのmapですか?

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