मैं सॉर्ट में चारों ओर खेल रहा हूं, एक क्रमबद्ध सूची बनाने की कोशिश कर रहा हूं। मैं सिर्फ एक फ़ंक्शन चाहता था जो [1,2,3,2,4]
सूची लेता है और Sorted [1,2,3,4]
जैसे कुछ वापस लौटाएगा - यानी खराब हिस्सों को बाहर निकालना, लेकिन वास्तव में पूरी सूची को सॉर्ट नहीं करना।पैटर्न मिलान प्रकार
मैंने सोचा कि मैं lesseq
प्रकार के एक फ़ंक्शन को परिभाषित करके शुरू करूंगा, और फिर मैं उस सुंदरता पर आसानी से मिलान कर सकता हूं। शायद यह एक बुरा विचार है।
मुद्दा मैं अभी आ रही है की जड़ है कि (टुकड़ा, तल पर पूरे समारोह)
Fixpoint lesseq (m n : nat) : option (m <= n) :=
match m with
| 0 => match n with
| 0 => Some (le_n 0)
...
typechecking नहीं है; यह कहता है कि यह option (m <= n)
की अपेक्षा कर रहा है, लेकिन Some (le_n 0)
में option (0 <= 0)
है। मुझे समझ में नहीं आता है, क्योंकि जाहिर है कि m
और n
दोनों संदर्भ में शून्य हैं, लेकिन मुझे नहीं पता कि कोक को कैसे बताना है।
पूरे समारोह है:
Fixpoint lesseq (m n : nat) : option (m <= n) :=
match m with
| 0 => match n with
| 0 => Some (le_n 0)
| S n_ => None
end
| S m_ => match n with
| 0 => None
| S _ => match lesseq m_ n with
| Some x=> le_S m n x
| None => None
end
end
end.
शायद मैं अपने आप को के आगे हो रही है और सिर्फ पढ़ने रखने के लिए इससे पहले कि मैं इस से निपटने की जरूरत है।
बीटीडब्ल्यू, यदि आप इस दृष्टिकोण का पालन करते हैं तो मैं प्रोग्राम सुविधा का उपयोग करके बहुत सलाह देता हूं।यह आपको अपनी सूची को पहली सूची की शैली में लिखने की अनुमति देता है, लेकिन किसी भी संख्या में "छेद" (_) छोड़ देता है, जिसे आप रणनीतियों (दूसरी सूची की शैली) का उपयोग करके "भरें" कर सकते हैं। इसलिए यह आपको प्रोग्रामिंग और साबित करने के लिए अच्छी तरह से अलग करने की अनुमति देता है। – akoprowski
सहायता के लिए दोनों धन्यवाद। मुझे सीखने के लिए बहुत कुछ है, यह नहीं पता था कि आप कार्यों को परिभाषित करने के लिए रणनीति का उपयोग कर सकते हैं (हालांकि यह समझ में आता है)। अब मैं मानता हूं कि एक योग प्रकार (<= b \/ a > बी) बहुत अच्छा होगा, क्योंकि जब मैं कुछ चाहता हूं तो मैं किसी को वापस लौटकर गलत कमी को लागू करने में कामयाब रहा; यह एक और विशिष्ट प्रकार के साथ संभव नहीं होगा। मैं निश्चित रूप से मानक पुस्तकालय के माध्यम से एक और रूप ले जाऊंगा। –