procedure AddTabbyPDCO: PDCO to add tabby to treadling procedure AllparAER: PDAE for parallel evaluation with repeats procedure AltPDCO: PDCO to model alternation procedure BinopPDCO: PDCO to apply binary operation to sequences procedure CFapproxPDCO: PDCO for continued-fraction approximations procedure ComparePDCO: PDCO to compare sequences procedure ComplintPDCO: PDCO to generate integers not in sequence procedure CondPDCO: PDCO for generalized Lisp conditional procedure CumsumPDCO: PDCO to produce cumulative sum procedure CycleparAER: PDAE for parallel evaluation with cycling procedure DecimatePDCO: PDCO to decimate sequence procedure DecimationPDCO: PDCO to create decimation sequence procedure DecollatePDCO: PDCO to decollate sequence procedure DeltaPDCO: PDCO to generate difference sequence procedure ElevatePDCO: PDCO to elevate sequence procedure EveryPDCO: PDCO to model iteration procedure ExtendSeqPDCO: PDCO to extend sequence procedure ExtractAER: PDAE to extract values procedure FifoAER: PDAE for reversal of lifo evaluation procedure GaltPDCO: PDCO to concatenate sequences procedure GconjPDCO: PDCO for generalized conjunction procedure HistoPDCO: histogram procedure IncreasingPDCO: PDCO to filter out non-increasing values procedure IndexPDCO: PDCO to select terms by position procedure InterPDCO: PDCO to interleave sequences procedure LcondPDCO: PDCO for Lisp conditional procedure LengthPDCO: PDCO to produce length of sequence procedure LifoAER: PDAE for standard lifo evaluation procedure LimitPDCO: PDCO to model limitation procedure ListPDCO: list from sequence procedure LowerTrimPDCO: lower trimming procedure MapPDCO: PDCO to map values procedure OddEvenPDCO: PDCO to force odd/even sequence procedure PalinPDCO: PDCO to produce palindromic sequence procedure ParallelPDCO: synonym for Inter procedure ParallelAER: PDAE for parallel evaluation procedure PatternPalinPDCO PDCO to produce pattern palindrome procedure PeriodPDCO: PDCO for periodic part of sequence procedure PermutePDCO: PDCO for permutations procedure PivotPDCO: PDCO to generate pivot points procedure RandomPDCO: PDCO to generate from sequences at random procedure RepaltPDCO: PDCO to model repeated alternation procedure ReducePDCO: PDCO to reduce sequence using binary operation procedure RepeatPDCO: PDCO to repeat sequence procedure RemoveDuplPDCO: PDCO for remove duplicate values in a sequence procedure ReplPDCO: PDCO to replicate values in a sequence procedure ResumePDCO: PDCO to model limited iteration procedure ReversePDCO: PDCO to reverse sequence procedure RotatePDCO: PDCO to rotate sequence procedure SelfreplPDCO: PDCO to produce multiple of values in sequence procedure SeqlistPDCO: PDCO to return list of values procedure SimpleAER: PDAE for simple evaluation procedure SkipPDCO: PDCO to skip terms procedure SmodPDCO: generalized modular reduction procedure SpanPDCO: fill in gaps in integer sequences procedure SumlimitPDCO: PDCO to sum sequence to a limit procedure TrinopPDCO: PDCO to apply trinary operator to sequences procedure UndulantPDCO: PDCO to produce undulant procedure UniquePDCO: PDCO to filter out duplication values procedure UnopPDCO: PDCO to apply unary operation to sequence procedure UpperTrimPDCO: upper sequence trimming procedure ValrptPDCO: synonym for Repl procedure WobblePDCO: PDCO to produce sequence values alternately
link pdco
March 4, 2003; Ralph E. Griswold and Robert J. Alexander
Requires: co-expressions
This file is in the public domain.
These procedures use co-expressions to used to model the built-in
control structures of Icon and also provide new ones.
AddTabbyPDCO{e, i} adds tabby to treadling sequence
AllparAER{e1,e2, ...}
parallel evaluation with last result
used for short sequences
AltPDCO{e1,e2} models e1 | e2
BinopPDCO{op,e1,e2} produces the result of applying op to e1 and e2
CFapproxPDCO{e} produce sequence of approximations for the
continued-fraction sequence e
ComparePDCO{e1,e2} compares result sequences of e1 and e2
ComplintPDCO{e} produces the integers not in e
CondPDCO{e1,e2, ...}
models the generalized Lisp conditional
CumsumPDCO{e} generates the cumulative sum of the terms of e
CycleparAER{e1,e2, ...}
parallel evaluation with shorter sequences
re-evaluated
DecimatePDCO{e1, e2}
"decimate" e1 by deleting e2-numbered terms
(e2 is assumed to be an increasing sequence).
DecimationPDCO{e} produce a decimation sequence from e1 by
deleting even-valued terms and replacing
odd-valued terms by their position.
DecollatePDCO{e, i} decollate e according to parity of i
DeltaPDCO{e1} produces the difference of the values in e1
ElevatePDCO{e1, m, n}
elevate e1 mod n to n values
EveryPDCO{e1,e2} models every e1 do e2
ExtendSeqPDCO{e1,i} extends e1 to i results
ExtractAER{e1,e2, ...}
extract results of even-numbered arguments
according to odd-numbered values
FifoAER{e1,e2, ...} reversal of lifo evaluation
FriendlyPDCO{m, k, e3}
friendly sequence starting at k shaft mod m
GaltPDCO{e1,e2, ...}
produces the results of concatenating the
sequences for e1, e2, ...
GconjPDCO{e1,e2,...}
models generalized conjunction: e1 & e2 & ...
The programmer-defined control operation above shows an interesting
technique for modeling conjunction via recursive generative
procedures.
HistoPDCO{e,i} generates histogram for e limited to i terms;
default 100.
IncreasingPDCO{e} filters out non-increasing values in integer
sequence
IndexPDCO{e1,e2} produce e2-th terms from e1
InterPDCO{e1,e2, ...}
produces results of e1, e2, ... alternately
LcondPDCO{e1,e2, ...}
models the Lisp conditional
LengthPDCO{e} returns the length of e
LifoAER{e1,e2, ...} models standard Icon "lifo" evaluation
LimitPDCO{e1,e2} models e1 \ e2
ListPDCO{e,i} produces a list of the first i results from e
LowerTrimPDCO{e} lower trim
MapPDCO{e1,e2} maps values of e1 in the order they first appear
to values of e2 (as needed)
OddEven{e} forces odd/even sequence
PalinPDCO{e} x produces results of concatenating the
sequences for e and then its reverse.
ParallelPDCO{e1,e2, ...}
synonym for InterPDCO{e1, e2, ...}
ParallelAER{e1,e2, ...}
parallel evaluation terminating on
shortest sequence
PatternPalinPDCO{e, i}
produces pattern palindrome. If i is given,
e is truncated to length i.
PeriodPDCO{e, i} generates the periodic part of e; i values are
used to find the period
PermutePDCO{e1,e2} permutes each n-subsequence of e1 by the
n positional values in lists from e2. If a list does
not consist of all the integers in the range 1 to
n, "interesting" things happen (see the use
of map() for transpositions).
PivotPDCO{e, m} produces pivot points from e % m; m default 100
PosDiffPDCO{e1,e2} produces positions at which e1 and e2 differ
PositionsPDCO{e, i} generates the positions at which i occurs in e.
RandomPDCO{e1,e2, ...}
produces results of e1, e2, ... at random
ReducePDCO{op, x, e}
"reduces" the sequence e by starting with the value x
and repetitively applying op to the current
value and values from e.
RemoveDuplPDCO{e} removes duplicate adjacent values.
RepaltPDCO{e} models |e
RepeatPDCO{e1, e2} repeats the sequence for e1 e2 times
ReplPDCO{e1,e2} replicates each value in e1 by the corresponding
integer value in e2.
ResumePDCO{e1,e2,e3}
models every e1 \ e2 do e3
ReversePDCO{e, i} produces the results of e in reverse order. If i
is given, e is truncated to i values.
RotatePDCO(e, i) rotates the sequence for e left by i; negative
i rotates to the right
SelfreplPDCO{e1,i} produces e1 * i copies of e1
SeqlistPDCO{e1, i} produce list with first i values of e1; i
defaults to all values
SimpleAER{e1,e2, ...}
simple evaluation with only success or
failure
SkipPDCO{e1,e2} generate e1 skipping each e2 terms
SmodPDCO{e1,e2} reduce terms in e1 (shaft) modulus e2
SpanPDCO{e,m} fill in between consecutive (integer) values in
e % m; m default 100
SumlimitPDCO{e, i, j}
produces values of e until their sum exceeds
i. Values less than j are discarded.
TrinopPDCO{op,e2,e2,e3}
produces the result of applying op to e1, e2, and e3
UndulantPDCO{e} produces the undulant for e.
UniquePDCO{e} produces the unique results of e in the order
they first appear
UnopPDCO{e1,e2} produces the result of applying e1 to e2
UpperTrimPDCO{e} upper trim
ValrptPDCO{e1,e2} synonym for ReplPDCO
WobblePDCO{e} produces e(1), e(2), e(1), e(2), e(3), e(2), ...
Comments:
Because of the handling of the scope of local identifiers in
co-expressions, expressions in programmer-defined control
operations cannot communicate through local identifiers. Some
constructions, such as break and return, cannot be used in argu-
ments to programmer-defined control operations.