Die folgenden Tipps gelten für Schläger :
Standardargumente
Besonders nützlich zum Erstellen von Aliasnamen für lange Funktionsnamen, die häufig verwendet werden.
Angenommen, Sie können mit Golf eine Funktion schreiben, die das Argument aufnimmt, und Sie müssen reverse
viel verwenden. Sie beginnen mit etwas wie:
(λ(x) ... reverse ... reverse ... reverse ...
Sie können stattdessen ein zusätzliches Argument mit einem kürzeren Namen als reverse
eingeben und den Standardwert auf Folgendes festlegen reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Darüber hinaus ist es nützlich, wenn Sie eine Hilfsfunktion haben, die Sie an vielen Stellen mit einigen der gleichen Argumente verwenden. Denken Sie daran, die Argumente für die Funktion nach Bedarf neu anzuordnen, damit Sie so viele Standardargumente wie möglich verwenden und die Argumente von mehreren Aufrufseiten entfernen können.
match
Dieser ist etwas schwieriger in einem kleinen Beitrag zusammenzufassen, lesen Sie die Racket-Dokumentation für diesen. match
Kurz gesagt: Ermöglicht das Extrahieren von Elementen und Elementsequenzen in einer bestimmten Reihenfolge aus einer Liste. Mit der Quasiquote-Syntax können Sie die verstümmelte Liste wieder zusammenfügen:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
Außerdem können Sie auf einfache Weise mit regulären Ausdrücken arbeiten und anschließend zusätzliche Berechnungen für die resultierenden Gruppen durchführen.
Genannt let
Die angegebene Syntax finden Sie hier .let proc-id ...
Auf diese Weise können Sie rekursive Funktionen schreiben, die sofort aufgerufen werden, ohne define
die Funktion aufzurufen oder tatsächlich aufzurufen, nachdem Sie sie definiert haben.
Etwas wie:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
kann gekürzt werden auf:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Letzteres ist albern, aber ich habe diesen kleinen Trick bisher nirgends anwenden können:
(apply map list matrix)
Nimmt eine Transponierung von matrix
, wo matrix
eine rechteckige Liste von Listen ist, wie '((1 2 3) (a b c))
.
Lassen Sie mich wissen, ob dies nützlich ist.