World: r4wp
[Rebol School] REBOL School
older newer | first last |
Bo 8-May-2013 [1962x2] | Actually, the first method I posted above is easier to understand for a lot of nested statements. Compare this real line of script from one of my programs. The way I normally write it: browse probe rejoin copy [http://www.respectech.com/log/show-invoice.cgi?user= username "&pass=" password "&submit=" replace/all client "&" "%26" "&invno=" invnum either amtdue [rejoin ["¬ice=1&amtdue=" to-decimal amtdue "&daysdue=" daysdue]][copy ""]] Lisp-y: browse (probe (rejoin (copy [http://www.respectech.com/log/show-invoice.cgi?user= username "&pass=" password "&submit=" (replace/all (client) ("&") ("%26")) "&invno=" invnum (either amtdue [rejoin ["¬ice=1&amtdue=" (to-decimal amtdue) "&daysdue=" daysdue]][copy ""])]))) Heirarchical (takes a lot more space, but is easier to follow -- however, doesn't have the parameter enforcement of parens): browse probe rejoin copy [ http://www.respectech.com/log/show-invoice.cgi?user= username "&pass=" password "&submit=" replace/all client "&" "%26" "&invno=" invnum either amtdue [ rejoin [ "¬ice=1&amtdue=" to-decimal amtdue "&daysdue=" daysdue ] ] [ copy "" ] ] |
I'm glad we don't have to use the Lisp method or the heirarchical method, but it is nice that we can, especially when we are starting out. I usually only use the heirarchical method when I am trying to understand and visualize someone else's really complex scripting. I'll use the Lisp method when I am getting an error that I have narrowed down to a small snippet of code, and I can't figure out why the error is occurring. I also throw in a lot of 'probe statements to see what's really going on. | |
Ladislav 9-May-2013 [1964x3] | Patrick, clear back tail ruler1 append ruler1 "+" actually is change back tail ruler1 #"+" |
Similarly, either idx < 99 [clear back back tail ruler1] [clear back back back tail ruler1] append ruler1 to-string idx can be written as change skip either idx < 99 [-2] [-3] to-string idx | |
err, I lost a part of the expression: change skip tail ruler1 either idx < 99 [-2] [-3] to-string idx | |
Gregg 9-May-2013 [1967x2] | Patrick, rather than building up the strings bit by bit, consider how you might do it if you think of them as a buffer you're modifying. e.g., start with something like this: ruler1: copy "" insert/dup ruler1 "_" 110 forskip ruler1 5 [change skip ruler1 -1 "+"] or this ruler1: head insert/dup copy "" "____+" 22 |
Sometimes things aren't clearer when you reduce them, but sometimes it can work well. | |
PatrickP61 9-May-2013 [1969x2] | Thank you Bo, Ladislav, and Gregg -- I'll use all your suggestions :-) |
Thanks to all that helped. Learning all the time. I think I have the code pretty tight now! A lot better than my first attempt. Final solution: ruler-len: 80 ruler-1: head insert/dup (copy "") "----+----." to-integer (ruler-len + 9 / 10) ruler-1: head clear (skip ruler-1 ruler-len) ; trim excess r1: skip head ruler-1 9 ; adv to pos 10 forskip r1 10 [ adj: ((length? idx: to-string (index? r1)) - 1) change skip r1 (-1 * adj) idx ] ruler-1: head r1 ; r1 is at tail ruler-2: head insert/dup (copy "") "123456789." to-integer (ruler-len + 9 / 10) ruler-2: head clear (skip ruler-2 ruler-len) ; trim excess print-ruler: does [print ruler-1 print ruler-2] | |
Ladislav 10-May-2013 [1971x3] | My notes: * it is absolutely unnecessary to set RULER-1 three times to the same value thus, I normally do: ruler-1: copy "" insert/dup ruler-1 "----+----." to-integer (ruler-len + 9 / 10) clear (skip ruler-1 ruler-len) ; trim excess .... ; for the same reason it is unnecessary to do: ; ruler-1: head r1 |
... and for the same reason I would do r1: skip ruler-1 9 ; HEAD unnecessary | |
The same note applies to RULER-2 | |
Bo 11-May-2013 [1974] | When Carl had me write my first Rebol script, his goal was to see if I understood how scripting in Rebol is different than most other languages. One of the helpful things he told me was that if you see patterns in your scripts, then you are likely not scripting as efficiently as possible. |
Henrik 11-May-2013 [1975] | Bo, that's a great quote. |
Reichart 12-May-2013 [1976] | LOL, I was just posting a rant on FB that can be summed up as "if you do it over and over again, make a BLOODY shortcut". |
PatrickP61 14-May-2013 [1977] | Ladislav, Excellent notes!!! For whatever reason, (old coding habits I guess) I started with defining the object RULER-1 and then manipulating it. I now see what you are saying about using the INSERT/DUP. As to notes about HEAD, I realize now that I confused INSERT and APPEND, (thinking it inserts at tail, when it doesn't. I welcome any and all comments to help me get out of my paradigm!! |
Ladislav 14-May-2013 [1978x5] | As to notes about HEAD, I realize now that I confused INSERT and APPEND - APPEND used in a similar way as above would not need HEAD either |
Neither INSERT nor APPEND modify the index attribute of their argument (the index attribute of series is immutable, in fact) | |
Having a series with index 1 (the head has this index), neither INSERT nor APPEND can change the index of the series. What they do is something else - they return a series with a different index. | |
To illustrate this further, let's consider a trivial example: a: 1 b: 2 add a b ; == 2 You can examine A and B now and see that the ADD function did not change A or B, but it returned 2 (another value). Similarly, INSERT does modify the argument series, but not its index, however it returns a series with a different index. | |
Is this clear? | |
Endo 14-May-2013 [1983] | Your example should be "== 3" I guess? |
DideC 15-May-2013 [1984x2] | :-) |
(best of us can be wrong sometimes. Just to LOL, no pun intended) | |
Pekr 15-May-2013 [1986x2] | >> add: :multiply >> a: 1 == 1 >> b: 2 == 2 >> add a b == 2 |
You can always find a solution :-) | |
Endo 15-May-2013 [1988] | /LAST refinement doesn't return the last match when used with /REVERSE refinement. Is that a known issue? >> FIND/reverse/last tail "aoboco" "o" == "o" >> FIND/reverse tail "aoboco" "o" == "o" >> FIND "aoboco" "o" == "oboco" >> FIND/last "aoboco" "o" == "o" |
MaxV 15-May-2013 [1989] | Hello, someone needs Sublime Text 2 editor syntax highlight file, see http://rebol.informe.com/forum/rebol-2-f8/sublime-text-2-t59.html Do you know where he may find it? |
DideC 15-May-2013 [1990] | find/reverse and find/last are somewhat identical but not from the same point of start. So you have to use one XOR the other. |
Gregg 15-May-2013 [1991] | Endo, what result do you expect for FIND/reverse/last tail "aoboco" "o" ? |
Ladislav 15-May-2013 [1992] | Your example should be == 3" I guess?" - actually, I had a: 1 and b: 1 originally, and I somehow "managed" to change B to 2 :-( |
Endo 15-May-2013 [1993] | Gregg: When use /REVERSE refinement it searches backwards from the current position. So I expect to find the /last "o" (in the negative direction) which is "oboco". aOboco the captial O is the LAST one in backward direction. I understand that the last "o" is still the right most one. But I expected the other one at first glance. |
Gregg 15-May-2013 [1994] | Understood. That would make it redundant with /REVERSE, rather than overriding it. |
DideC 17-May-2013 [1995x2] | To my understanding "find/last serie value" is the same thing than "find/reverse tail serie value". |
But it found the first value backward from the position, so "o" is correct result. | |
Endo 23-May-2013 [1997x2] | Which script do you suggest me to use for parsing XML files for R'? There are many on rebol.org. I mainly want XML to object, so I can export data from .xlsx file. XML to blocks might work but I may need to work on objects for more functionality. |
* for R2 | |
Geomol 23-May-2013 [1999x2] | If I remember correctly, you can't go 1 to 1 from xml to object. You can to block. I've only used my xml2rebxml.r, which produces a block. You could work from there, pull out the elements, you need, and produce an object. http://www.rebol.org/view-script.r?script=xml2rebxml.r |
The RebXML format is described here: http://www.fys.ku.dk/~niclasen/rebxml/rebxml-spec.html | |
Endo 23-May-2013 [2001] | Thank you Geomol. I saw AltXML from Christopher Ross-Gill, I'll try both. Thanks. |
Endo 27-May-2013 [2002x2] | Chris: is that normal? >> load-xml {<si><t xml:space="preserve">test</t></si>} == [ <si> [ <t> [ #space "preserve" %.txt "test" ] ] ] |
Why it puts %.txt ? | |
GrahamC 27-May-2013 [2004] | Chris is in Peru at present .. don't expect any answers soon. Unless you talk to him on SO chat |
Maxim 27-May-2013 [2005] | for sure, you want stuff to be tag pair aligned so you can easily loop through it... though I don't know why he uses the file type to mark tag content. probably just to differentiate it from attribute and tags |
AdrianS 27-May-2013 [2006] | Endo, that's just his notation for a text node - not meant to imply it's a file. |
Endo 28-May-2013 [2007x2] | I see, I just confused if it's a bug or not. >> load-xml {<a>test</a>} ; == [ <a> "test" ] >> load-xml {<a b="c">test</a>} ; == [ <a> [ #b "c" %.txt "test" ] ] |
Why this doesn't work? >> parse [1] [1] ;== false while this one works >> parse [a] ['a] ; == true | |
Cyphre 28-May-2013 [2009] | parse uses literal numbers for rules definition you need to use: parse [1][integer! (process-integer-here)] |
Endo 28-May-2013 [2010] | So, no chance to specify an exact number in a parse rule? |
Geomol 28-May-2013 [2011] | >> parse [1] [1 1 1] == true >> parse [1 1] [2 2 1] == true |
older newer | first last |