Berpikir dengan bahasa array
(github.com/razetime)Berpikir dalam bahasa K
- Pemrograman K sebagian besar dilakukan melalui REPL.
rlwrapmilik ngn/k memungkinkan penelusuran riwayat dengan tombol panah, sehingga berguna untuk mengembangkan program yang besar.- Fungsi diuji di REPL lalu dipindahkan ke kode sebenarnya.
- Pretty-printing di ngn/k selalu mengembalikan data K yang valid, dan dapat dihitung lebih dulu untuk meningkatkan kecepatan program.
- Skrip K dijalankan seolah-olah dimasukkan ke REPL, dan nilai kembalian setiap baris akan dicetak kecuali diakhiri dengan titik koma.
- Skrip memungkinkan definisi multi-baris, yang membantu keterbacaan.
- Untuk menyimpan pekerjaan ke skrip dan memakainya di REPL, gunakan
\lfile.kuntuk menjalankan file dan memuat data. - File dapat dimuat berkali-kali di REPL untuk menimpa data sebelumnya.
- Bantuan REPL yang diakses dengan
\memiliki berbagai perintah berguna.
Penyederhanaan pemrograman array
- Pemrograman array adalah proses berkelanjutan untuk menyederhanakan pola yang kompleks menjadi pola yang lebih kecil, deklaratif, dan mudah dibaca.
- Cara menyederhanakan pola kompleks dibahas secara rinci dalam "Patterns and Antipatterns in APL: Avoiding the Beginner's Plateau - Aaron Hsu - Dyalog '17".
Transformasi perkalian matriks ke K
- Algoritma iteratif perkalian matriks yang diambil dari artikel Wikipedia dapat langsung ditransformasikan ke K.
- Contoh kode terburuk yang ditransformasikan ke K memerlukan banyak assignment variabel global, loop bertingkat, dan banyak modifikasi.
- Kode dapat disederhanakan dengan menyelesaikan masalah-masalah ini satu per satu.
Penyederhanaan loop bagian dalam
- Pada loop bagian dalam,
sumdapat disederhanakan menggunakan fold (/). - Karena
'(each) mengembalikan array, variabel globalCdapat dihapus. - Loop dapat disederhanakan dengan menghilangkan variabel
i,j, dank.
Menghapus loop dan meminimalkan variabel global
- Loop tengah dapat dihapus dengan mencocokkan baris dan kolom secara langsung tanpa
k. - Untuk menghapus
j, setiap kolomBdapat dipasangkan denganA[i]. - Untuk menghapus
i, gunakan eachleft agar setiap barisAdipasangkan dengan setiap kolomB. - Variabel global tidak lagi diperlukan.
Bentuk akhir fungsi perkalian matriks
+(transpose) mahal biayanya sehingga dapat dihapus.- Alih-alih mengalikan setiap baris
xdengan setiap kolomy, pekerjaan yang sama dapat dilakukan secara implisit dengan mencocokkan setiap barisBterhadap seluruhA. - Pada akhirnya diperoleh fungsi perkalian matriks yang ringkas dan eksplisit.
- Proses penyederhanaan kode pada awalnya melewati banyak tahap, tetapi akan menjadi lebih mudah dan intuitif seiring meningkatnya kemahiran dalam K.
- Perkalian matriks adalah prosedur sederhana yang sangat cocok dengan dukungan array di K.
- Bab-bab mendatang akan membahas lebih banyak algoritma yang kurang cocok dengan K dan cara menanganinya.
Pendapat GN⁺
- Artikel ini menunjukkan bagaimana algoritma seperti perkalian matriks dapat disederhanakan dan dioptimalkan dengan menggunakan bahasa K.
- Umpan balik instan melalui REPL dan perbaikan kode secara iteratif adalah ciri inti pemrograman K, serta merupakan metode belajar yang berguna bahkan bagi insinyur perangkat lunak pemula.
- Proses penyederhanaan kode penting untuk meningkatkan kemampuan pemrograman, dan artikel ini menjelaskannya dengan mudah dipahami melalui contoh yang konkret.
1 komentar
Opini Hacker News
Banyak orang mempertanyakan kegunaan dan kemudahan dipahaminya bahasa array.
Ada banyak aspek menakjubkan dari bahasa array, dan daftar di atas hanya sebagian kecilnya.
Jika belum pernah mendengar tentang array programming dan ingin pengantar, "The Array Cast" direkomendasikan.
Seseorang menemukan APL/APL2 pada tahun 70-an dan langsung jatuh hati, tetapi merasa lebih tertarik pada kemampuan untuk menyusun fungsi.
Pencerahan paling penting dari penggunaan bahasa array:
Pertanyaan tentang bahasa array: bagaimana melakukan tugas seperti "mencari semua angka yang lebih kecil dari N yang memenuhi kondisi P"?
Pengalaman dengan bahasa J: paradigma bahasa array terasa bias, dan tidak yakin apakah memikirkan semua masalah sebagai susunan array bersarang itu membantu.
Kesan setelah menyelesaikan masalah dalam bahasa K: bahasa K sengaja dibuat sulit dipahami.
Contoh dalam bahasa array J: menggunakan
dot =: +/ . *untuk menghitung dot product dari P dan Q.Sintaks bahasa K memang lebih pendek, tetapi kita harus terus menyimpan banyak konteks bawaan tentang cara kerja bahasa K di dalam kepala.