1
ハスケルを新しくしました。私は再帰を使って以下のサブセットプログラムを理解するのが難しいと思っています。評価方法は?ハスケル再帰サブセット
subset :: [a] -> [[a]]
subset [] = [[]]
subset (x:xs) = [zs | ys <- subset xs, zs <- [ys,(x:ys)]]
出力:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
私は手動で、それは以下のように合算されて評価するとき
マニュアル出力:[],[3],[2],[1,2]
私はあなたが私を助けてくださいすることができ、ここでいくつかのロジックをしないのです上記の再帰の概念と、ガード・ステートメントのどの部分を最初に評価するか、評価の順序を理解していますか?
ヒント:大きなコードチャンクをフォーマットしてハイライトし、ctrl + kを押すだけです。のみ。小さな断片には '' 'sを使います。 – Carcigenicate
最後の行がその結果を英語でどのように構成するかを表現してください。私はそれがどのように動作するかを明確にするだろうと思う。 – Thilo
私はあなたが望むことをするこの1行の宝石を指摘するのを助けることはできません。それは 'Control.Monad'から' filterM'を使用します。 'サブセット= filterM(const [False、True])'。そしてそれだけで、あなたは 'サブセット'と同じ出力を(異なっていても)得ることができます - それはあまり効率的ではありません! – Alec