[plt-scheme] How to insert an element in empty list?
I should have written (cons 1 null) in stead of (cons 1 ()). The notation () may
suggest that you can desctructively put something between the two parentheses,
which you cant.
Jos Koot
----- Original Message -----
From: "Jos Koot" <jos.koot at telefonica.net>
To: "Majorinc, Kazimir" <kazimir at chem.pmf.hr>; "PLT Scheme Mailing List"
<plt-scheme at list.cs.brown.edu>
Sent: Monday, August 13, 2007 12:24 AM
Subject: Re: [plt-scheme] How to insert an element in empty list?
> Yes, I think you are missing something essential. But before filling the gap
> you should first have a thorough understanding of pairs, the empty list and
> lists without referring to set-car! and set-cdr!, I think. The empty list is
> just a mark and its main use is to mark the end of a proper list. You can't
> put anything into that mark. Yes, this makes it impossible to mutate an empty
> list (sorry I mean *the* empty list, for it is a unique mark) such as to
> convert it into a non empty list. This may be confusing, for it is possible
> with non empty lists. It is not very much of a problem to make a datatype like
> lists that includes pseudo empty lists (yes plural) that can be mutated such
> as to become non empty. It is even tempting to provide an example, but I wont,
> for it probably would increase your confusion. I suggest you first play with
> creating lists by means of cons only. Given the task of forming another list
> out of a given list, first think of the original list as an immutable object
> and create a new list by means of cons and using car and cdr for extraction of
> the elements of the original list. For example: How to add an element to a
> list (any list, empty or non empty)
>
> (define (add-element element list) (cons element list))
> Of course you dont need add-element, for cons already does its job.
>
> Now how to replace the first element of a non empty list: (of course there is
> nothing to replace in an (sorry, I mean *the*) empty list)
>
> (define (replace-first-element new-element non-empty-list)
> (cons new-element (cdr non-empty-list)))
>
> Hence:
>
> (define a (cons 1 ()))
> (define b (replace-first-element 2 a))
> a --> (1) not mutated, which usualy is nice
> b --> (2)
>
> The empty list is a unique constant. You don't want to mutate this constant
> and moreover you cant, as less you can change 1 into 2. You can make 2 from 1
> by writing (add1 1). You can add an element to a list by writing (cons e lst).
>
> Hope this helps, Jos Koot
>
> ----- Original Message -----
> From: "Majorinc, Kazimir" <kazimir at chem.pmf.hr>
> To: "PLT Scheme Mailing List" <plt-scheme at list.cs.brown.edu>
> Sent: Sunday, August 12, 2007 10:13 PM
> Subject: [plt-scheme] How to insert an element in empty list?
>
>
>> 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?
>>
>> Thanks,
>> Kazimir Majorinc
>>
>>
>> _________________________________________________
>> For list-related administrative tasks:
>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>