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

関数型プログラミングは、プログラムの状態ではなく入力によって出力が決定される関数の連鎖評価によって計算問題を解決しようとするパラダイムです。このプログラミングスタイルでは、副作用と可変データは廃止され、通常は厳密に分離されます。

2
(基本的な)SQLクエリは、意味的に高次関数と同等ですか?
SQLは基本的にマップ+フォールド+フィルターのドメイン固有のインスタンスですか? 次のSQLのようです: SELECT name FROM fruits WHERE calories < 100 これは、次のマップ+フィルター+折りたたみ操作の構文糖です。 var fruits = [{id : 1, name: 'orange', calories : 100}, {id : 2, name : 'banana', calories : 150}, {id : 3, name: 'apple', calories : '50'}]; fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories }) …

2
引数が必要な場合と必要でない場合がある場合に、メソッドの引数としてOptionalを使用しない理由はありますか?
Java 8では、オプション/オプションの使用に関する記事がますます増えています。私は彼らが何を表現しようとしているのか理解しており、それらがリターンとして使用されている多くの例を見ています。ただし、デフォルト/オプションのパラメーターの構文を持たない言語でメソッド/関数の引数として使用されているのはわかりません。 Optional引数が必要かどうかにかかわらず、メソッドの引数として使用しない理由はありますか?ここに私が考えることができる例があります: Optional<Customer> lookupCustomer(String firstName, Optional<String> middleName, String lastName)

3
参照の透明性を壊す副作用
Scalaの関数型プログラミングは、参照の透明性を壊すことに対する副作用の影響を説明しています。 副次的影響。これは、参照の透明性に対する何らかの違反を意味します。 「置換モデル」を使用してプログラムを評価するSICPの一部を読みました。 参照透過性(RT)を使用した置換モデルを大まかに理解しているので、関数を最も単純な部分に分解できます。式がRTの場合、式を分解して常に同じ結果を得ることができます。 ただし、上記の引用が述べているように、副作用を使用すると置換モデルが壊れる可能性があります。 例: val x = foo(50) + bar(10) 副作用がない場合はfoo、どちらの関数を実行しても常に同じ結果がに返されます。しかし、それらに副作用がある場合、それらはレンチを置換モデルに混乱させる/投げる変数を変更します。bar x 私はこの説明に満足していますが、完全に理解していません。 私を修正して、RTを壊す副作用についての穴を埋めて、置換モデルへの影響についても議論してください。



2
割り当てなしで状態を維持する
関数型プログラミングを学んでいて、割り当てを使用せずに特定のシナリオを実装する方法を理解できません。次の簡単な問題は、私の混乱をかなり要約しています。 特定のデータ構造の変更に関するイベントを受け取り、このデータ構造が特定の状態に達したときにイベントを発行するプログラムを記述します。 だから私は維持しているデータ構造のコピーを持っています datastructure_copy::DataStructure 変化したときに発生するイベントのストリームがあります。 datastructure_changes::Stream Change データ構造に変更を適用して新しいコピーを返す関数があります。 apply_change::Change -> DataStructure -> DataStructure そして、データの状態が目的の状態に達したかどうかをチェックする述語があります。 is_ready::DataStructure ->Boolean つまり、ストリームで機能する「reduce」のようなものが必要です。 これを実装する1つの方法は、変更が到着するたびに状態を再計算することですが、これは実際的ではないようです。私はStateモナドで少し遊んでみましたが、別の問題を解決することを意図しているように見えます。 それを行う別の方法はありますか? 私の質問は純粋に概念的なものであり、Haskellにはあまり詳しくありません。

5
この問題の純粋に機能的な解決策は、命令と同じくらいクリーンであることができますか?
私はPythonで次のような練習をしています。 多項式は、指数によって指数が決定されるような係数のタプルとして与えられます。例:(9,7,5)は、9 + 7 * x + 5 * x ^ 2を意味します 与えられたxの値を計算する関数を書く 最近関数型プログラミングに夢中になっているので、私は書きました def evaluate1(poly, x): coeff = 0 power = 1 return reduce(lambda accu,pair : accu + pair[coeff] * x**pair[power], map(lambda x,y:(x,y), poly, range(len(poly))), 0) 私はそれを読めないと思うので、私は書きました def evaluate2(poly, x): power = 0 result = 1 return reduce(lambda accu,coeff …

4
foldの関数引数の名前は何ですか
高階関数に減らす/折りたたみがあれば、機能の引数の、名前は何か? 私は、単純な分析(列の最小値、最大値、平均値など)を生成するために行が折りたたまれているモナディックテーブル処理ライブラリに取り組んでいます。したがって、fold関数の引数の適切な名前と、MLコミュニティ(またはHaskellまたはCommon Lispの2番目と3番目の候補)で確立されている名前が興味深いものを探しています。 のような名前fはfold関数の説明では一般的ですが、説明的ではなく、名詞の方が適しています。

2
計算と副作用を分離するとき、「世界に尋ねる」コードをどこに置くのですか?
よるとコマンドクエリ分離原則と同様に、データにおける思考とのClojureとDDD 1は、計算や意思決定から(世界の変更)の副作用を分ける必要があるプレゼンテーションので、両方の部分を理解し、テストするために容易になるという。 これは未回答の質問を残します。境界に対して相対的に、「世界に尋ねる」ことをどこに置くべきでしょうか?一方では、外部システム(データベース、エクステンションサービスのAPIなど)からのデータの要求は参照透過的ではないため、純粋な計算コードや意思決定コードと一緒に置かれるべきではありません。一方で、どのデータを要求する必要があるかが事前にわからない場合があるため、計算部分から切り離して引数として渡すことは問題があるか、おそらく不可能です。

7
コーディングの機能的なスタイルをチームに紹介するにはどうすればよいですか?
私のグループのほとんどの人が、関数型プログラミングをほとんどまたはまったく理解していないオブジェクト指向プログラミングのバックグラウンドを持っている状況にあります。クロージャーのような基本的なことすらありません。 それらを関数型コーディングスタイルに導入する良い方法とは何かについて何か提案はありますか?私たちが行う多くのコーディングは、特定のケースに対して機能的な方法を実行する場合、短縮することができます。 機能とコーディングのパラダイムについては、すでにいくつかのプレゼンテーションを行っています。残念ながら、Haskell(基本的にレガシーコードはC、C ++、Java)のような適切な関数型プログラミング言語を使用していないため、これらを使って何でもする必要があります。

3
長いパラメーターリストと長い状態変数リスト
C ++の本では、ほとんどのパラメーターはクラスの状態変数にリファクタリングできるため、長いパラメーターリストを持つ関数は必要なくなったと著者は述べています。一方、関数型プログラミングの本は、状態変数はバグが発生しやすくコードの並列化が困難な副作用を引き起こすため、悪であると述べています。私は困惑しています。コードは、状態変数を関数パラメーターリストに移動することにより、可能な限り状態変数に依存しないようにする必要がありますか?

4
STDOUTとその不純
私は関数型プログラミングに関する多くの本や記事を読みましたが、いくつかの非常に基本的な概念を確実に理解できなかったことを恥ずかしく思っています。 関数型プログラミングの主なアイデアの1つは、同じ入力は常に同じ出力を生成するということです。したがって、データベースのクエリやファイルの書き込みは、純粋に機能的なスタイルで行うことはできません。たとえば、モナドが必要な理由の1つです。 問題は、なぜSTDOUT出力を不純なものと見なすのかです。はい、どのファイルハンドラーも危険です-データが常に書き込まれると確信することはできません。しかし、STDOUTはどうですか?なぜそれを信頼できないものと考えるべきなのでしょうか?評価自体の方が信頼性が低いですか?つまり、トリガーを引いて、計算を中断することができます。

3
関数型プログラミング言語には、コンパイル時の最適化を行う機会がありますか?
私は「実世界のための関数型プログラミング」という本を読んでいました。まず、命令型プログラミング言語と関数型プログラミング言語の比較から始めました。そして、関数型プログラミングの「値」と「式」が命令型プログラミングの「変数」と「関数」とどのように異なるかを述べました。ディスカッションから私は次のようなアイデアを開発しました- 関数型プログラミング言語には、対応する命令型言語よりもコンパイル時間の最適化を行う機会が多くあります。 本当ですか?

7
関数型プログラミングの引数[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 私は最近、F#を楽しみに学んでいます(私はVB.NET/C#の開発者です)。理論的にはそうです。しかし、C#ではなくF#でコーディングすることを選択するシナリオを考えるのに苦労しています。何か案は?

2
関数型プログラミング言語は副作用を許可しませんか?
ウィキペディアによると、宣言型である関数型プログラミング言語は、副作用を許可していません。一般に宣言型プログラミングでは、副作用を最小限に抑えたり、排除したりします。 また、ウィキペディアによると、副作用は状態変化に関連しています。したがって、関数型プログラミング言語は、その意味では、状態を保存しないため、実際には副作用を排除します。 しかし、それに加えて、副作用には別の定義があります。副作用 値を返す以外に、呼び出し側の関数または外界との観測可能な相互作用があります。たとえば、特定の関数は、グローバル変数または静的変数の変更、その引数の1つの変更、例外の発生、ディスプレイまたはファイルへのデータの書き込み、データの読み取り、または他の副作用のある関数の呼び出しを行う場合があります。 その意味で、関数型プログラミング言語は実際には副作用を許容します。外部の世界に影響を及ぼし、他の関数を呼び出し、例外を発生させ、ファイルに書き込むなどの無数の例があるからです。 それで、最後に、関数型プログラミング言語は副作用を許可するかどうか? または、何が「副作用」とみなされるか理解していないため、命令型言語では許可され、宣言型言語では許可されません。上記と私が得た結果によると、副作用を排除する言語はないため、副作用について何か見落としているか、ウィキペディアの定義が誤っています。

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