Quels conseils généraux avez-vous pour jouer au golf en raquette / schéma ? 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 à Racket / Scheme (par exemple, "supprimer les commentaires" n'est pas une réponse).
Je suis conscient que Scheme et Racket (anciennement PLT Scheme) sont des langages techniquement différents mais sont assez similaires à bien des égards et beaucoup de code (je suppose) fonctionnera principalement comme prévu dans les deux. Si votre conseil ne s'applique qu'à l'une des langues susmentionnées, notez-le en tant que tel.
let
lambda
Dans Racket , les
require
formulaires peuvent avoir plusieurs arguments.Est bien plus court que
Je ne sais pas grand chose sur Scheme , mais il ne semble pas avoir de fonction
require
intégrée.la source
Utilisez des synonymes plus courts
Il y a un certain nombre de procédures dans Racket qui ont des versions plus courtes pour la plupart équivalentes. (Ils ne sont généralement pas équivalents: par exemple,
(car (cons 1 2))
fonctionne là où(first (cons 1 2))
échoue. Mais vous pouvez effectuer la substitution si vous savez que ce sont des synonymes dans votre cas.)Cette liste est probablement incomplète: je ne connais probablement pas encore la plupart des choses qui pourraient y figurer.
(= a b)
au lieu de(equal? a b)
comparer les nombres.'(1 2)
au lieu de(list 1 2)
.car
,cadr
,cdr
Pourfirst
,second
etrest
.null?
au lieu deempty?
modulo
au lieu deremainder
quand le module est positif.floor
au lieu detruncate
quand son argument est positif.la source
Omettre les espaces inutiles
Cela peut être considéré comme un conseil "trivial", mais il faut le signaler quelque part.
Chaque fois que vous lisez du code Racket écrit par des gens normaux (par exemple dans la documentation de Racket ), tous les espaces sont insérés: par exemple,
En fait, puisque
(
et)
ne pouvant pas faire partie des noms de variables, nous pouvons supprimer tous les espaces autour d'eux et ne perdre aucune ambiguïté (et, plus important encore, obtenir toujours du code valide). Ainsi, l'expression ci-dessus peut être à la place:la source
Les conseils suivants concernent la raquette :
Arguments par défaut
Particulièrement utile pour créer des alias pour les noms de fonction longs qui sont souvent utilisés.
Supposons que le golf vous permet d'écrire une fonction qui consomme l'argument et supposez que vous devez en utiliser
reverse
beaucoup. Vous commencerez par quelque chose comme:Vous pouvez à la place prendre un argument supplémentaire, avec un nom plus court que
reverse
, et définir sa valeur par défaut surreverse
:De plus, c'est utile si vous avez une fonction d'assistance que vous utilisez à de nombreux endroits avec certains des mêmes arguments. N'oubliez pas de réorganiser les arguments de la fonction selon vos besoins, afin de pouvoir utiliser autant d'arguments par défaut que possible et de supprimer les arguments de plusieurs appels.
match
Celui-ci est un peu plus difficile à résumer dans un petit post, alors lisez les documents de raquette pour celui-ci. En bref,
match
vous permet d'extraire des éléments et des séquences d'éléments dans un certain ordre à partir d'une liste, et la syntaxe de quasiquote vous permet de recoudre la liste mutilée ensemble:Il vous donne également un moyen facile de travailler avec des expressions régulières et d'effectuer des calculs supplémentaires sur les groupes résultants par la suite,
Nommé
let
Voir la syntaxe nommée ici .
let proc-id ...
Cela vous permet d'écrire des fonctions récursives qui sont appelées immédiatement sans
define
ou réellement appeler la fonction après l'avoir définie.Quelque chose comme:
peut être raccourci à:
Ce dernier est idiot, mais je n'ai pas pu utiliser ce petit truc jusqu'ici:
(apply map list matrix)
prend une transposition dematrix
, oùmatrix
est une liste rectangulaire de listes, comme'((1 2 3) (a b c))
.Faites-moi savoir si cela s'avère utile.
la source
Comme l'a souligné Winny ,
#!
peut généralement être utilisé à la place de#lang
, économisant quatre octets.la source