偶爾我會偶然發現我想表達的問題,「請使用最後一個參數兩次」,例如爲了寫無點式或避免lambda。例如。欺騙「重複使用」參數在Haskell中?
sqr x = x * x
可以寫成
sqr = doubleArgs (*) where
doubleArgs f x = f x x
或者考慮這個稍微複雜功能(從this question拍攝):如果有類似的功能
ins x xs = zipWith (\ a b -> a ++ (x:b)) (inits xs) (tails xs)
我可以寫這個代碼pointfree此:
ins x = dup (zipWith (\ a b -> a ++ (x:b))) inits tails where
dup f f1 f2 x = f (f1 x) (f2 x)
但是由於我無法在Hoogle中找到類似doubleArgs或dup的東西,所以我想我可能會在這裏錯過一個技巧或習慣用法。
而根據`pointfree`,`dup`可以算作'liftM2`。我真的需要更好地處理函數的monad實例。 – 2010-12-02 10:30:43
謝謝你們提供甚至**兩種**方法來解決這些問題。順便說一句我試過`sqr =(*)<$> id <*> id`,它也適用:-) – Landei 2010-12-02 10:57:34