Dizi dilleriyle düşünmek
(github.com/razetime)K diliyle düşünmek
- K programlama çoğunlukla REPL üzerinden yapılır.
- ngn/k için
rlwrap, ok tuşlarıyla geçmişte gezinmeyi sağladığı için büyük programlar geliştirmede kullanışlıdır. - Fonksiyonlar REPL'de test edildikten sonra gerçek koda taşınır.
- ngn/k'nin güzel çıktısı her zaman geçerli K verisi döndürür ve programı hızlandırmak için önceden hesaplanabilir.
- K betikleri, REPL'e girilmiş gibi çalıştırılır ve her satırın dönüş değeri, noktalı virgülle bitmediği sürece yazdırılır.
- Betikler çok satırlı tanımlara izin verir; bu da okunabilirliğe yardımcı olur.
- Çalışmanızı bir betiğe kaydedip REPL'de kullanmak için
\lfile.kkomutuyla dosyayı çalıştırıp verileri yükleyebilirsiniz. - Önceki verilerin üzerine yazmak için dosyayı REPL'e birden fazla kez yükleyebilirsiniz.
\ile erişilen REPL yardımında çeşitli kullanışlı komutlar bulunur.
Dizi programlamayı sadeleştirmek
- Dizi programlama, karmaşık kalıpları daha küçük, bildirimsel ve okunması daha kolay kalıplara sadeleştirmenin sürekli bir sürecidir.
- Karmaşık kalıpların nasıl sadeleştirileceği, "APL'de Kalıplar ve Antipattern'ler: Başlangıç Plato'sundan Çıkış - Aaron Hsu - Dyalog '17" içinde ayrıntılı olarak ele alınır.
Matris çarpımının K'ye dönüştürülmesi
- Wikipedia makalesinden alınan matris çarpımı için yinelemeli algoritma, K'ye doğrudan çevrilebilir.
- K'ye çevrilmiş en kötü kod örneği, çok sayıda global değişken ataması, iç içe döngüler ve çok sayıda değişiklik gerektirir.
- Kodu sadeleştirerek bu sorunları tek tek çözebilirsiniz.
İç döngünün sadeleştirilmesi
- İç döngüde
sum, fold(/) kullanılarak sadeleştirilebilir. '(each) bir dizi döndürdüğü içinCglobal değişkeni kaldırılabilir.i,j,kdeğişkenleri kaldırılarak döngü sadeleştirilebilir.
Döngüleri kaldırmak ve global değişkenleri en aza indirmek
kolmadan doğrudan satır ve sütunları eşleştirerek orta döngü kaldırılabilir.j'yi kaldırmak içinB'nin her sütunuA[i]ile eşleştirilebilir.i'yi kaldırmak için eachleft kullanılarakA'nın her satırı,B'nin her sütunuyla eşleştirilebilir.- Artık global değişkenlere gerek yoktur.
Matris çarpımı fonksiyonunun son hali
+(transpose) maliyetli olduğundan kaldırılabilir.x'in her satırınıy'nin her sütunuyla çarpmak yerine,B'nin her satırı tümAile eşleştirilerek örtük olarak aynı işlem yapılabilir.- Sonuçta kısa ve açık bir matris çarpımı fonksiyonu elde edilir.
- Kodu sadeleştirme süreci başlangıçta birçok adımdan geçse de, K'de ustalaştıkça daha kolay ve sezgisel hale gelebilir.
- Matris çarpımı, K'nin dizi desteğiyle iyi örtüşen basit bir prosedürdür.
- K ile daha az uyumlu başka algoritmalar ve bunların nasıl ele alınacağı gelecekteki bölümlerde incelenecektir.
GN⁺ görüşü
- Bu yazı, K dili kullanılarak matris çarpımı gibi algoritmaların nasıl sadeleştirilebileceğini ve optimize edilebileceğini gösteriyor.
- REPL üzerinden alınan anlık geri bildirim ve kodun yinelemeli olarak iyileştirilmesi, K programlamanın temel özelliklerindendir ve giriş seviyesindeki yazılım mühendisleri için de yararlı bir öğrenme yöntemidir.
- Kodu sadeleştirme süreci, programlama becerilerini geliştirmede önemlidir ve bu yazı bunu somut örneklerle anlaşılır biçimde açıklar.
1 yorum
Hacker News görüşleri
Birçok kişi dizi dillerinin kullanışlılığı ve anlaşılabilirliği konusunda şüphelerini dile getiriyor.
Dizi dillerinin şaşırtıcı birçok yönü var ve yukarıdaki liste bunların yalnızca bir kısmı.
Dizi programlamayı daha önce duymadıysanız ve bir giriş istiyorsanız, "The Array Cast" öneriliyor.
70'lerde APL/APL2 ile tanışıp hayran kalındı, ancak işlevleri birleştirme yeteneği daha çekici bulundu.
Dizi dili kullanırken en önemli farkındalıklar:
Dizi dilleriyle ilgili bir soru: "N'den küçük sayılar içinde P koşulunu sağlayan tüm sayıları bul" gibi işler nasıl yapılır?
J diliyle ilgili deneyim: dizi dili paradigması önyargılı ve her problemi dizilerin iç içe geçmesi olarak düşünmenin gerçekten yardımcı olup olmadığı belirsiz.
K dili problemlerini çözerken edinilen izlenim: K dili kasıtlı olarak anlaşılmaz.
J diline bir örnek:
dot =: +/ . *kullanılarak P ve Q'nun nokta çarpımı (dot product) hesaplanır.K dilinin sözdizimi daha kısa, ancak K dilinin nasıl çalıştığına dair birçok yerleşik bağlamı zihinde tutmak gerekiyor.