問題タブ [higher-order-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Perlのハッシュのマップ
に相当するハッシュはありmap
ますか?
キーをループできることはわかっています。
scala - 複数の引数リストを使用してScalaコンストラクターを呼び出す
Scalaでは、複数の引数リストをとるメソッドを作成できます。
そしてそれをこのように呼びます:
クラスコンストラクターで同じことを行うにはどうすればよいですか?どうやって呼ぶの?
java - mapのような高階関数を記述したり、Javaでreduceしたりするにはどうすればよいですか?
Joel On Softwareの記事を読んで、高階関数を使用して、mapとreduceを使用してコードを大幅に簡素化するというアイデアについて説明しました。彼は、これをJavaで行うのは難しいと述べました。記事: http: //www.joelonsoftware.com/items/2006/08/01.html
以下の記事の例では、配列をループし、配列内の各要素の引数として渡された関数fnを使用しています。
これは、実際には以下のように呼び出されます。
理想的には、配列、または可能であれば任意のタイプのコレクションで機能するマップ関数を作成したいと思います。
私はインターネットで周りを見回していて、このテーマに関するリソースを見つけるのに苦労しています。まず、Javaで無名関数は可能ですか?これを別の方法で行うことは可能ですか?Javaの将来のバージョンで利用できるようになりますか?可能であれば、どうすればよいですか?
これがJavaで不可能な場合、匿名関数はソフトウェアの世界で非常に強力なツールであると想像するので、人々が同じ効果を達成するために使用するある種の「パターン」/手法があると思います。私が見つけた唯一の同様の質問はこれでした:Javaジェネリック-mapのような高階関数を実装することは私にはまったく意味がありません。
function - 高階関数のいくつかの興味深い使用法は何ですか?
私は現在関数型プログラミングコースを受講していますが、高階関数と第一級市民としての機能の概念に非常に面白がっています。ただし、実際に役立つ、概念的に驚くべき、または単純に興味深い高階関数の多くはまだ考えられません。(典型的でかなり鈍い、、などの機能に加えてmap
)filter
。
そのような興味深い関数の例を知っていますか?
たぶん、関数を返す関数、関数のリスト(?)を返す関数などです。
私が現在学んでいる言語であるHaskellの例をいただければ幸いです:)
arrays - マップ/フィルターが...何もない配列で機能しないのはなぜですか?
すべてのタイプのサブタイプはありませんか?
これが機能しないのは奇妙です。
これは指定されていますか、機能ですか、それともバグですか?
f# - 逆カレー?
特定の方法で関数を構成したいと思います。これらの 2 つの関数を疑似コードで検討してください (F# ではありません)。
私が F# でやりたいことは、それを理解することです。
コードlet F2 = F1 * 10
は F1: と同じ署名を与えval F2 : int -> int -> int
、呼び出しF2 2 3
は 50: (2 + 3) * 10 になります。それはかなり賢いでしょう...
何が起こるかはかなり異なります。最初の行は期待どおりです。
しかし、2 行目を追加すると、let F2 = F1 * 10
F# がスローされます。the type int does not match the type 'a -> 'b -> 'c
それはそれとそのF1を今訴えていrequires member ( + )
ます。
もちろん、次のように綴ることもできます。
しかし、今では C# を使ったほうがよかったかもしれません。タプルされた引数は、F# の優雅さの多くを壊します。また、私の実際の関数 F1 と F2 には 2 つだけよりも多くの引数があるため、これはまさに私が F# を使用して回避したかったことと同じです。次のように言うと、より自然になります。
私が(ほぼ)それを行う方法はありますか?
追加のクレジット: これらのエラー メッセージは正確にどうなっているのですか? let F2 = F1 * 10
2 行目で 1 行目の入力が変わるのはなぜですか?
ご意見ありがとうございます。
ゲルト・ヤン
update 説明されていることを (ほぼ) 実行する 2 つのアプローチ。
タプルを使用するもの。2 行目は少し風変わりに見えますが、問題なく動作します。小さな欠点は、現在カリー化を使用できないか、さらに風変わりなコードを追加する必要があることです。
別のアプローチは、レコードを使用することです。これはもう少し単純明快で、一見すると簡単に理解できますが、より多くのコードと式が必要になります。F# の優雅さの一部を取り除き、C# のように見えます。
scala - Scala での暗黙的な変換と高次の適用メソッドの問題
String
高階関数を適用できる新しい apply メソッドで拡張しようとしています。例:
そのため、関数を受け取る apply メソッドを使用して、文字列から何かへの暗黙的な変換を定義しましたList[String] => List[String]
。
しかし、私がそれを使用しようとすると、変換は Predef に変換String
されるものと衝突しStringOps
ます。
required: ?{val apply: ?}
私のタイプの引数を取るメソッド ( ) ではなく、一般的な適用メソッド ( ) を探すのはなぜList[String] => List[String]
ですか?
編集:
変数を表現するために裸の文字列を使用しないようにすることでこれを解決しました(プロジェクトではgithubで作業しています)。したがって、次のようになります。
そして、暗黙を使用する必要はありません。
さらにアップデート
scala は、検索時に暗黙の結果の型で型パラメーターを検索するようです。私はこれを機能させますが、関数パラメーターと適用メソッドを使用したシナリオは機能しません。どうして?
functional-programming - 条件付きのリストに追加するにはどうすればよいですか?
関数型プログラミングに関する大学のコースがあり、SMLを使用しています。試験の準備として、私は解決策のない古い試験セットのいくつかに取り組んでいます。
私が本当に問題を抱えている唯一の質問の1つは、次の質問を使用していfoldl
ます。
プログラムのスケルトンについて考えてみましょう。funaddGtkxs = List.foldl(...)... xs; addGt k xsがxs内の要素の合計であり、kより大きいように、2つの欠落している部分(ドットで表されます...)を入力します。たとえば、addGt 4 [1、5、2、7、4、8] = 5 + 7 + 8 = 20
これは本当に簡単なことだと思いますが、foldlとfoldrの機能を理解するのは非常に困難です。
私が今持っているのは次のとおりです(私のコンパイラに聞いたら、これは非常に間違っているようです!):
この質問について助けていただければ幸いです。またfoldl
、foldr
機能に光を当てる非常に短いコメントかもしれません。
clojure - Clojure の高階関数を呼び出す
次のような関数を返す関数を定義すると:
次に、結果をシンボルに割り当てることができます。
そしてそれを呼び出します:
(add-n 1)
の結果を新しいシンボルに割り当てずに呼び出すにはどうすればよいですか? 以下は、この出力を生成します。
は#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>
、生成された関数への内部参照です。
clojure - Clojureオブジェクトとカプセル化のための高階関数
これは私の以前の質問のフォローアップです。
Let Over Lambdaを読んで奇妙なオブジェクトスキームを思いついたので、プロトコルに勝る利点は考えられませんが、意見を聞きたいと思います。高階関数とカプセル化の使用を検討しているところです。
次のようなオブジェクトを使用できます。
次の方法でアクセサメソッドを取得します。
しかし、アクセサーを呼び出す方法がわかりません。
「インスタンス」変数のすべての変更はSTMで発生するため、作成されたオブジェクトはスレッドセーフです。
更新:新しく改良されたバージョン: