Annotation of 43BSDReno/share/doc/ps2/07.fp/manCh2.rno, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1980 Regents of the University of California.
                      2: .\" All rights reserved.  The Berkeley software License Agreement
                      3: .\" specifies the terms and conditions for redistribution.
                      4: .\"
                      5: .\"    @(#)manCh2.rno  6.1 (Berkeley) 4/29/86
                      6: .\"
                      7: .NS 1 "System Description"
                      8: .sp
                      9: .NS 2 "Objects"
                     10: .sp
                     11: .pp
                     12: The set of objects \(*W consists of
                     13: the atoms and  sequences $fs$ (where the $x sub i memberOf OMEGA$).
                     14: (Lisp users should note the similarity to the list structure syntax,
                     15: just replace the parenthesis
                     16: by angle brackets and commas by blanks. There are no 'quoted' objects,
                     17: \*(IE 'abc).
                     18: The atoms uniquely determine the set of valid objects and consist of the 
                     19: numbers (of the type found in \s-2FRANZ LISP\s+2 [Fod80]), quoted ascii strings
                     20: ("abcd"), and unquoted alphanumeric strings (abc3).
                     21: There are three predefined atoms, $T$ and $F$, that correspond
                     22: to the logical values 'true' and 'false', and the undefined atom $bold "?"$,
                     23: \fIbottom\fP.
                     24: \fIBottom\fP denotes the value returned as the result of an
                     25: undefined operation, \*(EG division by zero.
                     26: The empty sequence, $<>$ is also an atom.  The following are examples
                     27: of valid FP objects:
                     28: .sp 2
                     29: .(b C
                     30: .TS
                     31: center;
                     32: l l l.
                     33: $?$    $1.47$  $3888888888888$ 
                     34: $ab$   "$CD$"  $<1,<2,3>>$
                     35: $<>$   $T$     $<a,<>>$
                     36: .TE
                     37: .)b
                     38: .sp 2
                     39: There is one restriction on object construction: no object may contain
                     40: the undefined atom, such an object is itself undefined, \*(EG
                     41: $<1,?>~==~?$.  This property is the
                     42: so-called \*(lqbottom preserving property\*(rq [Ba78].
                     43: .sp
                     44: .NS 2 "Application"
                     45: .sp
                     46: .pp
                     47: This is the single FP operation and is designated by the colon (":").
                     48: For a function $sigma$ and an object $x$, $sigma : x$  is an application
                     49: and its meaning is the object that results from applying $sigma$ to
                     50: $x$ (\*(IE evaluating $sigma (x)$).
                     51: We say that $sigma$ is the \fIoperator\fP and that $x$ is
                     52: the \fIoperand\fP.
                     53: The following are examples of applications:
                     54: .sp 2
                     55: .TS
                     56: center;
                     57: l c l l c l.
                     58: $bold + : <7,8>$       $==$    $15$    $bold tl :<1,2,3>$      $==$    $<2,3>$
                     59: \fB1\fP $: <a,b,c,d>$  $==$    $a$     \fB2\fP $: <a,b,c,d>$   $==$    $b$
                     60: .TE
                     61: .sp 2
                     62: .nr ii 0.35i
                     63: .NS 2 "Functions"
                     64: .sp
                     65: .pp
                     66: All functions (\fIF\fP) map objects into objects, moreover, they are 
                     67: \fIstrict\fP:
                     68: .sp 6p
                     69: .EQ I (2.1)
                     70: sigma^:^? equiv ?,~~ forAll ^sigma^ memberOf F
                     71: .EN
                     72: .sp 6p
                     73: To formally characterize the primitive functions,
                     74: we use a modification of McCarthy's conditional expressions [Mc60]:
                     75: .sp 6p
                     76: .EQ I (2.2)
                     77: p sub 1~->~ e sub 1~; ... ;~p sub n~->~ e sub n~;~e sub {n + 1}
                     78: .EN
                     79: .sp 6p
                     80: This statement is interpreted as follows:
                     81: return function $e sub 1$ if the predicate '$p sub 1$' is
                     82: true $,...,~e sub n$ if '$p sub n$' is true.
                     83: If none of the predicates are satisfied then default to $e sub {n + 1}$.
                     84: It is assumed that $x ,~x sub i ,~y ,~y sub i ,~z sub i memberOf OMEGA$.
                     85: .sp
                     86: .NS 3 "Structural"
                     87: .sp
                     88: .b "Selector Functions"
                     89: .(b M F
                     90: .sp
                     91: For a nonzero integer $mu$,
                     92: .sp
                     93: .nf
                     94: .ip "$bold mu~ : ~x~ ==$"
                     95: .sp 4p
                     96: \&$x = fs ~ andsign ~0~<~mu~<=~k ~->~ x sub mu ;$
                     97: .sp 4p
                     98: \&$x = fs ~ andsign ~-k <= mu  < 0 ~ ->  ~ x sub {k + mu + 1}; ~ ?$
                     99: .fi
                    100: .)b
                    101: .sp
                    102: .(b
                    103: .nf
                    104: .ip "$bold pick~ : ~<n,x>~ ==$"
                    105: .sp 4p
                    106: \&$x = fs ~ andsign ~0~<~n~<=~k ~->~ x sub n ;$
                    107: .sp 4p
                    108: \&$x = fs ~ andsign ~-k <= n  < 0 ~ ->  ~ x sub {k + n + 1}; ~ ?$
                    109: .fi
                    110: .)b
                    111: .sp 2
                    112: .pp
                    113: The user should note that the function 
                    114: symbols \fB1\fP,\fB2\fP,\fB3\fP$,...$ are
                    115: to be distinguished from the atoms $1,2,3,...$.
                    116: .(b M F
                    117: .sp
                    118: .ip "$bold last ~ : ~x~ ==$"
                    119: .sp 4p
                    120: \&$x = <> ~ ->  ~ <> ~ ;$
                    121: .sp 4p
                    122: \&$x = fs ~ andsign ~ k >= 1 ~ -> ~ x sub k ;~?$
                    123: .)b
                    124: .(b M F
                    125: .sp
                    126: .ip "$bold first ~ : ~x~ ==$"
                    127: .sp 4p
                    128: \&$x = <> ~ ->  ~ <> ~ ;$
                    129: .sp 4p
                    130: \&$x = fs ~ andsign ~ k >= 1 ~ -> ~ x sub 1 ;~?$
                    131: .)b
                    132: .sp
                    133: .(b M F
                    134: .b "Tail Functions"
                    135: .sp
                    136: .ip "$bold tl ~:~x ~==$"
                    137: .sp 4p
                    138: \&$x = <x sub 1 > ~ ->  ~ <> ~ ;$
                    139: .sp 4p
                    140: \&$x = fs ~ andsign  ~ k >= ~ 2 ~ -> ~<x sub 2 ~,..., ~x sub k > ~ ;~  ?$
                    141: .)b
                    142: .sp 6p
                    143: .(b M F
                    144: .ip "$bold tlr  ~ : ~  x~==$"
                    145: .sp 4p
                    146: \&$x = <x sub 1 >  ~ ->  ~ <> ~ ;$
                    147: .sp 4p
                    148: \&$x = fs  ~ andsign ~ k >= ~ 2 ~ -> ~ <x sub 1 ~ ,..., ~x sub {k - 1} > ~ ; ~ ?$
                    149: .)b
                    150: .sp
                    151: .pp
                    152: Note: There is also a function
                    153: \fBfront\fP that is equivalent to \fBtlr\fP.
                    154: .sp
                    155: .(b M F
                    156: .b "Distribute from left and right"
                    157: .sp
                    158: .ip "$bold distl ~:~x~==$"
                    159: .sp 4p
                    160: \&$x = <y,<>>~->~<>;$
                    161: .sp 4p
                    162: \&$x = <y, qz >~->~<<y,z sub 1 >,...,<y,z sub k >>;~?$
                    163: .)b
                    164: .sp 6p
                    165: .(b M F
                    166: .ip "$bold distr ~:~x~==$"
                    167: .sp 4p
                    168: \&$x = <<>,y>~->~<>;$
                    169: .sp 4p
                    170: \&$x = < qy , z >~->~<<y sub 1 , z >,...,<y sub k , z >>;~?$
                    171: .)b
                    172: .sp 6p
                    173: .(b M F
                    174: .b "Identity"
                    175: .sp 6p
                    176: $bold id ~:~x~==~x$
                    177: .)b
                    178: .sp 6p
                    179: $bold out ~:~x~==~x$
                    180: .pp
                    181: \fBOut\fP is similar to \fPid\fP.
                    182: Like \fBid\fP it returns its argument as the result,
                    183: unlike \fPid\fP
                    184: it prints its
                    185: result on \fIstdout\fP \(mi
                    186: It is the only function with a side effect.
                    187: \fPOut\fP is intended to be used for debugging only.
                    188: .sp
                    189: .(b M F
                    190: .b "Append left and right"
                    191: .sp
                    192: .nf
                    193: .ip "$bold apndl ~:~x~==$"
                    194: .sp 4p
                    195: \&$x = <y,<>>~->~<y>;$
                    196: .sp 4p
                    197: \&$x = <y, qz >~->~<y, z sub 1 ,~ z sub 2 ,...,~ z sub k  >;~?$
                    198: .)b
                    199: .sp 6p
                    200: .(b M F
                    201: .ip "$bold apndr ~:~x~==$"
                    202: .sp 4p
                    203: \&$x = <<>,z>~->~<z>;$
                    204: .sp 4p
                    205: \&$x = < qy , z >~->~< y sub 1 ,~ y sub 2 ,...,~ y sub k ,~z >;~?$
                    206: .fi
                    207: .)b
                    208: .sp
                    209: .(b M F
                    210: .b "Transpose"
                    211: .sp
                    212: .nf
                    213: .ip "$bold trans~:~x~==$"
                    214: .sp 4p
                    215: \&$x = <<>,...,<>>~->~<>;$
                    216: .sp 4p
                    217: \&$x = fs ~->~<y sub 1 ,..., y sub m >;~?$
                    218: .sp 8p
                    219: \&where $x sub i ~=~<x sub i1 ,..., x sub im >~andsign
                    220: ~ y sub j ~=~<x sub 1j ,..., x sub kj >,$
                    221: .sp 4p
                    222: \&$1<=i<=k ~,~ 1<=j<=m.$
                    223: .)b
                    224: .sp
                    225: .fi
                    226: .(b M F
                    227: .ip "$bold reverse~:~x~==~$"
                    228: .sp 4p
                    229: \&$x =<>~ ->;$
                    230: .sp 4p
                    231: \&$x = fs ~->~ <x sub k ,..., x sub 1 >;~?$
                    232: .)b
                    233: .sp
                    234: .(b M F
                    235: .b "Rotate Left and Right"
                    236: .sp
                    237: .nf
                    238: .ip "$bold rotl~:~x~==$"
                    239: .sp 4p
                    240: \&$x = <>~ -> ~ <>;~x = <x sub 1 >~->~<x sub 1 >;$
                    241: .sp 4p
                    242: \&$x = fs ~ andsign ~k >= 2~ -> ~ <x sub 2 ,..., x sub k , x sub 1 >;~?$
                    243: .)b
                    244: .sp
                    245: .(b M F
                    246: .ip "$bold rotr~:x~==$"
                    247: .sp 4p
                    248: \&$x = <>~ -> ~ <>;~x = <x sub 1 >~->~<x sub 1 >;$
                    249: .sp 4p
                    250: \&$x = fs ~ andsign ~k >= 2~ -> ~
                    251: <x sub k  ,~ x sub 1 ,..., x sub {k - 2},~ x sub {k - 1} >;~?$
                    252: .)b
                    253: .fi
                    254: .sp 2
                    255: .(b M F
                    256: .nf
                    257: .ip "$bold concat~:~x~==$"
                    258: .sp 4p
                    259: \&$x = <<x sub 11 ,..., x sub 1k >,<x sub 21 ,..., x sub 2n >
                    260: ,...,<x sub m1 ,..., x sub mp >> ~ andsign ~ k, ~m, ~n, ~p ~>~ 0 ~->$
                    261: \&$<x sub 11 ,..., x sub 1k , x sub 21 ,..., x sub 2n ,..., x sub m1 ,..., x sub mp >; ?$
                    262: .)b
                    263: .sp
                    264: .(b M F
                    265: .pp
                    266: Concatenate removes all occurrences of the null sequence:
                    267: .sp
                    268: .EQ I (2.3)
                    269: bold concat ~ :~ <<1,3>,<>,<2,4>,<>,<5>>  ~==~ <1,3,2,4,5>
                    270: .EN
                    271: .)b
                    272: .sp
                    273: .(b M F
                    274: .ip "$bold pair~:~x~==$"
                    275: .sp 4p
                    276: \&$x = fs ~ andsign ~ k >0 ~ andsign ~ k~is~even~->~ <<x sub 1 , x sub 2 >
                    277: ,..., <x sub k-1 , x sub k >>;$
                    278: .sp 4p
                    279: \&$x = fs ~ andsign ~ k >0 ~ andsign ~ k~is~odd~->~ <<x sub 1 , x sub 2 >
                    280: ,..., <x sub k >>;~?$
                    281: .)b
                    282: .sp
                    283: .(b M F
                    284: .ip "$bold split~:~x~==$"
                    285: .sp 4p
                    286: \&$x = <x sub 1 > ~->~<<x sub 1 > , <>>;$
                    287: .sp 4p
                    288: \&$x = fs ~ andsign ~ k > 1 ~ ->
                    289: ~<<x sub 1 ,..., x sub {left ceiling k/2 right ceiling} >,
                    290: <x sub {left ceiling k/2 right ceiling + 1} ,..., x sub k >>; ?$
                    291: .)b
                    292: .sp
                    293: .(b M F
                    294: .ip "\fBiota\fP$~:x~==$"
                    295: .sp 4p
                    296: \&$x = 0 ~->~ <>;$
                    297: .sp 4p
                    298: \&$x memberOf bold {N sup +} ~ ->~<1,2,...,x>;~?$
                    299: .)b
                    300: .sp
                    301: .NS 3 "Predicate (Test) Functions"
                    302: .sp
                    303: $bold atom~:~x~==~x~ memberOf atoms~-> ~ T ; ~ x$\(!=$? -> ~ F ;~ ?$
                    304: .sp
                    305: $bold eq ~:~x~==~x~=<y,z> ~ andsign ~ y=z ~ -> ~ T ;~x= <y,z> ~ andsign ~y$ \(!= $z ~->~ F ;~?$
                    306: .sp
                    307: .pp
                    308: Also less than ($bold <$), greater than ($bold >$),
                    309: greater than or equal (\fB>=\fP),
                    310: less than or equal (\fB<=\fP), not equal (\fB~=\fP);
                    311: \&'$bold =$' is a synonym for \fBeq\fP. 
                    312: .sp
                    313: $bold null ~ : x~==~x = <> ~ -> ~ T ;~x$\(!=$?~ -> ~ F ;~?$
                    314: .sp 6p
                    315: $bold length ~ :~ x~==~x~= ~ fs ~ -> ~ k; ~ x = <> ~ -> ~0; ~ ?$
                    316: .sp
                    317: .NS 3 "Arithmetic/Logical"
                    318: .sp
                    319: $bold +~:~ x ~ ==~ x = <y,z> ~ andsign ~y,z ~ are ~ numbers ~ ->~ y+z; ~ ?$
                    320: $bold -~:~ x ~ ==~ x = <y,z> ~ andsign ~y,z ~ are ~ numbers ~ -> ~y-z; ~ ?$
                    321: $bold *~:~ x ~ ==~ x = <y,z> ~ andsign ~y,z ~ are ~ numbers ~ -> ~y$\(mu$z; ~ ?$
                    322: \fB/\fP$~:~ x ~ ==~ x = <y,z> ~ andsign ~y,z ~ are ~ numbers ~ andsign 
                    323: ~z$\(!= $0 ~ ->~y$\(di$z ;~?$
                    324: .sp
                    325: .b "And, or, not, xor"
                    326: .sp
                    327: $nd~:~<x,y>~==~x = T ~->~ y;~x= F ~->~ F ;~?$
                    328: .sp 8p
                    329: $rr~:~<x,y>~==~x = F ~->~ y;~x= T ~->~ T ;~?$
                    330: .sp 8p
                    331: .(b M F
                    332: .nf
                    333: .ip "$bold xor~:~<x,y>~==$"
                    334: .sp 4p
                    335: \&$x = T ~ andsign ~ y = T ~->~ F ;~ x = F ~ andsign ~ y = F ~->~ F ;$
                    336: .sp 4p
                    337: \&$x = T ~ andsign ~ y = F ~->~ T ;~ x = F ~ andsign ~ y = T ~->~ T ;~?$
                    338: .fi
                    339: .)b
                    340: .sp 6p
                    341: $bold not~:~x~==~x= T ~->~F;~x= F~->~T ;~?$
                    342: .NS 3 "Library Routines"
                    343: .sp
                    344: $bold "sin"~:~x~==~x roman {~is~a~number} ~->~sin(x);~?$
                    345: .sp 8p
                    346: $bold "asin"~:~x~==~x roman {~is~a~number}
                    347: ~andsign~|x|~<=~1 ~->~sin sup {-1} (x);~?$
                    348: .sp 8p
                    349: $bold "cos"~:~x~==~x roman {~is~a~number} ~->~cos(x);~?$
                    350: .sp 8p
                    351: $bold "acos"~:~x~==~x roman {~is~a~number}
                    352: ~andsign~|x|~<=~1 ~->~cos sup {-1} (x);~?$
                    353: .sp 8p
                    354: $bold "exp"~:~x~==~x roman {~is~a~number} ~->~ e sup x;~?$
                    355: .sp 8p
                    356: $bold "log"~:~x~==~x roman {~is~a~positive~number} ~->~ ln(x);~?$
                    357: .sp 8p
                    358: $bold "mod"~:~<x,y>~==~ x nd y roman {~are~numbers} ~->~ x ~-~ y times
                    359: left floor x over y right floor ~;~?$
                    360: .sx 2
                    361: .sp
                    362: .NS 2 "Functional Forms"
                    363: .pp
                    364: Functional forms define new \fIfunctions\fP
                    365: by operating on
                    366: function and object \fIparameters\fP of the form.
                    367: The resultant expressions
                    368: can be compared and contrasted to the  \fIvalue\fP-oriented
                    369: expressions of traditional programming languages.
                    370: The distinction lies in the domain of
                    371: the operators; functional forms manipulate functions, while traditional
                    372: operators manipulate values.
                    373: .pp
                    374: One functional form is \fIcomposition\fP.  For two functions $phi$ and
                    375: $psi$ the form $phi ~ @ ~psi$ denotes their composition $phi ~$\*(cm$~ psi$:
                    376: .sp 4p
                    377: .EQ I (2.4)
                    378: ( phi ~@~ psi )~:~x~==~phi :( psi :x),~~ forAll ~~x memberOf OMEGA
                    379: .EN
                    380: .sp
                    381: The \fIconstant\fP function takes an object parameter:
                    382: .sp
                    383: .EQ I (2.5)
                    384: %x:y~==~y=?~->~?;~x,~~~ forAll ~~x,y~ memberOf OMEGA
                    385: .EN
                    386: .sp
                    387: The function $%?$ always returns ?.
                    388: .pp
                    389: In the following description of the functional forms, we assume that
                    390: $xi , ~xi sub i ,~sigma ,  ~sigma sub i ,~tau ,$ and $tau sub i$
                    391: are functions and that
                    392: $x,~x sub i ,~ y$ are objects.
                    393: .sp 2
                    394: .b "Composition"
                    395: .sp
                    396: $( sigma ~@~ tau ):x~==~sigma : ( tau : x)$
                    397: .sp 2
                    398: .b "Construction"
                    399: .sp
                    400: $[ sigma sub 1 ,..., sigma sub n ]:x~==~< sigma sub 1 : x,..., sigma sub n : x>$
                    401: .sp
                    402: Note that construction is also bottom-preserving, \*(EG
                    403: .sp 6p
                    404: .EQ I (2.6)
                    405: [ bold +, bold /]^:^<3,0>~=~<3,?>~=~?
                    406: .EN
                    407: .sp 2
                    408: .(b M F
                    409: .b "Condition"
                    410: .sp
                    411: .ip "$( xi~"->" ~sigma ;~tau ):x~==~$"
                    412: .sp 4p
                    413: \&$( xi : x) = T~->~sigma : x;$
                    414: .sp 4p
                    415: \&$~ ( xi : x)= F~ ->~tau :x;~?$
                    416: .)b
                    417: .sp 8p
                    418: .pp
                    419: The reader should be aware of the distinction between
                    420: \fIfunctional expressions\fP, in the variant of McCarthy's conditional
                    421: expression,
                    422: and the \fIfunctional form\fP introduced here.
                    423: In the former case the result is a \fIvalue\fP, while in the latter case
                    424: the result is a \fIfunction\fP.  Unlike Backus' FP, the conditional form
                    425: \fImust\fP be enclosed in parenthesis, \*(EG
                    426: .sp 6p
                    427: .EQ I (2.7)
                    428: roman {"(isNegative ->  - @ [%0,id] ; id")}
                    429: .EN
                    430: .sp 
                    431: .(b M F
                    432: .b "Constant"
                    433: .sp
                    434: $%x:y~==~y=?~->~?;~x,~~~~~~ forAll ~x memberOf OMEGA$
                    435: .sp
                    436: .)b
                    437: This function returns its object parameter as its result.
                    438: .sp
                    439: .(b M F
                    440: .b "Right Insert"
                    441: .sp 6p
                    442: .nf
                    443: .ip "$! bold sigma~:x~==$"
                    444: .sp 4p
                    445: \&$x = <>~->~e sub f : x;$
                    446: .sp 4p
                    447: \&$x=<x sub 1 >~->~x sub 1 ;$
                    448: .sp 4p
                    449: \&$x= fs ~ andsign ~k>2~->~ sigma :<x sub 1 ,~! sigma :<x sub 2 ,...,~x sub k >>;~?$
                    450: .sp 10p
                    451: \&\*(EG  $!+:<4,5,6> =15$.
                    452: .)b
                    453: .pp
                    454: If  $sigma$ has a right identity element $e sub f$,
                    455: then $! sigma :<>~=~ e sub f$, \*(EG
                    456: .sp 6p
                    457: .EQ I (2.8)
                    458: !+^:^<> =0 ~roman "and" ~!*^:^<> =1
                    459: .EN
                    460: .sp
                    461: Currently,
                    462: identity functions are defined for $+ \  (0),\  -  \  (0), \ *  \  (1),
                    463: \ /  \  (1)$,
                    464: also for \fBand\fP (T), \fBor\fP (F), \fBxor\fP (F).  All other unit functions
                    465: default to bottom (?).
                    466: .sp
                    467: .(b M F
                    468: .b "Tree Insert"
                    469: .sp 6p
                    470: .ip " \fB|\fP $sigma~:~x~==$"
                    471: .sp 4p
                    472: \&$x = <>~->~e sub f : x;$
                    473: .sp 4p
                    474: \&$x=<x sub 1 >~->~x sub 1 ;$
                    475: .sp 4p
                    476: .nf
                    477: \&$x= fs ~ andsign ~k>1~->$
                    478: .sp 4p
                    479: \&$bold sigma ~:~< $\fB|\fP$~ sigma~:~
                    480: <x sub 1 ,..., x sub {left ceiling k/2 right ceiling} >~,~
                    481: "\fB|\fP" ~ sigma ~:~<x sub {left ceiling k/2 right ceiling + 1}
                    482: ,..., x sub k >>; ?$
                    483: .sp 10p
                    484: \&\*(EG
                    485: .EQ I (2.9)
                    486: "\fB|\fP" +:<4,5,6,7> ~==~  +:<+:<4,5> , +:<6,7>> ~==~ 15
                    487: .EN
                    488: .sp
                    489: .fi
                    490: .)b
                    491: .sp
                    492: .pp
                    493: Tree insert uses  the same identity functions as right
                    494: insert.
                    495: .sp
                    496: .b "Apply to All"
                    497: .sp
                    498: .ip "\fB&\fP$^sigma :~x~==$"
                    499: .sp 4p
                    500: \&$x=<>~-><>;$
                    501: .sp 4p
                    502: \&$x= fs~->~< sigma : x sub 1 ,...,~sigma : x sub k >;~?$
                    503: .sp
                    504: .(b M F
                    505: .b "While"
                    506: .sp
                    507: .ip "(\fBwhile\fP$ ~xi~sigma ):x~==$"
                    508: \&$xi : x= T~->~($\fBwhile\fP$ ~xi~sigma ):( sigma : x);$
                    509: .sp 4p
                    510: \&$xi : x= F~->~x;~?$
                    511: .)b
                    512: .sp
                    513: .NS 2 "User Defined Functions"
                    514: .pp
                    515: An FP definition is entered as follows:
                    516: .sp 6p
                    517: .EQ I (2.10)
                    518: "{fn-name fn-form},"
                    519: .EN
                    520: .sp
                    521: where \fIfn-name\fP is an ascii string consisting of letters, numbers and the
                    522: underline symbol, and \fIfn-form\fP is any valid functional form, including
                    523: a single primitive or defined function.
                    524: For example the function
                    525: .sp
                    526: .EQ I (2.11)
                    527: "{factorial !* @ iota}"
                    528: .EN
                    529: .sp
                    530: .pp
                    531: is the non-recursive definition of
                    532: the factorial function.  Since FP systems are applicative it is permissible
                    533: to substitute the actual definition of a function for any reference to it
                    534: in a  functional  form: if $f ~==~ 1 @ 2$ then $f~:~x~==~1@2~:~x,~~~
                    535: forAll ~x memberOf OMEGA$.
                    536: .pp
                    537: References to undefined functions bottom out:
                    538: .sp
                    539: .EQ I (2.12)
                    540: f:x~==~? forAll x memberOf OMEGA ,~f^ notmemberof F
                    541: .EN
                    542: .sx 1
                    543: .bp
                    544: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.