This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
Re: srfi-1 on long lists?
- From: Per Bothner <per at bothner dot com>
- To: Marco VEZZOLI <marco dot vezzoli at st dot com>
- Cc: Chris Dean <ctdean at sokitomi dot com>, Kawa List <kawa at sources dot redhat dot com>
- Date: Mon, 03 May 2004 13:19:56 -0700
- Subject: Re: srfi-1 on long lists?
- References: <19692.1083576629@mercedsystems.com> <409614E7.5AFD7142@st.com>
Marco VEZZOLI wrote:
Maybe we could do a better job by implementing some code in Java?
That shouldn't be needed. This seems to work:
(define (list-copy (lis :: <list>)) :: <list>
(let recur ((lis :: <list> lis)
(result :: <list> '())
(prev :: <list> '()))
(if (pair? lis)
(let ((p :: <pair> (cons (car lis) '()))
(next :: <list> (cdr lis)))
(if (null? prev)
(recur next p p)
(begin
(set-cdr! prev p)
(recur next result p))))
result)))
Unfortunately, Kawa doesn't manage to recognize car and cdr
at compile-time, thus generating sub-optimimal code,
probably because those are defined using define-procedure.
That ought to be fixed.
--
--Per Bothner
per@bothner.com http://per.bothner.com/