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

World: r3wp

[Core] Discuss core issues

Henrik
30-Mar-2009
[13284x2]
I think it's being interpreted as a get-word! with a refinement:

>> type? :a/b
** Script Error: a has no value
** Where: halt-view
** Near: type? :a/b
>> type? :a /b
** Script Error: a has no value
** Where: halt-view
** Near: type? :a /b
>>
and inside the block, it can be interpreted as a path. basically 
get-path! is a good idea. :-)
[unknown: 5]
30-Mar-2009
[13286]
>> as-lit-word? first [:a/b]
== false
>> as-lit-word? first [:a]
== true
Henrik
30-Mar-2009
[13287]
I'm not sure what that means...
[unknown: 5]
30-Mar-2009
[13288x4]
Tells me if an item acts as a lit-word.
acts
 is the key word.
http://www.tretbase.com/forum/viewtopic.php?f=8&t=30&start=10#p141
I could test the value with the as-lit-word? function to determine 
if I want to set the word to a value.
Dockimbel
30-Mar-2009
[13292]
It seems that there's no specific semantic rule in R2 for a get-word! 
as first item of a path! value. So, it's just treated as word!.

>> a: [b 123]
== [b 123]
>> :a/b
== 123
>> a/b
== 123
Gabriele
31-Mar-2009
[13293x2]
Geomol: the best exaple is:    also copy port close port
but it's so useful in so many cases...
Geomol
31-Mar-2009
[13295x3]
If you do:

my-port: also copy part close port

then why not just do:

my-port: copy port
close port
part -> port
I'm wondering, if your need for ALSO is because you structure your 
programs differently than I do?
Henrik
31-Mar-2009
[13298x2]
I think it was to get rid of 'my-port. ALSO is useful when returning, 
so you don't need to assign another word for results that would otherwise 
be temporary. I use ALSO in a couple of places here.
process-port: func [port] [
	also copy port close port
]

versus:

process-port: func [port /local p] [
	p: copy port
	close port
	return p
]
Geomol
31-Mar-2009
[13300]
What happens, where you call process-port? Don't you have a variable 
there?
Henrik
31-Mar-2009
[13301x2]
That depends on the structure of the program, I guess.
In R2, it's still fairly elegant:

>> source also
also: func [
    {Returns the first value, but also evaluates the second.}
    value1 [any-type!]
    value2 [any-type!]
][
    get/any 'value1
]
Geomol
31-Mar-2009
[13303x2]
So you have this process-port function, and you need ALSO to not 
have an extra variable. I would just write:
... copy port
close port

without calling some function to do it.
I don't see ALSO as elegant, if there is no need for it. It's bloat 
in my eyes. (I may change my mind sometime, when I see good use of 
it. I haven't seen that yet.)
Henrik
31-Mar-2009
[13305x2]
As said, it's about the return value:

1. maybe you need the function in 50 places
2. maybe you need the return value from the function
It does really untie a small knot there and I've bumped into that 
quite often. It was discussed heavily a year ago in the r3-alpha 
world and Carl wanted it in. I remember the discussion was mostly 
what to name it. :-)
Geomol
31-Mar-2009
[13307]
Yes, I read that discussion again yesterday. I remember, that I also 
didn't see the great use of it back then. :-)
Henrik
31-Mar-2009
[13308]
I guess you've not bumped into that knot.
Geomol
31-Mar-2009
[13309]
Maybe if I see a bit larger program, that use ALSO!?
Henrik
31-Mar-2009
[13310]
anway, I would be sad to see it go, so I want it to stay.
Geomol
31-Mar-2009
[13311x2]
I learned a program structure more than 20 years ago called "program 
95%". It's a structure, you use 95% of the time when programming 
COBOL (and probably also in most other langauges). Maybe the need 
for ALSO is related to how we structure our programs?
The structure is basically:
init get-input loop [handle input get-input until end] cleanup
Henrik
31-Mar-2009
[13313x2]
I'm not sure it is. For the port example above, there's no way to 
return without ALSO or assigning a temporary variable. If you are 
using it inside another function, like process-port, it will only 
reduce overhead, not create more.
and you really want functions like that to be simple.
Geomol
31-Mar-2009
[13315]
What is the overhead for calling a function compared to not call 
it? And by having the close down in a function mean, it may not be 
on the same level as the open, which may be seen as bad programming 
style.
Henrik
31-Mar-2009
[13316]
as said, if you use the function in 50 places...
Geomol
31-Mar-2009
[13317]
So you have
port: open .....
my-port: process-port port

many places, where I suggest:

port: open ...
my-port: copy port
close port
Henrik
31-Mar-2009
[13318]
no, you may exactly _not_ have 'my-port. you may be doing a test 
on the port which does not require an extra word.
Geomol
31-Mar-2009
[13319x2]
I would never do the first, because there is no close to be seen 
for every open.
So you don't really need to copy the port? It's just for a test, 
like:

port: open ....
while [port] [
....
]
close port
Henrik
31-Mar-2009
[13321x2]
sorry, the content.
I give up. :-) gotta get back to coding.
Geomol
31-Mar-2009
[13323]
:-) I need to see bigger examples to understand you guys.
Henrik
31-Mar-2009
[13324]
ask Carl on Chat. I think that's best. It was his idea anyway.
Oldes
31-Mar-2009
[13325]
Geomol: I wonder why you have a problem with 'also now. It was discussed 
on 10-Aug-2007 on r3-alpha in new-functions group - and you were 
one of the people who were in this discussion
Geomol
31-Mar-2009
[13326]
Yes, I then said, I didn't see the need for it, but I suggested a 
good name. Now 1.5 years later, I still don't use it. I'm asking, 
if people use it, because if I see good use of it, I hope to use 
it myself.
Oldes
31-Mar-2009
[13327]
I'm not using it.. I'm not coding in R3 yet. Also when I test 'also 
now, it looks that there is no speed gain.
Izkata
31-Mar-2009
[13328x2]
Huh..  I didn't know there was an 'also - I defined my own function 
long ago that does what it does
I've used it in a couple places, almost always having to do with 
ports - it is much nicer than spanning 3 lines for the same thing
Geomol
31-Mar-2009
[13330]
Do you have any code, I can see? To see how you use it.
[unknown: 5]
31-Mar-2009
[13331x2]
John, consider if you have a local variable in a function.  Then 
calling also can clear that local variable.  This is what I use 'ALSO 
for the most and why it is way cool.
It is way cool when the item your returning is the very item you 
want to clear.
Geomol
31-Mar-2009
[13333]
And why do you want to clear it? To save resources? But what then 
with the version, you return?