Aşağıdaki ipuçları Raket içindir :
Varsayılan bağımsız değişkenler
Özellikle sık kullanılan uzun işlev adları için takma adlar oluşturmak için kullanışlıdır.
Golfün, argümanı tüketen bir işlev yazmanıza izin verdiğini ve reverse
çok kullanmanız gerektiğini varsayalım . Şunun gibi bir şeyle başlayacaksınız:
(λ(x) ... reverse ... reverse ... reverse ...
Bunun yerine, daha kısa bir adla ek bir bağımsız değişken alabilir reverse
ve varsayılan değerini şu şekilde ayarlayabilirsiniz reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Ayrıca, aynı argümanlardan bazılarıyla birçok yerde kullandığınız bir yardımcı fonksiyonunuz varsa kullanışlıdır. Mümkün olduğu kadar çok sayıda varsayılan bağımsız değişken kullanabilmeniz ve bağımsız değişkenleri birden fazla çağrı sitesinden kaldırabilmeniz için bağımsız değişkenleri işleve yeniden sıralamayı unutmayın.
match
Bu küçük bir yazı özetlemek biraz daha zordur, bu yüzden bunun için Racket Docs okuyun . Özetle, match
bir listeden belirli bir sırayla öğeleri ve eleman dizilerini çıkarmanıza izin verir ve quasquote sözdizimi, sakatlanmış listeyi tekrar birleştirmenizi sağlar:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
Ayrıca, düzenli ifadelerle çalışmanın ve daha sonra ortaya çıkan gruplar hakkında ek hesaplama yapmanın kolay bir yolunu sunar,
adlı let
Buradaki söz dizimine bakın .let proc-id ...
Bu define
, işlevi tanımladıktan sonra hemen çağırmadan veya çağırmadan çağrılan özyinelemeli işlevleri yazmanıza olanak tanır .
Gibi bir şey:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
kısaltılabilir:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Bu sonuncusu saçma, ama ben şimdiye kadar hiçbir yerde bu küçük hile kullanmak mümkün olmamıştır:
(apply map list matrix)
bir devrik alır matrix
, matrix
listelerin bazıları dikdörtgen liste gibi olduğunu '((1 2 3) (a b c))
.
Bunun yararlı olduğunu kanıtladığında bana bildirin.