From 5b215eb57aeb47e9f08fa466d17a7db4f173a938 Mon Sep 17 00:00:00 2001 From: koba-e964 Date: Thu, 26 Jun 2014 18:40:40 +0900 Subject: [PATCH] Make filter tail-recursive --- piclib/srfi/1.scm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/piclib/srfi/1.scm b/piclib/srfi/1.scm index 85bc227e..2eafdf0d 100644 --- a/piclib/srfi/1.scm +++ b/piclib/srfi/1.scm @@ -402,12 +402,8 @@ ;; filter partition remove ;; filter! partition! remove! (define (filter pred list) - (if (null? list) - '() - (if (pred (car list)) - (cons (car list) - (filter pred (cdr list))) - (filter pred (cdr list))))) + (let ((pcons (lambda (v acc) (if (pred v) (cons v acc) acc)))) + (reverse (fold pcons '() list)))) (define (remove pred list) (filter (lambda (x) (not (pred x))) list))