[plt-scheme] How to insert an element in empty list?
On Aug 12, 2007, at 4:13 PM, Majorinc, Kazimir wrote:
> If list is not empty, it is easy (although not really trivial). But
> how to do that with empty list, both set-first! and set-rest!
> complain they do not work with empty lists.
>
> What does it mean, once list is empty it is empty forever?
>
> Did I miss something obvious?
Yes. Let me phrase it as a question: how do you turn a 4 into 5?
Answer: you can't. 4 is a constant, so it makes no sense to ask how
you can turn it into a 5.
In the same spirit, NULL is a constant. You can't insert anything
into a constant.
Let me ask a second question: what simple mathematical action can you
perform to produce a 5 when you give it a 4? Well, there is sub1.
(You could also define
(define (f x) (- (+ x 2) 1))
and use f.)
What kind of simple action can you perform to produce a non-empty
list when given null? Here is the simplest one I can think of:
(lambda (x) (cons x null))
;; ---
Computations in Scheme are about producing values and combining
values through operations into other values. If you really want
effect-ful programming, I urge you to consider using set!, which
changes what a variable stands for, not the data structure itself.
[*] Using this style of programming is far simpler than producing
value-mutating styles.
Yes, set-car! and set-cdr! exist, you want to deal with them as
little as possible and they are going to go away, mostly.
-- Matthias
This is an email with a Footnote:
* Well, it changes the closure in which it is located