फ़ंक्शन संरचना तकनीक और लंबाई के आधार पर हैकेल को एकाधिक पुनर्लेखन नियमों की आवश्यकता क्यों है? इससे बचने का कोई रास्ता है क्या?हास्केल रिवाइट नियम और फ़ंक्शन संरचना
उदाहरण के लिए, निम्नलिखित कोड दिया ...
{-# RULES
"f/f" forall a. f (f a) = 4*a
#-}
f a = 2 * a
इस के लिए
test1 = f (f 1)
काम करता है लेकिन हम
test2 = f . f $ 1
और
के लिए एक नियम जोड़ने की जरूरतtest3 = f $ f 1
निम्नलिखित नियम
{-# RULES
"f/f1" forall a. f (f a) = 4 * a
"f/f2" forall a. f . f $ a = 4 * a
"f/f3" forall a. f $ f $ a = 4 * a
#-}
हालांकि के साथ हमें छोड़ रहा है, जब हम स्ट्रिंग इन एक साथ या रचना नियम आग नहीं होने के कुछ अन्य रूपों का उपयोग करें।
test4 = f . f . f $ 1
test5 = f $ f $ f $ 1
test6 = f $ 1
यह क्यों है? क्या मुझे हर संभव कार्यान्वयन के लिए पुनर्लेखन नियम लिखना है?
मुझे वास्तव में पता नहीं है, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि पुनर्लेखन नियम आपके द्वारा आयात किए गए कार्यों पर लागू नहीं होते हैं। और '$' और '.' प्रीलूड से केवल आयातित फ़ंक्शन हैं। –