खोज…


सही और गलत

विशेष प्रतीक T आम लिस्प में सही मूल्य का प्रतिनिधित्व करता है, जबकि विशेष प्रतीक NIL गलत का प्रतिनिधित्व करता है :

CL-USER> (= 3 3)
T
CL-USER> (= 3 4)
NIL

वे मानक में "निरंतर चर" (sic!) कहलाते हैं, क्योंकि वे ऐसे चर हैं जिनके मूल्य को संशोधित नहीं किया जा सकता है। परिणामस्वरूप, आप सामान्य चर के लिए उनके नामों का उपयोग नहीं कर सकते, जैसे कि निम्न, गलत, उदाहरण:

CL-USER> (defun my-fun(t)
           (+ t 1))
While compiling MY-FUN :
Can't bind or assign to constant T.

दरअसल, कोई उन्हें केवल स्थिरांक या स्व-मूल्यांकन किए गए प्रतीकों के रूप में मान सकता है। T और NIL अन्य इंद्रियों में भी विशेष हैं। उदाहरण के लिए, T भी एक प्रकार (किसी अन्य प्रकार का सुपरस्क्रिप्ट) है, जबकि NIL भी खाली सूची है:

CL-USER> (eql NIL '())
T
CL-USER> (cons 'a (cons 'b nil))
(A B)

सामान्यीकृत बूलियन

दरअसल NIL से अलग किसी भी मूल्य को कॉमन लिस्प में एक सही मूल्य माना जाता है। उदाहरण के लिए:

CL-USER> (let ((a (+ 2 2)))
           (if a
               a
               "Oh my! 2 + 2 is equal to NIL!"))
4

कार्यक्रमों को अधिक संक्षिप्त बनाने के लिए इस तथ्य को बूलियन ऑपरेटरों के साथ जोड़ा जा सकता है। उदाहरण के लिए, उपरोक्त उदाहरण इसके बराबर है:

CL-USER> (or (+ 2 2) "Oh my! 2 + 2 is equal to NIL!")
4

मैक्रो OR सही करने के लिए छोड़ दिया और के रूप में यह एक गैर शून्य मूल्य पाता है, यह लौटने के रूप में जल्द बंद हो जाता है से क्रम में अपने तर्कों का मूल्यांकन करता है। यदि वे सभी NIL , तो दिया गया मान NIL :

CL-USER> (or (= 1 2) (= 3 4) (= 5 6))
NIL

मूल रूप से, मैक्रो AND बाएं से दाएं तक अपने तर्कों का मूल्यांकन करता है और अंतिम का मान लौटाता है, यदि उन सभी का मूल्यांकन गैर-एनआईएल के लिए किया जाता है, अन्यथा यह जैसे ही NIL पाता है, मूल्यांकन को रोक देता है:

CL-USER> (let ((a 2)
               (b 3))
           (and (/= b 0) (/ a b)))
2/3
CL-USER> (let ((a 2)
               (b 0))
           (and (/= b 0) (/ a b)))
NIL

इन कारणों से, AND और OR अधिक अन्य भाषाओं, बल्कि बूलियन ऑपरेटरों के लिए की तुलना में के नियंत्रण संरचनाओं के समान माना जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow