Apa tips umum yang Anda miliki untuk bermain golf di F #? Saya mencari ide yang dapat diterapkan pada masalah kode golf secara umum yang setidaknya agak spesifik untuk F # (mis. "Hapus komentar" bukan jawaban). Silakan kirim satu tip per jawaban.
21
Dekonstruksi Tuple
Jika Anda tidak bisa menggunakan variabel, gunakan dekonstruksi tuple alih-alih beberapa ekspresi let
dari pada
Membaca dari stdin
F # core library mendefinisikan alias untuk
System.Console.In
dipanggilstdin
. Ini memungkinkan Anda membaca input.TextReader di msdn
Keuntungan besar selain fakta bahwa ini lebih pendek daripada
Console
adalah, Anda tidak harus membuka Sistem jugaIterasi melalui string
string pada dasarnya adalah
char seq
, ini memungkinkan Anda untuk menggunakanSeq.map
langsung dengan string. Dimungkinkan juga untuk menggunakannya dalam pemahaman[for c in "" do]
Mutables / Referensi sel
Menggunakan sel referensi tidak selalu lebih pendek karena setiap operasi baca disertai dengan karakter tambahan untuk melakukan sel.
Kiat umum
Dimungkinkan untuk menulis
match .. with
inline lengkapTidak perlu spasi putih sebelum dan sesudah karakter non alfanumerik.
Jika Anda perlu ke kiri atau kanan pad string dengan spasi, Anda dapat menggunakan flag [s] printf [n] untuk itu.
Modul Core.Printf
sumber
Gunakan id daripada x-> x
id adalah singkatan dari fungsi identitas.
dapat ditulis
sumber
Saya menggunakannya di sini
sumber
Eta-konversi untuk fungsi
Terima kasih banyak kepada Laikoni untuk tip ini di salah satu solusi saya .
Pertimbangkan fungsi untuk, katakanlah, menjumlahkan string dengan 3 untuk huruf besar dan 1 untuk semua karakter lainnya. Begitu:
Dengan eta-konversi, ini dapat ditulis ulang sebagai:
dan memanggil dengan cara yang sama seperti sebelumnya:
Operator komposisi maju fungsi
>>
Sekarang anggaplah tantangan awal kita adalah menjumlahkan string dengan 3 untuk huruf besar dan 1 untuk huruf kecil, dan semua karakter lain dikecualikan.
Kami mungkin menulis ini sebagai:
Kita dapat menggunakan operator komposisi-maju (
>>
) untuk menghubungkan kedua fungsi (Seq.filter
danSeq.sumBy
) bersama-sama. Dengan eta-konversi, definisi fungsi akan menjadi:Chris Smith melakukan penulisan besar-besaran
>>
pada operator di blog MSDN-nya .sumber
Bila mungkin
Seq
lebih pendek dariList
:adalah salah satu char lebih pendek ...
sumber
Hindari tanda kurung saat menggunakan satu parameter dan pada tupel
dapat ditulis
sumber
Lebih suka string baris baru daripada "\ n"
Ini akan mulai menghasilkan bahkan pada satu baris karakter baru dalam kode Anda. Satu use case mungkin:
(18 byte)
(17 byte)
Terinspirasi dari jawaban Chiru untuk es6 .
Digunakan di sini
sumber
Gunakan .NET
.NET menawarkan banyak builtin yang bagus. F # bisa menggunakannya, jadi jangan lupakan mereka!
Contoh:
Ini bisa membantu!
sumber
Gunakan lambdas untuk menyimpan byte. Sebagai contoh, ini:
Dapat dinyatakan sebagai ini:
sumber
Gunakan untuk ... untuk menggantikan ... untuk berjalan dalam jarak jangkau
sumber
Kata
module
kunci dapat digunakan untuk mempersingkat nama modul saat digunakan berulang kali. Sebagai contoh:bisa menjadi
Ini lebih berguna untuk program yang lebih lama di mana metode modul digunakan berulang kali (dan harus sepenuhnya dinamai setiap kali karena mereka memiliki
RequireQualifiedAccess
pengubah), dan memungkinkan mencukur beberapa karakter, terutama ketika lebih berguna untuk menggunakan array CLR biasa (misalnya, mutabilitas ) daripada F #seq
ataulist
.sumber