İşlevi ifade etmenin en kısa yolu nedir
f(a,b)(c,d)=(a+c,b+d)
işaretsiz gösterimde?
pointfree.io bize verir
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
biraz çalışma ile kısaltılabilir
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
76 bayt için. Ancak bu , böyle basit bir görev için hala çok uzun ve karmaşık görünüyor . Daha kısa bir noktadan bağımsız işlev olarak ikili eklemeyi ifade etmenin bir yolu var mı?
Noktadan arındırmakla ne demek istediğimi açıklığa kavuşturmak için, bir fonksiyonun noktasız bir beyanı, mevcut fonksiyonları ve operatörleri alıp bunları istenen fonksiyon yaratılacak şekilde birbirine uygulamayı içerir. Backticks, parantezler ve edebi değerleri ( []
, 0
, [1..3]
vb) izin fakat gibi anahtar kelimeleri olduğunu where
ve let
değillerdir. Bu şu anlama gelir:
Herhangi bir değişken / işlev atayamazsınız
Lambdas kullanamazsınız
İçe aktaramazsınız
(+)<$>([1],2)<*>([3],4)
verir ([1,3],6)
.