** Special Characters ** "" (stringification) pseudo-operator :::: 467 "" key :::: 501 $" special variable :::: 261, 306 $$ special variable :::: 155 $. special variable :::: 353 $/ special variable :::: 261, 361 $; special variable :::: 84 $;$ prototype :::: 338 $@ special variable :::: 430 $_ special variable :::: 142--43, 160 & notation in Linogram :::: 495 &@ prototype :::: 337 &;@ prototype :::: 338 && @rest condition :::: 211 (?!) regex lookahead operator :::: 363 * operator :::: 273, 389, 558 * quantifier :::: 436 * token :::: 376 ** operator :::: 426 + operator :::: 558 + quantifier :::: 436 + token :::: 376 -> operator :::: 176 . operator :::: 176 ; symbol in prototypes :::: 179 <...> operator :::: 187, 359, 360--65 <...> operator // as rudimentary parser :::: 359 <=> operator :::: 102, 108 == operator :::: 168, 177--78 == operator // for comparing objects :::: 477 ? quantifier :::: 436 @_, modification of :::: 91--92 [...] operator :::: 167 \ (backslash) operator :::: 84--85, 87, 179, 439, 449 \@$$ prototype :::: 293 \@\@ prototype :::: 178 | operator :::: 437 ||= operator :::: 106, 106--7 || operator :::: 103 ** A ** -a command-line option :::: 149 $a and $b variables :::: 345 Abelson, Harold :::: xv absolute zero :::: 475 abstract base class :::: 25, 478 abstract syntax tree (AST) :::: 57--58, 393, 400, 408, 437, 553--54, 557 abstraction of functionality :::: 16, 41, 225, 412 accessor method :::: 29, 477 actions :::: 44, 49--50, 53, 446 Adler, David :::: 145 agenda :::: 207--12, 365, 370, 380--81 agenda method, universality of :::: 217 aggregation :::: 19--20 airplane :::: 109 algorithm :::: 10, 11, 287, 471 aliasing :::: 70--71, 81, 92, 112 alternate universe :::: 116--17 alternation of parsers :::: 387--88 ambiguity in arithmetic expressions :::: 54 amortization :::: 310--13 anchor component of URL :::: 189, 199 anonymous array :::: 31, 50, 81 anonymous functions :::: 19, 76, 79, 86, 123, 258--59, 300, 327, 371, 398, 421, 453, 478 anonymous functions // debugger's treatment of :::: 415--16 append() :::: 162--63 argument isn't numeric warning :::: 108 argument normalizer, inlined cache manager with :::: 90--92 arithmetic expressions :::: 54, 376, 390--435 arithmetic expressions // overview :::: 390--400 arithmetic expressions // calculator :::: 400, 424--27 arithmetic expressions // debugging :::: 415--24 arithmetic expressions // generic-operator parsers :::: 412--15 arithmetic expressions // grammar for :::: 376 arithmetic expressions // left recursive :::: 400--8 arrays :::: 66, 179, 181 arrays // contrasted with iterators :::: 117--18 arrays // repeated copying of :::: 129--30 arrays // representation of database rows as :::: 165--66 arrays // looping over :::: 177--82 arrays // contrasted with linked lists :::: 257 arrow, definition in Linogram :::: 498 Ashton, Elaine :::: 145 assembly language :::: 314 associativity of operators :::: 257, 401--2, 426 AST (abstract syntax tree) :::: 57--58, 393, 393, 400, 408, 437, 553--54, 557 AST_to_string() function :::: 58 asymmetry, in Linogram parameter specifications :::: 559 atomic expression :::: 436 atomic features in Linogram :::: 494 atomic ray :::: 185 atoms in regexes :::: 436, 439 attribute–value pairs in HTML tags :::: 26 automatic profiling :::: 111--12 auxiliary parameter :::: 240 ** B ** \b regex metacharacter :::: 272, 439 backslash character :::: 84--85, 87, 179, 439, 449 backtracking :::: 207, 456--65 backtracking // in regex engine :::: 364 backtracking parsers :::: 456--65 backtracking parsers // overview :::: 456 backtracking parsers // continuations :::: 457--61 backtracking parsers // parse streams :::: 461--65 backup program :::: 206 bacteriophage :::: 135 bad link detector :::: 191, 192, 194 bad luck :::: 168--69 balanced parentheses :::: 287--88 barbarian :::: 206--7 base case :::: 3, 5, 8, 35, 211, 534 bear :::: 359--60 BEGIN block :::: 338--39, 346, 350--51, 353, 355--56, 502 beginner mode via alternative dispatch table :::: 49 behavior function :::: 480--81 behavior function in constraint system :::: 479, 480 Bell Labs :::: 563 BFS (breadth-first search) :::: 189, 200, 213--15 binary :::: 1--3, 239--41 binary search :::: 292--93 binding :::: 71--72 bio-informatics :::: 135--39 Bird, Richard :::: xv blessing :::: 356, 416, 466, 468--69 blocks :::: 72--73, 390 blocks // bare :::: 67--68 blocks // bare // as arguments to sort() function :::: 102 blocks // BEGIN :::: see BEGIN block blocks // disk :::: see disk blocks blocks // labelled, parser for :::: 541--42 boolean "not" operator :::: 354 Borges, Jorge Luis :::: 417 Boss, the :::: 80 box, definition in Linogram :::: 497 breadth-first search (BFS) :::: 189, 200, 213--15 browsers :::: 68 buffer :::: 363 bullet symbol :::: 441 Bunce, Tim :::: 164 Burke, Sean :::: xv--xvi, 29, 35 bytes :::: 19--20 ** C ** C programming language :::: xiii--xiv, 67, 75, 79--80, 105, 108--9, 153, 166, 344, 362, 365, 424, 501 C programming language // auto variables in :::: 6 C programming language // for loop :::: 173 C programming language // library of :::: 153, 155 C++ programming language :::: 25 /c regex modifier flag :::: 367 cache data, expiration of :::: 97--98 cache hit :::: 65, 90, 104, 107 cache hit // false :::: 84, 93, 107 cache management overhead :::: 65, 87, 101, 109 cache memory :::: 68, 108 cache miss :::: 65, 91, 95, 107 caching and memoization :::: 63, 65, 83, 90, 101, 268 caching and memoization // alternatives to :::: 101--8 caching and memoization // and recursion :::: 65--66 caching and memoization // benefits of speed :::: 109--13 caching and memoization // caveats :::: 80--84 caching and memoization // evangelism :::: 108--9 caching and memoization // inline caching :::: 66--68 caching and memoization // in object methods :::: 96--99 caching and memoization // key generation :::: 84--95 caching and memoization // Memoize module :::: 70--80 caching and memoization // persistent caches :::: 100--1 caching and memoization // quantitative analysis of :::: 65, 83--84, 90, 101 calculator :::: 54--61, 365--69, 400, 424--27, 435, 469 calculus :::: 302, 305, 314, 319 call frame :::: 231--32 call tree :::: 215--17, 220 callbacks :::: 10, 20, 23, 119, 127, 143--44, 158, 160, 181, 187--88, 190, 225, 227, 326, 371, 386 caller() function :::: 420 canonical form :::: 218--19 canonical order :::: 349--50 cantankerous grandfather :::: 228 cardioid :::: 490 Carp module :::: 186, 522, 532, 558 carriage return :::: 439 carrot :::: 162, 264, 275 CGI :::: 189, 197 CGI::Push module :::: 155 chained lexers :::: 368--74 character classes :::: 273, 281 CHDIR directive in configuration file :::: 42 chdir() function :::: 42 Christiansen, Tom :::: xiii, 129 chromosome :::: 135 chronologically() function :::: 104 chronological order :::: 102--6, 149, 299--300 CIA :::: 184--85 circle, definition in Linogram :::: 499 clauses in grammars :::: 376 cleverness :::: 211 clock, memoized :::: 82--83 clone method in URI::URL :::: 199 closedir() function :::: 15 closure :::: 76, 124, 326 closure property :::: 76--78 closure operator (*) :::: 273, 286 cmp operator :::: 105 CMYK :::: 63--64 code reference :::: 9--10, 41, 88, 159, see also closure, see also anonymous function code value (CV) :::: 75--77 coefficient :::: 317, 500, 508 college student, penurious :::: 206 combine() :::: 343--51 comma-separated list :::: 542, 555 comparator function :::: 101--2, 291--92, 350 compiler :::: 57 comp.lang.perl.misc newsgroup :::: 272 components :::: 27 compound interest :::: 310--13 compromise :::: 85 compulsive behavior :::: 453 concatenate() operator :::: 397--98 concatenation :::: 3, 273, 386--87 concatenation // of parsers :::: 386--87 concatenation // of regexes :::: 273, 275--79, 283--84, 320--21, 438 configuration table :::: 41--42, 47 CONSTANT object :::: 514--16 constant part of equation :::: 500--1, 503 constants :::: 483 constraint networks :::: 487 constraint systems :::: 472 Constraint class :::: 512--13 constraints section in Linogram specification :::: 549--50 Constraint_Set class :::: 513--14 _content key in HTML::TreeBuilder :::: 27 context :::: 104, 118--19, 159, 165, 182--83, 192, 193 context // Linogram evaluation environment :::: 557--60 continuation :::: 457--61 contradiction :::: 509--13 control-backslash character :::: 84 conversion, decimal to binary :::: 1--3 core dump :::: 75 cos() function :::: 313--14, 319 cosh() function :::: 320 cost-benefit ratio :::: 110 counting process :::: 131--32 CPAN :::: 104--5, 152, 324, 500 CPU :::: 68 crab cakes :::: 82 current matching position of scalar :::: 366--67 curry() function :::: 336, 484 Curry, Haskell B. :::: 327 currying :::: 326--31, 340--43, 346, 350, 353, 484 custom key generation :::: 94--95 cutsort() function :::: 292, 300 cutsorting :::: 288--300 cutsorting // log files :::: 293--300 cutting function :::: 290--91 CV (code value) :::: 75--77 cwd() function :::: 46 Cwd module :::: 46 ** D ** -d operator :::: 124 dangling symbolic link :::: 19, 23--24, 183, 325 database handle :::: 141 database query languages :::: 471 database-query parsing :::: 448--56 database-query parsing // overview :::: 448 database-query parsing // lexer :::: 448--51 database-query parsing // parser :::: 451--56 databases :::: 351--57, 448--56 databases // of cached values :::: 100--1, 111 databases // flat :::: 140--53 databases // SQL :::: 163--68 Data::Dumper module :::: 392 data structure :::: 84, 542 date format, ISO :::: 105 DB_File module :::: 100 DBI module :::: 163, 165--66, 168, 173 DBM :::: 101, 349 dead ends :::: 189 debugger :::: 154--55 debugging :::: 154--55, 415--17, 429, 475, 479, 551 decimal to binary conversion :::: 1--3 declarative programming :::: 471--563 declarative programming // overview :::: 471--72 declarative programming // linear equations :::: 488--90 declarative programming // local propagation networks :::: 472--88 declarative programming // local propagation networks // overview :::: 472--75 declarative programming // local propagation networks // implementing :::: 475--87 declarative programming // local propagation networks // problems with :::: 487--88 declarator in Linogram :::: 545, 548 default action for dispatch table :::: 52--54 Defenestration of Prague :::: 204 defined operator :::: 167 depth-first search :::: see DFS derivation of sentence :::: 377 derivative function :::: 305--6, 319, 320, 331 DESTROY method :::: 97 destructive function :::: 91, 262, 295 destructive method :::: 506, 511 DFS :::: 189, 200, 203, 212--15, 228--29, 383, 403 DFS // ambiguity of :::: 228 DFS // bound on size of agenda :::: 213 DFS // contraindications for :::: 213--14, 379, 403 DFS // recursion and :::: 126, 189, 203, 214, 217 DFS // web spiders and :::: 214, 379 diagnostic messages :::: 13, 42, 201, 260--61, 426, 476 diamond, definition in Linogram :::: 499 die(), throwing exceptions with :::: 430 differential calculus :::: 305, 319 Dijkstra, Edsger Wybe :::: 219 directives :::: 45--46 directory tree :::: 123, 161 directory walking, applications and variations of :::: 16--25 dirhandles :::: 13--15, 118 disk space :::: 15 diskettes :::: 206 dispatch tables :::: 41--61, 182, 438, 515--16, 520, 528, 551, 559 dispatch tables // overview :::: 41 dispatch tables // advantages of :::: 45--49 dispatch tables // calculator :::: 54--61 dispatch tables // configuration file handling :::: 41--54 dispatch tables // default actions :::: 52--54 division as inverse of multiplication :::: 482--83, 515--16 division by zero :::: 432, 481--82, 517 division of power series :::: 320--24 division of treasure :::: see partition problem do-it-yourself :::: 126 do-while loop :::: 243 domain name server :::: 68, 108 DONGS HLAGHAGHL :::: 386--87 doorbell :::: 386--87 drand48() function :::: 153 draw section in Linogram specification :::: 550--51, 553--54 drawables :::: 536--39, 550--51, 553--54 drawables list :::: 554 drawing function :::: 494--95, 537, 561 drunken fraternity brothers :::: 156 du command in Unix :::: 16 duration (of value) :::: 73--76 ** E ** -e command-line option :::: 149 -e operator :::: 19 each() operator :::: 182, 349 $elementfunc argument :::: 29, 59--61 email :::: 293--94, 363--64 email // address :::: 53--54, 294 email // header of :::: 363 empty list :::: 24--25, 36, 166, 179, 346--47, 385 empty string :::: 273, 285, 372, 438, 511 end tag in HTML :::: 26 Engineering Mathematics Handbook :::: 324 entropy :::: 156 environment :::: 76 Environment class :::: 538--39 epoch format :::: 295 eq operator :::: 169, 452 Equation class :::: 500--11 Equation::System class :::: 508--12 equations :::: equations // for Fibonacci numbers :::: 34 equations // inconsistent :::: 509--10 equations // linear :::: 488--513 equations // redundant :::: 508 equations // roots of :::: 301 equations // solving :::: 301, 489 equations // trivial (0=0) :::: 502 equivalence classes :::: 218--19 error diagnosis and recovery in parsing :::: 427--35 escape sequence :::: 85 eta-conversion :::: 389--90, 391--92, 423, 437 Euclid's algorithm :::: 231 eval operator :::: 46, 86--88, 339, 340, 430, 543 exaggeration :::: 35 exceptions :::: 430--32 exceptions // propagation of :::: 432 execute method in DBI module :::: 168 EXHAUSTED operator :::: 172--73 exhaustion :::: 122, 163, 189, 207, 209, 292, 350, 365, 370, 428, 459 exhaustion // explicit function for :::: 171--73 exhaustion // synthetic representation of :::: 167--73 exists operator :::: 107 exp() function :::: 320 expiration of cache data :::: 97--98, 101 explicit exhaustion function :::: 171--73 explicit specification of empty list value :::: 346 explicit stacks :::: 242--53 exponentiation operation :::: 425 Expression class :::: 554 expression parser :::: 55--56, 376, 381--84, 391--415 expressions :::: 376--77 expressions // in Linogram :::: 554--58 ** F ** -f operator :::: 13 @F special variable :::: 149 façade pattern :::: 170, 172--73 factor of arithmetic expression :::: 394 factorial function :::: 3--6, 241, 314--15, 324 fame and renown :::: 415 family tree :::: 489 Fcntl module :::: 142 features in Linogram :::: 490, 491--98, 520--21, 528--37 Fenchurch :::: 82 FETCH method :::: 184, 184--85 fetchrow_arrayref method in DBI module :::: 165, 168, 173, 174 Fibonacci numbers :::: 33--35, 65, 67, 243--53 Fibonacci numbers // eliminating recursion from calculation of :::: 243--53 fields in email message header :::: 363 fields in flat text database :::: 140, 148, 150 File::Basename module :::: 191 File::Find module :::: 126 File::ReadBackwards module :::: 152 file system :::: 12, 26 filehandle :::: 115--16, 186 filehandle // as iterator :::: 115--17 filehandle // iterator interface to :::: 139--40 filehandle // reading in while loop :::: 187 filehandle // tied :::: 186--87, 299 files :::: 12--13, 18, 23--24, 82, 127, 142 files // configuration :::: 41--52 files // for persistent caching :::: 100--1 files // GIF :::: 64 files // INI :::: 117 files // log :::: 148--53, 294--95 files // with octopuses :::: 161 filters and transforms :::: 157--63 fishing expedition :::: 109 flat databases :::: 148, 452 FlatDB module :::: 140--53, 356, 448 FlatDB::Iterator module :::: 150--52 flat-file database :::: 140, 140--48 floating-point numbers :::: 205--6 Flow chart :::: 157 foolishness :::: 80, 88, 287 forcing the promise :::: 258, 269 for loop, C-style :::: 173 foreach, using to loop over more than one array :::: 177--82 fork() function :::: 80 Fortran :::: 6 four-dimensional beings :::: 518 fractions :::: 231 fragment of URL :::: see "anchor component" FreezeThaw module :::: 85 Frege, Gottlob :::: 327 Frequently Asked Question :::: 1, 16, 129 fruit :::: 234 function calls, implementation of :::: 229 function factory :::: 70--71, 199, 259, 325, 385, 406--7 functional vs. object-oriented programming :::: 25--26 functions :::: functions // custom key generation, for impure functions :::: 94--95 functions // higher-order :::: 325, 333 functions // that return references :::: 81--82 functions // very fast functions :::: 83--84 functions // whose return values do not depend on their arguments :::: 80 functions // with reference arguments :::: 93 functions // with side effects :::: 80 Funes the Memorious :::: 417 ** G ** \G regex metacharacter :::: 366--67 /g regex modifier flag :::: 366 garbage collection :::: xiii, 15, 73, 77, 79 Gaussian elimination :::: 500, 502--12 GCD (Greatest Common Divisor) :::: 231 geeks :::: 310 General Electric :::: 69 generic-operator parsers :::: 412--15 Genomic sequence generator :::: 135--39 getc() function :::: 186 get_links method of HTML::LinkExtor module :::: 189--90 GIF file :::: 63--64 globs :::: 71, 186, 330, 332 glob() operator :::: 119 global filehandle :::: 48 global variables :::: 5, 47, 49, 142--43, 264, 345, 420--21, 454 global variables // effect on recursion :::: 5--6, 13--14 global variables // filehandles as :::: 13--14, 15, 46 global variables // hashes instead of :::: 51 global variables // random number generator as :::: 156 Goff, Jeff :::: 217 golden ratio :::: 35 golden_rectangle, definition in Linogram :::: 499 goto :::: 232, 243, 466 grammar :::: 376--80 Grasshopper :::: 188--201 greatest common divisor (GCD) :::: 231--33 grep() function :::: 333--35 grocery bags :::: 35 Guttman, Uri :::: 152 ** H ** hack :::: 84 hairy code :::: 414 Hall, Joseph :::: 106 Hamming problem :::: 269--72 Hamming, Richard W. :::: 269 hash :::: 20, 23, 27, 39, 51, 66--67, 83, 89, 112, 200, 235, 296, 479, 494--95, 512, 518, 561 hash // as dispatch table :::: 44 hash // cache :::: 64--67, 69, 71, 96, 101 hash // for canonicalizing value :::: 218 hash // iterator component of :::: 119, 182 hash // tied :::: 100, 416 hash // power set of :::: 235--36 hash key :::: 84, 93, 97 hash slice :::: 144 hash value computation :::: 83 head of linked list :::: 256, 375 header of email message :::: 363 header of flat-file database :::: 140 headers of HTML document :::: 30 hexadecimal :::: 96 hierarchical data :::: 12--15, 128, 203, 530 Hietaniemi, Jarkko :::: 234--35 high school :::: 300, 312, 489 higher-order functions :::: 325, 333 higher-order functions // currying :::: 325--57 higher-order functions // reduce() and combine() :::: 343--51 hline, definition in Linogram :::: 496 hoax :::: 69 Hoefler, Jonathan :::: 204 Hoefler Type Foundry :::: 204 hook :::: 171, 188, 201, see also callback HTML :::: 26--33, 59--61, 179, 188--89, 326--27 HTML::LinkExtor module :::: 188, 190 HTML::TreeBuilder module :::: 27, 27--29 HTTP :::: 150 httpd log file :::: 148--49 Human Genome Project :::: 135 hyperlinks :::: 188--97, 200, 214 ** I ** if-else tree :::: 42--44, 56, 59, 245 impure function :::: 94--95 INCLUDE directive in configuration file :::: 48 incrementing numerals :::: 132 India :::: 299 infinite loop :::: 3, 117, 308, 403, 477, 506 infinite sequence of integers :::: 260 infinite streams :::: 255--324 infinite streams // overview :::: 255 infinite streams // hamming problem :::: 269--72 infinite streams // lazy linked lists :::: 257--63 infinite streams // Newton-Raphson method :::: 300--13 infinite streams // power series :::: 313--24 infinite streams // recursive streams :::: 263--69 infinite streams // regex string generation :::: 272--300 infix form of expression :::: 54 ingenuity :::: 48, 68, 124--26, 134, 179, 207, 323 INI file :::: 117 inline caching :::: 66--68 inlined cache manager, with argument normalizer :::: 90--92 inlining :::: 86--88, 90--92, 106 internal stack :::: 125 intrinsic constraints :::: 520--22, 534--35 Intrinsic_Constraint_Set class :::: 521--22 Introduction to Functional Programming :::: xv i-number :::: 294 investment banking :::: 96--98, 106--7 IOU :::: 259--60 IRC :::: 16, 272 is_in() example :::: 93 is_scalar method :::: 531 is_special() function :::: 170 isa method :::: 88 ISO date format :::: 105 iteration, C model of :::: 173--74 iterators :::: 115--201 iterators // overview :::: 115 iterators // alternative interfaces to :::: 177--87 iterators // converting recursive functions to :::: 203--53 iterators // examples :::: 126--57 iterators // exhaustion of :::: 122 iterators // filehandle iterators :::: 139--40 iterators // filters and transforms of :::: 157--63 iterators // flat-file database :::: 140--48 iterators // for permutations :::: 128--35 iterators // genomic sequence generator :::: 135--39 iterators // homemade :::: 119--26 iterators // introduction :::: 115--19 iterators // kicking :::: 121, 157, 160, 185, 195 iterators // random number generators :::: 153--57 iterators // rewinding :::: 255 iterators // searching databases backwards :::: 148--53 iterators // semipredicate problem :::: 163--76 iterators // web spiders :::: 187--201 ** J ** jargon :::: 377 Junko :::: 82 ** K ** KEEPER label for HTML elements :::: 30--31, 326 key generation :::: 84--95 key generation // overview :::: 84--88 key generation // functions with reference arguments :::: 93 key generation // partitioning :::: 93--94 key-generation method :::: 85 keys() function :::: 119 kicking an iterator :::: 121, 157, 160, 185, 195 kindof() accessor in Linogram :::: 514 Kleene closure :::: 273 Knuth, Donald E. :::: 154, 309 ** L ** -l operator :::: 19 labeled block :::: 541--42 Latin :::: 80, 207 laws of programming :::: 43 lazy linked lists :::: 257--63 left-associative operator :::: 426 left recursion :::: 400--8, 403--4, 409 left-recursive grammar rules :::: 403--4 Leler, Wm :::: xvi lemniscate :::: 490 Leonardo of Pisa (Fibonacci) :::: 33 lexer, Perl's :::: 450--51 lexers :::: 365--75, 441--42, 448--51, 540 lexers // overview :::: 359--60 lexers // chained :::: 368--74 lexers // emulating <> operator :::: 360--65 lexers // peeking :::: 374--75 lexical analysis :::: see lexers lexical closure :::: 76 lexical filehandle :::: 48 lexical variables :::: 5--6, 14, 67, 73, 92, 418 lexicality :::: 72--73, 79 lexing :::: see lexers line, definition in Linogram :::: 494 linear equations :::: 488--90 linked lists :::: 255--57 linked lists // head :::: 256 linked lists // lazy :::: 257--63 linked lists // splicing into :::: 257 linked lists // tail :::: 256 linogram :::: 490--500 linogram // overview :::: 490--500 linogram // equations :::: 500--14 linogram // feature types :::: 530--39 linogram // missing features :::: 560--63 linogram // parser :::: 539--60 linogram // parser // overview :::: 539--40 linogram // parser // declarations :::: 545--54 linogram // parser // definitions :::: 543--44 linogram // parser // expressions :::: 554--60 linogram // parser // required extensions :::: 541--42 linogram // parser // programs :::: 543 linogram // scalar types :::: 531--32 linogram // %TYPES :::: 542 linogram // values :::: 514--30 linogram // values // overview :::: 514--16 linogram // values // constant values :::: 516--18 linogram // values // feature values :::: 520--21 linogram // values // feature-value methods :::: 527--30 linogram // values // intrinsic constraints :::: 521--22 linogram // values // synthetic constraints :::: 522--27 linogram // values // tuple values :::: 518--20 Lisp programming language :::: xiii--xiv, 107 list assignment as condition :::: 165--66 list context :::: 104, 119, 159, 165, 182--83, 192, 193 list expressions :::: 390 List::Util module :::: 343--47 literal regexes :::: 274 local() operator :::: 142--43, 160, 306 local propagation networks :::: 472--88 local propagation networks // overview :::: 472--75 local propagation networks // implementing :::: 475--87 local propagation networks // problems with :::: 487--88 log files :::: 148--53, 293--300, 348--49 log() function :::: 320 LOGFILE directive in configuration file :::: 42 lookahead assertions :::: 439 lookbehind assertions :::: 439 loop control operators :::: 243 love and admiration :::: 17 lowest-precedence operator :::: 437 ls command in Unix :::: 16 ls -R command in Unix :::: 16 Lucas, Edouard :::: 6 Luke the Hermit :::: 107 LWP::Simple module :::: 188--89, 201 ** M ** -M operator :::: 82--83 m//g operator :::: 119 Macdonald, John :::: 234 Machol, Richard Morris :::: 228 Macintosh :::: 206 magic variable :::: 184, 186 mailto URL :::: 200 maintenance programmers :::: 87 make_counter example :::: 77--79 malloc() function :::: 166 map() function :::: 124, 157--60, 262, 333--36, 345, 397, 521, 523 Marshall, Edward Waite :::: 69 marshalling :::: 69 mask function :::: 170, 172--73 Mastering Algorithms with Perl :::: 234, 293 Math::BigFloat (multiprecision floating-point library) :::: 307, 435 Math::BigRat module :::: 324 Math::Complex module :::: 435 mathematics geeks :::: 310 matrix transformations :::: 500 max() function in Scalar::Util module :::: 343--45 maxstr() function in Scalar::Util module :::: 344 MAYBE label for HTML elements :::: 30--31, 326 meaning of parsed input :::: 376, 384 meiosis :::: 261 memoize() function :::: 89, 111 Memoize module :::: 69--80, 83, 105 memoization :::: see caching and memoization memoized clock :::: 82--83 merging streams :::: 270--71, 274--75 Michie, Donald :::: 69 min() function :::: 343--44 minstr() function :::: 344 ML for the Working Programmer :::: xv monster module :::: 70 morphology :::: 359--60 mortgage :::: 310--13 Mozilla :::: 198 MSIE :::: 198 multiple-list iterator :::: 179 my declaration :::: 5, 13, 67, 72--73 my declaration // oddity in semantics of :::: 264 my variable :::: see lexical variables mystery :::: 185 ** N ** \n (newline) character :::: 362--63 -n command-line option :::: 149 %N hash for naming parsers :::: 416--23, 467 nasty regex :::: 287 nasty surprises :::: 142, 229, 335, 427 national security :::: 185 network server :::: 68, 94--95, 108, 148, 189 newline character :::: 261, 363, 441 newsgroups :::: 16, 272 Newton, Isaac :::: 301 Newton-Raphson method :::: 300--13 nextval method :::: 176 NEXTVAL operation :::: 115--16, 120--21, 171--73 90-10 rule :::: 110 nodes :::: 212--13, 215--17, 225--28 nodes // in AST :::: 393, 400 nodes // in HTML::TreeBuilder object :::: 27--29 nodes // of linked list :::: 256--63 nodes // in local propagation network :::: 472--74 nodes // of notional tree of sentential forms :::: 377, 380, 382, 403 nodes // in outline structure :::: 442--44 non-reentrant :::: 6 nonterminal symbols :::: 377 normalization of equations :::: 511 Norvig, Peter :::: xiii, xv null function :::: 24, 60 null pointer :::: 166 NULL value in SQL databases :::: 163, 165 numerals, canonical form for :::: 219 ** O ** O() notation :::: 103 object constructor methods :::: 75, 81, 184, 187, 501--2, 516, 518, 527 object identity, testing with == :::: 477 object methods, caching in :::: 96--99 object-oriented (OO) programming :::: 25--26, 75, 96--98 octopuses :::: 81--82, 127--28, 161 oddity :::: 24, 264 odometer method :::: 132--34, 138 OO (object-oriented) programming :::: see object-oriented programming open() function :::: 116 opendir() function :::: 13 operating system :::: 68, 82--83, 149--50 operator overloading :::: see overloading operator precedence :::: 357, 372, 393--94, 414--15, 437, 465 optimization :::: 81, 110--11, 171, 204, 209--11, 230--31, 240--41, 253, 322, 332 option checking :::: 201 optional item, parser for :::: 541 orcish maneuver :::: 106 Orwant, Jon :::: 234 out of scope :::: 15, 71--75, 92, 264 outlines :::: 440--48 overload module :::: 357, 467 overloading :::: 356, 416, 465--70 oxcart :::: 109 ** P ** pad :::: 73--77 Pair objects :::: 468 palindromes :::: 214--15 parabola :::: 301--3 Paradigms of Artificial Intelligence Programming :::: xiii, xv param declaration in Linogram :::: 560--62 parameter specifications in Linogram :::: 545--49, 552, 559--60 parameters :::: 560--61 parentheses :::: parentheses // balanced :::: 287--88 parentheses // disambiguating expressions :::: 54, 58, 437 parentheses // in output of parser :::: 393--94, 398 parentheses // in regex :::: 364 parse method in HTML::LinkExtor :::: 190 parser function :::: 551 parser operator :::: 390 parser, Perl's :::: 159, 360 Parser module :::: 384 parsing :::: 43, 117--18, 198, 199, 351, 359--470 parsing // overview :::: 359 parsing // arithmetic expressions :::: 390--435 parsing // backtracking parsers :::: 456--65 parsing // database-query parsing :::: 448--56 parsing // HTML :::: 27, 188--90 parsing // in general :::: 376--84 parsing // lexers :::: 359--75 parsing // Linogram specifications :::: 539--57 parsing // overloaded operators for :::: 465--70 parsing // recursive-descent parsers :::: 384--90 parsing // regexes :::: 435--40 partial sums :::: 316 partition problem :::: 35--39, 93--94, 204--12 partitioning :::: 35--39, 93--94 partitions of an integer :::: 217--25, 225--26 partitions of an integer // comparing :::: 224 pathfinder.com :::: 198 patterns :::: 131, 135, see also regexes Paulson, Lawrence :::: xv penurious college student :::: 206 performance :::: 63--64, 80, 93, 106, 110, 266--68, 332, 453 period of random-number generator :::: 154 Perl 6 :::: 176 Perl interactive debugger :::: 415 perldoc program :::: 112 permutations :::: 3--4, 128--35 persistent caches :::: 100--1 pi :::: 317--19, 426 pic program :::: 563 pipe :::: 117 plain text :::: 26 plumber :::: 206--7 plutonium :::: 94--95, 116 point, definition in Linogram :::: 494 polymorphism :::: 331 pop :::: 126, 223 POPDIR directive in configuration file :::: 46--47 pos() function :::: 366--67 postfix form :::: 54 postprocessing function :::: 544 PostScript :::: 494, 496 power series :::: 313--24 power series // overview :::: 313--19 power series // derivatives :::: 319 power series // symbolic computation :::: 320--24 power series expansion :::: 313--24 power set :::: 234 powers of 2 :::: 265--69 Prague, Defenestration of :::: 204 precedence :::: 357, 437, 465 precedence // in arithmetic expressions :::: 393, 415 predicate function :::: 107, 160--62, 194, 263, 333, 537 pre-emption :::: 223 preprocessor :::: 139 primitive features in Linogram :::: 491, 531--32 print(), as expression :::: 424 printer :::: 63 print statement :::: 9, 416 printf() function :::: 19 priority queue :::: 225, 228 private variables :::: see lexical variables probability :::: 65 productions in grammars :::: 376 profiler :::: 110--11 profiling :::: 110--12 Prolog programming language :::: 471 promise :::: 257--58 promise // forcing :::: 258, 269 propagation network :::: 485--86 prototypes :::: 123, 159, 178, 179, 236, 293, 304, 334, 337--43, 346 proxy server :::: 108 pruning :::: 213, 380, 382, 403 pseudo-random :::: 153 pun :::: 122, 374 punctuation, excessive :::: 144 pure functions :::: 82 pure virtual methods :::: 25 push() function :::: 126 PUSHDIR directive in configuration file :::: 46 ** Q ** q{...} syntax :::: 87 qmail mail system :::: 293--94, 299 quantification of regexes :::: 437 queue :::: 124--26, 127, 188, 192--93, 201 queue members :::: 193 qw(...) syntax :::: 150 ** R ** rabbits :::: 33--34 Rand() function :::: 153 rand() function :::: 153 random() function :::: 153 random number generation :::: 153--57 Raphson, Joseph :::: 301 readdir() function :::: 118 READLINE method :::: 187 reciprocal :::: 516--17 reciprocal // of power series :::: 323--24 recursion :::: 1 recursion // and caching :::: 65--66 recursion // as DFS :::: 215--17 recursion // elimination of :::: 229--53, 348 recursive-descent parsers :::: 384--90 recursive-descent parsers // overview :::: 384 recursive-descent parsers // compound operators :::: 388--90 recursive-descent parsers // parser operators :::: 386--88 recursive-descent parsers // very simple parsers :::: 384--86 recursive streams :::: 263--69, 280, 323 redo :::: 243 re-entrancy :::: 6, 48--49 reentrant function :::: 49 ref() function :::: 88, 501--2 ref($base) || $base technique :::: 501--2 refactoring :::: 222--23, 234--39, 241, 249--53, 328 reference arguments, functions with :::: 93 references :::: 9--10, 19, 41, 61, 71, 73--76, 88, 164--65, 467, 502, 554 references // comparing with == :::: 168--69, 178 references // from pad :::: 75, 76 references // functions returning :::: 81--82 references // functions accepting :::: 93 references // stringification of :::: 88, 93, 169, 415--16, 467 referrer, fake :::: 193 referring URL :::: 192 regex engine :::: 119, 471 regex string generation :::: 272--300 regexes :::: 119, 143, 272, 286, 361, 365--66, 368--69, 435--40, 471 regexes // as examples of declarative programming :::: 471 regexes // as lexers :::: 365 regexes // syntax of :::: 437 relaxation :::: 488 repetition of parser operation :::: 389--90 return-value parameter :::: 240 reverse() function :::: 135 RGB :::: 63--64 robot policy :::: 197 robots.txt file :::: 197--98 Roode, Eric :::: xvi, 178, 178--79 root feature :::: 490 root of equation :::: 301 ROOT type in Linogram :::: 542 round-off error :::: 305--6, 307--8, 322 RPN (reverse Polish notation) :::: 54--55 ** S ** -s operator :::: 12, 15 /s regex modifier flag :::: 450 s/// operator :::: 87 scalar :::: 9, 183--84, 366 scalar // tied :::: 184--85 scalar context :::: 118--19, 159, 183, 192 Scalar::Util module :::: 340 scale() function :::: 329--30 scaling operation :::: 271--72, 320--23, 329--30, 338--39, 503--5, 508, 511, 519--20, 523--24, 528--29 scanning :::: see lexers schema :::: 140, 142, 150 Schönfinkel, Moses :::: 327 Schwartz, Randal :::: xiii, xvi Schwern, Michael :::: 145 scope :::: 20, 67--68, 71--76, 92, 98, 264, 454 scope // vs. duration :::: 72--89 searching databases backwards :::: 148--53 secret weapon :::: 185 seed (of pseudo-random number generator) :::: 153 seek() function :::: 142, 148 self-referent stream definition :::: 263--69, 280, 323 semipredicate function :::: 107 semipredicate problem :::: 107, 124, 163, 170 sentences (in grammars) :::: 377 sentential form :::: 377 serialization :::: 69 set difference :::: 354--56 set_prototype() function :::: 340 shift() function :::: 126, 223 silly examples :::: 184--85, 346, 456--57 sin() function :::: 313--14, 319 sinh() function :::: 320 Sitaker, Kragen :::: xvi, 453 Slashdot :::: 334 slope :::: 302, 302, 331 sort() function :::: 101, 299, 345 sorting :::: 82, 101--6 sorting // partitions :::: 224 sorting // comparator functions :::: 101--4, 291--92, 350, 353 sorting // comparator functions // tiebreakers in :::: 103 sorting // to obtain canonical form :::: 219 soup, fish-dog-and-carrot :::: 275 spam :::: 363 special cases :::: 32, 110, 211, 236, 284, 345, 409, 455, 478, 505, 536, 556 splines :::: 562 split() function :::: 137, 364--65 sprintf() function :::: 1, 105--6 SQL :::: 163, 168, 471 sqrt() function :::: 300, 307 square, definition in Linogram :::: 498 square() function :::: 83 srand() function :::: 155 srand48() function :::: 155 srandom() function :::: 155 stack :::: 50, 55--56, 446--47 stack // call stack :::: 125--26, 229--31 stack // call stack // explicit simulation of :::: 38, 242--53 start symbol :::: 376--77 start tag in HTML :::: 26 stat() function :::: 294 statements as expressions :::: 424--25 static variables :::: 67--68, 124 Stein, Lincoln :::: 135 Storable module :::: 85, 89 STORE method :::: 184--85 streams :::: 259, 261--62, 333, 375 streams // merging :::: 270--71, 274--75 strftime() function :::: 297 strict 'vars' :::: 345 string :::: 96 string generator :::: 440 string literals, lexing :::: 449--50 stringification :::: 416, 467 Structure and Interpretation of Computer Programs :::: xv StrVal() function in overload module :::: 467 stub functions :::: 71--72, 75--76, 99, 112 subclass :::: 25 subdirectories :::: 12 sub-parser :::: 374 substr() :::: 341--42 subtraction as inverse of addition :::: 482--83 subtype definitions :::: 543 sum() function :::: 344--46 Sussman, Gerald Jay :::: xv Sybase :::: 145 symbolic links :::: 15, 19, 23--24, 183 symbolic links // dangling :::: 19, 23--24, 183, 325 symbolic references :::: 51, 550 symbol table :::: xiii, 70--71, 99, 112 symbols in grammars :::: 376--77 symbols, terminal vs. nonterminal :::: 377 syntactic equivalence of tokens :::: 436 syntactic sugar :::: 122, 123, 172, 259, 374 syntax :::: 176, 397 syntax // bizarre :::: 180 syntax // irregularity of Perl's :::: 453 syntax // obsession with :::: 176 synthetic constraints :::: 520--21, 522--27 Synthetic_Constraint_Set class :::: 522--25 system administrators :::: 149 systems programming :::: 152 ** T ** $^T special variable :::: 82--83 \t (tab) character :::: 450 tab character :::: 450 tac command in Unix :::: 152 _tag key in HTML::TreeBuilder :::: 27 tags :::: 26, 30--31, 44, 190 tai64n :::: 293, 295 tail of linked list :::: 256 tail-call elimination :::: 229 tangent function :::: 320 tangent line :::: 302 tautology :::: 508 tell() function :::: 148 Tels :::: 307, 324, 435 temperature conversion :::: 472--75, 483, 485--87 terminals :::: 377 terminal symbol :::: 377 terminator pattern :::: 362--65 term of arithmetic expression :::: 394 terms :::: 394 $textfunc argument :::: 29, 59--61 text object in Linogram :::: 561 thrashing :::: 129 three blind mice :::: 308 three-dimensional diagrams in Linogram :::: 518, 556 tie() operator :::: 100, 173, 184--87 tied hashes :::: 100, 416 TIEHANDLE method :::: 187 TIESCALAR method :::: 184 time() function :::: 82--83, 112, 113 Time::HiRes module :::: 112 times() function :::: 113 to-do list :::: see agenda tokens :::: 55--57, 137, 359--60 tokens // syntactic equivalence of :::: 436 tokenization :::: see lexers token-manufacturing function :::: 371--72, 451 Torkington, Nat :::: 129 tortoise and hare algorithm :::: 309 tourists :::: 76 Tower of Hanoi :::: 6--11 transcendental functions :::: 313, 409 transforms :::: see filters and transforms treasure :::: 35--39, 206--11 trees :::: 12--14, 26--27, 58, 212, 217, 377--80, 402--3, 440, 535 trees // iterator for searching :::: 225--29 trees // printing :::: 233--34, 242--43 trees // recursion as search of :::: 215--17 trees // traversal in various orders :::: 126 tricks :::: 86, 90, 107--8, 120, 137, 160, 179, 211, 312, 372, 416 trigonometry :::: 322, 489--90, 496 trivial equation (0=0) :::: 502 trivial stream :::: 259 Tuma, Jan J. :::: 324 tuples in Linogram :::: 491, 518--20, 525--30, 555--56, 558 Type class :::: 530--39 Type::Scalar class :::: 531--32 %TYPES hash in Linogram :::: 542--43 typesetting :::: 204 type specimen catalog :::: 204--5 ** U ** ugly code :::: 373 unary minus :::: 555 undef :::: 94, 160, 163--64, 167 undefined variables in calculator program :::: 426 union scale :::: 207 UNIVERSAL::isa() function :::: 88, 181, 258 Unix :::: 15, 117, 150, 294 Unix // epoch time format :::: 295 untagged text :::: 27 until loop :::: 233 upto() :::: 121--23, 259--60 URI::URL module :::: 199 URL :::: 188--93 URL // bad :::: 191 URL // fragment part :::: 199 URL // mailto :::: 200 URL // referring :::: 149, 192--93 user-agent :::: 198 user parameter to callback function :::: 49, 51, 60--61, 371, 386, 454 user interfaces :::: 16 user-supplied key generators, applications of :::: 89--90 ** V ** Value class :::: 515--16 Value::Constant class :::: 516--18, 558 Value::Feature class :::: 527--30, 535, 558--59 Value::Tuple class :::: 518--20 value of parsed input :::: 376, 384--85 values() function :::: 119 variables, static :::: 67--68 VERBOSITY directive :::: 42 virtual methods :::: 25 vline, definition in Linogram :::: 497 ** W ** Wadler, Philip :::: xv Wall, Larry :::: xiii, xvi, 145, 176 waste of time :::: 64, 104, 110, 129--30, 190, 197, 230, 265--68, 304, 307, 461 web browsers :::: 68, 108 web robots :::: see web spiders web server log :::: 148--50 web spiders :::: 187--201 web spiders // overview :::: 187--90 web spiders // DFS unsuitable for :::: 214 web spiders // pursuing only interesting links :::: 190--92 web spiders // referring URLs :::: 192--97 web spiders // robots.txt :::: 197--200 $whence argument to seek() :::: 142 while (caller()) loop :::: 420 while loop :::: 13, 187, 209 while loop // reading filehandle in :::: 187 while loop // that executes only once :::: 222 whitespace :::: 27, 441 wildcard :::: 136--37, 136--38 Windows :::: 117 WIRED magazine :::: 228 "without" operator :::: 354--56 wizard :::: 206--7 Wolf Book :::: 234, 293 Wong, Meng :::: xvi word boundary :::: 272, 439 Wrigley, Ave :::: 187 WWW::RobotRules module :::: 198--99 WWW::SimpleRobot module :::: 187--88, 200--1 WYSIWYG drawing system :::: 489 ** Y ** yes command in Unix :::: 117 Yukon Territory :::: 179 ** Z ** 0e0 trick :::: 107--8 "0 but true" :::: 108