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

World: r3wp

[Rebol School] Rebol School

BrianH
23-Sep-2010
[3283x2]
Everyone needs to ask a question here now and again, even if it's 
rhetorical. Rebol School and I'm New are for everyone :)
Yes, I do sleep, during the morning (in my time zone). I'm a late-night 
guy.
PatrickP61
23-Sep-2010
[3285x3]
My only excuse is that my wife and I had a fight, and so instead 
of the couch, I opted for my chair!
Man, I absolutly love how powerful Rebol is!  It is just amazing
Ok, I captured the Rebol Quick Reference webpage, and I've removed 
all html tags.  I now have a lot of individual newlines values inside 
my block. To remove them I tried this:

remove-each item html-blk [newline item]

to which I got == 944

Then I tried to see it's values:

html-blk
== []


I guess I deleted all the remaining items huh.  What did I do wrong?
Maxim
23-Sep-2010
[3288x2]
the remove-each is returning a "truthy" value (not false or none).
I guess its missing an =  :-)
BrianH
23-Sep-2010
[3290]
remove-each item html-blk [item = "^/"]
PatrickP61
23-Sep-2010
[3291x3]
OHHHHHH, so my condition was true for all  I see!
Much better!
If I want to remove all items which are either a blank space OR a 
newline, could I do this:

remove-each item html-blk [ item = any [ " " "^/" ] ]


It didn't do what I thought it would, Is there a better way to state 
it?
Sunanda
23-Sep-2010
[3294]
Does this do the trick?
    remove-each item html-blk [ find [ " " "^/" ] item]
PatrickP61
23-Sep-2010
[3295]
Why didn't item = any [ val1 val2] work?  How should I be stating 
something like this?
BrianH
23-Sep-2010
[3296]
The ANY is calculated independently of the = and first too. So that 
is equivalent to item = " ".
Sunanda
23-Sep-2010
[3297]
You'd've had to have written it
  any [item = " " item = "^/"]
PatrickP61
23-Sep-2010
[3298x2]
Sunanda, your trick did work.

Ok, so then ANY of [something] will return true when something is 
satisfied, but just stating it the way I did, it was always true 
because there was no real condition -- so I should always state ANY 
[with the full conditions inside]  right?
I don't think I communicated that well
BrianH
23-Sep-2010
[3300]
No, that makes sense. You got it.
PatrickP61
23-Sep-2010
[3301]
Oh God, the Rebolers understand me -- I must be starting to talk 
Rebol now!!! ha
Sunanda
23-Sep-2010
[3302]
I understand :)
  ANY is really a short-cut for OR, so:
  if any [a = 1 b = 2] 
means
   if (a = 1) or (b = 2)
BrianH
23-Sep-2010
[3303]
But the trick is that with ANY it will only evaluate the expressions 
until it finds the first TRUE? one, not the rest. With OR both the 
expressions are evaluated. ANY and ALL are used as control structures 
too.
Maxim
23-Sep-2010
[3304]
they're even more usefull in R3 now that more functions are none 
transparent  :-)
PatrickP61
23-Sep-2010
[3305]
Yes, so if I said something like DATA: ANY [ val1 val2] then the 
first non empty value would be set to DATA right?
Maxim
23-Sep-2010
[3306]
first true? value (not none not fase)
BrianH
23-Sep-2010
[3307]
Or less useful, depending on whether the none was an error. Learn 
to love ASSERT in R3.
PatrickP61
23-Sep-2010
[3308]
ASSERT?  Looking it up now
Maxim
23-Sep-2010
[3309x2]
for example:  0, "", []  would end up into data.
brian, is assert faster than its equivalent  [any all] combination 
?
PatrickP61
23-Sep-2010
[3311]
Thank you Maxim and Brian.  I enjoy your help!
BrianH
23-Sep-2010
[3312]
ASSERT is as fast as ANY, but faster once you add the error generation 
code to the ANY statement. ASSERT/type is *much* faster than ANY.
Maxim
23-Sep-2010
[3313]
cool
BrianH
23-Sep-2010
[3314x2]
ASSERT is a great way to integrate your tests right into your code, 
making TDD irrelevant. The module system uses ASSERT a lot to catch 
attempts to hack the security.
For now, at least. We may switch to explicit error generation in 
some cases, for more informative errors.
PatrickP61
6-Oct-2010
[3316]
In R2 I'm trying to define a function that will return back 120% 
of some values similar to this:

scale: func [ val ][ val * 1.2 ]  <-- this works but returns a decimal 
-- I'd like it to return integer, so I tried

scale: func [ val ][ to-integer reduce [ val * 1.2 ]]  <-- doesn't 
work  -- what am I doing wrong
GrahamC
6-Oct-2010
[3317x2]
remove the [ ]
and the reduce
Maxim
6-Oct-2010
[3319]
it needs parens

to-integer (val * 1.2)
GrahamC
6-Oct-2010
[3320]
you sure?  '* should take precedence
PatrickP61
6-Oct-2010
[3321]
scale: func [ val ] [ to-integer val * 1.2 ]

AS I read it, it looks like, take the integer of val, then multipy 
by 1.2, which in my mind would return a decimal, but that is not 
happening that way right?
Maxim
6-Oct-2010
[3322]
Graham, yes your right..
GrahamC
6-Oct-2010
[3323]
mine?
PatrickP61
6-Oct-2010
[3324]
yes
GrahamC
6-Oct-2010
[3325]
* has higher precedence than 'to-integer so it gets used first
PatrickP61
6-Oct-2010
[3326]
Thank you for that clarification!
Maxim
6-Oct-2010
[3327]
Pat, there is only one precedence rule in rebol expressions:

 ops resolve left to right, THEN functions are interpreted in argument 
 grabing order.
PatrickP61
6-Oct-2010
[3328]
So any ops (i guessing that is any math expression) is evaled first 
left to right, then however the arguments are evaluated -- right?
Maxim
6-Oct-2010
[3329]
which is annoying when using comparison ops with functions... ex:
if length? val = 3  ; wrong... 

val=3 ; true
length? true ; error
GrahamC
6-Oct-2010
[3330]
to-integer multiply 10 1.125 => 11
Maxim
6-Oct-2010
[3331]
so you always have to put the ops BEFORE comparing to a function...

if 3 = length? val
GrahamC
6-Oct-2010
[3332]
length? equal? 3 val