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

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

4
Scalaのリストを2つのフィールドでソートする方法は?
Scalaのリストを2つのフィールドで並べ替える方法。この例では、lastNameとfirstNameで並べ替えます。 case class Row(var firstName: String, var lastName: String, var city: String) var rows = List(new Row("Oscar", "Wilde", "London"), new Row("Otto", "Swift", "Berlin"), new Row("Carl", "Swift", "Paris"), new Row("Hans", "Swift", "Dublin"), new Row("Hugo", "Swift", "Sligo")) rows.sortBy(_.lastName) 私はこのようなことを試します rows.sortBy(_.lastName + _.firstName) しかし、それは機能しません。だから私は良い簡単な解決策に興味があります。

10
Haskellの構成(。)とF#のパイプ転送演算子(|>)
F#では、パイプ転送演算子の使用|>がかなり一般的です。ただし、Haskellでは(.)、関数の構成、が使用されているのを見ただけです。私はそれらが関連していることを理解していますが、パイプフォワードがHaskellで使用されていないという言語上の理由はありますか、それとも何か他のものですか?


7
MATLABのマップ関数?
MATLABにMap関数がないことに少し驚いたので、それがないと生きていけないので、自分でハッキングしました。より良いバージョンはありますか?不足している、MATLAB用のやや標準的な関数型プログラミングライブラリはありますか? function results = map(f,list) % why doesn't MATLAB have a Map function? results = zeros(1,length(list)); for k = 1:length(list) results(1,k) = f(list(k)); end end 使い方は例えば map( @(x)x^2,1:10)


5
「関数型プログラミング」の「ポイントフリー」スタイルとは何ですか?
私が最近気付いたフレーズは、「ポイントフリー」スタイルのコンセプトです... 最初に、この質問と、これもありました。 その後、私はここで彼らが「議論する価値のあるもう1つのトピックは、ポイントフリースタイルに対する作者の嫌いなこと」に言及していることを発見しました。 「ポイントフリー」スタイルとは?誰かが簡潔に説明できますか?「自動」カレーと関係がありますか? 私のレベルのアイデアを得るために-私は自分でSchemeを教えており、簡単なSchemeインタープリターを書きました...私は「暗黙の」カレーが何であるかを理解していますが、HaskellやMLを知りません。


4
fold-leftを使用するタイミングとfold-rightを使用するタイミングをどのようにして知っていますか?
fold-leftは左寄りのツリーを生成し、fold-rightは右寄りのツリーを生成することを認識していますが、フォールドに到達すると、どの種類のフォールドを決定しようとして頭痛を誘発する思考に行き詰まることがあります。適切です。私は通常、問題全体をほどき、問題に当てはまるようにfold関数の実装を段階的に実行します。 だから私が知りたいのは: 左に折りたたむか右に折りたたむかを決定するための経験則は何ですか? 私が直面している問題を踏まえて、どのタイプの折り目を使用するかをすばやく決定するにはどうすればよいですか? 要素リストのリストを単一のリストに連結するflattenと呼ばれる関数をフォールドを使用して記述する例がScala by Example(PDF)にあります。その場合、正しいリストは適切な選択です(リストを連結する方法を考えると)が、その結論に達するには少し考えなければなりませんでした。 (関数型)プログラミングではフォールディングが非常に一般的なアクションであるため、この種の決定を迅速かつ自信を持って行えるようにしたいと思います。だから...何かヒントはありますか?

9
関数型プログラミング-不変性は高価ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 問題は2つの部分に分かれています。最初は概念的なものです。次に、同じ質問をScalaでより具体的に見ていきます。 プログラミング言語で不変のデータ構造のみを使用すると、実際には特定のアルゴリズム/ロジックの実装が本質的に計算コストが高くなりますか?これは、不変性が純粋に関数型言語の中心的な信条であることを示しています。これに影響を与える他の要因はありますか? より具体的な例を見てみましょう。クイックソートは、通常、メモリ内データ構造に対する可変操作を使用して教えられ、実装されます。可変バージョンに匹敵する計算およびストレージオーバーヘッドを備えたPURE機能的な方法で、そのようなことをどのように実装しますか。特にScalaで。以下にいくつかの大まかなベンチマークを含めました。 詳細: 私は命令型プログラミングのバックグラウンド(C ++、Java)から来ています。私は関数型プログラミング、特にScalaを調査しています。 純粋な関数型プログラミングの主要な原則のいくつか: 機能は一流の市民です。 関数には副作用がないため、オブジェクト/データ構造は不変です。 最近のJVMはオブジェクト作成に関して非常に効率的であり、ガベージコレクションは存続期間の短いオブジェクトに対して非常に安価ですが、オブジェクトの作成を最小限に抑える方が適切でしょう。少なくとも、同時実行性とロックが問題にならないシングルスレッドアプリケーションでは。Scalaはハイブリッドパラダイムであるため、必要に応じて、可変オブジェクトを使用して命令型コードを記述することを選択できます。しかし、オブジェクトを再利用し、割り当てを最小限にしようと何年も費やした人として。それさえ許さない思想の学校をよく理解して欲しい。 特定のケースとして、このチュートリアル 6のこのコードスニペットに少し驚いた。これには、Java版のQuicksortがあり、その後に、見栄えの良いScalaの実装が続きます。 実装をベンチマークする私の試みはここにあります。詳細なプロファイリングは行っていません。しかし、私の推測では、割り当てられるオブジェクトの数は線形(再帰呼び出しごとに1つ)であるため、Scalaバージョンの方が遅くなります。テールコールの最適化が機能する可能性はありますか?私が正しい場合、Scalaは自己再帰呼び出しの末尾呼び出しの最適化をサポートしています。だから、それはそれを助けるだけであるべきです。Scala 2.8を使用しています。 Javaバージョン public class QuickSortJ { public static void sort(int[] xs) { sort(xs, 0, xs.length -1 ); } static void sort(int[] xs, int l, int r) { if (r >= l) return; int pivot = …

5
Scalaのval-mutableとvar-immutableの比較
可変コレクションでvalを使用する場合と、不変コレクションでvarを使用する場合について、Scalaにガイドラインはありますか?それとも、不変のコレクションでvalを本当に目指すべきでしょうか? 両方の種類のコレクションがあるという事実は、私に多くの選択肢を与えてくれます、そして私はしばしばその選択をする方法を知りません。

10
カリーハワード同型から生じる最も興味深い等価物は何ですか?
私はカレーハワード同型に出会ったのは、プログラミングの人生の比較的遅い時期でした。おそらく、これが私を完全に魅了する一因となっています。これは、すべてのプログラミング概念について、形式論理には正確な類似物が存在することを意味し、その逆も同様です。ここにそのような類推の「基本的な」リストがあります。 program/definition | proof type/declaration | proposition inhabited type | theorem/lemma function | implication function argument | hypothesis/antecedent function result | conclusion/consequent function application | modus ponens recursion | induction identity function | tautology non-terminating function | absurdity/contradiction tuple | conjunction (and) disjoint union | disjunction (or) -- corrected by …


14
中規模のClojureサンプルアプリケーション?
「ベストプラクティス」の例として使用できる中規模のClojureサンプルアプリケーションはありますか。また、このようなアプリケーションがコードとコード編成の観点からどのように見えるかを確認する良い方法はありますか?Webアプリケーションは私にとって特に興味深いでしょうが、最も重要なことは、プログラムが一般的に役立つ何か(ブログ、バグ追跡、CMSなど)を実行することであり、実際に実装する必要がなかった数学的なものではありません世界(N-クイーン問題の解決、生命のシミュレーション、フィボナッチ数列の生成、および関数プログラミング言語の通常の運賃)。 ありがとう!

1
パラモーフィズムとは何ですか?
この古典的な論文を読んで、私はパラモーフィズムにこだわっています。残念ながら、このセクションはかなり薄く、ウィキペディアのページには何も書かれていません。 私のHaskellの翻訳は: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) しかし、私はそれをしていません-私は型シグネチャや希望する結果について直感を持っていません。 パラモーフィズムとは何ですか?実際に役立つ例は何ですか? はい、私はこれらの 質問を見ましたが、それらはパラモーフィズムを直接カバーしておらず、参考資料として役立つかもしれないが、学習資料としては役立つかもしれないリソースのみを指しています。

1
なぜ民話とラムダがそれほど違うのですか?
DrBooleanの本を読んでJavaScript FPを学んでいます。 関数型プログラミングライブラリを探しました。ラムダと民話を見つけました。どちらも関数型プログラミングライブラリであると主張しています。 しかし、それらはとても異なります: Ramdaには、リストを処理するためのユーティリティ関数(マップ、リデュース、フィルター、およびピュア関数:カレー、コンポーズ)が含まれているようです。モナド、ファンクターを扱うものは何も含まれていません。 ただし、Folktaleにはリストや関数のユーティリティは含まれていません。それはモナドのようなjavascriptでいくつかの代数構造を実装しているようです:多分、タスク... 実際、私はより多くのライブラリーを見つけました。それらはすべて2つのカテゴリーに分類されるようです。アンダースコアとロダッシュはラムダのようなものです。ファンタジーランド、ポイントフリーファンタジーは民話のようなものです。 これらの非常に異なるライブラリの両方を機能的と呼ぶことができますか?

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