假設我們有許多過濾函數接受相同的參數並返回布爾結果。將函數與相同但部分未知的簽名組合使用
let filter1 _ _ = true
let filter2 _ _ = false
這些可以組合成一個過濾器。
let combine2 f1 f2 = fun a b -> f1 a b && f2 a b
combine2 filter1 filter2
我們實現需要的f1
和f2
參數的一些知識。更一般地,我們可以找到功能combine1
... combineN
有用,其中N
是過濾器功能的參數數量。可以編寫一個與N
無關的通用combine
函數嗎?
我對F#的功能感興趣,並且能夠在其他情況下應用此概念。
更新:我對問題的理解是,當他們不關心結果是簡單類型還是部分應用函數時,函數會成功忽略任何其餘參數。在上面的例子中,我們只在應用所有參數後才達到布爾類型,所以需要指定它們。
我有理由相信,這樣一個通用的結合不能寫,同時確保類型安全 – 2014-09-05 02:11:29
好吧,有'printf'功能,它使用一點魔法來做事情。 [This](http://stackoverflow.com/a/5572812/612512)可能會有用。 – 2014-09-05 05:08:46
@christopher從我讀過的([這裏](http://bugsquash.blogspot.com.au/2010/07/abusing-printfformat-in-f.html)),'printf'的實現是由編譯器而不是僅僅使用f#和.net結構。您提供的鏈接建立在此功能之上,我不瞭解如何在這種情況下應用它。 – cadull 2014-09-12 05:10:52