2013-09-28 20 views
9

kompozisyon ve gfonksiyonlarının bileşimi ( b -> f (g) (g b)) kapsayan ortak bir model f

f :. g = \a b -> f (g a) (g b) 

benim kodunda çok sık bulmak bir kalıptır benziyor. Bu tekli işlev bileşimine benzer, sadece f ikili ve onlar f geçirilen önce ben her iki argüman uygulanan g istiyorum. Ben noktadan serbest formuna bu dönüştürmek için lambdabot sorduğumda

, ben doğrusu benim kodunda olurdu değil garip büyü kelimelerini

olsun, ben de açıkça desen dışarı yazma sona .

bu durum için bir bağdaştırıcının yazma yaygın kabul görmüş bir yolu var mı? Yoksa kendimi bu durumda kendimi bulmak için çok mu garip miyim?

Şu an kullandığım zamana dair gerçek bir örneğim yok, çünkü ne zaman ihtiyacım olduğunda burayı sormayı hiç düşünmedim, ama öklid uzaklık formülünü çok düzgün bir şekilde yazmayı hayal edebiliyordum. şöyle:

distance = sqrt . (+) :. (^2) 
+2

'flip' elimine edilebilir: '(g).. f. g' –

cevap

24

Bu fonksiyon Data.Function modülünde on denir.

Genellikle böyle sqrt . (+) `on` (^2) olarak, telkin kullanılır.

+2

Bunu düşünmediğime inanamıyorum! Çok teşekkürler. Kullanım – kqr

+0

yaygın bir örnek 'SortBy (karşılaştırmak \' \ 'abs)' –

+0

Ben karşılaştıran abs' 'daha deyimseldir ancak' gelecekteki Google insanlar için dikkat edeceğiz 'on' abs''' karşılaştırmak olduğunu. Bu, çünkü 'karşılaştırma '= karşılaştırma' standart kitaplıklarda bir yerde tanımlandığı için çalışır. – kqr

2

noktası serbest stilde yazmaya çalışmayın. Bu, noktadan arınmış olmanın sıklıkla okunabilir olmadığı gerçeğinin bir örneğidir.

sadece thusly tanımlıyoruz:

(:.) :: (b -> b -> c) -> (a -> b) -> (a -> a -> c) 
infixr 9 (:.) 
f :. g x y = f (g x) (g y) 
+0

Burada bir infix operatörü, özellikle de birçok kişi ': .' veya'.: 'Için' '(.) Için kullanılması nedeniyle sorgulanabilir. (.) ' – jozefg

+0

@jozefg Elçiyi vurma - bu soruda OP'nin kullandığı semboldür. –

+0

@jozefg ":." 'Ye paralel olarak, aslında baykuş operatörü için kullanılır. '.:', Bir argümanın işlevini sola (dolayısıyla noktaya) ve sağdaki iki argümanın bir işlevini (dolayısıyla çift noktaya) alır - böylece:: .' iki argümanın bir işlevini almalıdır. solda ve sağdaki bir argümanın fonksiyonu. – kqr

İlgili konular