common-lisp
बूलियन और सामान्यीकृत बूलियन
खोज…
सही और गलत
विशेष प्रतीक 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
अधिक अन्य भाषाओं, बल्कि बूलियन ऑपरेटरों के लिए की तुलना में के नियंत्रण संरचनाओं के समान माना जा सकता है।