, bizCurrying çıkarma
map (\x -> x + 1) [1..5]
yazabilirim ama çoğu insan sadece yerine
map (+1) [1..5]
için giderdim sanırım. Fakat bu açıkça (-1) ile çalışmaz, çünkü bu olumsuz bir şey.
Yani akla gelen ilk şey çıkarma Prelude (x - y = x + negate y
) içinde nasıl tanımlandığını dikkate mantıklıdır hangi
map (+(-1)) [1..5]
, ama bana biraz tuhaf görünüyor. Sonra ben
map (flip (-) 1) [1..5]
Bu şekilde bana daha iyi görünüyor, ama belki biraz çok karmaşık geldi.
Şimdi bunun büyük bir şey olmadığını biliyorum, ama bunu yazmanın daha bariz bir yolunu özlüyorum diye merak ediyorum. Eğer değilse, 2 yoldan hangisini tercih edersiniz? Ben sadece soruyorum çünkü sık sık kodunuzu daha idiomatik yapan ve bu yüzden okuması gereken diğer geliştiriciler için hoş olan küçük detaylar.
Çözüm İlk kurşunun gerçekten açık çünkü çoğunlukla cevapları bir çift, benim kişisel favorim
map pred [1..5]
ardından
map (subtract 1) [1..5]
olduğunu düşünüyorum aldık Şimdi
ve hiç kimse, pred
'un (önceki model) ne anlama geldiğini tahmin etmeye/aramaya ihtiyaç duymaz.
map (subtract 1) [1..5]
küçük not yazabilir öneririm: sorun operatör bölümü sözdizimi var, currying değildir.'(-) 1', curried' -' işlevini kısmen uygulamak için (sözdizimsel olarak geçerli) bir yoldur. –
Bunun için bir başlık ile mücadele ediyordum ve daha iyi bir şey ile gelemedim. Ayrıca 'harita ((-) 1) [1..5]' çalışmaz, dolayısıyla flip ile sürümü. –
Onlar İntegral ve sadece 1 çıkarmak istiyorsun, neden 'harita pred' –