```Search                        Top                                  Index
```
```HELP PERCENT                                       Steven Hardy Mar 1982

The percent symbol, %, has a number of different uses in POP-11. (For a
detailed tutorial introduction, see TEACH *PERCENT.)

CONTENTS - (Use <ENTER> g to access required sections)

-- Use 1: Evaluating structure constants
-- Use 2: Partial application
-- Use 3: Dynamic local expressions

-- Use 1: Evaluating structure constants ------------------------------

The first use is in structure constants. Normally, structure constants
are unevaluated, so, for example:

[the sum of 3 and 4 is 3 + 4] =>
** [the sum of 3 and 4 is 3 + 4]

Surrounding part of a structure constant with percents causes it to be
evaluated, for example:

[the sum of 3 and 4 is %3 + 4%] =>
** [the sum of 3 and 4 is 7]

Any number of expressions can be surrounded by percents, but they must
then be separated with commas. So, for example, the following two
expressions are equivalent:

[%x% %y%]
[%x, y%]

Whereas
[%x y%]

will produce the same syntactic error message as

x y

If an expression surrounded by percents produces more than one result
(i.e. it leaves more than one thing on the stack), then all the results
go into the structure, for example:

[%10 // 3%] =>
** [1 3]

Percents may be used in vector expressions as well as list expressions:

{a vector with % 3 + 2 % items } =>
** {a vector with 5 items}

And with -cons_with-, as in the following expression to construct a
string of characters:

vars char;
cons_with consstring {%for char from 65 to 75 do char endfor %} =>
** ABCDEFGHIJK

(See HELP * ASCII for the representation of character codes).

For more examples of the use of % see TEACH * PERCENT.

If the percent symbol is used in a string expression it is taken as
part of the string:

'a b c % d e f % g h' =>
** a b c % d e f % g h

-- Use 2: Partial application -----------------------------------------

The second use of percents is to provide partial application. The
expression:

foo(%a, b%)

creates a 'closure' of -foo-, that is a new procedure in which the last
two arguments of -foo- have -a- and -b- as 'frozen' values. The same
thing is done by the following:

partapply(foo, [%a, b%])

or

consclosure(foo, a, b, 2)

HELP *CLOSURES  --- A summary of closures in POP-11
HELP *PARTAPPLY --- A summary of partial application in POP-11

REF *PROCEDURE  --- Details on procedures in POP-11

-- Use 3: Dynamic local expressions -----------------------------------

Percent symbols can be used with -dlocal- to indicate actions to be
taken on procedure entry and exit, including abnormal entry or exit such
as use of -chain-, or running or resuming processes. For further details
see HELP * DLOCAL

--- C.all/help/percent -------------------------------------------------