2016-05-12 3 views
7

यह प्रश्न कॉनराड बार्सकी की पुस्तक, Land of Lisp के अध्याय 6 कोड से संबंधित है।कॉनड बार्सकी के लिस्प फ़ंक्शन में सशर्त अनावश्यक है?

कोड निम्नलिखित

(defun tweak-text (lst caps lit) 
    (when lst 
    (let ((item (car lst)) 
      (rest (cdr lst))) 
     (cond ((eq item #\space) (cons item (tweak-text rest caps lit))) 
      ((member item '(#\! #\? #\.)) (cons item (tweak-text rest t lit))) 
      ((eq item #\") (tweak-text rest caps (not lit))) 
      (lit (cons item (tweak-text rest nil lit))) 
      ((or caps lit) (cons (char-upcase item) (tweak-text rest nil lit))) 
      (t (cons (char-downcase item) (tweak-text rest nil nil))))))) 

अब (lit ..) हिस्सा है और इसके नीचे सामान .. ((or caps nil) ..) पर देखने के है, इसलिए मेरे सवाल निम्नलिखित

  • है अगर lit कभी सच है, यह पूर्व अभिव्यक्ति में मूल्यांकन किया जाएगा
  • यदि यह सत्य नहीं है, तो बाद की अभिव्यक्ति हमेशा (or caps false) =>का मूल्यांकन करेगी 210 जो काफी बेकार है?

तो बाद की अभिव्यक्ति को केवल (caps (cons (char ...)) नहीं होना चाहिए?

यह पुस्तक हजारों द्वारा पढ़ी गई है इसलिए मुझे कुछ के बारे में गलत होना चाहिए और मैं जॉन बेल नहीं हूं।

उत्तर

2

समस्याओं में से एक समस्या रिकर्सन का उपयोग है, जो फ़ंक्शन को संसाधित करने में सक्षम होने वाली सूचियों की लंबाई को सीमित करता है।

(defun tweak-text (list &aux (caps t) (lit nil)) 
    (mapcon (lambda (c) 
      (case c 
       (#\space (list c)) 
       ((#\! #\? #\.) 
       (setf caps t) 
       (list c)) 
       (#\" 
       (setf lit (not lit)) 
       ()) 
       (otherwise 
       (cond (lit (setf caps nil) (list c)) 
        (caps (setf caps nil) (list (char-upcase c))) 
        (t (setf caps nil lit nil) 
         (list (char-downcase c))))))) 
      list)) 
+0

जानना बहुत ही बढ़िया है, बस सोच रहा है कि यह सवाल से कैसे संबंधित है? –

+0

@nerorevenge: वास्तविक प्रश्न का उत्तर दिया गया है (सिगजूइस द्वारा जवाब देखें)। ध्यान रखें कि आपके पास पहले से पता चला है कि कोड की तुलना में अधिक 'समस्याएं' हैं। –

+0

समझा। क्या उल्लिखित मुख्य कार्य की पुनरावर्ती प्रकृति के अलावा कोई और समस्या है? –

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