Yasser Hussain wrote on 10/1/18 5:31 AM:
> Unfortunately, I don't remember which DrRacket version, and which
> exact `#lang` line I was using. But I specifically remember that
> "load" worked with some earlier version of racket.
Hi, Yasser. The reason I asked those questions offline was that, after
checking my original SICP PLaneT package with Racket 6.12, I was no
longer assuming that `load` ever worked with the SICP support, and
perhaps `load` wasn't necessary for the current SICP support. I wanted
a rapid path to determining whether a regression happened, and where,
and you potentially had the best information for doing that quickly and
easily. Then we could report back to the much broader Racket email list
with the resolution.
>
> Problem with using `require` is that I'll have to use "#lang racket"
> with it, which will prevent me from using standard scheme procedures
> like `set-cdr!`, etc.
The SICP support is only intended to be a convenience for using the very
important SICP textbook, to try maximize SICP's accessibility to
contemporary students (who might not be able to run MIT Scheme, for
whatever reason). Please let me try to address your goals...
If you really just want to use classics like `set-cdr!` in the Racket
universe or just with Racket tools, you might like to try Racket's
`#lang r5rs`.
If you want the tons of benefits of evolved Racket, but also want
mutable pairs right now, you can have that with Racket (though, be aware
that a mutable pair isn't a subtype of pair in Racket, so all
pair/list-related code must be aware of this). There aren't many other
non-backward-compatible differences in Racket, and the change to
mutability of pairs is the only painful one I recall, in ~18 years of
contributing to Racket,
A third possibility that I'd like to suggest is to consider trying to
write idiomatic Racket, as an exercise. If, for example, Racket
discourages mutable pairs, try to write your code without that, and see
where it pushes you (e.g., more towards functional programming, or
strengthening your code in some ways), and then decide what you think
about that. (Personally, I only had mutable pairs pain with the very
earliest Scheme code I wrote; in later code, I was already usually
treating pairs as immutable, and minimizing mutation in general.)
BTW, since you said "standard", I very much appreciate sentiments in
favor of standards. Incidentally, I'm not part of the benevolent cabal;
just a bottom-tier contributor. :) In this niche of innovative language
platforms, I suspect that Racket overall would be consistent with your
ultimate goals, even if it's in some ways not "standard" -- it's much
more than any standard, and somewhat different. (Personally, if you're
thinking of it as a Scheme implementation, despite all their efforts to
be clear that it's not Scheme... I've probably used most of the Schemes
and descendants, and it's nice to know that I can always use other
Scheme implementation/descendants. Probably my favorite one other than
Racket is Gambit by Marc Feeley. I'm also fond of some of the others,
each with their own strengths, and they also remain in my pocket for
possibly using later. I also like that I can make my own Racket `#lang`
dialect at any time, in such a way that I maintain good interoperation
with, and contribution to, the rest of the Racket world.)
> Is it possible for me to take a look at the source code and try to
> figure out why "load" doesn't work, and possible try to get it to
> work? Could you provide some pointers? :)
Yes. Ways include:
1. To familiarize with the Racket package catalog, if you go to that
package catalog URL I gave, there's a "Code" button that, in this case,
goes to a GitHub repo, where you can do go normal Git and GitHub things.
2. Racket packages themselves actually usually include the source for
all of code+test+documentation. (There's an even more lightweight
source-centric thing I want to do, but haven't done yet.) I'm not sure
what's the best starting point for your needs, but here's two:
https://docs.racket-lang.org/pkg/cmdline.html
https://docs.racket-lang.org/pkg/git-workflow.html