Tacit or point-free style programming允許創建函數而不考慮它們的參數。這可以在F#中完成嗎?是否可以在F#中編寫默認函數?
4
A
回答
6
與Chuck的答案&克里斯·史密斯評論剛要走,你可以寫
let digits = string_of_int >> String.length
digits 9000;; // 4
[1; 10; 100] |> List.map digits;; // [1;2;3]
當你把那些成分&管道運營商與高階函數,你可以做複雜的東西非常簡潔:
let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
prodSqrtAbs [| -9.0; 4.0 |];; // 6.0
編輯:我剛剛閱讀了關於J及其隱式叉運算符。這非常強大。您可以在F#中構建等效的高階運算符,但它們不會隱式應用。因此,舉例來說,首先要定義lift
(使用顯式參數)
let lift op a b x = op (a x) (b x)
,然後應用它明確
let avg = lift (/) List.sum List.length
得到的東西,你鏈接到維基百科的頁面上類似the J example。但它並不完全「默契」。
3
當然。所有你需要的是函數組合和咖喱,而這兩個都可以在F#中使用。
let compose f1 f2 = fun x -> f1 (f2 x);;
let digits = compose String.length string_of_int;;
digits 9000;; // 4
+0
我已經寫了相反的方式,這樣它看起來像>>操作符。 – Benjol 2009-11-27 06:35:39
+0
F#有以下操作符來完成這類事情>>,<<, |>,<|, ||>。 – 2009-11-27 07:02:16
相關問題
- 1. 是否可以重寫默認的析構函數?
- 2. 是否可以重寫默認的PHP函數?
- 3. F#中是否有默認參數?
- 4. 是否可以在F#中編寫MyGeneration模板?
- 5. 是否可以在CoffeeScript中編寫匿名平方函數?
- 6. 是否可以更改PHP函數的默認參數?
- 7. 是否有可能在f#中編寫像這樣的遞歸分組函數?
- 8. 是否可以在Rust中進行默認編程?
- 9. 是否可以在函數或值綁定中使用F#模塊縮寫?
- 10. 在構造函數中,字段是否可以不是null(或其默認值)?
- 11. 是否可以「添加」到默認的拷貝構造函數?
- 12. 是否可以重寫ASP.NET MVC中[Authorize]的默認行爲?
- 13. 是否可以在打字稿中爲接口函數提供默認參數?
- 14. 是否可以在String中聲明Java中的默認參數?
- 15. 是否可以在javascript函數之外編寫警報消息?
- 16. 是否可以將以下lisp宏編寫爲函數?
- 17. 是否可以在NVelocity中默認靜默引用?
- 18. 在Javascript中重寫默認函數?
- 19. 是否可以重寫內聯函數?
- 20. 是否可以重寫「調用」函數?
- 21. 檢測編譯時是否存在默認構造函數
- 22. 是否可以更改默認目標?
- 23. 在統計編程語言R中是否可以進行默認編程?
- 24. 是否可以在C++中編寫通用可變參數zipWith?
- 25. 在F#中,是否可以將引用傳遞給可變默認值作爲參數?
- 26. 派生類中的默認構造函數是否可選?
- 27. 在Scala中可以編寫放置在函數參數中的表達式,默認參數值嗎?
- 28. 是否可以在Haskell中編寫沒有顯式參數的函數?
- 29. 如何在C++中編寫一個默認的構造函數?
- 30. 是否可以爲Excel 2007編寫dset函數
嗨,加布裏埃爾。我可以問個問題嗎?在FSharp中缺少'隱式fork'運算符是否會迫使我只寫一個參數的默認函數(在元組/列表中打包參數等);但從來沒有讓我寫兩/三/四/ ..-參數默認函數? – Bubba88 2010-05-08 10:58:41