libera/#sicl - IRC Chatlog
Search
15:36:35
yitzi
Any language lawyers want to weigh in on CLHS 6.1.1.5.1? The AND keyword is supposed to permit parallel initialization and stepping according to it. There is a test in ansi-tests for parallel stepping but none seem to address parallel initialization.
15:44:32
beach
I think it means that expansion should use a LET for the initialization, as opposed to a LET*.
15:45:51
beach
So it means that the variable to be initialized can not use any previously initialized variables in its initialization form.
15:47:44
yitzi
To fix this along with the AND in stepping I think the prologue/step-form are gonna need the equivalent of psetq in the subclauses.
15:49:32
yitzi
To be fair, I'm only about 80% there on understanding the details of your LOOP expansion code.
15:51:36
yitzi
Oh, I think it is just fine. It just takes me a bit sometimes. I gotta break and fix things a few times to completely understand. That is just me.
15:53:46
yitzi
It might have been on freenode. I couldn't find anything on libera's logs. I do see the issue on SICL though.
15:54:50
yitzi
Test LOOP.17.21 is the last test that Khazern is failing on, so that is probably enough to go on. Provided that second test I wrote is correct I'll add it the regression tests and fix it also.
15:59:08
yitzi
Cool, much appreciated. Just surprising that there is no variation in the behavior of the various implementations. I don't know if CLISP is using MIT LOOP, but it is usually different then the rest.
16:00:54
beach
MIT LOOP also has this issue that the iteration variables may go outside the range of what the loop indicates, so you can't give them a correct type.
16:04:09
yitzi
Yes, Khazern does it correctly. The tests in the ANSI suite for SBCL fail in various places b.c. of the MIT behavior.
17:07:09
beach
Hmm, interesting... Suppose you have a sparse set of statically known values from a totally ordered domain, like a bunch of capital letters from the ASCII alphabet, like C, H, N, Q, W. Now you have some value v, and you want to check which of the elements of the set (if any) is equal to v.
17:07:12
beach
Even if you do a "binary search", it seems to me that you ultimately have to test for equality, so you have to do as many tests as there are elements of the set, plus the tests to split the set. So then, with binary search, you always have more tests to do than with sequential test.
17:07:56
beach
So "binary search" is advantageous only if the elements of the set are sometimes adjacent.
17:08:46
beach
I should know this already, because I recall integrating something like this into the algorithm for generic dispatch.
17:13:57
beach
Now it comes back a bit more. In generic dispatch, I check whether the endpoints of an interval are closed or open. If they are closed, I can omit the final test in some cases.
17:16:30
beach
I guess I should give up for today. I need to fix dinner for my (admittedly small) family.
18:07:10
yitzi
beach: I've got a partial fix for the AND issue. Doesn't address my weird initialization issue, but it does fix parallel stepping of subclauses. All ANSI tests now pass. Just FYI.
18:47:48
Bike
every time i think too hard about multiway branching i get lost in a world of fascinating intractable problems and i have to remind myself that in practice any advantage over binary search is probably not going to be very large.
18:50:08
Bike
i could probably put doctoral-thesis-level effort into making generic dispatch a few cycles faster if i was so inclined