Tacit or point-free style programming permet de créer des fonctions sans tenir compte de leurs arguments. Cela peut-il être fait en F #?Est-il possible d'écrire des fonctions tacites dans F #
Répondre
Juste pour aller avec la réponse & commentaire Chris Smith de Chuck, vous pouvez écrire
let digits = string_of_int >> String.length
digits 9000;; // 4
[1; 10; 100] |> List.map digits;; // [1;2;3]
Lorsque vous combinez les exploitants de pipelines composition & avec des fonctions d'ordre supérieur, vous pouvez faire des choses compliquées très succinctement :
let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
prodSqrtAbs [| -9.0; 4.0 |];; // 6.0
EDIT: Je viens de lire à propos de J et de son opérateur de fork implicite. C'est très puissant. Vous pouvez construire des opérateurs d'ordre supérieur équivalents dans F #, mais ils ne seront pas appliqués implicitement. Ainsi, par exemple, d'abord définir lift
(en utilisant des arguments explicites)
let lift op a b x = op (a x) (b x)
et ensuite appliquer explicitement
let avg = lift (/) List.sum List.length
pour obtenir quelque chose qui ressemble à the J example sur la page de Wikipedia, lié. Mais ce n'est pas tout à fait "tacite".
Bien sûr. Tout ce dont vous avez besoin est la composition de la fonction et la curry, et les deux sont possibles en F #.
let compose f1 f2 = fun x -> f1 (f2 x);;
let digits = compose String.length string_of_int;;
digits 9000;; // 4
J'aurais écrit composer l'inverse, de cette façon cela ressemblerait à l'opérateur >>. – Benjol
F # a les opérateurs suivants pour faire ce genre de chose >>, <<, |>, <|, ||>. –
- 1. F # Liste des fonctions
- 2. Application partielle des fonctions d'infixe dans F #
- 3. Fonctions de passe dans F #
- 4. Fonctions syndicats F # Discriminé
- 5. F #: fonctions de surcharge
- 6. F #: Fonctions Mutually récursives
- 7. F # Fonctions vs Valeurs
- 8. F # Composition des fonctions avec entrées multiples paramètres
- 9. print_int et d'autres fonctions d'impression F #
- 10. des fonctions
- 11. F #: un moyen d'utiliser les fonctions membres comme des fonctions non liées?
- 12. Est-il possible d'utiliser des fonctions anonymes dans C++ .NET?
- 13. Est-il possible d'utiliser des fonctions analytiques dans Hibernate?
- 14. Un XSD pour décrire des XSD
- 15. Surcharge des constructeurs dans F #
- 16. Décrire des objets enfants avec Concombre/MongoDB
- 17. Memoizing appel arrière optimisées fonctions récursives en F #
- 18. «F (5)» et «int x; F (x) »pour appeler différentes fonctions?
- 19. Définir les paramètres dans les fonctions F #, est-il préférable d'utiliser des tuples?
- 20. Décrire des nœuds XML répétés dans un schéma XML W3C?
- 21. Veuillez décrire vos difficultés en minimisant l'utilisation des variables globales
- 22. Quelles sont les valeurs numériques des touches F (F [1-12]) et des touches fléchées?
- 23. Décrire les relations de classe dans ruby
- 24. F #: Stockage et mappage d'une liste de fonctions
- 25. vérification de l'égalité des raccourcis dans F #?
- 26. Comment décrire des algorithmes lorsque vous faites des cas d'utilisation?
- 27. Quelle est l'utilité de créer des fonctions dans les fonctions?
- 28. C#: Est-il possible d'utiliser des expressions ou des fonctions en tant que clés dans un dictionnaire?
- 29. F fonctions # type et un [<GeneralizableValue>] attribut
- 30. Décrire un chemin avec GDI + dans .Net
Bonjour, Gabriel. Puis-je demander une question? L'absence d'opérateur 'fork implicite 'dans FSharp m'oblige-t-elle à n'écrire que des fonctions tacites à un argument (arguments pack dans un tuple/list etc.); mais ne me permet jamais d'écrire deux/trois/quatre /..- argument des fonctions tacites? – Bubba88