タグ付けされた質問 「higher-order-functions」

4
なぜHaskell(GHC)はとても速いのですか?
Haskell(GHCコンパイラを使用)は、予想よりもはるかに高速です。正しく使用すると、低レベルの言語に近づくことができます。(Haskellersが行うのが好きなことは、Cの5%以内を試すことです(またはそれを打つこともできますが、GHCはHaskellをCにコンパイルするため、非効率的なCプログラムを使用していることになります)。私の質問は、なぜですか? Haskellは宣言型であり、ラムダ計算に基づいています。マシンアーキテクチャは明らかにチューリングマシンに基づいているため、必須です。実際、Haskellには特定の評価順序さえありません。また、マシンデータタイプを処理する代わりに、代数データタイプを常に作成します。 最も奇妙なのは高次関数です。関数をその場で作成し、それらを使い果たすと、プログラムが遅くなると考えるでしょう。しかし、より高次の関数を使用すると、実際にHaskellが高速になります。実際、Haskellコードを最適化するには、マシンのようにではなく、よりエレガントで抽象的なものにする必要があるようです。Haskellのより高度な機能は、それを改善しなければ、パフォーマンスに影響を与えるようには見えません。 これが不満に聞こえる場合は申し訳ありませんが、ここに私の質問があります。その抽象的な性質と物理マシンとの違いを考慮して、なぜHaskell(GHCでコンパイル)がそれほど高速なのですか? 注:私がCや他の命令型言語がチューリングマシンにいくらか似ている(しかし、HaskellがLambda計算に似ているというわけではない)理由は、命令型言語では有限数の状態(別名行番号)があるためです、およびテープ(RAM)とともに、状態と現在のテープがテープに対して何を行うかを決定します。チューリングマシンからコンピューターへの移行については、Wikipediaのエントリ「チューリングマシンの同等物」を参照してください。

7
ScalaのfoldLeftとreduceLeftの違い
私は基本的な違いを学んだの間foldLeftとreduceLeft foldLeft: 初期値を渡す必要があります reduceLeft: コレクションの最初の要素を初期値として受け取ります コレクションが空の場合は例外をスローします 他に違いはありますか? 同様の機能を持つ2つのメソッドがある特定の理由は?

11
空白を分解して削除するにはどうすればよいですか?
たとえば、次の文字列の要素から配列を作成したいとします。 $str = 'red, green, blue ,orange'; 私はあなたが爆発してそれらをループしてトリムできることを知っています: $arr = explode(',', $str); foreach ($arr as $value) { $new_arr[] = trim($value); } しかし、これを処理できる1行のアプローチがあるように感じます。何か案は?

4
ES6 Fat Arrowを使用してオブジェクトの配列を.filter()する方法
.filter大人を返すためにES6の矢印機能を使用しようとしています(ジャックとジル)。ifステートメントを使用できないようです。 ES6でこれを行うには、何を知る必要がありますか? var family = [{"name":"Jack", "age": 26}, {"name":"Jill", "age": 22}, {"name":"James", "age": 5 }, {"name":"Jenny", "age": 2 }]; let adults = family.filter(person => if (person.age > 18) person); // throws error (8:37) SyntaxError: unknown: Unexpected token (8:37) |let adults = family.filter(person => if (person.age > 18) person); 私の実際のES5の例: let …

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) しかし、私はそれをしていません-私は型シグネチャや希望する結果について直感を持っていません。 パラモーフィズムとは何ですか?実際に役立つ例は何ですか? はい、私はこれらの 質問を見ましたが、それらはパラモーフィズムを直接カバーしておらず、参考資料として役立つかもしれないが、学習資料としては役立つかもしれないリソースのみを指しています。

2
.map()などの高次関数はJavaScriptで内部的にどのように機能しますか?
今日、誰もがこの種の高次関数を使用して、少ないコードで期待できる結果を得ようとしています。しかし、これらの関数が内部でどのように機能するのか疑問に思います。 私が次のようなものを書いたとしましょう var numbers = [16, 25, 36]; var results = numbers.map(Math.sqrt); console.log(results); // [4, 5, 6] コードスニペットを実行する結果を非表示スニペットを展開 'number'配列の各要素が1つずつ反復していることを知っていますが、どうやって? 探してみましたが、まだ満足のいく答えが得られませんでした。

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

2
Haskellコードのフラグメントを組み合わせて全体像を把握する
これは私がどこかで見つけたコードですが、これがどのように機能するか知りたいです: findIndices :: (a -> Bool) -> [a] -> [Int] findIndices _ [] = [] findIndices pred xs = map fst (filter (pred . snd) (zip [0..] xs)) 出力:findIndices (== 0) [1,2,0,3,0]==[2,4]、ここpredで(==0)&xsは[1,2,0,3,0] 私の理解の一部を紹介します。 (zip [0..] xs) 上記の行が行うことは、リスト内のすべてにインデックスを付けることです。上記の入力の場合、次のようになります[(0,1),(1,2),(2,0),(3,3),(4,0)]。 (pred . snd) これはのようなものであることがわかりましたpred (snd (x))。私の質問は、xリストはzip行から作成されていますか?私はイエスに傾いていますが、私の推測は薄っぺらです。 次は、私の理解であるfstとsnd。そんなこと知ってる fst(1,2) = 1 そして snd(1,2) = …

3
このようなfoldlMの定義を書き留めるには、どのような知識やトレーニングが必要ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 7か月前に閉鎖。 最近、私は実際のケース生産システムの一部でHaskellを使用しようとしています。Haskell型システムは本当に私に大きな助けを提供してくれます。たとえば、あるタイプの関数が必要だと気付いたとき f :: (Foldable t, Monad m) => ( a-> b -> m b) -> b -> t a -> m b そこのような機能は、実際にあるfoldM、foldlMとfoldrM。 ただし、本当にショックを受けたのは、次のようなこれらの関数の定義です。 foldlM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b foldlM f …

6
プロパティとして個々のオブジェクト内にある2つの配列をマージする方法
次のような2つのオブジェクトがあります。 let obj1 = { slotIDs: ["5e0301f353ee2a0546298f15"] } let obj2 = { slotIDs: ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"] } このように単一の配列内でそれらをマージする必要があります let newObj = ["5e0301f353ee2a0546298f15", "5e03050453ee2a0546298f1c"] lodash unionとmapを使ってみましたが、うまくいきませんでした。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.