[racket] TLS "atom?" definition for Scheme does not work in DrRacket

From: Alexander D. Knauth (alexander at knauth.org)
Date: Tue Mar 3 16:02:27 EST 2015

Well that’s weird.  And after it stopped working with the parens, then it worked without them?
It doesn’t do that for me:
(define atom? (lambda (arg1)
                and (not (pair? arg1))
                    (not (null? arg1))))
;. and: bad syntax in: and

Is there a specific way to reproduce it?

On Mar 3, 2015, at 3:50 PM, Rufus <rlaggren at mail.com> wrote:

> Alexander
> Well, in fact, I thought it worked for me, too. And then it stopped
> working; DrR threw an  "application: not a procedure;" error saying it
> was given a null list instead of an application. Removing the parens got
> it working again.
> Now that just doesn't make any sense at all but that's what I seem to
> have observed. Looking at some StackOverflow responses on similar errors
> I found that parens in certain positions are interpreted as invoking a
> function regardless of what may in fact be inside the parens. IOW, extra
> parens will trigger that error. I believe that initially it was working.
> Perhaps I had run it in the executable pane instead of loading and
> running the defs file? If I have more time somewhere along, I'll try to
> recreate things.
> When I first defined atom? I was using a very small definitions file
> with the " #lang racket" spec; IIRC atom? worked. After trying BSL and
> then going back to using the #lang spec and adding some comments and the
> list of variable defs - it didn't work.
> At the moment I don't have any good ideas, except to chg the code to get
> it to work and proceed.
> Rufus
> On 03/03/2015 02:21 PM, Alexander D. Knauth wrote:
>> This works for me:
>> (define atom? (lambda (arg1)
>>                (and (not (pair? arg1))
>>                     (not (null? arg1)))))
>> On Mar 3, 2015, at 3:16 PM, Rufus <rlaggren at mail.com> wrote:
>>> On page 10 of TLS there is a note defining the "atom?" function for the
>>> reader to use w/Lisp or Scheme. The definition for Scheme (which is the
>>> most likely one to use for DrR) does not work. To fix one must remove
>>> the parens that open at the "and". Apparently the DrR
>>> compiler/interpreter sees them as an attempt to invoke a function and
>>> that's not correct here. I don't know if other Lisp versions would find
>>> the code in the book correct.
>>> In the text below XXX shows where I removed a set of parens to make the
>>> function work.
>>> (define atom? (lambda (arg1)
>>>              XXX and (not (pair? arg1))
>>>                      (not (null? arg1))
>>>              XXX
>>>             )
>>> )
>>> Rufus
>>> ____________________
>>> Racket Users list:
>>> http://lists.racket-lang.org/users
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

Posted on the users mailing list.