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

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

5
python:特定の条件でリスト(シーケンス)からアイテムの数を取得します
膨大な数のアイテムのリストがあると仮定します。 l = [ 1, 4, 6, 30, 2, ... ] そのリストからアイテムの数を取得したいのですが、アイテムは特定の条件を満たす必要があります。私の最初の考えは: count = len([i for i in l if my_condition(l)]) しかし、my_condition()でフィルタリングされたリストにも多数のアイテムがある場合、フィルタリングされた結果の新しいリストを作成することは、メモリの浪費にすぎないと思います。効率のために、私見、上記の呼び出しは以下よりも優れていることはできません: count = 0 for i in l: if my_condition(l): count += 1 一時的なリストを生成せずに特定の条件を満たすアイテムの数を取得するために達成する機能的な方法はありますか? 前もって感謝します。

18
Option [T]クラスのポイントは何ですか?
Option[T]Scalaの授業のポイントがわかりません。つまり、私はNone以上の利点を見ることができませんnull。 たとえば、次のコードについて考えてみます。 object Main{ class Person(name: String, var age: int){ def display = println(name+" "+age) } def getPerson1: Person = { // returns a Person instance or null } def getPerson2: Option[Person] = { // returns either Some[Person] or None } def main(argv: Array[String]): Unit = { val p = …

13
クロージャについて説明できますか(Pythonに関連しているため)?
私は閉鎖についてたくさん読んでいて、理解していると思いますが、自分自身や他の人の写真を曇らせることなく、誰かが閉鎖をできるだけ簡潔かつ明確に説明できることを望んでいます。どこで、なぜ使いたいのかを理解するのに役立つ簡単な説明を探しています。

1
型クラスMonadPlus、Alternative、Monoidの違いは?
標準ライブラリHaskellの型クラスMonadPlus、AlternativeおよびMonoidそれぞれが本質的に同じセマンティクスを持つ2つのメソッドを提供します。 空の値:mzero、empty、またはmempty。 オペレータa -> a -> a:一緒に型クラスの値を結合しmplus、<|>またはmappend。 3つすべてが、インスタンスが準拠する必要がある次の法律を指定します。 mempty `mappend` x = x x `mappend` mempty = x したがって、3つの型クラスはすべて同じメソッドを提供しているようです。 (Alternativeも提供someしてmany、彼らのデフォルトの定義は、通常は十分であるので、彼らはこの質問の面であまり重要ではないです。) だから、私の質問は:なぜこれらの3つの非常に類似したクラスがあるのですか?スーパークラスの制約が異なる以外に、それらの間に実際の違いはありますか?

3
ダミーのための再帰スキーム?
たくさんのリンクをたどったり、圏論の教科書を開いたりする必要のない、再帰スキームとコアカーションスキーム(カタモルフィズム、アナモルフィズム、ハイロモルフィズムなど)の非常にシンプルでわかりやすい説明を探しています。私はこれらのスキームの多くを無意識のうちに再発明し、コーディングの過程で頭の中でそれらを「適用」したと確信しています(私たちの多くが持っていると確信しています)が、私は(共)再帰スキームが何であるかわかりません使用と呼ばれます。(OK、私は嘘をついた。私はそれらのいくつかについて読んでいたので、この質問を促した。しかし、今日まで、私には手がかりがなかった。) プログラミングコミュニティ内でのこれらの概念の普及は、たとえばWikipediaだけでなく、他の場所でも見られる傾向のある禁止された説明や例によって妨げられていると思います。 それはおそらく彼らの名前によって妨げられています。いくつかの代替の、数学的な名前(バナナや有刺鉄線についての何か?)があると思いますが、私が使用する再帰スキームのよりかわいい名前が何であるかについてもわかりません。 二分木などの抽象データ型ではなく、単純な現実世界の問題を表すデータ型の例を使用すると役立つと思います。


5
Lodashを使用してJavaScript配列をチャンクに分割する
JavaScript配列をnサイズのチャンクに分割する必要があります。 例:この配列が与えられた ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"] およびn4に等しい、出力は次のようになります。 [ ["a1", "a2", "a3", "a4"], ["a5", "a6", "a7", "a8"], ["a9", "a10", "a11", "a12"], ["a13"] ] 私はこの問題の純粋なJavaScriptソリューションを知っていますが、すでにLodashを使用しているので、Lodashがこれに対してより良いソリューションを提供するかどうか疑問に思っています。 編集: アンダースコアソリューションがどれだけ遅いかを確認するために、jsPerfテストを作成しました。

5
Scalaカリー化と部分的に適用された機能
私はここについてのいくつかの質問があることを認識するものカリー化と部分的に適用される機能がありますが、私は彼らがどのように異なるかについて尋ねています。簡単な例として、偶数を見つけるためのカリー化された関数を次に示します。 def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def modN(n: Int)(x: Int) = ((x % n) == 0) したがって、これを使用するには、次のように書くことができます。 val nums = List(1,2,3,4,5,6,7,8) println(filter(nums, modN(2)) これは次を返します:List(2,4,6,8)。しかし、私はこの方法で同じことができることを発見しました: def modN(n: Int, x: Int) = ((x % n) …


6
(機能的?)プログラミングの文脈で「具体化」と「具体化」はどういう意味ですか?
Haskellと関数型プログラミングに関するブログ(特にsigfpeのブログ)でこの用語をよく読んでいますが、それが何を意味するのかわかりません。私はほとんどの場合それを知らなくても大丈夫ですが、私が知っていれば、おそらくテキストをもっとよく理解していたでしょう。グーグルは私を助けませんでした。私は技術的なもので迷子になります。 また、世界の非技術的な意味(「抽象的対象を変える」)は、コードで何かを具体化することが実際に何を意味するのかを理解するのに役立ちません。 私はコンピュータサイエンスの概念が少し遅いので、コードを使った実用的な例がいいでしょう。:P


8
コンストラクターに引数を持つJava8サプライヤー
サプライヤーが引数なしのコンストラクターのみをサポートするのはなぜですか? デフォルトのコンストラクターが存在する場合、これを行うことができます。 create(Foo::new) しかし、唯一のコンストラクターが文字列を取る場合、私はこれをしなければなりません: create(() -> new Foo("hello"))

3
関数型プログラミングの「部分関数」とは、正確にはどういう意味ですか?
私の理解によると、部分関数は、関数に渡すパラメーターが予想よりも少ないことで得られる関数です。たとえば、これがPythonで直接有効だった場合: >>> def add(x,y): ... return x+y ... >>> new_function = add(1) >>> new_function(2) 3 上記のスニペットでnew_functionは、部分的な関数です。ただし、Haskell Wikiによれば、部分関数の定義は 部分関数は、指定されたタイプのすべての可能な引数に対して定義されていない関数です。 だから、私の質問は、「部分的な機能」とは正確には何を意味するのですか?

2
再帰的な合計タイプを処理するときにコードの重複を減らす方法
私は現在、プログラミング言語の簡単なインタープリターに取り組んでおり、次のようなデータ型があります。 data Expr = Variable String | Number Int | Add [Expr] | Sub Expr Expr そして、私は次のような単純なことを行う多くの関数を持っています: -- Substitute a value for a variable substituteName :: String -> Int -> Expr -> Expr substituteName name newValue = go where go (Variable x) | x == name = Number newValue go …

2
Haskell:Typeclass vs関数を渡す
私には、型クラスを使用するのではなく、常に関数の引数を渡すことができるようです。たとえば、等価型クラスを定義するのではなく、 class Eq a where (==) :: a -> a -> Bool そして、型引数を示すために他の関数でそれを使用することはのインスタンスでなければならないEq: elem :: (Eq a) => a -> [a] -> Bool elemタイプクラスを使用せずに関数を定義し、代わりに機能する関数引数を渡すことはできませんか?

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