World: r3wp
[Core] Discuss core issues
older newer | first last |
Henrik 30-Mar-2009 [13285] | 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? |
[unknown: 5] 31-Mar-2009 [13334] | Yes to save resources. For example, what if I just read an MP3 file into a word? I want to free that word so that it no longer is allocated to that data. |
older newer | first last |