Los siguientes consejos son para Racket :
Argumentos predeterminados
Especialmente útil para crear alias para nombres largos de funciones que se usan con frecuencia.
Suponga que el golf le permite escribir una función que consume el argumento, y suponga que necesita usar reverse
mucho. Comenzarás con algo como:
(λ(x) ... reverse ... reverse ... reverse ...
En su lugar, puede tomar un argumento adicional, con un nombre más corto que reverse
, y establecer su valor predeterminado en reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Además, es útil si tiene una función auxiliar que usa en muchos lugares con algunos de los mismos argumentos. Recuerde reordenar los argumentos a la función según sea necesario, para que pueda usar tantos argumentos predeterminados como sea posible y eliminar los argumentos de múltiples sitios de llamadas.
match
Este es un poco más difícil de resumir en una publicación pequeña, así que lea sobre Racket Docs para este. En pocas palabras, le match
permite extraer elementos y secuencias de elementos en un cierto orden de una lista, y la sintaxis de cuasiquote le permite volver a unir la lista mutilada:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
También le brinda una manera fácil de trabajar con expresiones regulares y realizar cálculos adicionales en los grupos resultantes después,
Llamado let
Vea la sintaxis nombrada aquí .let proc-id ...
Esto le permite escribir funciones recursivas que se llaman inmediatamente sin define
o realmente llamando a la función después de haberla definido.
Algo como:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
se puede acortar a:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Este último es una tontería, pero hasta ahora no he podido usar este pequeño truco en ninguna parte:
(apply map list matrix)
toma una transposición de matrix
, donde matrix
hay una lista rectangular de listas, como '((1 2 3) (a b c))
.
Avíseme si esto resulta útil.