bir tek değere düşürmek için bir öğe listesi üzerinde bir işlem gerçekleştirmek için izin iki işlevi vardır. (Elbette ikiden fazla var, ancak bunlar ilgimi çeken ikisi.) Bunlar foldl1
ve foldr1
. Gerçekleştirilecek işlem commutative (ekleme gibi) ise, bunların hangisini kullandığınız önemli değildir. Sonuç aynı olacak. Bununla birlikte, eğer operasyon değiştirici (ör. Çıkarma) değilse, o zaman ikisi çok farklı sonuçlar üretir. Örneğin:J Haskell'in foldl1'inin uygulanmasında en etkili yol nedir? Haskell'de
foldr1 (-) [1..9]
foldl1 (-) [1..9]
Birincisi 5 ve ikinciye, -43. foldr1
J eşdeğer uç zarf, /
, örneğin, foldr1 (-) [1..9]
eşdeğerdir
-/ 1+i.9
olup. Eklem zarfı gibi çalışan bir J harfini oluşturmak istiyorum, ancak katlar yerine sağa sola. Birlikte gelen en iyi şudur:
- foldl 1+i.9
ve almak -43 sol kat beklenen budur cevap olarak:
foldl =: 1 : 'u~/@|.'
Böylece, denebilir.
J bunu yapmanın daha iyi bir yolu var mı? Nedense, y
argümanını tersine çevirmek bana etkili gelmiyor. Belki de buna başvurmak zorunda kalmadan bunu yapmanın bir yolu vardır.
olursa olsun görünüyor ne kadar pratik dizi saygısız yanında bir şey olarak böyle olup olmadığını bilmiyorum. Birisi (ya da umut) Haskell'in bunu yapmaz ve sadece işlevin sonuna kadar çalışır ... – MPelletier
"Nasıl IMpractical olursa olsun." – MPelletier