World: r3wp
[Core] Discuss core issues
older newer | first last |
[unknown: 5] 7-Mar-2008 [9396x2] | yeah true |
Are they planning to put something like a flatten function in R3? | |
BrianH 7-Mar-2008 [9398] | You can copy/deep first if you like, though that has allocation overhead. A version was proposed in the R3 discussions, but hasn't made it through the screening process (not general-use enough I guess). |
[unknown: 5] 7-Mar-2008 [9399] | to bad I can see why we need it. |
BrianH 7-Mar-2008 [9400] | Here's the thing: How often are you going to use it? We are modularizing REBOL so that you don't have to bundle the whole thing together. Functions like FLATTEN would make a great addon module, but if the core code doesn't need it, or it's usage would be uncommon, it doesn't make the cut. For that matter, the functions in R3 that I am backporting to R2 are only those that I have actually seen in regular use in R3 mezzanine code. There are some more advanced functions that just won't be making it because their design hasn't been settled yet. Picking something to go into the core is an involved process. And you can always make code libraries. |
[unknown: 5] 7-Mar-2008 [9401x7] | I agree with that. keep it out and use it as a module. |
>> help flatten USAGE: FLATTEN blk /fine /semi /full DESCRIPTION: Returns a new block with desired blocks flattened or removed FLATTEN is a function value. ARGUMENTS: blk -- block to flatten (Type: block) REFINEMENTS: /fine -- Flattens blocks to finest representation /semi -- Flattens to support 'select operations /full -- Flatten fully - ignored with other refinements | |
flatten: func [ {Returns a new block with desired blocks flattened or removed} blk [block!] "block to flatten" /fine "Flattens blocks to finest representation" /semi "Flattens to support 'select operations" /full "Flatten fully - ignored with other refinements" /local blk2 ][ blk2: copy [] fl: func [b][ either parse b [block!][ b: first b fl b ][ either semi [ insert tail blk2 b ][ either full [ foreach val b [either block? val [fl val][insert tail blk2 val]] ][ insert/only tail blk2 b ] ] ] ] if fine [full: none while [parse blk [block!]][blk: first blk]] foreach item blk [ either block? item [fl item][insert tail blk2 item] ] blk2 ] | |
>> test: [[1 ["select"]] [2 ["me"]]] == [[1 ["select"]] [2 ["me"]]] >> flatten/semi test == [1 ["select"] 2 ["me"]] | |
>> test: [[[1 ["Select"]] [[2 ["Me"]]]]] == [[[1 ["Select"]] [[2 ["Me"]]]]] >> flatten/fine/semi test == [1 ["Select"] 2 ["Me"]] | |
>> test: [[["this"]] [[["is"]]] ['a] 'big [[['mess]]]] == [[["this"]] [[["is"]]] ['a] 'big [[['mess]]]] >> flatten/fine test == [["this"] ["is"] ['a] big ['mess]] | |
>> test: [[["this"]] [[["is"]]] ['a] 'big [[['mess]]]] == [[["this"]] [[["is"]]] ['a] 'big [[['mess]]]] >> flatten/full test == ["this" "is" a big mess] | |
[unknown: 5] 8-Mar-2008 [9408] | I'm not sure I care for the refinement names I chose with the exception of /full. I kinda like that name as it gives me a better perspetive of what it is doing. |
Pekr 12-Mar-2008 [9409] | how can I make object words local to the context of object? I mean obj: context [a: 1 pri: does [print a]] I would like to be able to use 'a in the closed context, but I don't want it to be available via obj/a ..... I tried to enclose it to 'use, but then it is not available to 'pri function :-) |
Gregg 12-Mar-2008 [9410] | See these ML threads on REBOL.org. http://www.rebol.org/cgi-bin/cgiwrap/rebol/ml-display-thread.r?m=rmlRJCC http://www.rebol.org/cgi-bin/cgiwrap/rebol/ml-display-thread.r?m=rmlTLVQ |
Pekr 12-Mar-2008 [9411] | thanks ... |
BrianH 12-Mar-2008 [9412] | Wrap the USE around the CONTEXT, rather than the other way around. |
[unknown: 5] 12-Mar-2008 [9413] | This topic comes at a good time for me as I have a complex issue that I need to address which is similiar to what Pekr's sounds like except that I'm binding object/words to object/some-func. I'm going to have the need to not allow someone to access object/words by probing object/words. Object words is to large to have all of it inside of object/some-func which is why it is external to that function and only parts of it get bound to that some-func. |
Ingo 13-Mar-2008 [9414] | I just remembered the 'self trick, don't know whether it's officially supported, but it works ... given: .... o: make object! [ self: make object! [ p: does [print [a b c d]] ca: func [x][a: x] d: 4 ] a: 1 b: 2 c: 3 ] you have ... >> o/p 1 2 3 4 >> o/ca 7 == 7 >> o/p 7 2 3 4 >> probe o make object! [ p: func [][print [a b c d]] ca: func [x][a: x] d: 4 ] >> o/a ** Script Error: Invalid path value: a ** Near: o/a >> o/self/a ** Script Error: Invalid path value: a ** Near: o/self/a |
[unknown: 5] 13-Mar-2008 [9415] | nice that is what I'm looking for. |
Pekr 13-Mar-2008 [9416] | o/p is directly known? I did not know 'self allows such functionality :-) |
[unknown: 5] 13-Mar-2008 [9417] | It's sweet for sure. Another one of those hidden REBOL perks. |
Gabriele 14-Mar-2008 [9418x2] | i don't think this is intentional, but it's something i've used quite a few times. basically make is returning self, whatever you make that be :) |
>> make object! [self: "blabla"] == "blabla" | |
[unknown: 5] 14-Mar-2008 [9420x3] | Objects are kinda strange. For example, if you set 'self after you created the context it can be referenced but remains hidden in a sense: |
>> obj: context [] >> obj/self: "hidden" == "hidden" >> probe obj make object! [ ] >> obj/self == "hidden" | |
But this highly not recommened unless your aware of what your using your object for as self will not refer back to itself any longer. | |
btiffin 16-Mar-2008 [9423] | I'd like to thank the 2.7.6 team for all the great new stuff. In particular Brian Hawley - well done. Kudos; the new mezz features are awesome. ALSO and FIRST+ being just two of many that will make for more concise code. Long Live R2. |
Graham 16-Mar-2008 [9424] | Perhaps someone can post examples of how the new mezzanines are used ... |
btiffin 16-Mar-2008 [9425] | ALSO; instead of tmp: first series series: next series tmp also first series series: next series No tmp required, ALSO will return the first result of the two expressions BUT in this case why? :) FIRST+; instead of the (now) useless example I just wrote; first+ series ;; return value at current reference and then advance reference No tmp, no next required. All in one expression. Note: SOURCE ALSO it's cool and will make a lot of sense when you see it. |
[unknown: 5] 16-Mar-2008 [9426] | Yeah the mezzanines will be very useful and should be in there just because of the frequency they will be used. |
Graham 17-Mar-2008 [9427x2] | also: func [ {Returns the first value, but also evaluates the second.} value1 [any-type!] value2 [any-type!] ][ get/any 'value1 ] |
so, it's getting the first value .. how is it evaluating the second ? | |
btiffin 17-Mar-2008 [9429] | also 1 2 1 and 2 are evaluated by the normal sequence of getting arguments. This func captures the two results (simply by having them as arguments) and returns the first. Love the REBOL. :) |
Graham 17-Mar-2008 [9430] | ahh... deep magic |
JohanAR 17-Mar-2008 [9431] | I use the following in my program: name: any [ also getname var: yes also getanothername var: no ] if getname fails (returns none) the other function must be called, and a variable set to flag this. Could ofcourse be rewritten, but I wanted to try using also :) |
Geomol 17-Mar-2008 [9432] | ahh... deep magic Made me think of Arthur C. Clarke's 3. law: Any sufficiently advanced technology is indistinguishable from magic. :-) |
Graham 17-Mar-2008 [9433] | Nah .. it's CS Lewis, and Narnia |
[unknown: 5] 21-Mar-2008 [9434x3] | I wish we could do something like this: myfunc: ['notjustanyword [word! [this that]][spec block] |
That way we can only pass this or that to the function otherwise it generates an error | |
Maybe I'll add that to the wish list for R4 - lol. | |
Henrik 22-Mar-2008 [9437] | is there any way to check whether the Windows clock has changed? |
[unknown: 5] 22-Mar-2008 [9438x3] | You can do a call to net time |
Doesn't REBOL read the windows time? | |
Guess need more information by what you mean by changed. | |
Henrik 22-Mar-2008 [9441] | if someone manipulates the clock or if it switches to daylight savings time, etc. |
[unknown: 5] 22-Mar-2008 [9442x4] | Henrik those events are written into the event log on NT platforms. |
Maybe that would help to query the log. | |
You can see those messages by going to start -> run -> "eventvwr.msc" | |
Should record then in the system log section. | |
older newer | first last |