問題タブ [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.
haskell - repmin は Haskell のツリーに値をどのように配置しますか?
私は問題が本当に好きrepmin
です:
を書き留め
repmin :: Tree Int -> Tree Int
ます。これにより、ツリー内のすべての数値が 1 回のパスで最小値に置き換えられます。
私がPythonでこのようなものを書いていたら、参照によって値を渡すことに行きます(数字の代わりに1要素のリストで十分だとしましょう):
Haskell の結び目を結ぶソリューションに頭を包むのに適した方法のように思えます (これは のバラの木用に書きましたData.Tree
)。
それでも、私はソリューションが非常に異なって機能すると考えています。後者についての私の理解は次のとおりです。
loop
少し書き直して(->)
みましょう:
内のパターンマッチングと同じ程度の怠惰を与えるloop
ため、 for(->)
の作業に似ていると思います。snd
let
したがって、repmin
ツリーをトラバースすると、次のようになります。
- ペアの 2 番目の要素として返されるツリーの最小値を構築します。
snd $ copyRose (tree, m)
すべてのノードに葉が残ります。
したがって、トラバーサルが終了すると、プログラムは の値snd $ copyRose (tree, m)
(つまり、ツリー内の最小値) を認識し、ツリーのノードが計算されるたびにそれを表示できます。
repmin
Haskellで正しく理解できていますか?