2010-12-29 20 views
6

मैं here पढ़ रहा था, और मैंने देखा है कि, उदाहरण के लिए, अगर मैं निम्नलिखित समारोह परिभाषाएं हैं:हास्केल में जेनेरिक समारोह रचना

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

निम्नलिखित अभिव्यक्ति अमान्य है:

(b . a) 2 3 

यह काफी अजीब बात है कि संरचना के कार्यों में केवल एक पैरामीटर होना चाहिए।

क्या यह प्रतिबंध है क्योंकि हास्केल में सबसे सामान्य एक को परिभाषित करने में कुछ समस्या है या कोई अन्य कारण है?

मैं हास्केल के लिए नया हूं, इसलिए मैं शायद बेकार प्रश्न पूछ रहा हूं।

उत्तर

7

जब आप a 2 3 करते हैं, तो आप a को 2 तर्कों पर लागू नहीं कर रहे हैं। आप वास्तव में a को केवल एकमात्र तर्क के लिए आवेदन कर रहे हैं, जिसके परिणामस्वरूप फ़ंक्शन होता है, फिर उस फ़ंक्शन को ले लें और इसे 3 पर लागू करें। तो आप वास्तव में 2 एप्लिकेशन करते हैं। ,

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

आप ऐसा करने के बाद हो सकता है, btw

(b . a 2) 3 
+0

ओह कि अच्छा है और समझ में आता है: एक अर्थ में तो, क्या आप इस के बराबर नहीं है। धन्यवाद! – hsknew

+0

और यदि किसी के पास इंटीजर-> इंटीजर-> इंटीजर-> इंटीजर है, तो मैं तीसरा पैरामीटर कैसे सेट कर सकता हूं, और अन्य दो 'चर' को दोहरा सकता हूं? – hsknew

+0

आप कह सकते हैं '(बी। ए 1 2) 3'। मुद्दा यह है कि 'ए' द्वारा उत्पादित 'चीज' को 'बी' के डोमेन में होना चाहिए (या मोटे तौर पर उसी प्रकार के बोलना) – Phil

संबंधित मुद्दे