00:02
lucasb left
07:46
Ven`` joined
08:44
Ven`` left
09:33
Ven`` joined
|
|||
Ven`` | This was less obvious than I thought it'd be. But: gist.github.com/vendethiel/93257a2...2c5b770568 | 09:33 | |
I think one of the interesting things is `(position n ',params..)`. I "bring" params in from the outer context (which probably wouldn't be necessary) and I replace it the nth argument from the definee macro | 09:34 | ||
the reason why I don't need to return an unquote is interesting too I guess | 09:37 | ||
09:46
Ven`` left
13:14
lucasb joined
13:20
Ven`` joined
13:27
Ven`` left
13:40
Ven`` joined
|
|||
Ven`` | OK, I have something that's more... visually helpful. | 14:16 | |
I added a html file to that gist, that shows the "phases" | 14:17 | ||
14:17
Ven`` left
|
|||
masak | interesting | 14:52 | |
so... that `,body on the last line, it unquotes _all the way out_, not just one level of backtick? | |||
(because that's basically what TimToady told me those many years ago, the bastard) | 14:53 | ||
and, I mean, I agree with that nowadays | 14:56 | ||
"you can only make holes in your outermost surrounding quasi" | |||
15:47
Ven`` joined
|
|||
Ven`` | masak: er, not quite | 15:47 | |
when we're 2 levels deep (pink) in that `(progn...), we first escape back to level 1 (green) via ,@ | 15:48 | ||
and then inside that level 1, we use "," again, so we escape from level 1 into level 0 (blue) | |||
the color for the bunch of parens at the end is wrong, my bad | |||
you can only escape one level *at a time*, but chaining is a-ok) | 15:50 | ||
(I should've written something to do it for me so I wouldn't have to colorize it manually, but heh, yak-shaving...) | |||
Ven`` represses the urge to do it now | 15:51 | ||
17:00
Ven`` left
17:29
Ven`` joined
|
|||
Ven`` | masak: ok, I finally got it. You were right. The unquote we're creating on-the-fly makes no sense | 17:32 | |
but the mistake I believe we made is that we codewalk at the macro-generating-macro level, instead of the generated-macro one | |||
so we have *no ways* to talk about the generatee's arguments. And that's where I got stuck for a bit writing my CL macro | 17:33 | ||
if we return a defmacro instead, then *that* defmacro is a quasi, and *then* the unquote makes sense (but isn't actually needed since we can then just refer to arguments) | 17:34 | ||
I added an Alma version to that gist. Please tell me if it makes sense. I think it does. | 17:38 | ||
(this *is* sidestepping the problem, but I think my intuition was wrong because I was thinking "I know I can make that work in Lisp" rather than "I know this very specific thing works in Lisp") | |||
(Now that I look back at the code I wrote during PerlCon, I'm not sure how I ended up being so confused, because pseudocode I wrote on the 1st or 2nd day did that find-pos-and-replace thing. Just not across phase boundaries) | 18:50 | ||
19:24
Ven`` left
|
|||
masak | looks right to me, if we compensate for the inevitable handwaving that we have at present | 19:53 | |
I'm currently confused at line 4: `walk(` | 19:54 | ||
oh! | |||
that's clever | |||
right, 'cus you're code-generating right in the macro... oooh | 19:55 | ||
Ven``: I *like* you when you take Alma's particular constituents and run with them | 19:56 | ||
somehow I feel like you just did something no-one's done with Alma before. something genuinely new | 19:57 | ||
a walk() in a macro in a quasi... | |||
recovering from that one: does the fact that we avoided generating unquotes during the walk this time mean that there's _always_ a way to avoid generating unquotes during a walk, or that we were lucky this time? | 19:59 |