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