r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

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.