मैं sml सीख रहा हूँ हो रही है, और लिखा है निम्नलिखित सरल समारोह:यह पैटर्न संपूर्ण लगता है, लेकिन मैं अभी भी चेतावनी
(* Return a list with every other element of the input list *)
fun everyOther [] = []
| everyOther [x] = [x]
| everyOther x = let
val head::head2::tail = x
in
head::everyOther(tail)
end;
निम्नलिखित में से कौन चेतावनी पैदा कर रहा है:
! Toplevel input:
! val head::head2::tail = x
! ^^^^^^^^^^^^^^^^^
! Warning: pattern matching is not exhaustive
मैं मान लें कि फ़ंक्शन कभी विफल नहीं हो सकता है, क्योंकि val head::head2::tail
हमेशा दो या दो से अधिक तत्वों के साथ सूचियों के लिए काम करेगा और एक तत्व के मामले और शून्य तत्व शामिल होंगे। जहां तक मैं कह सकता हूं, यह फ़ंक्शन अपेक्षा के अनुसार काम करता है। मुझे लगता है कि यह समस्या []
के उपयोग से संबंधित हो सकती है लेकिन मुझे वास्तव में पता नहीं है।
- sml ऐसा क्यों लगता है कि यह इन्हीं तक (मैं यह कैसे बदल रहा) नहीं है:
मेरा प्रश्न वास्तव में तीन गुना है?
- क्या कोई ऐसा मामला है जहां यह कार्य विफल हो जाएगा?
- क्या मैं इस तरह से कुछ गूंगा लेखन लिख रहा हूं?
धन्यवाद: तुम बस
fun
बयान है, जो कम कोड में परिणाम और चेतावनी को निकाल देंगे करने के लिए पैटर्न डाल कर सकते हैं! मैं अभी भी पैटर्न में जा सकते हैं के आसपास अपने सिर लपेटने की कोशिश कर रहा हूँ। त्वरित सवाल हालांकि: क्या यह चेतावनी को हटा देता है क्योंकि पैटर्न में 'हेड :: हेड 2 :: पूंछ' डालने से sml को पता चल जाता है कि कम से कम दो तत्व हैं? या यहां काम पर कुछ और है? – Wilduck@Wilduck यह चेतावनी को हटा देता है क्योंकि सूची में मौजूद प्रत्येक मान के लिए, इसमें एक पैटर्न मिल रहा है। जब आपने 'वैल हेड :: हेड 2 :: पूंछ = x' किया था तो यह मामला नहीं था क्योंकि उस पैटर्न मैच में कम से कम 2 तत्वों के साथ सूचियों के लिए केवल एक मामला था। – sepp2k
यह सही समझ में आता है। 15 मिनट में आपने बस कुछ ऐसा डिमस्टिफाइड किया था जिसे मैंने पहले ही आधा घंटे बिताया था। फिर से धन्यवाद। – Wilduck