मैं ऑनलाइन पुस्तक "learn you some erlang" के साथ पढ़ रहा हूं और मेरी समझ की जांच करने के लिए कुछ अभ्यास करने की कोशिश कर रहा हूं।क्यों डायलज़र मुझे बताता है कि इस मजेदार अनुबंध डोमेन को ओवरलैप कर रहा है?
मैं में अध्याय प्रकार निर्दिष्टीकरण और Erlang, फीफो उदाहरण पर कुछ संशोधन किए गए, (एक फीफो जहां सभी तत्वों को एक ही प्रकार टी का होना चाहिए)
एक "typed_fifo (टी)" को परिभाषित करने की कोशिश कर रहामेरी प्रकार विनिर्देश हैं:
-spec empty (typed_empty_fifo()) -> true;
(typed_nonempty_fifo(_)) -> false.
empty({fifo, [], []}) -> true;
empty({fifo, A, B}) when is_list(A), is_list(B) -> false.
dialyze:
-type typed_empty_fifo() :: {fifo, [], []}.
-type typed_nonempty_fifo(A) :: {fifo, nonempty_list(A), list(A)} | {fifo, [],nonempty_list(A) }.
-type typed_fifo(A) :: typed_empty_fifo() | typed_nonempty_fifo(A).
और जब मैं निम्नलिखित समारोह कल्पना में इसका इस्तेमाल करते हैं आर बताता है कि यह ओवरलैपिंग डोमेन की वजह से विनिर्देश को अनदेखा कर देगा।
क्या कोई मुझे बता सकता है कि मैं कहां गलती करता हूं?
मैं एक अन्य बिंदु है, मैं एक संस्करण है कि अच्छी तरह से काम किया, एक अपोहक मुझे दिखाने के लिए कुछ भी नहीं अनुचित सूचियों का उपयोग रोकने था कि टाइप फीफो परिभाषित करने के लिए प्रयास करने से पहले। आश्चर्यजनक रूप से, मुझे सूची के उचित/अनुचित चरित्र के परीक्षण के लिए एक आसान तरीका नहीं मिला है (जिसे मैं एक गार्ड में उपयोग कर सकता हूं)।
यह वास्तव में अजीब है, क्योंकि जब मैं बीआईएफ लंबाई/1 का उपयोग करता हूं, तो यह बैडग के कारण विफल हो सकता है!
23> L=[1,2|3]. ==> [1,2|3]
24> is_list(L). ==> true
25> length(L). ==> exception error: bad argument
in function length/1 called as length([1,2|3])
धन्यवाद
धन्यवाद अरोनिस। मुझे लगता है कि मैं डायलजर प्रदान करने का इरादा रखता हूं। मैं यह पता लगाने की कोशिश कर रहा हूं कि उन spec परिभाषाओं का उपयोग करने का क्या लाभ हो सकता है, डायलज़र क्या कर सकता है, और मेरे लिए क्या प्रयास है। कम से कम मैं इस मुद्दे को अनुचित सूची के साथ खोजता हूं। वैसे, मैं अभी भी अपने दूसरे प्रश्न का हल ढूंढ रहा हूं। मेरे पास झुकाव है कि मज़ेदार गार्ड में एक परीक्षण जैसे: is_list (X) और भी लम्बाई (एक्स)> -1 काम करता है। लेकिन यह एक समारोह के अंदर दुर्घटनाग्रस्त हो जाता है। – Pascal
मैंने एक संभावित समाधान के साथ जवाब संपादित किया है। ओह और मेरा पहला नाम स्टेव्रोस है! :-) – aronisstav