|REBOL 3 Docs||Guide||Concepts||Functions||Datatypes||Errors|
|TOC < Back Next >||Updated: 6-Feb-2009 Edit History|
A paren! datatype is a block that is immediately evaluated. It is identical to a block in every way, except that it is evaluated when it is encountered and its result is returned.
When used within an evaluated expression, a paren! allows you to control the order of evaluation:
print 1 + (2 * 3) 7
print 1 + 2 * 3 9
The value of a paren! can be accessed and modified in the same way as any block. However, when referring to a paren!, care must be taken to prevent if from being evaluated. If you store a paren in a variable, you will need to use a get-word form (:word) to prevent it from being evaluated.
Parens are a type of series, thus anything that can be done with a series can be done with paren values.
paren: first [(1 + 2 * 3 / 4)] print type? :paren paren!
print length :paren 7
print first :paren 1
print last :paren 4
insert :paren [10 + 5 *] probe :paren (10 + 5 * 1 + 2 * 3 / 4)
print paren 12.75
Parens are identified by their open and closing parenthesis. They can span multiple lines and contain any data, including other paren values.
The make function can be used to allocate a paren value:
paren: make paren! 10 insert :paren 10 insert :paren `+ insert :paren 20 print :paren 20 + 10
print paren 30
probe to-paren "123 456" (123 456)
probe to-paren [123 456] (123 456)
Use paren? to test the datatype.
blk: [(3 + 3)] probe pick blk 1 (3 + 3)
probe paren? pick blk 1 true
probe series? pick blk 1 true
Using form on a paren value creates a string from the contents contained in the paren:
probe form pick blk 1 3 + 3
|TOC < Back Next >||REBOL.com - WIP Wiki||Feedback Admin|