World: r3wp
[Core] Discuss core issues
older newer | first last |
Henrik 2-Jul-2010 [17191] | ah, you had trouble, because you were removing an element before the INDEX?, not after the INDEX?. >> b: "abc" == "abc" >> b: next next b == "c" >> clear back b ; does not modify INDEX? == "" >> b == ** Script Error: Out of range or past end ** Near: mold b >> index? b == 2 ; works every time |
BrianH 2-Jul-2010 [17192] | You are also removing an element before the index, but not from the beginning. Apparently clearing from somewhere other then the beginning of the series breaks the auto-adjusting (which shouldn't be happening anyways). PAST? works the same either way. |
Ladislav 3-Jul-2010 [17193x10] | It was unfortunate to adjust the result of INDEX? function, since we actually obtain a wrong value this way. Auto-adjusting is not broken in the case Henrik posted. |
>> b: "abc" == "abc" >> b: next next b == "c" >> index? b == 3 >> clear back b == "" >> index? b == 2 | |
Nevertheless, as said above, I consider the auto-adjustment idea "broken". | |
past?: func [ "Returns TRUE if a series index is past its tail." series [series! gob! port!] ][ (index? :series) = (index? back :series) ] ; Note: INDEX? doesn't stay consistent with past-tail references in R2. | |
correction: past?: func [ "Returns TRUE if a series index is past its tail." series [series! gob! port!] ][ and~ not same? head? :series :series (index? :series) = (index? back :series) ] ; Note: INDEX? doesn't stay consistent with past-tail references in R2. | |
Yet another variant: past?: func [ "Returns TRUE if a series index is past its tail." series [series! gob! port!] ][ and~ (index? :series) = (length? head :series) not same? tail? :series :series ] ; Note: INDEX? doesn't stay consistent with past-tail references in R2. | |
past?: func [ "Returns TRUE if a series index is past its tail." series [series! gob! port!] ][ and~ (index? :series) = (length? head :series) not same? tail :series :series ] ; Note: INDEX? doesn't stay consistent with past-tail references in R2. | |
(the last is a correction of the one preceding it) | |
Simplification: past?: func [ "Returns TRUE if a series index is past its tail." series [series! gob! port!] ][ not same? :series skip :series 0 ] ; Note: INDEX? doesn't stay consistent with past-tail references in R2. | |
Note: I am not sure, whether this would work with ports and gobs, though, since I do not know, whether SAME? behaves similarly for them | |
BrianH 3-Jul-2010 [17203x4] | Ladislav, it needs to work in the case of auto-adjusting indexes too. |
Auto-adjusting is broken in the case that Henrik mentioned. As a separate issue, the case Henrik mentioned has *better* behavior, because the whole idea of auto-adjusting is a bad one, so it not working is an improvement. | |
But because of that, the PAST? function for R2 needs to work whether the index auto-adjusts or not. So before you submit another version, test it against past-tail references with auto-adjusting indexes. If it works then, it works. | |
To get a past-tail reference that auto-adjusts, clear from the head of the series rather than from further along. | |
Ladislav 3-Jul-2010 [17207x8] | why didn't you try? it works |
every past-tail series auto-adjusts in ceratain interpreter versions (in other no past-tail series auto-adjusts), no exceptions | |
Henrik does not know any series that does not auto-adjust, it is just your error | |
(you just need to read above) | |
Note: all versions work just in (auto-adjusting) R2 | |
I am mentioning that, since there were some versions of R2 that did not auto-adjust | |
(long time ago) | |
But, it is possible to write a modified version, which would work regardless of auto-adjustment | |
BrianH 3-Jul-2010 [17215] | In 2.7.7, indexes auto-adjust if you clear the series from the beginning, but not if you clear from later on. In the same interpreter. |
Ladislav 3-Jul-2010 [17216x2] | Wrong, see above |
You did not check Henrik's example as I did | |
BrianH 3-Jul-2010 [17218] | I did, but got different results than I am getting now. |
Ladislav 3-Jul-2010 [17219] | Actually, you did not, it was just an error |
BrianH 3-Jul-2010 [17220x2] | With the same code, no less, I am getting different resulta now. |
I didn't post the the old results. | |
Ladislav 3-Jul-2010 [17222x3] | You are getting the same results you got before, it was just your error, resulting from the fact, that auto-adjustment adjusts past-tail series to tail indices, i.e. to 2 in case Henrik posted |
Nevertheless, it is easy to write code that would work regardless of auto-adjustment | |
(which means, it would work in R2, old R2, and R3) | |
BrianH 3-Jul-2010 [17225x2] | Well, I don't know why the results are different from the same code, but your code works now, so if it's alright with you I'll update R2/Forward with it. |
I'll just chock up the old results to a momentary glitch until they recur. | |
Ladislav 3-Jul-2010 [17227x3] | E.g. this modification works regardless of auto-adjustment: (i.e. even in R3) past?: func [ "Returns TRUE if a series is past its tail." series [series! gob! port!] ] [ and~ greater-or-equal? index? :series index? tail :series not same? :series tail :series ] |
but, pick whichever version you like | |
BTW, "returns true if a series index is past its tail" mixes different datatypes - series index is integer, while tail is a series, so, my opinion is, that the shorter wording is less misleading | |
BrianH 3-Jul-2010 [17230] | The not same? :series skip :series 0 line works well enough, afaict. Do you have a case for which it doesn't work and the larger test is required? |
Ladislav 3-Jul-2010 [17231x5] | aha, it looks, that it works even in R3... |
Case for which it does not work... - only in ancient versions of R2 | |
nevertheless, I see it as a bug, that it works even in R3 | |
That is actually an auto-adjustment test, and I thought, that no auto-adjustment was taking place in R3 | |
Nevermind, I will declare it "a feature" | |
BrianH 3-Jul-2010 [17236] | Well, in R3 PAST? is built-in. And auto-adjustment was taken away in R3 on purpose, at the same time that PAST? was added. |
Ladislav 3-Jul-2010 [17237x3] | Yes, but skip :series 0 auto-adjusts still, but, as I said, I do not mind |
How about the help text? The longer one (currently used in R3) looks misleading. | |
(comparing series index - an integer, to series tail - a series) | |
BrianH 3-Jul-2010 [17240] | It's not misleading without the auto--adjustment. With the auto-adjustment a past-tail index will auto-adjust, which should be mentioned somehow. |
older newer | first last |