12:03
lucasb joined
14:10
Ven`` joined
|
|||
Ven`` | masak: you understand the question clearly. The interesting distinction is not actually invoke or define, it's: is foo a macro or a function? | 14:12 | |
in one case, this kind of code makes sense, in the other case, it doesn't | |||
masak | hmmm | 14:14 | |
I'll need to run this through the analytical parts of my brain, but this sure seems related to the "`return` is lexical" vs "`return` is late-bound" discussion that we've had | |||
Ven`` | yes, for sure :) | 14:15 | |
did you push any version of the pseudo-code we wrote for the walker? | 14:16 | ||
well, and we need to finish that discussion someday... | |||
masak | aye, it's in a branch | ||
github.com/masak/007/tree/masak/succinct | 14:21 | ||
Ven`` | ? | 14:28 | |
I don't see the pseudo-007 code | |||
masak | oh! I believe I closed that one, but I can recreate it if you want | 14:29 | |
it was only a few lines | |||
Ven`` | (defsuccint f (a b) | 14:44 | |
(let ((tmp a)) | |||
(setq a b) | |||
(setq b tmp))) | |||
does that seem Good Enoughā¢ļø to try and make work? | 14:45 | ||
masak | yes, that captures it, methinks | 14:49 | |
note that we still don't have locations in 007/Alma, and we can't get @succinct to be entirely correct before we do | 14:50 | ||
and I still don't consider the whole theory of how @succinct interacts with data flow to be Fully Worked Out | |||
Ven`` | (installation of the name `f` here is gonna be without any regards to hygiene because I don't think it matters) | ||
masak | right | 14:52 | |
Ven`` | wow, it's really interesting. as I suspected, phase separation is an issue | 15:00 | |
well, makes this non-obvious | 15:02 | ||
...and once again, the ',' pattern surfaces... | 15:06 | ||
well, ', is pretty much what 007 does for you | 15:07 | ||
',x is "bring x to this phase level, but re-quote it because I need it quoted" | |||
masak | I did not fully understand that latter part | 15:08 | |
(and I suspect it's related to what I didn't understand when we talked about it last week) | 15:13 | ||
Ven`` | OK, example: | ||
> (let ((a (list 1 2 3))) `(loop for i in ,a sum i)) | |||
(LOOP FOR I IN (1 2 3) SUM I) | |||
the " ,a " did bring "a" from the "outer context" to " `'s context" | 15:14 | ||
but now since it's not quoted anymore, the code here doesn't work: (1 2 3) is an invalid funcall | |||
compare with: | 15:15 | ||
> (let ((a (list 1 2 3))) `(loop for i in ',a sum i)) | |||
(LOOP FOR I IN '(1 2 3) SUM I) | |||
now that's legal | |||
masak | nodnod | ||
Ven`` | but here it's *really important* that we use ' | 15:17 | |
> (let ((a (list 1 2 3))) `(loop for i in `,a sum i)) | |||
(LOOP FOR I IN `,A SUM I) | |||
we do not have quoting in 007 | |||
`quote { {{{ a }}} };` would just generate Q::Unquote(...); | 15:18 | ||
it makes sense to have unquotes inside of a quote | |||
here, that's pretty much what I figured out since we last talked. | |||
masak | I need to come back and re-read all this when I have more brainpower | 15:19 | |
"we do not have quoting in 007" -- I need to understand this better. I take it you don't see a quote then as just a quasiquote with zero unquotes? | 15:20 | ||
Ven`` | ok -- no real quoting. We can't have a non-interpreted quote. | 15:21 | |
which would be the only place where an unquoted would make sense. Like here in lisp | 15:22 | ||
masak | we have things like `new Q.Identifier { name: "foo" }` :) | 15:24 | |
Ven`` | yeah hygiene means it's more complex in 007 | 15:33 | |
15:43
Ven`` left
|