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

World: r3wp

[Core] Discuss core issues

GrahamC
3-Nov-2010
[306x4]
sort of
actually that's a construct I miss....

eg. in dbase we had

do loop [ ............ ] endloop or something like that.


but you could exit anyway inside that block to restart the loop like 
this

do loop [ .... loop .... ] endloop
we only have break which exists a loop
exits
Sunanda
3-Nov-2010
[310x2]
You can do it with an idiomatic use of LOOP 1 [...]
But that loses an easy way to use BREAK for real.

    for n 1 5 1 [
      loop 1 [
         if n < 3 [break]
         print n
         ]
  ]
R3 has CONTINUE
    for n 1 5 1 [
         if n < 3 [continue]
         print n
      ]
GrahamC
3-Nov-2010
[312]
need a break^2
Ladislav
3-Nov-2010
[313]
you mean for this?:

for n 1 5 1 [
	catch/name [
    	if n < 3 [throw/name none 'continue]
    	print n
    ] 'continue
]
GrahamC
3-Nov-2010
[314]
yes .. but in one word :)
Ladislav
3-Nov-2010
[315x3]
cc: func [[throw] body [block!]] [catch/name body 'continue]
continue: func [[throw]] [throw/name none 'continue]
for n 1 5 1 [
	cc [
		if n < 3 [continue]
		print n
	]
]
Can be made even more elegant, since FOR is a mezzanine
GrahamC
3-Nov-2010
[318]
that would be good
Anton
3-Nov-2010
[319]
CC being a function, would that mean RETURN or BREAK could not be 
used?
eg.
	myfunc: func [][
		for n 1 5 1 [
			cc [
				if mycondition [return]
			]
		]
	]
(until converted to native?)
Ladislav
3-Nov-2010
[320x3]
Do you have any problem with it?
(you should not)
Of course, this construct is just for R2, for R3 you have native 
solution
Anton
3-Nov-2010
[323]
No, just wondering.
Ladislav
3-Nov-2010
[324x4]
A different idea, instantly causing any R2 cycle to "understand continue":

cc: func [
	{convert a cycle body to "understand" CONTINUE}
	body [block!]
] [
	compose/only [catch/name (body) 'continue]
]

continue: func [[throw]] [throw/name none 'continue]

; usage:
for n 1 5 1 cc [
	if n < 3 [continue]
	print n
]
Hope, this is sufficient even for Graham ;-)
Any name improvements (the 'cc name looks a bit unnatural)
?
Anton
3-Nov-2010
[328x2]
Could you put CONTINUE into the CC func context?
(I mean, wouldn't it be better ?)
Ladislav
3-Nov-2010
[330]
yes, that can be done
Anton
3-Nov-2010
[331]
Ah, but then you need to bind BODY.
Ladislav
3-Nov-2010
[332]
no problem with that, but it would be incompatible with R3 CONTINUE, 
then
Anton
3-Nov-2010
[333x3]
oh I had forgotten it was in R3.
better outside then.
CC -> MAKE-CONTINUABLE ;)
Ladislav
3-Nov-2010
[336]
Very understandable, but a little bit too long for my taste
Anton
3-Nov-2010
[337]
I can't think of a better name. The reason is because it shouldn't 
be there at all. I think all the rebol loop constructs should be 
adjusted to use CC by default.
Ladislav
3-Nov-2010
[338]
All REBOL loop constructs use CONTINUE, but, unfortunately, not in 
R2 :-(
Anton
3-Nov-2010
[339]
Well, there's a wish...
Ladislav
3-Nov-2010
[340]
I don't think you get CONTINUE in R2, if you don't want this "cheap 
one"
Anton
3-Nov-2010
[341x2]
Hmmm... hard decision.
On the balance of things, I think it would make things better; code 
more readable and more consistent with R3 code, so I'm for it.
A better name for CC is definitely needed, though.
Ladislav
3-Nov-2010
[343]
What amazes me, (as always in REBOL) is, that the hardest part is 
to find the best name, not to implement the feature :-)
Anton
3-Nov-2010
[344]
Well, that just means that the name of a feature is really part of 
the feature.
Ladislav
3-Nov-2010
[345x2]
Regarding the CONTINUE in R2 - I may be wrong, though, maybe Brian 
would know better?
But, of course, Carl would know best!
Anton
3-Nov-2010
[347x2]
What do you mean "Regarding the CONTINUE in R2" ?
That you think it's not implemented in any loop construct (even under 
a different name) ?
Ladislav
3-Nov-2010
[349x2]
I wrote: "I don't think you get CONTINUE in R2". the above is just 
explaining, that I may not be the one knowing the policy in this 
respect
replace "get CONTINUE" by "get native CONTINUE" to make it more understandable
Anton
3-Nov-2010
[351x2]
Ah yes.
Well... I think we should still aim high and make a wish.
Ladislav
3-Nov-2010
[353x3]
Sure
How about a C-AWARE name, it looks a bit shorter, would it sill be 
acceptable?
sill: :still (pardon the typo)