問題タブ [fixpoint-combinators]

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 に答える
140 参照

haskell - repmin は Haskell のツリーに値をどのように配置しますか?

私は問題が本当に好きrepminです:

を書き留めrepmin :: Tree Int -> Tree Intます。これにより、ツリー内のすべての数値が 1 回のパスで最小値に置き換えられます。

私がPythonでこのようなものを書いていたら、参照によって値を渡すことに行きます(数字の代わりに1要素のリストで十分だとしましょう):

Haskell の結び目を結ぶソリューションに頭を包むのに適した方法のように思えます (これは のバラの木用に書きましたData.Tree)。

それでも、私はソリューションが非常に異なって機能すると考えています。後者についての私の理解は次のとおりです。

loop少し書き直して(->)みましょう:

内のパターンマッチングと同じ程度の怠惰を与えるloopため、 for(->)の作業に似ていると思います。sndlet

したがって、repminツリーをトラバースすると、次のようになります。

  • ペアの 2 番目の要素として返されるツリーの最小値を構築します。
  • snd $ copyRose (tree, m)すべてのノードに葉が残ります。

したがって、トラバーサルが終了すると、プログラムは の値snd $ copyRose (tree, m)(つまり、ツリー内の最小値) を認識し、ツリーのノードが計算されるたびにそれを表示できます。

repminHaskellで正しく理解できていますか?