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

World: r3wp

[!REBOL3-OLD1]

BrianH
27-Apr-2006
[792x2]
Done.
That  return first reduce [value value: none]  is a nice trick - 
I hadn't thought of that. I did suggest on RAMBO that the unset native 
return the old value of the word it is unsetting, allowing a trick 
like  return unset value  but they haven't made that change yet.
Gabriele
27-Apr-2006
[794]
brian: there are cases where using compose is not very convenient 
(parse, other dialects that use parens, or just because using words 
makes debugging easier if you probe the value afterwards)
Ladislav
1-May-2006
[795x2]
I second Gabriele, words enhance readability and the COMPOSE dialect 
is not as comfortable as e.g. the BUILD dialect
I guess, that Brian didn't consider writing a more complicated asynchronous 
framework, where the advantages of closures cannot be overlooked
Graham
1-May-2006
[797]
Build dialect?
Geomol
1-May-2006
[798]
Probably build-tag or build-markup.
Graham
1-May-2006
[799x2]
Does the build dialect help with that situation where you have paraens 
inside an action block of the vid dialect, and you are using compose/deep 
on the whole layout?
L's build dialect is here .. found it after googling : http://www.fm.vslib.cz/~ladislav/rebol/build.r
BrianH
1-May-2006
[801x5]
Ladislav, it's not that I don't see the advantage to closures in 
principle, and that I wouldn't use them occasionally if they were 
there. It's that Carl's description of how the closures would be 
implemented seems a little heavyweight, largely as a result of REBOL's 
direct binding. I would use closures, but only when creating my own 
contexts manually or copying a subset of the data would not have 
the efficiency gains they would normally have.
I will check out your build dialect though - it sounds interesting.
I found one bug: Your build dialect will convert lit-path! to path! 
unintentionally (as far as I can tell). Convert all word references 
to block or result in your inner function to get-words (:block and 
:result respectively).
;The changed build function would be:
build: func [
    {Build a block using given values}
    block [block! paren! path! lit-path! set-path!]
    /with
    values [block!]
    /local context inner
] [
    values: any [values [only: :encl ins: :dtto]]
    context: make object! values
    inner: func [block /local item item' pos result] [
        result: make :block length? :block
        parse block [
            any [
                pos: set item word! (

                    either all [item': in context item item <> 'self] [
                        change pos item'
                        set/any [item pos] do/next pos
                        insert tail :result get/any 'item
                    ] [insert tail :result item pos: next pos]
                ) :pos | set item get-word! (

                    either all [item': in context item item <> 'self] [
                        insert/only tail :result get/any item'
                    ] [insert tail :result item]
                ) | set item [

                    block! | paren! | path! | set-path! | lit-path!
                ] (
                    insert/only tail :result inner :item

                ) | set item skip (insert/only tail :result get/any 'item)
            ]
        ]
        :result
    ]
    inner :block
]
Sorry, missed one after parse ;(
Ladislav
2-May-2006
[806x2]
thanks, incorporating your correction
http://www.fm.vslib.cz/~ladislav/rebol/build.ris now corrected according 
to the Brian's suggestion
BrianH
2-May-2006
[808]
You need to change all of the
    insert tail result
to
    insert tail :result

to keep the result from being converted from a lit-path! to a different 
path! every time.
Ladislav
2-May-2006
[809x4]
correcting, thanks
this lit-word and lit-path behaviour does not look very natural to 
me
although insert tail result may be OK anyway?
>> result: first ['a/b]
== 'a/b
>> insert tail result 's
==
>> :result
== 'a/b/s
BrianH
2-May-2006
[813x2]
That means that the path! returned by DOing a lit-path! returns the 
same data rather than a copy. Interesting.
Undocumented too. I've found that lit-word! works the same way.
Ladislav
2-May-2006
[815]
this is the property I called Relatives in http://www.fm.tul.cz/~ladislav/rebol/identity.html
BrianH
2-May-2006
[816]
Still, changing them would make your build dialect compatible with 
older versions of REBOL that evaluated path and paren values when 
you referenced them with a word rather than a get-word. It all depends 
on how far you value backwards compatibility.
Ladislav
2-May-2006
[817]
yes, I am making the change
BrianH
2-May-2006
[818]
I remember when they changed that they said that very little REBOL 
code depended on the old behavior, and yet I had to change some of 
mine as I recall. Apparently their mileage did vary.
Ladislav
2-May-2006
[819x2]
http://www.fm.tul.cz/~ladislav/rebol/identity.htmlposted
sorry, I mean http://www.fm.vslib.cz/~ladislav/rebol/build.rposted
BrianH
2-May-2006
[821]
I guess your Relatives are like as-binary and as-string too.
Ladislav
2-May-2006
[822x2]
yes, that is it
(but I wrote that before AS-STRING and AS-BINARY existed), so I used 
just PARSE and DISARM to illustrate this property)
BrianH
2-May-2006
[824]
Looks good to me, although it is somewhat amusing to see SciTE's 
syntax highlighting getting confused about the word context.
Ladislav
2-May-2006
[825x2]
ah, you are using SciTE?
(I am using PSPad, but wanted to give a try to SciTE)
BrianH
2-May-2006
[827]
Sure. I prefer Notepad++ but it doesn't have REBOL enabled as a language. 
What's with the IN patch?
Ladislav
2-May-2006
[828]
in later version the IN function didn't accept any-word as argument
BrianH
2-May-2006
[829]
It seems to here, 1.3.2.3.1
Ladislav
2-May-2006
[830]
sorry, I wanted to say, in older versions of interpreter
BrianH
2-May-2006
[831x4]
Here's a good installer for SciTE on Windows:
http://gisdeveloper.tripod.com/scite.html
I've been meaning to improve SciTE's REBOL support, but I'm waiting 
to see what changes REBOL 3 will bring.
After that I can hack Notepad++ to add the support there too.
One of your examples is wrong:
build [only reduce [3 * 4 5 + 6]] ; == [[12 11]]
Ladislav
2-May-2006
[835x3]
testing
aha, yes, missing block brackets
example result corrected
BrianH
2-May-2006
[838]
Well, this has been fun, but I must go for now. I look forward to 
future collaborations :)
Ladislav
2-May-2006
[839]
thanks
Henrik
2-May-2006
[840]
3 new entries in the blog
Geomol
2-May-2006
[841]
Henrik, good suggestion with the loop working on more than one series 
(in your reply to Carl's blog). That must be possible with a function 
definition. But it should probably be part of REBOL, at least a mezzanine.