Oops, sorry about that empty message. I was going to say that your definition of a list is close, but it's missing something, A list is either:
- the empty list; or - a pair, the second element of which is a list (cons 3 2) is a pair, and sometimes non-list pairs are called "improper lists," but they don't satisfy list?. On Fri, Mar 7, 2014 at 8:43 AM, Jon Zeppieri <zeppi...@gmail.com> wrote: > On Fri, Mar 7, 2014 at 8:39 AM, Daniel Carrera <dcarr...@gmail.com> wrote: >> What is (cons 3 2) ? What is the definition of a list? I thought that a list >> was defined as either '() or a pair. >> >> Cheers, >> Daniel. >> >> >> On 7 March 2014 13:49, Jens Axel Søgaard <jensa...@soegaard.net> wrote: >>> >>> The value (cons 3 42) is not a list. The function car will extract 3, >>> but first will fail. >>> >>> /Jens Axel >>> >>> >>> 2014-03-07 13:40 GMT+01:00 Daniel Carrera <dcarr...@gmail.com>: >>> > Thanks. That's a very useful tip (being able to get at the source code). >>> > I >>> > am a bit confused by the condition "(and (pair? x) (list? x))". It seems >>> > to >>> > me that this could just be replaced with "(pair? x)". The "list?" >>> > doesn't >>> > add anything. Am I wrong? >>> > >>> > Also, I don't see exactly how "first" and "car" behave different on a >>> > non-list. They both raise an error. The errors are just worded >>> > differently. >>> > >>> > On the same file, I found the definition of empty? >>> > >>> > (define empty? (lambda (l) (null? l))) >>> > >>> > Wouldn't it be more economical to write "(define empty? null?)" and >>> > allow >>> > them to be synonyms? >>> > >>> > Cheers, >>> > Daniel. >>> > >>> > >>> > On 7 March 2014 12:16, Jens Axel Søgaard <jensa...@soegaard.net> wrote: >>> >> >>> >> For lists first/rest works the same as car/cdr. >>> >> For non-lists there is a difference: first and rest signals an error. >>> >> The names first and rest makes it easier for a human reader of >>> >> a piece of code to see that the program works on lists only. >>> >> >>> >> For the curious, the definition of first is: >>> >> >>> >> (define (first x) >>> >> (if (and (pair? x) (list? x)) >>> >> (car x) >>> >> (raise-argument-error 'first "(and/c list? (not/c empty?))" x))) >>> >> >>> >> I found this definition like this: >>> >> 1. Entered this program in DrRacket: >>> >> #lang racket >>> >> first >>> >> 2. Clicked the "Check Syntax" button >>> >> 3. Right clicked the identifier first and chose "Open defining file" >>> >> 4. Chose "first" in the definition-drop-down in the upper left corner. >>> >> >>> >> /Jens Axel >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> 2014-03-07 11:45 GMT+01:00 Daniel Carrera <dcarr...@gmail.com>: >>> >> > Hello, >>> >> > >>> >> > Is there any difference between `first` and `car`, or between `last` >>> >> > and >>> >> > `cdr`, or between `empty? and null?` ? >>> >> > >>> >> > I had assumed that these were just synonyms, added by Racket because >>> >> > they >>> >> > might be more memorable to a student. But apparently Racket doesn't >>> >> > think >>> >> > they are equal: >>> >> > >>> >> > -> (equal? first car) >>> >> > #f >>> >> > -> (equal? last cdr) >>> >> > #f >>> >> > -> (equal? empty? null?) >>> >> > #f >>> >> > >>> >> > >>> >> > I suppose that they could be separate functions that happen to do the >>> >> > same >>> >> > thing, but if so, my next question would be why they aren't just >>> >> > aliases. As >>> >> > in: >>> >> > >>> >> > -> (define myfirst car) >>> >> > -> (equal? myfirst car) >>> >> > #t >>> >> > >>> >> > Cheers, >>> >> > Daniel. >>> >> > -- >>> >> > When an engineer says that something can't be done, it's a code >>> >> > phrase >>> >> > that >>> >> > means it's not fun to do. >>> >> > >>> >> > ____________________ >>> >> > Racket Users list: >>> >> > http://lists.racket-lang.org/users >>> >> > >>> >> >>> >> >>> >> >>> >> -- >>> >> -- >>> >> Jens Axel Søgaard >>> > >>> > >>> > >>> > >>> > -- >>> > When an engineer says that something can't be done, it's a code phrase >>> > that >>> > means it's not fun to do. >>> >>> >>> >>> -- >>> -- >>> Jens Axel Søgaard >> >> >> >> >> -- >> When an engineer says that something can't be done, it's a code phrase that >> means it's not fun to do. >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> ____________________ Racket Users list: http://lists.racket-lang.org/users