De temps en temps je trébuche sur le problème que je veux exprimer "s'il vous plaît utiliser le dernier argument deux fois", par exemple. pour écrire un style sans point ou pour éviter un lambda. Par exemple.Astuce pour "réutiliser" des arguments dans Haskell?
sqr x = x * x
pourrait être écrit comme
sqr = doubleArgs (*) where
doubleArgs f x = f x x
Ou considèrent cette fonction un peu plus compliquée (prise de this question):
ins x xs = zipWith (\ a b -> a ++ (x:b)) (inits xs) (tails xs)
Je pourrais écrire ce code Pointfree s'il y avait une fonction comme ce:
ins x = dup (zipWith (\ a b -> a ++ (x:b))) inits tails where
dup f f1 f2 x = f (f1 x) (f2 x)
Mais comme je ne peux pas trouver quelque chose comme doubleArgs ou dup dans Hoogle, donc je suppose que je pourrais manquer un truc ou une idiome ici.
Et d'après 'pointfree',' dup' serait 'liftM2'.J'ai vraiment besoin de mieux gérer l'instance de monad pour les fonctions. –
Nous vous remercions tous les deux de vous donner même deux ** approches ** pour résoudre ces problèmes. BTW j'ai essayé '= SQR (*) <$> id <*> id' et il fonctionne aussi bien :-) – Landei
' a ++ (x: b) 'est de 3 caractères plus courte que votre solution, peut-être pourquoi certaines personnes préfèrent? –