
@zenspider you don’t want the term
around the expected part of the test-equal
i think?

@florence then you get things like bind
not being defined. and a call to match

I just learned a painful (mostly unrelated) lesson…
I’m trying to rebuild from scratch w/o going to my previous code to see if I really get this shit. I want to do it iteratively. Pure lambda calculus first, then extend with values & ops, etc.
So you normally make a language L (the grammar) and extend it for E (the evaluation context). Then you extend the grammar and context again to add the values… but the context doesn’t know about any of the grammar additions you did because it is extending E, not L2.
It seems the correct approach is to use define-union-language
to close the diamond inheritance between E and L2 to E2. Something like:
(define-union-language X L2 E)
(define-extended-language E2 X
...


zerusski: sorry to have missed your message, I don’t have slack on my phone :(

@samth has joined the channel


haha. So I’d write my test wrapper as: (define (:thumbsup: i e) ...)

oh no… I had no idea there was :neckbeard:

@mflatt Is there much support for #lang sweet-exp
? See page 5 of: “Growing a Proof Assistant” https://www.williamjbowman.com/resources/cur.pdf

I haven’t used it myself, but the package seems to be in working order: https://pkgd.racket-lang.org/pkgn/search?q=sweet

I extended @justin’s mystery language hashlangs to show a toolbar button that, when clicked, opens the redex stepper. https://github.com/justinpombrio/RacketSchool/pull/5

Ooh! Nice!

Thanks to everyone who organized the summer school. Fantastic event! And I loved meeting so many smart people! :)

Yes, it was a heck of a lot of fun, and I really enjoyed learning Racket and Redex! I’ve wanted to learn more about them for a long time, and this was an amazing way to do it, I think.

It was great. Loved meeting people and collecting new ideas. By the way, if anyone wants to go for dinner, I’m planning to go the the HC at 7.

@vincent_nys HC?

Heritage Center

derp

It’s okay, all of our brains are probably a little worn out :wink:

@vincent_ny looks like heritage center closes at 7?

@vincent_nys

Nadeem said something about it in an earlier message

@vincent_nys shit… should we go now? cc/ @fbie

Guess so. I’m going to wait in the lobby for about five minutes if anyone wants to join, then.

I’d rather eat something quick and easy rather than good but out of the way.

I’ll gather @fbie

To the lobby!

From our conversation at dinner… I present “Hoon”, the programming language for “Urbit”. One excerpt:
> Tall regular form starts with the sigil, followed by a gap (any whitespace except ace), followed by a bulb whose twigs are separated by gap.
> There are four body subtypes: fixed, running, jogging, and battery. Stems with a fixed number of subexpressions self-terminate. For instance, :if has three subexpressions and is self-terminating. Otherwise the twig is terminated by a gap, then either == (running or jogging, most twigs) or — (battery).
https://urbit.org/docs/hoon/syntax/
Make a redex model for that. :stuck_out_tongue:

I want to say “Challenge accepted”, but…

back up and go to demo in the sidebar

compare the “Current” fizzbuzz to the “original”

oh. and look at “Glyphs and characters” in syntax

pronunciation guide… pal = ( par = ) ace = [1 space]

and it just keeps going…

Like, honestly, it would be interesting to see a desugarer for this.

hah

> In Hoon we throw away almost all these words and invent new ones, which mean almost the same things. But why?

it’s… yeah. I don’t know.

I can’t look away. What have you done to me?

hah!

to be fair.. I’m glued to the webpage too

I’m tempted to fire this up on a VM :stuck_out_tongue:

Have you looked at Nock yet?

nope

oh. wait. yes I had… I liked the “specification”… I’m so lost in this thing

> The logic of this pseudocode is a pattern-matching reduction, matching from the top down. To compute Nock, repeatedly reduce with the first line that matches. Let’s jump right in!

now that sounds Redex-able

nooooooo

darn it, I can’t start on this now, I have a flight in the morning… :disappointed:

https://urbit.org/docs/about/glossary/
> Urbit is renowned for its exotic terminology. Here’s a simple overview from the strange words in.
> As Dijkstra put it: “The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.”

Wait. I think Nock has eval
as a primitive instruction…

> Nock is a Turing-complete, non-lambda combinator interpreter.
> Hoon is a strict, higher-order typed functional language that compiles itself to Nock.
> A twig is a Hoon expression. Specifically, twig is the mold for the noun that a Hoon source expression compiles to. A twig is always a cell.
I… just… what?

Shockingly, I understand that.

I think I need to sleep.

> loobean: a Hoon boolean > 0 (%.y) is yes, 1 (%.n) is no.
> Why? It’s fresh, it’s different, it’s new. And it’s annoying. And it keeps you on your toes. And it’s also just intuitively right.

“just intuitively right”… yup. I’m done

Oh heck no it’s got call/cc

> … / (slot) is a tree addressing operator. The root of the tree is 1; the left child of any node n is 2n; the right child is 2n+1. /[x y] is the subtree of y at address x.
> (For instance, /[1 [531 25 99]] is [531 25 99]; /[2 [531 25 99]] is 531; /[3 [531 25 99]] is [25 99]; /[6 [531 25 99]] is 25; /[12 [531 25 99]] crashes.)

OF COURSE THAT CRASHES

That’s pretty tame, overall. It’s a kind of packed tree structure. :smile:

In all seriousness, I’m going to write an interpreter for this as soon as I get home. It’s too nerdsnipey.

haha. well… enjoy

@twisol I think you should model it first and then code it up in the red like we did today

:disappointed:

Well, today we went from an interpreter to a model

True. I thought that was a lot of fun. Smalltalkers do this as “Debugger Driven Development” because they can implement the methods directly in the debugger and continue from there. It’s really neat. I wish we could do that in racket

Hmm, I feel like that ought to be possible

Or, well, replace “debugger” with “REPL” and I feel like that would be posslbe

I’ve done similar is other lisps… but errors in the repl just seem to boil to the top in racket

it does avoid the whole “WTF is the actual running system now” problem… but so does smalltalk by having memory be persistent