Deutsch   English   Français   Italiano  
<v71ahj$9ncm$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp
Subject: Re: Simple recursive functions in Lisp
Date: Sun, 14 Jul 2024 19:56:39 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 33
Message-ID: <v71ahj$9ncm$1@dont-email.me>
References: <v719v7$9kar$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Sun, 14 Jul 2024 21:56:39 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="78677f07eb040e8118f6c654ec373cab";
	logging-data="318870"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1985gwzH1lsnx4l27YhROJO"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:KOxH3q6blaBK05EW02wxjaTxI/w=
Bytes: 1523

B. Pym wrote:

> Pascal Bourguignon wrote:
> 
> > (defun sum (list)
> >   (loop :for x :in list :sum x))
> 
> Gauche Scheme
> 
> (define (sum lst)   (fold + 0 lst))
> 
> (sum '(1 3 5 7 9))
>   ===>
> 25

Pascal Bourguignon wrote:

> >> Of course, since LOOP is a higher level abstraction.  You should
> >> compare with this iterative form:
> >>
> >> (defun sum (list)
> >>   (do ((current list (cdr current))
> >>        (sum 0))
> >>       ((null current) sum)
> >>    (setf sum (+ sum (car current)))))

Better:

(define (sum lst)
  (do ((xs lst (cdr xs))
       (res 0 (+ res (car xs))))
    ((null? xs)  res)))