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

World: r3wp

[Core] Discuss core issues

james_nak
18-Feb-2008
[9191]
Thanks, btiffin. Someday I'll ask what that has to do with the word 
"all" as in mold/all -perhaps it refers to saving everything including 
the type.


Here's another thing I just ran in to: How does one add to an object? 
Say I have this object o: make object! [name: ""] and I want to later 
add  'address: ""'  (while the program is running of course).

Thanks in advance.
Graham
18-Feb-2008
[9192x2]
you can't.
you have to create a new object with the new field.
Sunanda
18-Feb-2008
[9194]
R3 will let you. But, as Graham says, no suhc luck in  R2.
R3 discussion here:
http://www.rebol.net/r3blogs/0073.html
Henrik
18-Feb-2008
[9195]
I don't think I use MOLD very often, only MOLD/ALL. MOLD lies too 
closely to FORM. I believe also there was a discussion about changing 
this in R3?
BrianH
18-Feb-2008
[9196]
Not really. MOLD is used as a way to generate script source (which 
would be loaded with DO); MOLD/ALL is for data (which would be loaded 
with LOAD). Both have their strengths, so there has been no talk 
of removing one or the other.
Henrik
18-Feb-2008
[9197]
ah, I was confusing it with something else, sorry.
james_nak
18-Feb-2008
[9198]
Thanks Y'all for the info. I guess I'll have to fake it.
BrianH
18-Feb-2008
[9199]
If you make sure that all references to the object are through the 
same word or block, no aliasing, then you can just reassign to a 
new object based on the old.
btiffin
18-Feb-2008
[9200x2]
James;  I haven't experimented much, nor really thought about it 
other than to know there are (many) issues  Using path notation may 
help.

>> o: context [a: [name "Bob"]]
>> o/a/name
== "Bob"
>> append o/a [address "Main St"]
>> o/a/address
== "Main St"
>> o/a/adress: "New Adress"
>> o/a/adress
== "New Address" 


So you are not adding elements to an object!, just adding key value 
pairs to a block and using path notation.  It might not suit what 
you need, or it might just look like it   :)  Enough to get yourself 
coded into a corner.
And just so ya know ... I wouldn't do that.   I'd  o: make o [address: 
none]
[unknown: 5]
18-Feb-2008
[9202]
Is there a way to sandbox a function in a sense such as if I have 
a block defined such as:

block: [ ]

and then I have a function that is as such:

if equal? arg1 arg2 [append block arg2]


How can I intercept what is going to be passed to block before it 
is allocated to do some other processing.
btiffin
18-Feb-2008
[9203]
Is it always append?   Append is a mezzanine in R2 so if you redef/wrap 
it, you'll not be penalized much on performance.
[unknown: 5]
18-Feb-2008
[9204x2]
Could be insert alter or any other function that would populate data 
into a block.
Yeah append is a mezz for insert though if I recall.
btiffin
18-Feb-2008
[9206]
SOURCE APPEND  for more info, but hmm, you might have to write a 
wrapper then ... performance for REBOL isn't too too horrible at 
the mezz level as long as tight loops aren't involved.
[unknown: 5]
18-Feb-2008
[9207]
how do you pass a lit-word to a function argument and have the function 
still see it as a lit-word?
btiffin
18-Feb-2008
[9208]
Check in and around http://rebol.com/docs/core23/rebolcore-9.html#section-3.2
  but note the backtick  `var is really just a single quote.
[unknown: 5]
18-Feb-2008
[9209]
don't see anthing helpful there.
btiffin
18-Feb-2008
[9210x2]
f: func ['a] [type? :a]
Note the ' on the spec and the : get in the func.    REBOL is one 
tricky little business  :)
[unknown: 5]
18-Feb-2008
[9212]
that is a direct reference.  But try something like this:

blk: ['word]

f: func [arg][lit-word? arg]

then try it:

f blk/1

And you will see the problem.
btiffin
18-Feb-2008
[9213x2]
Just for fun ... check out http://rebol.net/wiki/Glossaryand http://rebol.net/wiki/Glossary_rebols_view
for how confused I am in this area.  :)
>> d: ['junk]
== ['junk]
>> f: func [a] [type? :a]
>> f d/1
== lit-word!


You need the : get inside the func to avoid evaluating arg inside 
the function.
[unknown: 5]
19-Feb-2008
[9215x3]
Of course....why didn't I think of that....  I was racking my brain 
and didn't even think of the simple stuff.  let me see if my litlle 
function works now.
potential?: function [arg][][either all [word? :arg not lit-word? 
:arg][true][false]]

>> blk: [print 'print "print"]
== [print 'print "print"]
>> potential? blk/1
== true
>> potential? blk/2
== false
>> potential? blk/3
== false

works good!
Do we already have a function that does this? If not a similiar function 
should probably be thrown in REBOL3 don't you think?  Could be useful
btiffin
19-Feb-2008
[9218]
Paul;  I get so lost in the REBOL trees so often ... that "obvious" 
isn't in my REBOL vocabulary yet.  It's partly why I post helper 
notes;  knowing someone else will correct me and I'll learn that 
little bit more about concise REBOL.  ;)

Like from TRETBASE, I didn't even think to test   that   false = 
none  is false  and I was so glad Anton posted the "obvious".
[unknown: 5]
19-Feb-2008
[9219]
My problem is that I forgot many things because I haven't done them 
in so long.  Plus I forget what changes were made so I find myself 
doing something complicated that has now been simplified.
Henrik
19-Feb-2008
[9220x3]
I rarely use FALSE actively, more relying on that many functions 
like ALL and ANY work best with NONE. This shortens many functions.
potential?: func [arg][all [word? :arg not lit-word? :arg]]
However, I think the function would work better like:

potential?: func [arg][all [any-word? :arg not lit-word? :arg]]
[unknown: 5]
19-Feb-2008
[9223x4]
Yeah I just threw it out there as I had it in the console at the 
moment but feel like it could be of benefit to have it built into 
R3 as a mezz or something.
Your functions are returning none so I don't think we want that.
;Mabye this:


potential?: func [arg][if all [any-word? :arg not lit-word? :arg][return 
true] false]
Seems to work ok:

>> blk: [print "print" 'print]
== [print "print" 'print]
>> potential? blk/1
== true
>> potential? blk/2
== false
>> potential? blk/3
== false
Ingo
19-Feb-2008
[9227x2]
potential?: func [arg][found? all [any-word? :arg not lit-word? :arg]]


blk: [print 'print "print"] print potential? blk/1 print potential? 
blk/2 print potential? blk/3
true
false
false
... just to be part of the game ;-)
[unknown: 5]
19-Feb-2008
[9229x3]
There you go Ingo!
I forgot about found.
Just when I was starting to think there was no longer a use for it.
Ingo
19-Feb-2008
[9232]
I admit, I had to look it up, too.
[unknown: 5]
19-Feb-2008
[9233x2]
lol - I kept thinking in my head what I can return this back with 
that would explicitly evaluate to true or false and not give none 
but you FOUND it - pun intended.
So does anyone else think potential? should be a mezz function?  
If so, what should the name of it be proposed as?
Ingo
19-Feb-2008
[9235]
I'm not sure it's needed often enough to warrant its inclusion, first 
take at a name: 

non-lit-word?
[unknown: 5]
19-Feb-2008
[9236]
But it that really doesn't give an indication of what the function 
is for which I believe the function is for is to find if an argument 
has a potential to be evaluate
Henrik
19-Feb-2008
[9237]
Your functions are returning none so I don't think we want that.

 <-- my point was that NONE can be more useful than FALSE and gives 
 simpler code, if you are not using NONE as a specific value.
[unknown: 5]
19-Feb-2008
[9238]
Can you provide an example Henrik?
Henrik
19-Feb-2008
[9239]
I gave it above. Simplified code.
[unknown: 5]
19-Feb-2008
[9240]
Yeah but that is a trade off to useability in my opinion.  For example 
I can say pick [this that] potential? arg