問題タブ [recursion-schemes]

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.

0 投票する
1 に答える
137 参照

haskell - メンドラー風ヒストモーフィズム

recursion-schemesからhistomorphism ( histo)を使用して、最初のリストから奇数インデックスのみを含むリストを取得できます。

を使用して同じものを取得するにはどうすればよいmhistoですか?

0 投票する
3 に答える
467 参照

haskell - コンパイラはファンクターの固定小数点をどのように把握し、カタはリーフレベルでどのように機能しますか?

ファンクターの不動点の抽象的な概念を理解したいと思いますが、Haskell での正確な実装とカタモルフィズムを理解するのにまだ苦労しています。

たとえば、「Category Theory for Programers」の書籍 -- 359 ページに従って、次の代数を定義するとします。

カタモルフィズムの定義により、次の関数を ListF の固定小数点 (リスト) に適用して、その長さを計算できます。

2 つの混乱があります。まず、Haskell コンパイラは List がListFの不動点であることをどのように認識していますか? 私は概念的にそれを知っていますが、コンパイラはどのように知っていますか、つまり、List とすべて同じである別の List' を定義した場合、コンパイラは List' が ListF の不動点でもあると自動的に推論しないと思いますそれ?(私は驚くだろう)。

第 2 に、cata lenAlg の再帰的な性質により、常にデータ コンストラクターの外側のレイヤーを unFix して、ファンクターの内側のレイヤーを公開しようとします (ちなみに、この私の解釈は正しいですか?)。しかし、すでにリーフにいる場合、どうすればこの関数呼び出しを呼び出すことができるでしょうか?

例として、誰かが以下の関数呼び出しの実行トレースを書いて明確にするのを手伝ってもらえますか?

明らかな何かが欠けている可能性がありますが、この質問が同様の混乱を共有する他の人々にとってまだ意味があることを願っています.


回答のまとめ


@nm は、Haskell コンパイラが Functor A が Functor B の不動点であることを理解するには、明示的である必要があることを指摘して、私の最初の質問に答えました。この場合、

@luqui と @Will Ness は、葉 (この場合は NilF) で fmap (cata lenAlg) を呼び出すと、fmap の定義により NilF が返されることを指摘しました。

私の最初の(より大きな)質問に直接対処したので、@ nmの回答を受け入れますが、3つの回答すべてが気に入っています。ご協力ありがとうございました。

0 投票する
2 に答える
209 参照

haskell - Int -> Int からの再帰スキーム?

フォルダのアイデンティティは

より一般的に言えば、折り畳みを使用すると、構造を破壊して要約値になるか、同じ出力構造になるように構造を挿入することができます。

[Int] -> [Int] または [Int] -> Int または [Int] -> ?

unfoldr/l と同じようなアイデンティティがあるかどうか疑問に思っています。

入手方法を知っている

Int -> [Int]

展開/アナで。

私はそこから抜け出すためのある種の方法を探しています

Int -> Int

再帰スキームを使用します。