Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Help

From: emekamicro:gmai:l at: 13-Sep-2010 20:28

Tim, Thanks so much! Regards, Emeka On Mon, Sep 13, 2010 at 8:06 PM, Tim Johnson <tim-johnsons-web.com> wrote:
> Emeka, I noticed that I introduced some errors into the > console session that I copied below, so I have removed > those errors because I am afraid that I may confuse you. > I.E. disregard my previou email and concentrate on this > one. > cheers > tim > * Emeka <emekamicro-gmail.com> [100910 02:43]: > > Tim, > > > > Thanks so much! > > > > If you won't mind could you throw more light on this: > > "Also, I recommend that you familiarize yourself with > > the rebol function interface dialect." > > > > > > I would like to see examples. > Here's a start: > Go to http://www.rebol.com/rebolsteps.html > Do a search on "dialect" > You should see the following statement: > """ > You have already seen some simple dialects. For instance, the list > of arguments to a function is a dialect that can contain many > variations other than those which have been shown here > """ > Now go here: > http://www.rebol.com/docs/core23/rebolcore-9.html > Look for the link Titled: > "3.1 Interface Specifications" > To further edify yourself, write some functions for yourself > Example: > >> test: func[a[integer! decimal!]][?? a] > >> test 1 > a: 1 > == 1 > >> test 2.3 > a: 2.3 > == 2.3 > >> test "abc" > ** Script Error: test expected a argument of type: integer decimal > ** Near: test "abc" > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > Now here is the tricky part, but *I* think that it is *very* > important that you understand this part > ============================================================ > In rebol a subroutine: of which there are several *and* you can > "roll your own" - are not compiled into the rebol binary but are > themselves written in rebol. > Your can do the follow right from the rebol command line > ============================================================ > >> source function > function: func [ > "Defines a user function with local words." > spec [block!] {Optional help info followed by arg words (and optional > type and string)} > vars [block!] "List of words that are local to the function" > body [block!] "The body block of the function" > ][ > make function! head insert insert tail copy spec /local vars body > ] > >> source func > func: func [ > "Defines a user function with given spec and body." > [catch] > spec [block!] {Help string (opt) followed by arg words (and opt type and > string)} > body [block!] "The body block of the function" > ][ > throw-on-error [make function! spec body] > ] > >> source has > has: func [ > {A shortcut to define a function that has local variables but no > arguments.} > locals [block!] > body [block!] > ][function [] locals body] > >> source does > does: func [ > {A shortcut to define a function that has no arguments or locals.} > [catch] > body [block!] "The body block of the function" > ][ > throw-on-error [make function! [] body] > ] > >> > ============================================================ > In fact, I have written my own rebol subroutine call 'def, which > like a python def construct, automatically generates local > variables, and I just about always use 'def for global subroutines. > HTH > regards > tim > > > > > Regards, > > Emeka > > > > On Thu, Sep 9, 2010 at 8:28 PM, Tim Johnson <tim-johnsons-web.com> > wrote: > > > > > > > > * Emeka <emekamicro-gmail.com> [100909 09:59]: > > > > Hello All, > > > > > > > > I have the below solution, but I want something better. > > > > > > > > > > > > Ismember?: func[my-list start-n n t-element][ > > > > first-element: first at my-list start-n > > > > if t-element = first-element [return true] > > > > if start-n = n [return false] > > > > Ismember? my-list ADD start-n 1 n t-element > > > > ] > > > The last line: > > > > Ismember? my-list ADD start-n 1 n t-element > > > > > > would be better coded: > > > Ismember? my-list (ADD start-n 1) n t-element > > > for readability, precedence and disclosure of intent. > > > > > > Also, I recommend that you familiarize yourself with > > > the rebol function interface dialect. > > > > > > IOWS, you can control the data sent to the function > > > by specifying the datatypes of the arguments > > > > > > Example: > > > Ismember?: func[my-list[block!] start-n[integer!] n[integer!] > > > t-element[any-type!]][ > > > ;; .... code here > > > ] > > > This approach has at least two advantages: > > > 1)Clarifies the intent of the function > > > 2)Generates error messages at the function call rather than > > > somewhere down the road where some side effect kicks in as > > > a result of an unintended argument type. > > > > > > I hope this helps. If I have confused the issue more, :) I can > > > elaborate. > > > tim > > > > > > > On Thu, Sep 9, 2010 at 6:38 PM, Emeka <emekamicro-gmail.com> wrote: > > > > > > > > > > > > > > Hello All, > > > > > > > > > > Which word would I use for something like this? I have a block [ A > B C > > > D] , > > > > > I would like to do > > > > > Ismember? [A B C D] D comes true because D is in the block already > , > > > but > > > > > Ismember?{A B C D] F comes false. > > > > > > > > > > > > > > > Regards, > > > > > Emeka > > > > > > > > > > -- > > > > > *Satajanus Nig. Ltd > > > > > > > > > > > > > > > * > > > > > > > > > > > > > > > > > > > > > -- > > > > *Satajanus Nig. Ltd > > > > > > > > > > > > * > > > > > > > > > > > > -- > > > > To unsubscribe from the list, just send an email to > > > > lists at rebol.com with unsubscribe as the subject. > > > > > > > > > > -- > > > Tim > > > tim at johnsons-web.com or akwebsoft.com > > > http://www.akwebsoft.com > > > -- > > > To unsubscribe from the list, just send an email to > > > lists at rebol.com with unsubscribe as the subject. > > > > > > > > > > > > -- > > *Satajanus Nig. Ltd > > > > > > * > > > > > > -- > > To unsubscribe from the list, just send an email to > > lists at rebol.com with unsubscribe as the subject. > > > > -- > Tim > tim at johnsons-web.com or akwebsoft.com > http://www.akwebsoft.com > -- > To unsubscribe from the list, just send an email to > lists at rebol.com with unsubscribe as the subject. >
-- *Satajanus Nig. Ltd *