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.
____________________ Racket Users list: http://lists.racket-lang.org/users