Quels conseils généraux avez-vous pour jouer au golf en F #? Je recherche des idées qui peuvent être appliquées aux problèmes de golf de code en général qui sont au moins quelque peu spécifiques à F # (par exemple, "supprimer les commentaires" n'est pas une réponse). Veuillez poster un pourboire par réponse.
21
Déconstruction de tuple
Si vous ne parvenez pas à utiliser des variables, utilisez la déconstruction de tuple au lieu de plusieurs expressions let
au lieu de
Lecture de stdin
La bibliothèque F # core définit un alias pour
System.Console.In
appeléstdin
. Ceux-ci vous permettent de lire l'entrée.TextReader sur msdn
Le gros avantage mis à part le fait qu'il est plus court que
Console
vous ne l'avez pas non plus à ouvrir le systèmeItération sur chaîne
chaîne est fondamentalement un
char seq
, cela vous permet d'utiliserSeq.map
directement avec des chaînes. Il est également possible de les utiliser dans les compréhensions[for c in "" do]
Mutables / Cellules de référence
L'utilisation de cellules de référence n'est pas toujours plus courte, car chaque opération de lecture est accompagnée d'un caractère supplémentaire pour déréférencer la cellule.
Conseils généraux
Il est possible d'écrire l'intégralité en
match .. with
ligneAucun espace blanc n'est nécessaire avant et après les caractères non alphanumériques.
Dans le cas où vous devez remplir à gauche ou à droite une chaîne avec des espaces, vous pouvez utiliser les drapeaux [s] printf [n] pour cela.
Module Core.Printf
la source
Utilisez id au lieu de x-> x
id est un opérateur représentant la fonction d'identité.
peut être écrit
la source
Je l'utilise ici
la source
Eta-conversion pour les fonctions
Un grand merci à Laikoni pour cette astuce dans l'une de mes solutions .
Considérons une fonction pour, disons, additionner une chaîne avec 3 pour les lettres majuscules et 1 pour tous les autres caractères. Donc:
Par eta-conversion cela peut être réécrit comme:
et appelé de la même manière que précédemment:
L'opérateur de fonction de composition vers l'avant
>>
Supposons maintenant que notre défi initial consiste à additionner une chaîne avec 3 pour les lettres majuscules et 1 pour les lettres minuscules, et tous les autres caractères sont exclus.
Nous pourrions écrire ceci comme:
Nous pouvons utiliser l'opérateur de composition directe (
>>
) pour enchaîner les deux fonctions (Seq.filter
etSeq.sumBy
) ensemble. Avec eta-conversion, la définition de la fonction deviendrait:Chris Smith a fait un excellent article sur l'
>>
opérateur sur son blog MSDN .la source
Lorsque cela
Seq
est possible est plus court queList
:est un caractère plus court ...
la source
Évitez les parenthèses lors de l'utilisation d'un paramètre et sur un tuple
peut être écrit
la source
Préférez la nouvelle chaîne de ligne à "\ n"
Cela commencera à porter ses fruits même à un seul nouveau caractère de ligne dans votre code. Un cas d'utilisation pourrait être:
(18 octets)
(17 octets)
Inspiré de la réponse de Chiru pour es6 .
Utilisé ici
la source
Utilisez .NET
.NET propose de nombreuses fonctionnalités intéressantes. F # peut les utiliser, alors ne les oubliez pas!
Exemple:
Ça peut être utile!
la source
Utilisez lambdas pour enregistrer un octet. Par exemple, ceci:
Peut être exprimé comme ceci:
la source
Utilisez pour ... à au lieu de pour ... dans pour parcourir une plage
la source
Le
module
mot-clé peut être utilisé pour raccourcir les noms de modules lorsqu'il est utilisé à plusieurs reprises. Par exemple:peut devenir
Ceci est plus utile pour les programmes plus longs où les méthodes de module sont utilisées à plusieurs reprises (et doivent être entièrement nommées à chaque fois car elles ont le
RequireQualifiedAccess
modificateur), et permet de supprimer quelques caractères, en particulier lorsqu'il est plus utile d'utiliser un tableau CLR normal (par exemple, la mutabilité ) qu'un F #seq
oulist
.la source