मैं एक Haskell समारोह जो इतनी तरह (init xs, last xs)
में एक सूची xs
विभाजन लिखा है:हास्केल
split xs = split' [] xs
where
split' acc (x:[]) = (reverse acc, x)
split' acc (x:xs) = split' (x:acc) xs
के बाद से एक खाली सूची इस तरह से विभाजित नहीं किया जा सकता है, वहाँ के लिए कोई मुकाबला नहीं है खाली सूची हालांकि, मैं बस error ...
फ़ंक्शन नहीं चाहता था।
split [] = ([], undefined)
आलसी मूल्यांकन के लिए धन्यवाद मैं इस तरह एक सुरक्षित init
जो केवल खाली सूची के लिए खाली सूची रिटर्न परिभाषित कर सकते हैं:
init' = fst . split
वहाँ किसी तरह मैं कैसे पता लगा सकता है इस प्रकार मैं निम्नलिखित परिभाषित अपरिभाषित मैं इसे उपयोग करने की कोशिश की, ऐसी है कि
last' xs
| isUndefined (snd xs) = ...
| otherwise = ...
मैं के बारे में Maybe
और Either
, और कहा कि पता चले कि क्या जो मैं चाहता हूं उसे व्यक्त करने के लिए वे बेहतर विकल्प हैं। हालांकि मुझे आश्चर्य हुआ कि क्या अपरिभाषित वास्तविक मूल्य का पता लगाने का कोई तरीका है, यानी अपवादों को पकड़ने जैसी त्रुटियों को पकड़ने के मामले में।
सरल उत्तर नहीं है। अपरिभाषित पता लगाना संभव नहीं है। (एक और जटिल जवाब यह है कि आप आईओ मामाद में अपवादों को पकड़ सकते हैं, लेकिन यह नहीं है कि आप यहां क्या करना चाहते हैं।) – augustss