問題タブ [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.
compiler-construction - 構造体を関数のようなリストにコンパイルする高階関数のテスト
私はこのようなマップを持っています(通常のブール演算子を使用してネストできます。モジュール「ブール値」と「データ」を使用すると、「左」、「右」、「演算子」などの適切な値が含まれます「および」 、 "か否か"):
私が欲しいのは、 (fn [context] ...) リストで補間できるリストを返す関数です。ここで、スローするものに対して実行できます。
上記の構造を考えると、関数に補間された後の最終結果は次のようになります。
したがって、解析/コンパイル関数は (= ...) 部分のみを返す必要があります。私は興味をそそるほど近いものを持っています:
私のテストでは、これは次を返します。
context パラメータに注目してください。名前空間が付けられており、これが私のテストを失敗させている原因です。何かできると確信していますが、シンボルを呼び出すと、シンボルがまだ存在しないため、シンボルが定義されていません。
acc パラメーターについて: 最終的にはこの関数から再帰を削除し、acc を使用して再帰し、戻り値をアキュムレータにコンスすることになると思います。ただし、それはもう少し先のことです。
binding - さまざまなスコープ/バインディングルールとパラメータの受け渡しを使用したこのプログラムの出力?
これは私の次の試験のための(本当に)難しい練習です。これは、スコープ、バインディング、およびパラメーターの受け渡しのルールを理解することを目的としています。出力された最初の3つの数字でさえ理解できません、これは私を夢中にさせています。
動的スコープ、浅いバインディング、および左から右への式の評価を備えたこのCのようなプログラムの出力は何ですか?
haskell - foldl1が(==)演算子の適用に失敗するのはなぜですか?
プレリュードから:
foldl1:リストの最初の2つの項目を取得し、それらに関数を適用してから、この結果と3番目の引数を関数にフィードします。
なぜこのようなものを書くことができないのですか?
lambda - ラムダは高階関数の一種ですか?
求人情報の 1 つでこの質問を見て、ラムダ関数とは何か、高次関数との関係を尋ねています。私はすでにラムダ関数の使い方を知っていますが、それを説明する自信がないので、少しグーグルしてこれを見つけました:ラムダ (関数) とは何ですか? そしてこれhttp://en.wikipedia.org/wiki/Higher-order_function
少なくとも1つ以上の関数を取るか、関数を返す必要があるというHOFの定義は、ラムダとは何かに適合するので、私の質問は..ラムダはHOFのタイプですか?
または、彼らの関係をさらに説明できる人はいますか?
scala - コレクション要素のフィールドを最初にマッピングせずに合計するには(foldLeft / reduceLeftなど)?
このクラスを検討してください。
すべての人の年齢の合計を取得するには、次のようなコードを記述できます。
ただし、を使用する場合はsum
、最初に値をマップする必要があり、コードは次のようになります。
中間コレクションを作成せずsum
にメソッドを使用するにはどうすればよいですか?
(このような「最適化」は、タイトなループで実行されていない場合、おそらく実際のパフォーマンスの違いはないことを知っています。また、レイジービューなどについても知っています。)
次のようなコードを持つことは可能ですか?
何をするfoldLeft
/reduceLeft
する?
list - Erlang:最小関数をリストフォールドとして書くことは可能ですか?
与えられた関数:
これを関数foldl
でこれと同じように使用できますか?
リストの残りの部分と比較される初期値を設定する必要があるため、それは不可能だと思います。たとえば、私が考えることができる恒等関数はありません。私は正しいですか?
構文はErlangで書かれていますが、Erlang以外のプログラマーも読めるようにする必要があります。
clojure - Clojureの高階関数
Clojureは素晴らしいです、私たちは皆これを知っています、しかしそれはポイントではありません。Haskellのような方法で高階関数を作成および管理する慣用的な方法は何でしょうか。Clojureでは、次のことができます。
ただし(sum 1)
、関数は返されません。エラーが発生します。もちろん、次のようなことができます。
この場合:
しかし、それは先に進む正しい方法のようには思えません。何か案は?
私はsum
関数の実装について話しているのではなく、より高いレベルの抽象化について話しているのです。従うべき慣用的なパターンはありますか?いくつかのマクロ?マクロを定義する最良の方法ですか、それとも代替ソリューションがありますか?
macros - DSL での Clojure マクロの使用
私は Clojure プロジェクトに取り組んでおり、DSL 用の Clojure マクロを書いていることがよくありますが、会社が実際の仕事で Clojure をどのように使用しているかを示す Clojure ビデオを見ていました。 DSL では、マクロを使用して構文糖衣を少し追加するだけです。これは、標準関数を使用して DSL を記述し、最後にいくつかのマクロを追加する必要があるということですか?
更新: この質問に対するさまざまな (そして面白い) 回答を読んだ後、多くの理由から、答えが最初に考えたほど明確ではないことに気付きました。
アプリケーションにはさまざまな種類の API があります (内部、外部)
API のユーザーにはさまざまなタイプがあります (何かをすばやく実行したいだけのビジネス ユーザー、Clojure エキスパート)。
定型コードを隠すマクロはありますか?
私は離れて質問についてもっと深く考えますが、あなたの答えは私に多くの考えを与えてくれたのでありがとう. また、Paul Graham が Christophe のビデオとは反対のことを考えており、マクロはコードベースの大部分 (25%) であるべきだと考えていることにも気付きました。
function - 高階関数
この質問から、講師が私に何を求めているのか理解できません。彼が私に何をしてほしいか説明してくれる人はいますか?
挿入ソート アルゴリズムの高次バージョンを定義します。それは定義関数です
そして、このビットが私を混乱させた場所です: そのような inssort fl は、要素 x が elementyif fx < f y の前に来るようにリスト l をソートします。
generics - 高次ポリモーフィズム + 値型
高次ポリモーフィズムは、値型を持つ型システム(.NET など) では使用/実装できないことをどこかで読んだことがあります。それは正しいですか、なぜですか?