Rocksolid Light

News from da outaworlds

mail  files  register  groups  login

Message-ID:  

Someone whom you reject today, will reject you tomorrow.


comp / comp.lang.lisp / Re: doubling list elements at every level using recursion

SubjectAuthor
o Re: doubling list elements at every level using recursionB. Pym

1
Subject: Re: doubling list elements at every level using recursion
From: B. Pym
Newsgroups: comp.lang.lisp
Organization: A noiseless patient Spider
Date: Wed, 17 Jul 2024 15:32 UTC
Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Nobody447095@here-nor-there.org (B. Pym)
Newsgroups: comp.lang.lisp
Subject: Re: doubling list elements at every level using recursion
Date: Wed, 17 Jul 2024 15:32:54 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 40
Message-ID: <v78o75$1t49j$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Wed, 17 Jul 2024 17:32:54 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="952af2bce2f08853097b4d4e0d3f356b";
logging-data="2003251"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19h8WenvgNCLOT+wAPt2+Dj"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:M9VaGfBcp6d0Uny9RT56uRQ2NgA=
View all headers

Pascal J. Bourguignon wrote:

> You could slightly generalize double, and accept any atoms. This would
> allow you to simplify it.
>
> You could also use emacs and let it do the indentation for you!
>
> (defun double (object)
> (typecase object
> (cons (cons (double (car object)) (double (cdr object))))
> (number (* 2 object))
> (t object)))
>
> (mapcar (function double)
> '( () abc 123 (1 2.0 #C(3 4) a b c (5/2 6 d e f) 7 8 9) ))
> --> (NIL ABC 246 (2 4.0 #C(6 8) A B C (5 12 D E F) 14 16 18))

Why not simply

(double '(() abc 123 (1 2.0 #C(3 4) a b c (5/2 6 d e f) 7 8 9)))
===>
(NIL ABC 246 (2 4.0 #C(6 8) A B C (5 12 D E F) 14 16 18))

Scheme

(define (double obj)
(cond ((pair? obj) `(,(double (car obj)) ,@(double (cdr obj))))
((number? obj) (* 2 obj))
(#t obj)))

(double 3)
===>
6

(double '(() abc 123 (1 2.0 (3 4) a b c (5/2 6 d e f) 7 8 9)))
===>
(() abc 246 (2 4.0 (6 8) a b c (5 12 d e f) 14 16 18))

1

rocksolid light 0.9.8
clearnet tor