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

World: r3wp

[!REBOL2 Releases] Discuss 2.x releases

GiuseppeC
2-May-2010
[1631]
What's wrong here ?

rebol [
]

write %tryme.pdf
dirlist: read %//

foreach myfile dirlist [
	if find myfile ".pdf" [
		print ["Filename" myfile]
		extension: find/last/tail myfile "."
		print ["EXT" extension]
		print extension = "pdf"
	]
]
delete %tryme.pdf
halt


The comparison extension = pdf should return TRUE, instead I have 
FALSE
Graham
2-May-2010
[1632x2]
try 

suffix? myfile
%.pdf = suffix? myfile
GiuseppeC
2-May-2010
[1634]
I have found the function but I wish to know why te comparison fails
Graham
2-May-2010
[1635x2]
because myfile is of type file!, and so extension is also file!
try

print extension = %.pdf
GiuseppeC
2-May-2010
[1637]
Ok, understood. The fact I am able to start a "find" on it let me 
think it is a string...
Graham
2-May-2010
[1638]
This belongs in rebol school group
GiuseppeC
2-May-2010
[1639]
O:-)
Graham
2-May-2010
[1640]
BrianH wants to keep this group to discuss 2.7.8
GiuseppeC
2-May-2010
[1641]
I'll move there :-)
Gregg
3-May-2010
[1642]
Back on pair comparisons, MIN and MAX don't return one of the given 
pair values (not sure if someone else mentioned that).

>> max 10x11 9x12
== 10x12
Maxim
3-May-2010
[1643]
? 
max 10 9  = 10
max 11 12 = 12

you get the area which encloses both
BrianH
3-May-2010
[1644]
And back in the Core group - we're trying to keep this group on its 
topic of R2 releases. We don't want to lose such discussions in the 
middle of discussions of semantics. The only reason this group was 
created is because some of the people working on the development 
of R2 don't want to use chat yet. This group is *only* a replacement 
for the R2-Beta world.
Maxim
3-May-2010
[1645x2]
using MIN on offsets and MAX on size you get the enclosing box


when you use MAX on offsets and MIN on size you get the intersection 
of both boxes
I think Gregg was posting this as a bug.
BrianH
3-May-2010
[1647x2]
This is not the R2 equivalent of the !REBOL3 group. Please don't 
abuse the fact that we can't move messages in AltME :(
I'm sorry, I don't want to be a jerk about this. This group is used 
as a reference when we do new R2 releases. It's of less value as 
a reference if off-topic stuff is overwhelming the release discussions. 
Please be nice to the R2 release manager :(
Maxim
3-May-2010
[1649]
sorry to add junk, but I *really* think this group should be renamed 
(this is On Topic :-)  

probably !REBOL2-release or something like that.


its too easy to mistake right now with !REBOL3 being such an active 
group.
BrianH
3-May-2010
[1650]
Requested.
Gregg
3-May-2010
[1651]
Done.
BrianH
3-May-2010
[1652]
Thanks :)
Graham
14-May-2010
[1653x2]
If I want to set something to the index of a series, or something 
else if it's not there I have to do this

b: either a: find series var [
	index? a
][ 	default ]

when I'd rather do

 b: any [ index? find series var default ]

So how about letting index? also take none as an argument ?
b: any [ attempt [ index? find series var ] default ]
Ladislav
14-May-2010
[1655x2]
funny thing is, that the former code is exactly as long as the latter 
one, does not need the additional variable, and it is faster
...and I find it more readable
Steeve
14-May-2010
[1657x2]
yep, no need for additional var.

all [b: find series var b: index? b]
oups, not what you'he done
Ladislav
14-May-2010
[1659]
indeed, I just meant:

b: either b: find series var [index? b] [default]
Anton
14-May-2010
[1660]
I'm pretty sure I'd be ok with  NONE == INDEX? NONE
BrianH
14-May-2010
[1661]
That kind of change is not going into R2 - it's not backwards-compatible. 
Try R3.
Gregg
14-May-2010
[1662]
But it's easy enough to create a safe INDEX? function. I think Gabriele 
calls his INDEX?? and I borrowed it from him.
Graham
14-May-2010
[1663x4]
that's another issue .. how to easily redefine words
that also invoke the original word ....
index?: func [  [ series! | none! ]
][
	either series [ index? series ][
		none
	]
]

would likely cause a stqack overflow
[ series! none! ]
Gabriele
15-May-2010
[1667]
Gregg, I don't remember that, so maybe it was from someone else.
BrianH
15-May-2010
[1668x2]
Gregg, the problem is that the changed INDEX? would have the possibility 
of returning data that is not an integer. Most R2 code doesn't screen 
for that, so changing INDEX? in this way would lead to data corruption 
in existing code. Remember, compatibility with existing code is the 
highest priority in the further development of R2. Incompatible changes 
are reserved for R3 *only* - we try to not make them in R2, on principle.
Defining a new function with a different name is a good way around 
that problem :)
Graham
15-May-2010
[1670]
Or, adding a refinement
BrianH
15-May-2010
[1671]
Adding refinements to low-level natives can double their overhead 
for each refinement - more for mezzanines. Not a good idea.
Graham
15-May-2010
[1672x2]
So, how can we redefine old words without causing a stack overflow?
Current r2 code would be using an error handler to see if index? 
threw an error ... not a biggie
BrianH
15-May-2010
[1674]
Use a local reference to the old function, then call through the 
reference. You can do this with a private variable, or composing 
the code block of the new function to have a direct reference to 
the old function value. That last method can be awkward with functions 
called with refinements, but it can be done; the private variable 
metod is less awkward.
Graham
15-May-2010
[1675]
example?
BrianH
15-May-2010
[1676x2]
Yes, but current R2 code would be depending on that error to trigger 
the code in the error handler, rather than just propagating the error 
to where it would do more damage. Error handling code is there for 
a reason.
use [idx?] [
idx?: :index?
index?: func [series [ series! | none! ]] [
	either series [ idx? series ][none]
]
]
Graham
15-May-2010
[1678]
that looks untested to me
BrianH
15-May-2010
[1679x2]
You wanted an example. I just converted your code to a style that 
wouldn't have a stack overflow.
The | was in your original code :)