Kiat-kiat berikut adalah untuk Racket :
Argumen default
Terutama berguna untuk membuat alias untuk nama fungsi panjang yang sering digunakan.
Asumsikan golf memungkinkan Anda untuk menulis fungsi yang menghabiskan argumen, dan menganggap Anda perlu reverse
banyak menggunakan . Anda akan mulai dengan sesuatu seperti:
(λ(x) ... reverse ... reverse ... reverse ...
Sebagai gantinya Anda dapat menerima argumen tambahan, dengan nama yang lebih pendek daripada reverse
, dan menetapkan nilai defaultnya ke reverse
:
(λ(x[r reverse]) ... r ... r ... r ...
Lebih lanjut, ini berguna jika Anda memiliki fungsi pembantu yang Anda gunakan di banyak tempat dengan beberapa argumen yang sama. Ingatlah untuk menyusun ulang argumen ke fungsi sesuai kebutuhan, sehingga Anda dapat menggunakan argumen default sebanyak mungkin, dan menghapus argumen dari beberapa panggilan.
match
Yang ini sedikit lebih sulit untuk diringkas dalam posting kecil, jadi baca di Racket Docs untuk yang ini. Singkatnya, match
memungkinkan Anda mengekstrak elemen dan urutan elemen dalam urutan tertentu dari daftar, dan sintaks kuasiquote memungkinkan Anda menjahit daftar yang dimutilasi kembali bersama-sama:
(match (range 10)
[`(,xs ... 3 ,ys ... 6 ,zs ...)
`(,@(map f xs) 3 ,@(map f ys) 6 ,@(map f sz))]
...
Ini juga memberi Anda cara mudah untuk bekerja dengan ekspresi reguler dan melakukan perhitungan tambahan pada grup yang dihasilkan setelahnya,
Bernama let
Lihat sintaks yang dinamai di sini .let proc-id ...
Ini memungkinkan Anda untuk menulis fungsi rekursif yang dipanggil segera tanpa define
atau benar-benar memanggil fungsi setelah Anda mendefinisikannya.
Sesuatu seperti:
(define (fib i)
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
(fib 10)
dapat disingkat menjadi:
(let fib {[i 10]}
(if (< i 2) i
(+ (fib (- i 1)) (fib (- i 2)))))
Yang terakhir ini konyol, tapi saya belum bisa menggunakan trik kecil ini di mana pun sejauh ini:
(apply map list matrix)
mengambil transpos matrix
, di mana matrix
ada beberapa daftar daftar persegi panjang, seperti '((1 2 3) (a b c))
.
Beri tahu saya jika ini terbukti bermanfaat.