इंटरैक्टिव सत्रों के लिए, सामान्य लिस्प मानक को परिभाषित करते समय केस असुरक्षितता डिफ़ॉल्ट होती थी।
लेकिन, वास्तव में क्या होता है यह है कि आम लिस्प पाठक सभी प्रतीकों को इंटर्निंग और मूल्यांकन करने से पहले ऊपर उठाने के लिए परिवर्तित करता है। यह डिफ़ॉल्ट है, लेकिन यदि आप चाहें तो आप इसे हमेशा बदल सकते हैं।
*readtable*
ऑब्जेक्ट्स में एक विशेषता है, readtable-case, यह नियंत्रित करता है कि पाठक कैसे प्रतीकों को पढ़ता है और मूल्यांकन करता है। आप setf readtable-case
से :upcase
(डिफ़ॉल्ट), :downcase
, :preserve
, :invert
कर सकते हैं।
डिफ़ॉल्ट रूप से, readtable-case
:upcase
पर सेट है, जो सभी प्रतीकों को अपकेस में परिवर्तित करने का कारण बनता है।
आप केस संवेदनशीलता चाहते हैं, आप एक पहली नज़र में
(setf (readtable-case *readtable*) :invert)
=> :invert
करना चाहिए, तो आप सोच सकते हैं कि यह चयन करने के लिए बेहतर होगा: विकल्प की रक्षा, लेकिन यह कुछ मामूली मुद्दा है: सभी प्रतीकों , जैसा कि मानक द्वारा परिभाषित किया गया है, को ऊपर उठाया जाना चाहिए। तो, आप प्रतीकों आप केवल द्वारा परिभाषित करने के लिए मामले की संवेदनशीलता के लिए होता है, और यह राइट क्या करना है जाएगा:
* (DEFUN hi() "Hi!")
=> hi
* (SETF a-number 5)
=> a-number
* (HI)
=> ;error: the stored function is #'HI in the *readtable*, but by
; calling (HI) you try to acces a function named #'hi(downcase), which
; gives an error
* A-NUMBER
=> ;error: same for the variable
* (hi)
=> "Hi!"
* a-number
=> 5
:downcase
विकल्प डिफ़ॉल्ट रूप के विपरीत है, downcase के लिए, आप किसी भी हालत संवेदनशीलता दे रही है सब कुछ परिवर्तित। ,
* (setf (readtable-case *readtable*) :invert)
=> :invert
* (defun Hi() "Hi!")
=> Hi
* (Hi)
=> "Hi!"
* (eq 'Hi 'hi)
=> nil
* (eq 'HI 'hi)
=> nil
* (eq 'Hi 'Hi)
=> t
हम्म:
लेकिन
:invert
साथ, प्रतीकों आप स्रोत कोड में लिखते हैं,defun
की तरह,setf
hi
समारोह, upcase परिवर्तित हो, औरCamelCase
में किसी भी प्रतीक संरक्षित है जैसे कि यह मूल रूप से है सीएल इंटरफ़ेस के साथ कौन सी भाषाएं हैं? – wrongusernameउस समय? शायद फोरट्रान। याद रखें कि आम लिस्प और उसके पूर्ववर्तियों को बहुत समय पहले एक आकाशगंगा में बहुत दूर डिजाइन किया गया था। –
यह विशेष रूप से फोरट्रान नहीं था, यह अक्सर हैडवेयर (टेलीलेट) अपरकेस था और ओएस अपरकेस का उपयोग कर रहा था। इस प्रकार प्रोग्रामिंग भाषाओं ने अपरकेस का भी उपयोग किया: पीएल/1, कोबोल, फोरट्रान, लिस्प, ... लाइन-एडिटिंग मोड में धीमी कनेक्शन के माध्यम से टर्मिनल पर केस संवेदनशील कमांड संपादित करने के लिए यह दर्दनाक था ... –