Ich habe eine Los von guten Dingen über Land of Lisp gelesen, also dachte ich, dass ich durchgehen könnte, um zu sehen, was es zu sehen gab.Land von Lisp Beispiel Redundanz?
(defun tweak-text (lst caps lit)
(when lst
(let ((item (car lst))
(rest (cdr lst)))
(cond
; If item = space, then call recursively starting with ret
; Then, prepend the space on to the result.
((eq item #\space) (cons item (tweak-text rest caps lit)))
; if the item is an exclamation point. Make sure that the
; next non-space is capitalized.
((member item '(#\! #\? #\.)) (cons item (tweak-text rest t lit)))
; if item = " then toggle whether we are in literal mode
((eq item #\") (tweak-text rest caps (not lit)))
; if literal mode, just add the item as is and continue
(lit (cons item (tweak-text rest nil lit)))
; if either caps or literal mode = true capitalize it?
((or caps lit) (cons (char-upcase item) (tweak-text rest nil lit)))
; otherwise lower-case it.
(t (cons (char-downcase item) (tweak-text rest nil nil)))))))
(Kommentare Mine sind)
(. FYI - die Methodensignatur ist (list-of-symbols bool-whether-to-caps bool-whether-to-treat-literally)
aber der Autor diese (lst caps lit)
verkürzt)
Aber wie auch immer, hier ist die Frage:
Dies hat (cond... (lit ...) ((or caps lit) ...))
in es. Mein Verständnis ist, dass dies if(lit){ ... } else if(caps || lit){...}
in einer C-Stil-Syntax übersetzen würde. Ist das oder die Aussage dann nicht überflüssig? Gibt es jemals eine Bedingung, bei der die (or caps lit)
Bedingung aufgerufen wird, wenn caps nil
ist?
Dank. Ich fing an zu denken, dass ich verrückt werde (ich werde daran denken, Errata das nächste Mal zu überprüfen) – cwallenpoole