मेरे पास डेटा से संबंधित एक प्रश्न है। लिस्ट और deleteBy के हस्ताक्षर। आदर्श रूप से इस फ़ंक्शन को इनपुट में एक अनुमान लगाया जाना चाहिए और पहला तत्व हटा देना चाहिए जिसके लिए भविष्य सत्य है। कुछ की तरह:हास्केल का डेटा क्यों। List.deleteBy एक तुलनात्मक फ़ंक्शन (ए -> ए -> बूल) इनपुट और एक अनुमान (ए -> बूल) के बजाय एक मान लेता है?
deleteBy :: (a -> Bool) -> [a] -> [a]
deleteBy p = go
where go [] = []
go (x:xs) | p x = xs
| otherwise = x:go xs
इसके बजाय समारोह पुस्तकालय में परिभाषित दोनों एक विधेय और एक मूल्य लेता है:
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy _ _ [] = []
deleteBy eq x (y:ys) = if x `eq` y then ys else y : deleteBy eq x ys
यह देखने के लिए कि eq
हमेशा x
पहले तर्क के रूप में और x
साथ प्रयोग किया जाता है आसान है ठीक हो गई है deleteBy
में, इसलिए eq x
के बजाय eq
और x
दोनों प्राप्त करने का कोई कारण नहीं है। इसके विपरीत, एक तत्व पर काम करने का अनुमान लगाकर आप भविष्यवाणी कर सकते हैं कि दो मानों की तुलना नहीं करते हैं, जैसे कि a
या cons true
जैसे छोटे कार्य के रूप में कार्य करता है। मेरा सवाल है: deleteBy
इस तरह से लागू क्यों किया गया है?
प्रासंगिक उत्तर: http://stackoverflow.com/questions/9004937/is-there-a-good-reason-why-deleteby-does-not-have-its-most- सामान्य- टाइप। '(==) 'के प्रकार के साथ संगति एक व्यावहारिक स्पष्टीकरण की तरह लगता है। – duplode
हालांकि काम करने के लिए सरल (func। Const) – PyRulez