2012-11-08 13 views
12

every? के लिए स्रोत कोड को देखते हुए स्पष्ट बनाता है क्योंक्यों (हर? स्ट्रिंग? []) सच साबित करना चाहिए?

(every? string? []) => true 

इसका कारण यह है every? रिकर्सिवली लागू किया और प्रत्यावर्तन समाप्त करने के लिए (nil? (seq coll)) का उपयोग करता है। लेकिन, मेरा सवाल यह है कि, इस व्यवहार से क्या अर्थ होता है? बस उस पर फिसल गया।

मैं अपने मुद्दे

(and (seq x) (every? string? x)) 
+9

यह वास्तव में सच है कि एक खाली वेक्टर का हर तत्व एक स्ट्रिंग है। –

+3

'हर? 'एक सकारात्मक दृष्टिकोण व्यक्ति द्वारा लिखा गया है – Ankur

उत्तर

9

क्योंकि यह फोरल-क्वांटिफायर के समान कार्य करता है। यही है, इसे शुरू में सच माना जाता है और भविष्यवाणी का प्रत्येक आवेदन इसे झूठा साबित करने का प्रयास है। अस्तित्व के लिए क्लोजर में any? के बजाय के बजाय some कहा जाता है) विपरीत तरीके से काम करता है - यह गलत लगता है और भविष्यवाणी के प्रत्येक आवेदन को यह साबित करने का प्रयास है।

दूसरे शब्दों में, यह हमेशा सच है कि किसी के लिए कुछ सच नहीं है, और यह हमेशा झूठा है कि किसी के लिए कुछ सच नहीं है।

+0

क्या आप कृपया उस संदर्भ से लिंक कर सकते हैं जो बताता है कि यह कैसे समझ में आता है? मुझे लगता है कि यह सेट थ्योरी सामान है, लेकिन यह सहज नहीं है। – noahlz

+0

सेट सिद्धांत के मुकाबले इसे औपचारिक तर्क के साथ और अधिक करना है (हालांकि आप इसे सेट सिद्धांत में पेश कर सकते हैं)। यदि आप Pawels उत्तर में नकारात्मकताओं के बारे में सोचते हैं तो यह वास्तव में काफी सहज है - "एक्स में सभी एक्स के लिए कुछ सच है" यह कहने जैसा ही है "एक्स में कोई एक्स नहीं है जिसके लिए कुछ सत्य नहीं है"। 'हर?' खाली सीमाओं के लिए झूठ होने से भी काफी कुछ भाव अत्यधिक जटिल हो जाएंगे। – Cubic

+0

Paweł एक लिंक पोस्ट किया। – 0dB

0

या बेहतर पूछना क्यों (every? string? []) उपज false का उपयोग कर हल कर लिया है? दोनों भिन्नताओं में कुछ आवश्यकताओं में गलत जवाब होता है। लेकिन स्पष्ट रूप से खाली अनुक्रम पर त्रुटि प्राप्त करने से बेहतर है।

+0

खाली अनुक्रम पर त्रुटि प्राप्त करना स्पष्ट रूप से बेहतर हो सकता है; यह वास्तव में बेहतर नहीं हो सकता है! हमारे पास उत्पादन में कुछ कोड उड़ा था क्योंकि उस व्यवहार के कारण, अगर मुझे सही याद है, तो स्कैला में एक गुना। मैं नहीं कहता कि उड़ना गलत है, बस कुछ ऐसी स्थिति है जहां कोई भी व्यवहार आपको चोट पहुंचाएगा। वास्तव में, आप एक प्रकार की प्रणाली को शक्तिशाली सूची में इन परिचालनों को निष्पादित करने के लिए पर्याप्त शक्तिशाली चाहते हैं। –

+0

हास्केल के लिए यय, जिसे मैं सराहना करता हूं और सीखा है, लेकिन, मैं क्लोजर के साथ रहूंगा और कभी-कभी आश्चर्यजनक मुद्दों से निपटने का प्रयास करूंगा :-) – 0dB

+1

@ 0 डीबी यह आश्चर्यजनक नहीं है कि आप सार्वभौमिक मात्रा से परिचित हैं, और मुझे लगता है कि हास्केल लोग भी आपको बताएंगे कि खाली और गैर-खाली सूचियों के लिए अलग-अलग प्रकार होने के कारण पागल है। – Cubic

8

फ़ंक्शन every?universal quantification लागू करता है।

(every? string? []) => false से इसे का पालन होता है कि [] एक वस्तु x ऐसी है कि (string? x) => false शामिल (यह सार्वभौमिक परिमाणक के negation कैसे काम करता है)। इससे विरोधाभास होता है, इसलिए (every? string? []) को true वापस करना होगा।

7

यह गणित में परिभाषित किया गया है कि इसके लिए एक अच्छा कारण है। every? को किसी अन्य तरीके से परिभाषित किया गया तो यह एक स्थिरता आपदा होगी।

वर्तमान परिभाषा के साथ concatenation का परिणाम every? foo को संतुष्ट करता है यदि केवल और यदि सभी समेकित संग्रह every? foo को संतुष्ट करते हैं। खाली सूची पर every? वापसी false बनाना इस सुविधाजनक तुल्यता और दूसरों के एक मेजबान टूट जाएगा (जैसे एक तत्व को हटाने कभी कभी true से every? स्विचिंग false करने के लिए नेतृत्व करेंगे।)

+0

मुझे यह भी जवाब "सामान्य ज्ञान" होने के लिए पसंद है :-) – 0dB

0

मेरा जवाब vacuous truth है।
विकी यह अच्छी तरह से शामिल किया गया है तो मैं केवल वर्तमान पहले पैराग्राफ बोली होगी:

गणित और तर्क में, एक हलका सच्चाई एक बयान है कि कि खाली सेट के सभी सदस्यों को एक निश्चित संपत्ति है इस बात पर ज़ोर है। उदाहरण के लिए, "कमरे में सभी सेल फोन बंद कर दिए गए हैं" कथन " कमरे में कोई सेल फ़ोन होने पर भी सत्य होगा। इस मामले में, कथन "कमरे में सभी सेल फोन चालू हैं" भी स्पष्ट रूप से सत्य होंगे, जैसा कि दोनों के संयोजन के रूप में होगा: "कक्ष में सभी सेल फ़ोन चालू और बंद कर दिए गए हैं"।

0

यह "और" और "या" संचालन के लिए पहचान मानों पर आता है। किसी भी बुलियन बी के लिए, यह मामला है कि बी के समान मूल्य B & T है। इस प्रकार, किसी भी मूल्य का "और" सत्य होना चाहिए। इसी प्रकार, यह भी सच है कि B | F के समान मूल्य है बी, इसलिए कोई मान नहीं है या "" कोई मान गलत नहीं है।

इसी तरह से, किसी भी शब्द का उत्पाद 1 नहीं है और कोई शब्द नहीं है 0, जो गुणा और अतिरिक्त ऑपरेटरों के लिए पहचान मान हैं।

संबंधित मुद्दे