2010-01-01 4 views
3

En haskell il est possible d'appliquer partiellement une fonction infixe en utilisant des sections, par exemple étant donné la fonction infixe < (inférieure à) on peut appliquer partiellement l'un des arguments de la fonction: (5 <), (< 5)Application partielle des fonctions d'infixe dans F #

en d'autres termes, nous avons haskell la notation abrégée suivante:

op :: a -> b -> c 
(`op` y) === \x -> x `op` y 
(x `op`) === \y -> x `op` y 

Est-ce que F # un concept similaire?

Répondre

5

Non, ni l'un ni l'autre (à part l'application partielle standard comme (=) x).


Alors que j'aime le laconisme de Seq.find ((=) x), des choses comme Seq.filter ((<) 3) (ou même Seq.map (flip (-) 1)) sont tout simplement difficiles à lire et doit être immédiatement remplacé par une expression lambda, imo.

+0

Merci pour la réponse rapide. C'est juste que venant de haskell où le filtre (<5) [1..10] donne [1,2,3,4], cela me rend confus que dans F # List.filter ((<) 5) [1..10] renvoie [6; 7; 8; 9; 10]! – primodemus

+2

Alors n'écrivez pas cela;) – ephemient

+2

Eh bien, c'est ma définition de '(vraiment) maladroit';) –

4

Si vous voulez inventer vos propres normes ...

let lsection x f y -> f x y 
let rsection f y x -> f x y 

Puis lsection 5 (<) === (5 <) et rsection (<) 5 === (< 5).

Bien que vraiment, sans le soutien de la langue, il suffit de mettre un lambda là-bas et ce sera plus clair.

Questions connexes