[plt-scheme] How to insert an element in empty list?

From: Jos Koot (jos.koot at telefonica.net)
Date: Sun Aug 12 18:41:31 EDT 2007

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
> 



Posted on the users mailing list.