Prolog

2010-11-04 12 views
8

में हास्केल में बराबर चर, जैसे मिलान prolog में पैटर्न, हम निम्नलिखित की तरह कुछ कर सकते हैं:Prolog

myFunction a (a:xs) = ... 

यह जब myFunction के 1 तर्क सूची के पहले आइटम के समान है, है यह दूसरे तर्क में है, यह फ़ंक्शन ... का मूल्यांकन करेगा।

मेरा प्रश्न अब है ... हास्केल में एक ही चीज़ को कैसे पूरा किया जाए? मुझे यह विचार है कि प्रोलॉग का पैटर्न मिलान हास्केल की तुलना में अधिक अभिव्यक्तिपूर्ण है। मैं कोड करने की कोशिश कर रहा हूं कि हास्केल में और मुझे परेशानी हो रही है - या तो मैं अमान्य वाक्यविन्यास का उपयोग कर रहा हूं या उपर्युक्त चाल बस नहीं करेगी।

उत्तर

13

हास्केल इस तरह के "परिवर्तनीय मिलान" नहीं करता है। आप स्पष्ट रूप पर एक गार्ड डाल करना होगा:

myFunction a (x:xs) 
    | x == a = ... 
8

हास्केल में, आप एक पैटर्न मैच में इस तरह अंतर्निहित तुलना नहीं कर सकते। Prolog करता है

myFunction a (b:xs) | a == b = ... 
12

हास्केल चर के एकीकरण ऐसा नहीं करता है,: इसके बजाय, आप तो जैसे एक गार्ड जो स्पष्ट रूप से तुलना करता है, जोड़ने की आवश्यकता होगी। Haskell 98 report कहता है,

प्रत्येक मैच के अनुरूप पैटर्न का सेट रैखिक होना चाहिए --- पूरे चर में एक से अधिक बार प्रदर्शित होने की अनुमति नहीं है।

आप निश्चित रूप से चर नाम कर सकते हैं, और राज्य वे भी बराबर होना चाहिए:

f a (b:_) | a == b = ... 

दिलचस्प बात यह है AGDA जानकारी इस तरह पैटर्न में प्रवाहित करते हैं, और एक विशेष अंकन का परिचय है f x (.x:_) कहने के लिए कि यह xx होना चाहिए।

+1

स्कैला में आप एक पैटर्न को इंगित करने के लिए 'x' का उपयोग कर सकते हैं जो एग्डा केस जैसे वैरिएबल के मान से मेल खाता है। –