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

World: r3wp

[Core] Discuss core issues

Ladislav
13-Oct-2006
[5560x5]
How many users would like (or at least not object against) adding 
BUILD as an official mezzanine?
Comparison of BUILD and REDUCE/ONLY:
1) REDUCE/ONLY does not allow you to specify which words to evaluate, 
which would be safer, it rather specify which words to *not* evaluate
2) REDUCE/ONLY isn't /DEEP, i.e. it does not process subblocks
3) The evaluated words are local for BUILD
http://www.fm.tul.cz/~ladislav/rebol/build.r
(How many users would use BUILD?)
Henrik
13-Oct-2006
[5565x4]
would that mean:

>> build [1 [3 + 2 now]]
== [1 [5 13-Oct-2006/11:16:56+2:00]]

?
because that's the kind of build I would be interested in
hmm... no it wouldn't. :-(
I don't have anything against BUILD, but I need to be convinced more 
on the practical uses, because I can't see how this makes block building 
any easier. Perhaps some more examples would be good. :-)
Gregg
13-Oct-2006
[5569]
Examples contrasting compose (with /only and /deep) and reduce/only, 
would be great. I know it has a couple in the script. I've looked 
at it in the past, but haven't been driven to add it as a standard 
part of my process yet.
Ladislav
13-Oct-2006
[5570x2]
Henrik: Build can do it using one of the following ways:

    build [1 [ins 3 + 2 ins now]]
    build [1 only reduce [3 + 2 now]]
    build/with [1 inner] [inner: reduce [3 + 2 now]]


OTOH, your example is quite specific and not very general (I would 
say that it as a task for REDUCE/DEEP)
(except for the fact, that REDUCE does not have a /deep refinement)
Henrik
13-Oct-2006
[5572]
I think some practical examples are needed, for example in building 
some HTML for a webpage. Something that shows that BUILD is significantly 
easier than a combination of REDUCE and COMPOSE.
Ladislav
13-Oct-2006
[5573]
building some HTML for a webpage
 - BUILD builds blocks not HTML
Henrik
13-Oct-2006
[5574]
ok, a layout block then?
Ladislav
13-Oct-2006
[5575]
the example Mike liked is:

    view layout build/with [
        box 600x600 effect [
            draw [
                spider [
                    size 600x600
                    ; offset 100x100
                    pen black
                    scale 4
                    ; scale [0 150 300 450 600]
                    categories [

                        "Category 1" "Category 2" "Category 3" "Category 4"

                        "Category 5" "Category 6" "Category 7" "Category 8"
                    ]
                    directions
                    pen red
                    data [100 200 300 400 500 600 700 800]
                    pen blue
                    data [100 100 100 100 100 100 100 100]
                ]
            ]
        ]
    ] [spider: :spider*]

(it builds a DRAW block creating a Spider graph)
Henrik
13-Oct-2006
[5576]
** Script Error: spider* has no value
** Where: build
** Near: spider: :spider*
Ladislav
13-Oct-2006
[5577]
Spider is: http://www.fm.tul.cz/~ladislav/rebol/spider.r
Henrik
13-Oct-2006
[5578]
>> do http://www.fm.tul.cz/~ladislav/rebol/spider.r
connecting to: www.fm.tul.cz
Script: "Spider" (8-Sep-2006/16:40:58+2:00)
** Script Error: lfunc has no value
** Near: spider*: lfunc [
    [catch] 

    description [block!] "a block containing a description of a chart"
] [] [
    current-...
>>
Ladislav
13-Oct-2006
[5579]
use INCLUDE as follows:

do http://www.fm.tul.cz/~ladislav/rebol/include.r
append include-path http://www.fm.tul.cz/~ladislav/rebol/
include %spider.r
Henrik
13-Oct-2006
[5580]
it wants to find the file in my local cache before the remote one 
and crashes:

>> do http://www.fm.tul.cz/~ladislav/rebol/include.r
connecting to: www.fm.tul.cz
Script: "Include" (5-Jan-2006/14:31:42+1:00)
>> append include-path http://www.fm.tul.cz/~ladislav/rebol/
== [%. %/Volumes/c/rebol/ http://www.fm.tul.cz/~ladislav/rebol/]
>> include %spider.r
connecting to: www.fm.tul.cz
** Access Error: Cannot open /Volumes/c/rebol/spider.r
** Where: include-script
** Near: found: load/all target 
if header
>>

Sorry, if I'm being a little difficult :-)
Ladislav
13-Oct-2006
[5581]
no problem, checking what went wrong in your case
Henrik
13-Oct-2006
[5582]
>> what-dir
== %/Volumes/c/rebol/

if that helps.
Ladislav
13-Oct-2006
[5583x4]
OK, give me a few minutes to check the versions
aha, this looks like a result of the last INCLUDE change. It is surprising, 
that nobody noticed it yet.
Henrik: could you please test again?
(INCLUDE bug corrected)
Henrik
13-Oct-2006
[5587x3]
same error
I can see that the script dates for include.r are different, so it 
must be the new version
ah... a fresh console helped.
Ladislav
13-Oct-2006
[5590]
yes, INCLUDE does not reload itself when already defined
Henrik
13-Oct-2006
[5591]
back to the example: what exactly does Spider do? I don't think it's 
very clear from the example what's going on. there could be hundreds 
of lines of code hidden there.
Ladislav
13-Oct-2006
[5592x2]
you need to have a look at http://www.fm.tul.cz/~ladislav/rebol/spider.r
. It generates the spider graph as you could see, if you succeeded 
to run the code
Henrik: could you please do one more test - I updated INCLUDE once 
again
Henrik
13-Oct-2006
[5594x2]
I saw it. The draw block would then be evaluated from the spider 
code and then inserted at that place?
include still works fine in a fresh console
Ladislav
13-Oct-2006
[5596]
yes, you can see the result of it if you do:

probe build/with [
        box 600x600 effect [
            draw [
                spider [
                    size 600x600
                    ; offset 100x100
                    pen black
                    scale 4
                    ; scale [0 150 300 450 600]
                    categories [

                        "Category 1" "Category 2" "Category 3" "Category 4"

                        "Category 5" "Category 6" "Category 7" "Category 8"
                    ]
                    directions
                    pen red
                    data [100 200 300 400 500 600 700 800]
                    pen blue
                    data [100 100 100 100 100 100 100 100]
                ]
            ]
        ]
    ] [spider: :spider*]
Henrik
13-Oct-2006
[5597]
I guess I'm just really hard to impress today. I need a much sexier 
example to be convinced of the raw power of BUILD. :-)
Ladislav
13-Oct-2006
[5598]
:-)
Henrik
13-Oct-2006
[5599]
something like "this takes 100 lines of code to do with regular REBOL 
block construction functions, while BUILD can do it in 20 and make 
much prettier code out of it"
Ladislav
13-Oct-2006
[5600x2]
I have got a similar XYPLOT function creating an XY graph, although 
I did not release it yet
Well, how would you do the

view layout build/with [
        box 600x600 effect [
            draw [
                spider [
                    size 600x600
                    ; offset 100x100
                    pen black
                    scale 4
                    ; scale [0 150 300 450 600]
                    categories [

                        "Category 1" "Category 2" "Category 3" "Category 4"

                        "Category 5" "Category 6" "Category 7" "Category 8"
                    ]
                    directions
                    pen red
                    data [100 200 300 400 500 600 700 800]
                    pen blue
                    data [100 100 100 100 100 100 100 100]
                ]
            ]
        ]
    ] [spider: :spider*]

example without using BUILD?
Pekr
13-Oct-2006
[5602]
Ladislav - will build be part of R3? :-)
Ladislav
13-Oct-2006
[5603]
That is why I am asking here - if there are users who will be using 
it
Henrik
13-Oct-2006
[5604]
by looking at it, SPIDER looks like a regular function to me with 
the following block as input. I guess it can't be, because then the 
layout block could simply be done by enclosing spider [...] in ()'s 
and compose/deep the whole thing.
Ladislav
13-Oct-2006
[5605]
compose/deep - actually it could be used in this case, because I 
didn't use parens anywhere
Henrik
13-Oct-2006
[5606]
well, just getting rid of ()'s isn't enough for me. I would want 
significant code reduction in cases where blocks would be cumbersome 
to build.
Ladislav
13-Oct-2006
[5607x2]
this is not about getting rid of parens, this is about *not clashing 
with parens*
With COMPOSE/DEEP you cannot use parens safely
Henrik
13-Oct-2006
[5609]
by safely you mean selective evaluation?