私はいつもこの形式で私のリストを生産する再帰関数を書きました:Haskellのリスト連結対(頭:尾)形式
recursiveFunc :: [a] -> [b]
recursiveFunc (x:xs) = [change x] ++ resursiveFunc xs where
change :: a -> b
change x = ...
私は、上記のような任意の関数がa -> b
場合のために書くことができます実現し、単純にmap
を[a]
に設定しましたが、このような状況を例にとってください。
HLintは[change x] ++ recursiveFunc xs
をchange x : recursiveFunc xs
に置き換えることを示唆しています。
この提案は純粋に審美的ですか、またはHaskellがどのように機能を実行するかに影響しますか?
まあ、最初の1つの引数では、 '++' *は 'cons'を一度実行してから終了しますが、単一の値の前に丸める方法です。 – delnan
あなたのバージョンには、複数の要素がリストの先頭に追加されるように、ある時点で関数を変更しようとすると、変更することが少なくなるという利点があります。 –
hlintの提案は、式の結果を変更しません。 –