2016-05-12 11 views
7

Câu hỏi này liên quan đến mã Chương 6 của Sách Conrad Barski, Land of Lisp.Điều kiện trong hàm lisp của Conad Barski là thừa?

Mã này là sau

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

Bây giờ nhìn vào (lit ..) phần và các công cụ bên dưới nó .. ((or caps nil) ..), vì vậy câu hỏi của tôi là sau

  • nếu lit là bao giờ thành sự thật, nó sẽ được đánh giá trong biểu thức trước đây đã nêu
  • nếu không đúng, biểu thức sau sẽ luôn được đánh giá là (or caps false) =>(or caps false) mà là khá nhiều vô ích?

Vì vậy, biểu thức sau không đơn giản là (caps (cons (char ...))?

Cuốn sách này đã được đọc bởi hàng ngàn vì vậy tôi phải sai về điều gì đó và tôi không phải là John Bell.

Trả lời

2

Một trong những vấn đề là sử dụng đệ quy, giới hạn độ dài của danh sách chức năng có thể xử lý.

(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

tuyệt vời để biết, chỉ cần tự hỏi làm thế nào điều đó có liên quan đến câu hỏi? –

+0

@nerorevenge: câu hỏi thực tế đã được trả lời (xem câu trả lời của sigjuice). Hãy nhớ rằng mã có nhiều vấn đề hơn những gì bạn đã phát hiện. –

+0

được hiểu. Có bất kỳ vấn đề nào khác ngoài tính chất đệ quy của hàm chính đã đề cập không? –

Các vấn đề liên quan