Dr. J. J. "One Eyed CrackerJack" Harbaugh 



-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of Tim Johnson
Sent: Friday, November 28, 2003 6:36 PM
To: [EMAIL PROTECTED]
Subject: [REBOL] Re: No return Value???



* Elan <[EMAIL PROTECTED]> [031128 13:42]:
> Hi Tim.
> 
> 1. You can use unset? to check for words that do not return values .

> >> unset? print ""
 
  Thanks for reminding me. 

> == true
>  >> if unset? print "" [result: "<<unset>>"]
> 
> 2. If you need to assign the return value of the tested function to 
> some
> local word, you can use set/any to avoid an error.
> 
> 3. Why doesn't print return a value? Wel;l, I suspect that is
because
> the purpose of print is to display its argument. If print were to
return 
> a value, it would not only be displaying its argument, it would
force 
> the REBOL interpreter to display print's return value as well. I.e.
you 
> would see a combination of the printed argument and print's return
value 
> on the screen. Instead of
>  >> print ""
> 
>  >>
> 
> which is the expected result, for instance, you would get
> 
>  >> print_with_return: func [arg] [ print arg return true ]  >> 
> print_with_return ""
> 
> == true
>  >>
> 
> BUT the argument to print was NOT "==true" it was "".
> 
> Hope this helps.
> 
> Elan
> 
> 
> Tim Johnson wrote:
> 
> >Hello Rebols:
> >I've got a question:
> >I've written a function called 'fetch, which has print
> >stubs to help follow the flow control.
> >
> >If you evaluate 'print with 'fetch, no value is
> >returned.
> >
> >Can someone tell me why this is so?
> >TIA
> >tim
> >
> >(example and code follows)
> >Example:
> >  
> >
> >>>do %test-fetch.r
> >>>      
> >>>
> >Script: "Untitled" (none)
> >  
> >
> >>>fetch 'abc
> >>>      
> >>>
> >type = 'word
> >val is unset
> >returning unset words as default value
> >== none
> >  
> >
> >>>fetch 'print
> >>>      
> >>>
> >type = 'word
> >val is set
> >
> >The code for 'fetch and helper function 'safe-reduce
> >follows:
> >REBOL[]
> >; 
>
>---------------------------------------------------------------------
----------
> >make object! [
> >    default-value: none
> >    set 'fetch func[ {safe data retrieval. Handles any value} 
> >             val [any-type!] 
> >             /seed {set default value} /deep {If block, reduce} 
> >             /same {If unset return 'val}
> >             /local tmp][
> >             either word? val[
> >                     print "type = 'word"
> >                     either value? val[
> >                             print "val is set"
> >                             get val
> >                             ][
> >                             print "val is unset"
> >                             either same[
> >                                     print "returning unset word as
the word"
> >                                     val
> >                                     ][
> >                                     print "returning unset words
as default value"
> >                                     default-value
> >                                     ]
> >                             ]
> >                     ][ ; any other type but 'word
> >                     print ["type = " (type? val)]
> >                     either block? val[
> >                             either deep[
> >                                     safe-reduce/deep val
> >                                     ][
> >                                     safe-reduce val
> >                                     ] 
> >                             ][
> >                             val
> >                             ]
> >                     ] 
> >             ]
> >     ]
> >;
----------------------------------------------------------------------
---------
> >safe-reduce: function[blk[block!] {reduce block, leaving unset
values}
> >     /deep {reduce nested blocks} ][rblk _reduce][
> >     dummy: func[val /deep][val]   ; pass    
> >     ; below a function assignment using the prefix colon
> >     _reduce: either deep[:safe-reduce][:dummy]      
> >     ; since 'reduce is a native value (compiled into binary)
> >     ;   try it first
> >     either all[(not deep) (rblk: attempt[reduce blk])][
> >             print "Used native 'reduce"
> >             rblk
> >             ][
> >             print "Block with unset values, using 'safe-reduce"
> >             rblk: make block! length? blk
> >             foreach element blk[
> >                     either word? element[
> >                             either value? element[
> >                                     append rblk (get element)
> >                                     ][
> >                                     append rblk element
> >                                     ]
> >                             ][
> >                             either block? element[
> >                                     append/only rblk _reduce/deep
element
> >                                     ][
> >                                     append rblk element
> >                                     ]
> >                             ]
> >                     ]
> >             rblk
> >             ]
> >     ]
> >  
> >
> 
> 
> 
> --
> To unsubscribe from this list, just send an email to
> [EMAIL PROTECTED] with unsubscribe as the subject.

-- 
Tim Johnson <[EMAIL PROTECTED]>
      http://www.alaska-internet-solutions.com
-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to