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