From 40cf224166d301b3704cf423a1234520c613007d Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Tue, 29 Dec 2009 15:56:05 +0000 Subject: [PATCH] use tail recursion, not because of speed, but because breaking code would always have bad context dumps svn: r17427 original commit: 9660490922a31892ae0ff132ae1c6d172154768d --- collects/net/nntp-unit.ss | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/collects/net/nntp-unit.ss b/collects/net/nntp-unit.ss index eee9b36..65bd87c 100644 --- a/collects/net/nntp-unit.ss +++ b/collects/net/nntp-unit.ss @@ -173,19 +173,16 @@ (define (get-rest-of-multi-line-response communicator) (let ([receiver (communicator-receiver communicator)]) - (let loop () + (let loop ([r '()]) (let ([l (get-one-line-from-server receiver)]) (cond - [(eof-object? l) - ((signal-error make-premature-close - "port prematurely closed during multi-line response") - communicator)] - [(string=? l ".") - '()] - [(string=? l "..") - (cons "." (loop))] - [else - (cons l (loop))]))))) + [(eof-object? l) + ((signal-error make-premature-close + "port prematurely closed during multi-line response") + communicator)] + [(string=? l ".") (reverse r)] + [(string=? l "..") (loop (cons "." r))] + [else (loop (cons l r))]))))) ;; get-multi-line-response : ;; communicator -> number x string x list (string) @@ -307,12 +304,7 @@ ;; list (string) x list (desired) -> list (string) (define (extract-desired-headers headers desireds) - (let loop ([headers headers]) - (if (null? headers) null - (let ([first (car headers)] - [rest (cdr headers)]) - (if (ormap (lambda (matcher) - (regexp-match matcher first)) - desireds) - (cons first (loop rest)) - (loop rest)))))) + (filter (lambda (header) + (ormap (lambda (matcher) (regexp-match matcher header)) + desireds)) + headers))