2010-09-17 8 views

उत्तर

33

अंतर्निहित "+" या "-" फ़ंक्शंस, या उनके शॉर्टंड "1+" या "1-" का उपयोग करें, यदि आप मूल संख्या (तर्क) को संशोधित किए बिना परिणाम का उपयोग करना चाहते हैं। यदि आप मूल स्थान (एक संख्या युक्त) को संशोधित करना चाहते हैं, तो अंतर्निहित "incf" या "decf" फ़ंक्शंस का उपयोग करें।

अलावा ऑपरेटर का उपयोग करना:

(setf num 41) 
(+ 1 num) ; returns 42, does not modify num 
(+ num 1) ; returns 42, does not modify num 
(- num 1) ; returns 40, does not modify num 
(- 1 num) ; NOTE: returns -40, since a - b is not the same as b - a 

या, यदि आप पसंद करते हैं, तो आपको निम्न शॉर्ट हाथ इस्तेमाल कर सकते हैं:

(1+ num) ; returns 42, does not modify num. 
(1- num) ; returns 40, does not modify num. 

ध्यान दें कि कॉमन लिस्प विनिर्देश के ऊपर दो रूपों को परिभाषित करता है अर्थ में समकक्ष हो, और सुझाव देता है कि कार्यान्वयन उन्हें प्रदर्शन में बराबर बनाते हैं। लिस्प विशेषज्ञों के मुताबिक, यह एक सुझाव है, लेकिन किसी भी "आत्म-सम्मान" कार्यान्वयन में कोई प्रदर्शन अंतर नहीं दिखना चाहिए।

आप संख्या को अद्यतन करना चाहता है तो (केवल 1 + अपने मूल्य मिलता है), तो "INCF" का उपयोग करें:

(setf num 41) 
(incf num) ; returns 42, and num is now 42. 

(setf num 41) 
(decf num) ; returns 40, and num is now 40. 

(incf 41) ; FAIL! Can't modify a literal 

नोट:

तुम भी INCF/DECF उपयोग कर सकते हैं बढ़ाने के लिए (घटती) 1 से अधिक इकाई द्वारा:

(setf foo 40) 
(incf foo 2.5) ; returns 42.5, and foo is now 42.5 

अधिक जानकारी के लिए, कॉमन लिस्प Hyperspec: 1+ incf/decf

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