Üzerinde benim iki sent koyarak dizi programlama dilleri , J ve APL özellikle.
K / Kona, Q ve Nial da bu kategoriye giriyor, ancak genellikle aynı fayda ve eleştirilere sahipler. Takdirine kullanın. Aşağıdaki J örneklerini kullanacağım, çoğunlukla bunlar ASCII ve bu yüzden yazması kolay çünkü APL karakterlerinin tek bayt olarak sayıldığından hatırlayın, bu nedenle dil seçiminde problem olarak bunun golf seçiminde olmasına izin vermeyin.
- Matematik problemleri
- Sayı bulmacalarını çözme
- Sayısal yöntemlerin gerçekleştirilmesi
- Zor 2D dizi problemleri
Onlar yüksek düzeyde etrafında diziler atmak için bu iki çok iyi matematik ve veri işleme dilleri vardır ve döngü bir sürü yapılır örtülü örneğin her birine on ekleyin 3, 4 ve 5. (diyerek, 10 + 3 4 5
) ya da her Özetle Bir dizinin satırı ( +/"1 arr
- döngü içindedir "1
).
- Asal sayılarla ilgili problem
Özellikle asal sayı problemleriyle J, APL'nin bazı lehçelerinde olduğu gibi hızlı ve kısa yerleşik ilkellere sahiptir. (Düzenleme: Kısmi lehçeli ve tamamen farklı bir uygulama olan Nars2000'i düşünüyorum. APL'nin asal sayılar için yerleşik özelliği yoktur.) N-üssü ( p:
), no. ( _1&p:
), faktoring ( q:
), GCD ve LCM ( +.
ve *.
) 'ye kadar olan primerlerin ve benzerlerinin orada bir sürü var. Bununla birlikte, pratikte soru çoğu zaman kendi temel uygulamalarınızı pişirmeniz gerektiğini belirtir, bu yüzden bunlar çok fazla kullanmazlar. İhtiyacınız olan temel malzemeleri elde etmenin hala zarif ve süslü yolları var, bu sadece biraz daha az kes ve yapıştır olur.
Dizi ve dize işleme biraz karışık bir çantadır: APL / J'nin iyi olduğu ya da ilkel ya da ortak bir deyimi olan bir şeyse, neredeyse önemsizdir; sıralı ve çok paralelleştirilemez bir şeyse, kötü zaman geçirirsiniz. Aradaki her şey havada kalmış olsa da, genellikle olumlu cevap verirler.
- Konsol veya dosya olarak G / Ç çözümü gerektiren sorunlar
- Çözümünüzü bir işlev tanımı olarak yazmanızı gerektiren sorunlar
IO garip. APL tek karakterlik giriş ifadesini vardır, ama J ile bir dizi okumayı en az 8 harcamak zorunda: ".1!:1]1
. Çıktı biraz daha az ayrıntılı, ancak pratikte hala boşa çıkan 6 ya da 7 karaktere bakıyorsunuz. Özellikle J, girişi IO ile karıştırmak yerine bir fonksiyona argüman olarak alabilirseniz, gerçekten çok hoşuna gider.
Uygulamada, J ve APL ile genellikle çözüm konsolda çağırdığınız bir fonksiyon olarak yazılır. APL ile, temel olarak sadece argümanlarınız için değişken isimleri girebilir ve üzerinde çalıştığınız ifadeyi kaşlı ayraçlar içine sarabilir ve bir gün arayabilirsiniz.
Fakat J ile, fonksiyonları açıkça tanımlamak için bir miktar ek yük vardır - 3 :'...'
ve içerideki herhangi bir dizgeden kaçmanız gerekir - yani genellikle yapılan şey, taklit programlama adı verilen bir şeydir: fonksiyon seviyesini programlayarak, ilkelleri bir şekilde birleştirirsiniz. Haskell'inkinden farklı değil. Bu hem bir nimettir hem de bir lanet olabilir, çünkü bağımsız değişkenlerinize atıfta bulunmak için çok fazla karakter harcamak zorunda değilsiniz, ancak parantez içinde boğulmak ve başka türlü kısa ve zekice çözümünüzü hacklemeye çalışan onlarca karakter kaybetmek zorundasınız. çalışan bir şey.
- Ayrıştırma gerektiren sorunlar
- Hesaplamalı geometri
Bu özel problemleri golf oynamak konusunda deneyimim yok, ancak şunu söyleyeceğim: sonuçta dizi programlama dilleri aynı şekilde birçok veriyi bir araya getirip dönüştürmede çok iyidir. Problemi sayı karışmada bir alıştırmaya dönüştürebiliyorsanız, bir APL / J problemi yaratabilirsiniz, ter yok.
Bu, her şeyin bir APL / J sorunu olmadığını söyledi. Golfscript'in aksine, APL ve J diğer avantajlarıyla birlikte golf oynamak için iyi olmuşlardır;