Poniższe wskazówki dotyczą rakiety :
Domyślne argumenty
Szczególnie przydatne do tworzenia aliasów dla często używanych długich nazw funkcji.
Załóżmy, że golf pozwala napisać funkcję, która zużywa argument, i zakładamy, że trzeba reverse
dużo używać . Zaczniesz od czegoś takiego:
(λ(x) ... reverse ... reverse ... reverse ...
Zamiast tego możesz wziąć dodatkowy argument o krótszej nazwie niż reverse
i ustawić jego wartość domyślną na reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Co więcej, jest to przydatne, jeśli masz funkcję pomocniczą, której używasz w wielu miejscach z tymi samymi argumentami. Pamiętaj, aby w razie potrzeby zmienić kolejność argumentów funkcji, aby można było użyć jak największej liczby argumentów domyślnych i usunąć argumenty z wielu stron wywoławczych.
match
Ten jest nieco trudniejszy do streszczenia w małym poście, więc przeczytaj go w Dokumentach dotyczących rakiet . W skrócie, match
pozwala wyodrębnić elementy i sekwencje elementów w określonej kolejności z listy, a quasi-cytatowa składnia pozwala ponownie połączyć okaleczoną listę:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
Zapewnia również łatwy sposób pracy z wyrażeniami regularnymi i późniejszego obliczania grup wynikowych,
O imieniu let
Zobacz nazwaną składnię tutaj .let proc-id ...
Pozwala to na pisanie funkcji rekurencyjnych, które są wywoływane natychmiast bez define
lub faktycznie wywołują funkcję po jej zdefiniowaniu.
Coś jak:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
można skrócić do:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Ta ostatnia jest głupia, ale jak dotąd nigdzie nie byłem w stanie użyć tej małej sztuczki:
(apply map list matrix)
transponuję matrix
, gdzie matrix
jest jakaś prostokątna lista list '((1 2 3) (a b c))
.
Daj mi znać, jeśli okaże się to przydatne.