2016-05-12 3 views
7

Diese Frage bezieht sich auf den Code von Kapitel 6 von Conrad Barskis Buch, Land of Lisp.Die Bedingung in Conad Barskis Lispfunktion ist überflüssig?

Der Code ist der folgende

(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))))))) 

am (lit ..) Teil aussehen Jetzt und das Zeug darunter .. ((or caps nil) ..), so meine Frage ist folgende

  • wenn lit immer wahr ist, es wird in der ehemaligen Ausdruck
  • ausgewertet werden, wenn es nicht wahr ist, wird der letztere Ausdruck immer zu (or caps false) =>=ausgewertet werden 210 was ist ziemlich nutzlos?

Also sollte nicht letzter Ausdruck einfach (caps (cons (char ...)) sein?

Dieses Buch wurde von Tausenden gelesen, also muss ich etwas falsch machen und ich bin nicht John Bell.

Antwort

2

Eines der Probleme ist die Verwendung von Rekursion, die die Länge der Listen begrenzt die Funktion in der Lage ist zu verarbeiten.

(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

super zu wissen, frage mich nur, wie sich das auf die Frage bezieht? –

+0

@nerorevenge: Die aktuelle Frage wurde beantwortet (siehe Antwort von sigjuice). Denken Sie daran, dass der Code mehr "Probleme" hat als das, was Sie bereits entdeckt haben. –

+0

verstanden. Gibt es noch andere Probleme als die rekursive Natur der genannten Hauptfunktion? –

Verwandte Themen