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 reverseviel verwenden. Sie beginnen mit etwas wie:
(λ(x) ... reverse ... reverse ... reverse ...
Sie können stattdessen ein zusätzliches Argument mit einem kürzeren Namen als reverseeingeben 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. matchKurz 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 definedie 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 matrixeine rechteckige Liste von Listen ist, wie '((1 2 3) (a b c)).
Lassen Sie mich wissen, ob dies nützlich ist.