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:
(λ(x) ... reverse ... reverse ... reverse ...
Vous pouvez à la place prendre un argument supplémentaire, avec un nom plus court que reverse
, et définir sa valeur par défaut sur reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
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:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
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:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
peut être raccourci à:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Ce dernier est idiot, mais je n'ai pas pu utiliser ce petit truc jusqu'ici:
(apply map list matrix)
prend une transposition de matrix
, où matrix
est une liste rectangulaire de listes, comme '((1 2 3) (a b c))
.
Faites-moi savoir si cela s'avère utile.