2010-12-29 18 views
6

I here okurken, ve fark, bu, örneğin, aşağıdaki işlev tanımları varsa:genel fonksiyon bileşimi

a :: Integer->Integer->Integer 
b :: Integer->Bool 

aşağıdaki ifade geçersiz olup:

(b . a) 2 3 

Kompozisyonun işlevlerinin sadece bir parametresi olması oldukça garip.

Bu kısıtlama, Haskell'deki en genel olanı tanımlamak veya başka bir nedeniniz var mıdır?

Haskell'e yeni geldim, bu yüzden işe yaramaz sorular soruyorum.

cevap

7

a 2 3'u yaptığınızda, 2 argümana a uygulanmazsınız. Aslında sadece bir argümana a uyguluyorsunuz, bu da bir fonksiyonla sonuçlanıyor, o zaman bu fonksiyonu alıp 3'e uyguluyorsunuz. Yani aslında 2 uygulama yapıyorsunuz. Sen btw

(b . a 2) 3 
+0

Oh yapmış olabilir

a :: (Integer, Integer) -> Integer b :: Integer -> Integer (b . a) (2, 3) 

, sorun değil ve mantıklı: bir anlamda Ee, ne var bu eşdeğer değildir. Teşekkürler! – hsknew

+0

Ve eğer bir Tamsayı -> Tamsayı -> Tamsayı -> Tamsayı varsa, üçüncü parametreyi nasıl ayarlayabilirim ve diğer iki değişkene izin verebilirim? – hsknew

+0

Yapabilirsin (b. A 1 2) 3', diyelim. Buradaki nokta, 'a'nın' b 'alanında olması gereken (veya aynı türden kabaca ifade etmesi gereken) şeydir. – Phil