/usr/share/doc/axiom-doc/hypertex/glossarypage.xhtml is in axiom-hypertex-data 20120501-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 | <?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:m="http://www.w3.org/1998/Math/MathML">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="us-ascii"/>
<title>Axiom Documentation</title>
<style>
html {
background-color: #ECEA81;
}
body {
margin: 0px;
padding: 0px;
}
div.command {
color:red;
}
div.center {
color:blue;
}
div.reset {
visibility:hidden;
}
div.mathml {
color:blue;
}
input.subbut {
background-color:#ECEA81;
border: 0;
color:green;
font-family: "Courier New", Courier, monospace;
}
input.noresult {
background-color:#ECEA81;
border: 0;
color:black;
font-family: "Courier New", Courier, monospace;
}
span.cmd {
color:green;
font-family: "Courier New", Courier, monospace;
}
pre {
font-family: "Courier New", Courier, monospace;
}
</style>
<style>
div.glabel { color:blue; }
div.gsyntax { color:blue; }
div.gspad { color:blue; }
div.gfunction { color:blue; }
div.gtype { color:blue; }
div.gcmd { color:blue; }
</style>
</head>
<body>
<div align="center"><img align="middle" src="doctitle.png"/></div>
<hr/>
<ul>
<li><a name="p0" class="glabel"/><b>!</b>
<div class="gsyntax">(syntax)</div> Suffix character for
<a href="#p14365">destructive operations</a>.
</li>
<li><a name="p74" class="glabel"/><b>,</b>
<div class="gsyntax">(syntax)</div> a separator for items in a
<a href="#p50262">tuple</a>, e.g. to separate arguments of a function
<div class="gspad">f(x, y)</div>.
</li>
<li><a name="p210" class="glabel"/><b>=></b>
<div class="gsyntax">(syntax)</div> the expression
<div class="gspad">a => b</div> is equivalent to
<div class="gspad">if a then</div> <a href="#p19348">exit</a>
<div class="gspad">b</div>.
</li>
<li><a name="p317" class="glabel"/><b>?</b>
<ol>
<li>
<div class="gsyntax">(syntax)</div> a suffix character for
Boolean-valued <div class="gfunction">function</div> names,
e.g. <div class="gfunction">odd?</div>.
</li>
<li>
Suffix character for pattern variables.
</li>
<li> The special type <div class="gspad">?</div> means
<div class="gsyntax">don't care</div>. For example, the declaration
<div align="center" class="gspad">x : Polynomial ?</div> means that
values assigned to <div class="gspad">x</div> must be polynomials over
an arbitrary <a href="#p51532">underlying domain</a>.
</li>
</ol>
</li>
<li><a name="p725" class="glabel"/><b>abstract datatype</b>
a programming language principle used in Axiom where a datatype is
defined in two parts: (1) a <div class="gsyntax">public</div> part
describing a set of <a href="#p20171">exports</a>, principally operations
that apply to objects of that type, and (2) a
<div class="gsyntax">private</div> part describing the implementation of
the datatype usually in terms of a <a href="#p44277">representation</a> for
objects of the type. Programs which create and otherwise manipulate objects
of the type may only do so through its exports. The representation and
other implementation information is specifically hidden.
</li>
<li><a name="p1287" class="glabel"/><b>abstraction</b>
described functionally or conceptually without regard to implementation
</li>
<li><a name="p1362" class="glabel"/><b>accuracy</b>
the degree of exactness of an approximation or measurement. In computer
algebra systems, computations are typically carried out with complete
accuracy using integers or rational numbers of indefinite size. Domain
<div class="gtype">Float</div> provides a function
<div class="gfunction">precision</div> from
<div class="gtype">Float</div> to change the precision for floating point
computations. Computations using <div class="gtype">DoubleFloat</div>
have a fixed precision but uncertain accuracy.
</li>
<li><a name="p1794" class="glabel"/><b>add-chain</b>
a hierarchy formed by <a href="#p16819">domain extensions</a>. If domain
<div class="gspad">A</div> extends domain <div class="gspad">B</div> and
domain <div class="gspad">B</div> extends domain <div class="gspad">C</div>,
then <div class="gspad">A</div> has <div class="gsyntax">add-chain</div>
<div class="gspad">B</div>-<div class="gspad">C</div>.
</li>
<li><a name="p1993" class="glabel"/><b>aggregate</b>
a data structure designed to hold multiple values. Examples of aggregates
are <div class="gtype">List</div>, <div class="gtype">Set</div>,
<div class="gtype">Matrix</div> and <div class="gtype">Bits</div>.
</li>
<li><a name="p2150" class="glabel"/><b>AKCL</b>
Austin Kyoto Common LISP, a version of
<a href="#p30645"><div class="gspad">KCL</div></a> produced by
William Schelter, Austin, Texas.
</li>
<li><a name="p2267" class="glabel"/><b>algorithm</b>
a step-by-step procedure for a solution of a problem; a program
</li>
<li><a name="p2335" class="glabel"/><b>ancestor</b>
(of a domain) a category which is a <a href="#p38095">parent</a> of the
domain, or a <a href="#p38095">parent</a> of a
<a href="#p38095">parent</a> and so on.
</li>
<li><a name="p2473" class="glabel"/><b>application</b>
<div class="gsyntax">(syntax)</div> an expression denoting "application"
of a function to a set of <a href="#p2885">argument</a> parameters.
Applications are written as a <a href="#p38004">parameterized form</a>.
For example, the form <div class="gspad">f(x, y)</div> indicates the
"application of the function <div class="gspad">f</div> to the tuple of
arguments <div class="gspad">x</div> and <div class="gspad">y</div>".
See also <a href="#p19167">evaluation</a> and
<a href="#p29675">invocation</a>.
</li>
<li><a name="p2852" class="glabel"/><b>apply</b>
See <a href="#p2473">application</a>.
</li>
<li><a name="p2885" class="glabel"/><b>argument</b>
<ol>
<li>
(actual argument) a value passed to a function at the time of a
<a href="#p22911">function</a> call application; also called an
<div class="gsyntax">actual parameter</div>.
</li>
<li>
(formal argument) a variable used in the definition of a function
to denote the actual argument passed when the function is called.
</li>
</ol>
</li>
<li><a name="p3173" class="glabel"/><b>arity</b>
<ol>
<li>
(function) the number of arguments.
</li>
<li>
(operator or operation) corresponds to the arity of a function
implementing the operator or operation.
</li>
</ol>
</li>
<li><a name="p3322" class="glabel"/><b>assignment</b>
<div class="gsyntax">(syntax)</div> an expression of the form
<div class="gspad">x := e</div>, meaning "assign the value of
<div class="gspad">e</div> to <div class="gspad">x"</div>. After
<a href="#p19167">evaluation</a>, the <a href="#p52894">variable</a>
<div class="gspad">x</div> <a href="#p39600">pointer</a> to an object
obtained by evaluating the expression <div class="gspad">e</div>. If
<div class="gspad">x</div> has a <a href="#p50664">type</a> as a result
of a previous <a href="#p12903">declaration</a>, the object assigned to
<div class="gspad">x</div> must have that type. An interpreter must often
<a href="#p9572">coercion</a> the value of <div class="gspad">e</div>
to make that happen. For example, in the interpreter,
<div align="center" class="gspad">x : Float := 11</div> first
<a href="#p12903">declaration</a> <div class="gspad">x</div> to be a float.
This declaration causes the interpreter to coerce 11 to 11.0 in order to
assign a floating point value to <div class="gspad">x</div>.
</li>
<li><a name="p4093" class="glabel"/><b>attribute</b>
a name or functional form denoting <div class="gsyntax">any</div> useful
computational property. For example,
<div class="gfunction">commutative(<div class="gspad">"*"</div>)</div>
asserts that "<div class="gfunction">*</div> is commutative". Also,
<div class="gfunction">finiteAggregate</div> is used to assert that an
aggregate has a finite number of immediate components.
</li>
<li><a name="p4380" class="glabel"/><b>basis</b>
<div class="gsyntax">(algebra)</div> <div class="gspad">S</div> is a
basis of a module <div class="gspad">M</div> over a
<a href="#p45405">ring</a> if <div class="gspad">S</div> generates
<div class="gspad">M</div>, and <div class="gspad">S</div> is linearly
independent
</li>
<li><a name="p4536" class="glabel"/><b>benefactor</b>
(of a given domain) a domain or package that the given domain explicitly
references (for example, calls functions from) in its implementation
</li>
<li><a name="p4684" class="glabel"/><b>binary</b>
operation or function with <a href="#p3173">arity</a> 2
</li>
<li><a name="p4735" class="glabel"/><b>binding</b>
the association of a variable with properties such as
<a href="#p52710">value</a> and <a href="#p50664">type</a>. The
top-level <a href="#p19131">environment</a> in the interpreter consists
of bindings for all user variables and functions. Every
<a href="#p22911">function</a> has an associated set of bindings, one
for each formal <a href="#p2885">argument</a> and
<a href="#p32278">local variable</a>.
</li>
<li><a name="p5086" class="glabel"/><b>block</b>
<div class="gsyntax">(syntax)</div> a control structure where
expressions are sequentially <a href="#p19167">evaluation</a>.
</li>
<li><a name="p5198" class="glabel"/><b>body</b>
a <a href="#p23911">function body</a> or <a href="#p33300">loop body</a>.
</li>
<li><a name="p5256" class="glabel"/><b>boolean</b>
objects denoted by the <a href="#p31774">literals</a>
<div class="gspad">true</div> and <div class="gspad">false</div>;
elements of domain <div class="gtype">Boolean</div>.
See also <div class="gtype">Bits</div>.
</li>
<li><a name="p5399" class="glabel"/><b>built-in function</b>
a <a href="#p22911">function</a> in the standard Axiom library.
Contrast <a href="#p52526">user function</a>.
</li>
<li><a name="p5499" class="glabel"/><b>cache</b>
<ol>
<li>
(noun) a mechanism for immediate retrieval of previously computed data.
For example, a function which does a lengthy computation might store
its values in a <a href="#p25428">hash table</a> using argument as a
key. The hash table then serves as a cache for the function (see also
<div class="gcmd">)set function cache</div>). Also, when
<a href="#p43448">recurrence relations</a> which depend upon
<div class="gspad">n</div> previous values are compiled, the previous
<div class="gspad">n</div> values are normally cached
(use <div class="gcmd">)set functions recurrence</div> to change this).
</li>
<li>
(verb) to save values in a cache.
</li>
</ol>
</li>
<li><a name="p6070" class="glabel"/><b>capsule</b>
the part of the <a href="#p23911">function body</a> of a
<a href="#p16173">domain constructor</a> that defines the functions
implemented by the constructor.
</li>
<li><a name="p6220" class="glabel"/><b>case</b>
<div class="gsyntax">(syntax)</div> an operator used to
conditionally evaluate code based on the branch of a
<a href="#p51780">Union</a>. For example, if value
<div class="gspad">u</div> is
<div class="gspad">Union(Integer, "failed")</div>, the conditional
expression <div class="gspad">if u case Integer then A else B</div>
evaluate <div class="gspad">A</div> if <div class="gspad">u</div> is
an integer and <div class="gspad">B</div> otherwise.
</li>
<li><a name="p6537" class="glabel"/><b>Category</b>
the distinguished object denoting the type of a category; the class of
all categories.
</li>
<li><a name="p6628" class="glabel"/><b>category</b>
<div class="gsyntax">(basic concept)</div> second-order types which
serve to define useful "classification worlds" for domains, such as
algebraic constructs (e.g. groups, rings, fields), and data structures
(e.g. homogeneous aggregates, collections, dictionaries). Examples of
categories are <div class="gtype">Ring</div> ("the class of all
rings") and <div class="gtype">Aggregate</div> ("the class of all
aggregates"). The categories of a given world are arranged in a
hierarchy (formally, a directed acyclic graph). Each category inherits
the properties of all its ancestors. Thus, for example, the category
of ordered rings (<div class="gtype">OrderedRing</div>) inherits the
properties of the category of rings (<div class="gtype">Ring</div>)
and those of the ordered sets
(<div class="gtype">OrderedSet</div>). Categories provide a database of
algebraic knowledge and ensure mathematical correctness, e.g. that
"matrices of polynomials" is correct but "polynomials of hash tables"
is not, that the multiply operation for "polynomials of continued
fractions" is commutative, but that for "matrices of power series" is
not. optionally provide "default definitions" for operations they
export. Categories are defined in Axiom by functions called
<a href="#p8355">category constructors</a>. Technically, a category
designates a class of domains with common
<a href="#p36041">operations</a> and <a href="#p4093">attributes</a> but
usually with different <a href="#p22911">functions</a> and
<a href="#p44277">representations</a> for its constituent
<a href="#p35301">objects</a>. Categories are always defined using the
Axiom library language (see also
<a href="#p8634">category extension</a>).
See also file <div class="gsyntax">catdef.spad</div>
for definitions of basic algebraic categories in Axiom .
</li>
<li><a name="p8355" class="glabel"/><b>category constructor</b>
a function that creates categories, described by an abstract
datatype in the Axiom programming language. For example, the category
constructor <div class="gtype">Module</div> is a function which takes
a domain parameter <div class="gspad">R</div> and creates the category
"modules over <div class="gspad">R</div>".
</li>
<li><a name="p8634" class="glabel"/><b>category extension</b>
created by a category definition, an expression usually of the form
<div class="gspad">A == B with ...</div>. In English, this means
"category A is a <div class="gspad">B</div> with the new operations
and attributes as given by ... . See, for example, file
<div class="gsyntax">catdef.spad</div> for a definitions of the algebra
categories in Axiom , <div class="gsyntax">aggcat.spad</div> for data
structure categories.
</li>
<li><a name="p8996" class="glabel"/><b>category hierarchy</b>
hierarchy formed by category extensions. The root category is
<div class="gtype">Object</div>. A category can be defined as a
<a href="#p30459">Join</a> of two or more categories so as to have
multiple <a href="#p38095">parents</a>. Categories may also have
parameterized so as to allow conditional inheritance.
</li>
<li><a name="p9278" class="glabel"/><b>character</b>
<ol>
<li>
an element of a character set, as represented by a keyboard key.
</li>
<li>
a component of a string. For example, the 0th element of the string
<div class="gspad">"hello there"</div> is the character
<div class="gsyntax">h</div>.
</li>
</ol>
</li>
<li><a name="p9472" class="glabel"/><b>client</b>
(of a given domain) any domain or package that explicitly calls
functions from the given domain
</li>
<li><a name="p9572" class="glabel"/><b>coercion</b>
an automatic transformation of an object of one
<a href="#p50664">type</a> to an object of a similar or desired target
type. In the interpreter, coercions and
<a href="#p45044">retractions</a> are done automatically by the
interpreter when a type mismatch occurs. Compare
<a href="#p12242">conversion</a>.
</li>
<li><a name="p9854" class="glabel"/><b>comment</b>
textual remarks imbedded in code. Comments are preceded by a double
dash (<div class="gsyntax">--</div>). For Axiom library code,
stylized comments for on-line documentation are preceded by a two plus
signs (<div class="gsyntax">++</div>).
</li>
<li><a name="p10064" class="glabel"/><b>Common LISP</b>
A version of <a href="#p31518">LISP</a> adopted as an informal
standard by major users and suppliers of LISP
</li>
<li><a name="p10167" class="glabel"/><b>compile-time</b>
the time when category or domain constructors are compiled. Contrast
<a href="#p45818">run-time</a>.
</li>
<li><a name="p10262" class="glabel"/><b>compiler</b>
a program that generates low-level code from a higher-level source
language. Axiom has three compilers.
<ol>
<li>
A <div class="gsyntax">graphics
compiler</div> converts graphical formulas to a compiled subroutine so
that points can be rapidly produced for graphics commands.
</li>
<li>
An <div class="gsyntax">interpreter compiler</div> optionally compiles
<a href="#p52526">user functions</a> when first
<a href="#p29675">invocation</a>
(use <div class="gcmd">)set functions compile</div>
to turn this feature on).
</li>
<li>
A <div class="gsyntax">library compiler</div> compiles all
constructors.
</li>
</ol>
</li>
<li><a name="p10792" class="glabel"/><b>computational object</b>
In Axiom , domains are objects. This term is used to distinquish the
objects which are members of domains rather than domains themselves.
</li>
<li><a name="p10941" class="glabel"/><b>conditional</b>
a <a href="#p12001">control structure</a> of the form
<div class="gspad">if A then B else C</div>; The
<a href="#p19167">evaluation</a> of <div class="gspad">A</div> produces
<div class="gspad">true</div> or <div class="gspad">false</div>. If
<div class="gspad">true</div>, <div class="gspad">B</div> evaluates to
produce a value; otherwise <div class="gspad">C</div> evaluates to
produce a value. When the value is not used,
<div class="gspad">else C</div> part can be omitted.
</li>
<li><a name="p11264" class="glabel"/><b>constant</b>
<div class="gsyntax">(syntax)</div> a reserved word used in
<a href="#p46813">signatures</a> in Axiom programming language to signify
that mark an operation always returns the same value. For example, the
signature <div class="gspad">0: constant -> $</div> in the source code
of <div class="gtype">AbelianMonoid</div> tells the Axiom compiler
that <div class="gspad">0</div> is a constant so that suitable
optimizations might be performed.
</li>
<li><a name="p11642" class="glabel"/><b>constructor</b>
a <a href="#p22911">function</a> which creates a
<a href="#p6628">category</a>, <a href="#p15041">domain</a>, or
<a href="#p36778">package</a>.
</li>
<li><a name="p11755" class="glabel"/><b>continuation</b>
when a line of a program is so long that it must be broken into
several lines, then all but the first line are called
<div class="gsyntax">continuation lines</div>. If such a line is given
interactively, then each incomplete line must end with an underscore.
</li>
<li><a name="p12001" class="glabel"/><b>control structure</b>
program structures which can specify a departure from normal
sequential execution. Axiom has four kinds of control structures:
<a href="#p5086">blocks</a>, <a href="#p6220">case</a> statements,
<a href="#p10941">conditionals</a>, and <a href="#p33121">loops</a>.
</li>
<li><a name="p12242" class="glabel"/><b>conversion</b>
the transformation of an object on one <a href="#p50664">type</a> to
one of another type. Conversions performed automatically are called
<a href="#p9572">coercions</a>. These happen when the interpreter has a
type mismatch and a similar or declared target type is needed. In
general, the user must use the infix operation
<div class="gspad">::</div> to cause this transformation.
</li>
<li><a name="p12604" class="glabel"/><b>copying semantics</b>
the programming language semantics used in Pascal but
<div class="gsyntax">not</div> in Axiom . See also
<a href="#p39949">pointer semantics</a> for details.
</li>
<li><a name="p12740" class="glabel"/><b>data structure</b>
a structure for storing data in the computer. Examples are
<a href="#p31730">lists</a> and <a href="#p25428">hash tables</a>.
</li>
<li><a name="p12850" class="glabel"/><b>datatype</b>
equivalent to <a href="#p15041">domain</a> in Axiom .
</li>
<li><a name="p12903" class="glabel"/><b>declaration</b>
<div class="gsyntax">(syntax)</div> an expression of the form
<div class="gspad">x : T</div> where <div class="gspad">T</div> is some
<div class="gspad">type</div>. A declaration forces all values
<a href="#p3322">assigned</a> to <div class="gspad">T</div> to be of that
type. If a value is of a different type, the interpreter will try to
<a href="#p9572">coerce</a> the value to type
<div class="gspad">T</div>. Declarations are necessary in case of
ambiguity or when a user wants to introduce an an
<a href="#p20259">unexposed</a> domain.
</li>
<li><a name="p13351" class="glabel"/><b>default definition</b>
a function defined by a <a href="#p6628">category</a>. Such
definitions appear category definitions of the form
<div class="gspad">C: Category == T add I</div> in an optional
implmentation part <div class="gspad">I</div> to the right of the
keyword <div class="gspad">add</div>.
</li>
<li><a name="p13571" class="glabel"/><b>default package</b>
a optional <a href="#p36778">package</a> of
<a href="#p22911">functions</a> associated with a category. Such
functions are necessarily defined in terms over other functions
exported by the category.
</li>
<li><a name="p13754" class="glabel"/><b>definition</b>
<div class="gsyntax">(syntax)</div>
<ol>
<li>
An expression of the form
<div class="gspad">f(a) == b</div> defining function
<div class="gspad">f</div> with <a href="#p21594">formal arguments</a>
<div class="gspad">a</div> and <a href="#p5198">body</a>
<div class="gspad">b</div>; equivalent to the statement
<div class="gspad">f == (a) +-> b</div>.
</li>
<li>
An expression of the form
<div class="gspad">a == b</div> where <div class="gspad">a</div> is a
<a href="#p49347">symbol</a>, equivalent to
<div class="gspad">a() == b</div>.
See also <a href="#p33585">macro</a> where a similar
substitution is done at <a href="#p38242">parse</a> time.
</li>
</ol>
</li>
<li><a name="p14178" class="glabel"/><b>delimiter</b>
a <a href="#p9278">character</a> which marks the beginning or end of
some syntactically correct unit in the language, e.g. " for strings,
blanks for identifiers.
</li>
<li><a name="p14365" class="glabel"/><b>destructive operation</b>
An operation which changes a component or structure of a value. In
Axiom , all destructive operations have names which end with an
exclamation mark (<div class="gsyntax">!</div>). For example, domain
<div class="gtype">List</div> has two operations to reverse the
elements of a list, one named <div class="gfunction">reverse</div>
from <div class="gtype">List</div> which returns a copy of the
original list with the elements reversed, another named
<div class="gfunction">reverse!</div> from <div class="gtype">List</div>
which reverses the elements <div class="gsyntax">in place</div> thus
destructively changing the original list.
</li>
<li><a name="p14877" class="glabel"/><b>documentation</b>
<ol>
<li>
on-line or hard copy descriptions of Axiom;
</li>
<li>
text in library code preceded by
<div class="gsyntax">++</div> comments as opposed to general comments
preceded by <div class="gsyntax">--</div>.
</li>
</ol>
</li>
<li><a name="p15041" class="glabel"/><b>domain</b>
<div class="gsyntax">(basic concept)</div> a domain corresponds to
the usual notion of abstract datatypes: that of a set of values and a
set of "exported operations" for the creation and manipulation of
these values. Datatypes are parameterized, dynamically constructed,
and can combine with others in any meaningful way, e.g. "lists of
floats" (<div class="gtype">List Float</div>), "fractions of
polynomials with integer coefficients"
(<div class="gtype">Fraction Polynomial Integer</div>),
"matrices of infinite <a href="#p47825">streams</a> of cardinal numbers"
(<div class="gtype">Matrix Stream CardinalNumber</div>). The term
<div class="gsyntax">domain</div> is actually abbreviates
<div class="gsyntax">domain of computation</div>. Technically, a domain
denotes a class of objects, a class of
<a href="#p36041">operations</a> for creating and other manipulating
these objects, and a class of <a href="#p4093">attributes</a>
describing computationally useful properties. Domains also provide
<a href="#p22911">functions</a> for each operation often in terms of some
<a href="#p44277">representation</a> for the objects. A domain itself
is an <a href="#p35301">object</a> created by a
<a href="#p22911">function</a> called a <a href="#p16173">domain
constructor</a>.
</li>
<li><a name="p16173" class="glabel"/><b>domain constructor</b>
a function that creates domains, described by an abstract datatype in
the Axiom programming language. Simple domains like
<div class="gtype">Integer</div> and <div class="gtype">Boolean</div> are
created by domain constructors with no arguments. Most domain
constructors take one or more parameters, one usually denoting an
<a href="#p51532">underlying domain</a>. For example, the domain
<div class="gtype">Matrix(R)</div> denotes "matrices over
<div class="gspad">R"</div>. Domains <div class="gsyntax">Mapping</div>,
<div class="gsyntax">Record</div>, and
<div class="gsyntax">Union</div> are primitive domains. All other domains
are written in the Axiom programming language and can be modified by
users with access to the library source code.
</li>
<li><a name="p16819" class="glabel"/><b>domain extension</b>
a domain constructor <div class="gspad">A</div> is said to
<div class="gsyntax">extend</div> a domain constructor
<div class="gspad">B</div> if <div class="gspad">A</div>
<div class="gspad">'s</div> definition has the form
<div class="gspad">A == B add ...</div>.
This intuitively means "functions not defined by <div
class="gspad">A</div> are assumed to come from
<div class="gspad">B</div>". Successive domain extensions form
<a href="#p1794">add-chains</a> affecting the the
<a href="#p46200">search order</a> for functions not implemented directly
by the domain during <a href="#p17853">dynamic lookup</a>.
</li>
<li><a name="p17269" class="glabel"/><b>dot notation</b>
using an infix dot (<div class="gsyntax">.</div>) for function
application. If <div class="gspad">u</div> is the list
<div class="gspad">[7, 4, -11]</div> then both
<div class="gspad">u(2)</div> and <div class="gspad">u.2</div> return
4. Dot notation nests to left. Thus <div class="gspad">f . g . h</div>
is equivalent to <div class="gspad">(f . g) . h</div>.
</li>
<li><a name="p17507" class="glabel"/><b>dynamic</b>
that which is done at <a href="#p45818">run-time</a> as opposed to
<a href="#p10167">compile-time</a>. For example, the interpreter will
build the domain "matrices over integers" dynamically in response to
user input. However, the compilation of all functions for matrices and
integers is done during <a href="#p10167">compile-time</a>. Constrast
<a href="#p47594">static</a>.
</li>
<li><a name="p17853" class="glabel"/><b>dynamic lookup</b>
In Axiom , a <a href="#p17507">domain</a> may or may not explicitly
provide <a href="#p22911">function</a> definitions for all of its
exported <a href="#p36041">operations</a>. These definitions may
instead come from domains in the <a href="#p1794">add-chain</a> or
from <a href="#p13571">default packages</a>. When a
<a href="#p2400">function call</a> is made for an operation in the
domain, up to five steps are carried out.
<ol>
<li>
If the domain itself implements a function for the operation,
that function is returned.
</li>
<li>
Each of the domains in the <a href="#p1794">add-chain</a> are searched
for one which implements the function; if found, the function is returned.
</li>
<li>
Each of the <a href="#p13571">default packages</a> for the domain are
searched in order of the <a href="#p30933">lineage</a>. If any of the
default packages implements the function, the first one found is
returned.
</li>
<li>
Each of the <a href="#p13571">default packages</a> for each of the
domains in the <a href="#p1794">add-chain</a> are searched in the
order of their <a href="#p30933">lineage</a>. If any of the default
packages implements the function, the first one found is returned.
</li>
<li> If all of the above steps fail, an error message is reported.
</li>
</ol>
</li>
<li><a name="p19071" class="glabel"/><b>empty</b>
the unique value of objects with type <div class="gtype">Void</div>.
</li>
<li><a name="p19131" class="glabel"/><b>environment</b>
a set of <a href="#p4735">bindings</a>.
</li>
<li><a name="p19167" class="glabel"/><b>evaluation</b>
a systematic process which transforms an
<a href="#p20659">expression</a> into an object called the
<a href="#p52710">value</a> of the expression. Evaluation may produce
<a href="#p46699">side effects</a>.
</li>
<li><a name="p19348" class="glabel"/><b>exit</b>
<div class="gsyntax">(reserved word)</div> an
<a href="#p36278">operator</a> which forces an exit from the current
block. For example, the <a href="#p5086">block</a>
<div class="gspad">(a := 1; if i > 0 then exit a; a := 2)</div> will
prematurely exit at the second statement with value 1 if the value of
<div class="gspad">i</div> is greater than 0. See
<a href="#p210"><div class="gspad">=></div></a> for an alternate syntax.
</li>
<li><a name="p19681" class="glabel"/><b>explicit export</b>
<ol>
<li>
(of a domain <div class="gspad">D</div>) any
<a href="#p4093">attribute</a>, <a href="#p36041">operation</a>, or
<a href="#p6628">category</a> explicitly mentioned in the
<a href="#p50664">type</a> specification part <div class="gspad">T</div>
for the domain constructor definition <div class="gspad">D: T == I</div>
</li>
<li>
(of a category <div class="gspad">C</div>) any
<a href="#p4093">attribute</a>, <a href="#p36041">operation</a>, or
<a href="#p6628">category</a> explicitly mentioned in the
<a href="#p50664">type</a> specification part <div class="gspad">T</div>
for the domain constructor definition
<div class="gspad">C: <a href="#p6537">Category</a> == T</div>
</li>
</ol>
</li>
<li><a name="p20171" class="glabel"/><b>export</b>
<a href="#p19681">explicit export</a> or <a href="#p27325">implicit
export</a> of a domain or category
</li>
<li><a name="p20259" class="glabel"/><b>expose</b>
some constructors are <div class="gsyntax">exposed</div>, others
<div class="gsyntax">unexposed</div>. Exposed domains and packages
are recognized by the interpreter. Use
<div class="gcmd">)set expose</div>
to control change what is exposed. To see both exposed
and unexposed constructors, use the browser with give the system
command <div class="gcmd">)set hyperdoc browse exposure
on</div>. Unexposed constructors will now appear prefixed by star
(<div class="gspad">*</div>).
</li>
<li><a name="p20659" class="glabel"/><b>expression</b>
<ol>
<li> any syntactically correct program fragment.
</li>
<li> an element of domain <div class="gtype">Expression</div>
</li>
</ol>
</li>
<li><a name="p20757" class="glabel"/><b>extend</b>
see <a href="#p8634">category extension</a> or <a href="#p16819">domain
extension</a>
</li>
<li><a name="p20829" class="glabel"/><b>field</b>
<div class="gsyntax">(algebra)</div> a <a href="#p17507">domain</a>
which is <a href="#p45405">ring</a> where every non-zero element is
invertible and where <div class="gspad">xy=yx</div>; a member of
category <div class="gtype">Field</div>. For a complete list of
fields, click on <div class="gsyntax">Domains</div> under
<div class="gsyntax">Cross Reference</div> for
<div class="gtype">Field</div>.
</li>
<li><a name="p21109" class="glabel"/><b>file</b>
a program or collection of data stored on disk, tape or other medium.
</li>
<li><a name="p21186" class="glabel"/><b>float</b>
a floating-point number with user-specified precision; an element of
domain <div class="gtype">Float</div>. Floats are
<a href="#p31774">literals</a> which are written two ways: without an
exponent (e.g. <div class="gspad">3.1416</div>), or with an exponent
(e.g. <div class="gspad">3.12E-12</div>). Use function
<a href="#p42318">precision</a> to change the precision of the mantissage
(20 digits by default). See also <a href="#p47066">small float</a>.
</li>
<li><a name="p21594" class="glabel"/><b>formal parameter</b>
(of a function) an identifier <a href="#p4735">bound</a> to the value
of an actual <a href="#p2885">argument</a> on
<a href="#p29675">invocation</a>. In the function definition
<div class="gspad">f(x, y) == u</div>, for example,
<div class="gspad">x</div> and <div class="gspad">y</div> are the formal
parameter.
</li>
<li><a name="p21847" class="glabel"/><b>frame</b>
the basic unit of an interactive session; each frame has its own
<a href="#p47691">step number</a>, <a href="#p19131">environment</a>, and
<a href="#p26034">history</a>. In one interactive session, users can
can create and drop frames, and have several active frames simultaneously.
</li>
<li><a name="p22113" class="glabel"/><b>free</b>
<div class="gsyntax">(syntax)</div> A keyword used in user-defined
functions to declare that a variable is a
<a href="#p22739">free variable</a> of that function.
For example, the statement
<div class="gspad">free x</div> declares the variable
<div class="gspad">x</div> within the body of a function
<div class="gspad">f</div> to be a free variable in
<div class="gspad">f</div>. Without such a declaration, any variable
<div class="gspad">x</div> which appears on the left hand side of an
assignment is regarded as a <a href="#p32278">local variable</a> of
that function. If the intention of the assignment is to give an value
to a <a href="#p24833">global variable</a> <div class="gspad">x</div>,
the body of that function must contain the statement
<div class="gspad">free x</div>.
</li>
<li><a name="p22739" class="glabel"/><b>free variable</b>
(of a function) a variable which appears in a body of a function but
is not <a href="#p4735">bound</a> by that function. See
<a href="#p32278">local variable</a> by default.
</li>
<li><a name="p22911" class="glabel"/><b>function</b>
implementation of <a href="#p36041">operation</a>; it takes zero or
more <a href="#p2885">argument</a> parameters and produces zero or
more values. Functions are objects which can be passed as parameters
to functions and can be returned as values of functions. Functions can
also create other functions (see also
<div class="gtype">InputForm</div>). See also
<a href="#p2473">application</a> and
<a href="#p29675">invocation</a>. The terms
<div class="gsyntax">operation</div> and
<div class="gsyntax">function</div> are distinct notions in Axiom . An
operation is an abstraction of a function, described by declaring a
<a href="#p46813">signature</a>. A function is created by providing an
implementation of that operation by some piece of Axiom code. Consider
the example of defining a user-function <div class="gspad">fact</div>
to compute the <div class="gfunction">factorial</div> of a nonnegative
integer. The Axiom statement
<div class="gspad">fact: Integer -> Integer</div>
describes the operation, whereas the statement
<div class="gspad">fact(n) = reduce(*, [1..n])</div> defines the
functions. See also <a href="#p24495">generic function</a>.
</li>
<li><a name="p23911" class="glabel"/><b>function body</b>
the part of a <a href="#p22911">function</a>
<div class="gspad">'s</div> definition which is evaluated when the function
is called at <a href="#p45818">run-time</a>; the part of the function
definition to the right of the <div class="gspad">==</div>.
</li>
<li><a name="p2400" class="glabel"/><b>function call</b>
<div class="gsyntax">(syntax)</div> an expression denoting
"application" of a function to a set of <a href="#p2885">argument</a>
parameters. Applications are written as a
<a href="#p38004">parameterized form</a>. For example, the form
<div class="gspad">f(x, y)</div> indicates the "application of the function
<div class="gspad">f</div> to the tuple of arguments
<div class="gspad">x</div> and <div class="gspad">y</div>". See also
<a href="#p19167">evaluation</a> and <a href="#p29675">invocation</a>.
</li>
<li><a name="p24123" class="glabel"/><b>garbage collection</b>
a system function that automatically recycles memory cells from the
<a href="#p25771">heap</a>. Axiom is built upon
<a href="#p10064">Common LISP</a> which provides this facility.
</li>
<li><a name="p24294" class="glabel"/><b>garbage collector</b>
a mechanism for reclaiming storage in the <a href="#p25771">heap</a>.
</li>
<li><a name="p24359" class="glabel"/><b>Gaussian</b>
a complex-valued expression, e.g. one with both a real and imaginary
part; a member of a <div class="gtype">Complex</div> domain.
</li>
<li><a name="p24495" class="glabel"/><b>generic function</b>
the use of one function to operate on objects of different types; One
might regard Axiom as supporting generic
<a href="#p36041">operations</a> but not generic functions. One operation
<div class="gspad">+: (D, D) -> D</div> exists for adding elements in
a ring; each ring however provides its own type-specific function for
implementing this operation.
</li>
<li><a name="p24833" class="glabel"/><b>global variable</b>
A variable which can be referenced freely by functions. In Axiom ,
all top-level user-defined variables defined during an interactive
user session are global variables. Axiom does not allow <div
class="gsyntax">fluid variables</div>, that is, variables
<a href="#p4735">bound</a> by functions which can be referenced by
functions those functions call.
</li>
<li><a name="p25189" class="glabel"/><b>Groebner basis</b>
<div class="gsyntax">(algebra)</div> a special basis for a
polynomial ideal that allows a simple test for membership. It is
useful in solving systems of polynomial equations.
</li>
<li><a name="p25348" class="glabel"/><b>group</b>
<div class="gsyntax">(algebra)</div> a <a href="#p34266">monoid</a>
where every element has a multiplicative inverse.
</li>
<li><a name="p25428" class="glabel"/><b>hash table</b>
A data structure that efficiency maps a given object to another. A
hash table consists of a set of <div class="gsyntax">entries</div>,
each of which associates a <div class="gsyntax">key</div> with a
<div class="gsyntax">value</div>. Finding the object stored under a key
can be very fast even if there are a large number of entries since
keys are <div class="gsyntax">hashed</div> into numerical codes for
fast lookup.
</li>
<li><a name="p25771" class="glabel"/><b>heap</b>
an area of storage used by data in programs. For example, AXIOM will
use the heap to hold the partial results of symbolic
computations. When cancellations occur, these results remain in the
heap until <a href="#p24294">garbage collected</a>.
</li>
<li><a name="p26034" class="glabel"/><b>history</b>
a mechanism which records the results for an interactive
computation. Using the history facility, users can save computations,
review previous steps of a computation, and restore a previous
interactive session at some later time. For details, issue the system
command <div class="gsyntax">)history ?</div> to the interpreter. See
also <a href="#p21847">frame</a>.
</li>
<li><a name="p26380" class="glabel"/><b>ideal</b>
<div class="gsyntax">(algebra)</div> a subset of a ring that is
closed under addition and multiplication by arbitrary ring elements,
i.e. it<div class="gspad">'s</div> a module over the ring.
</li>
<li><a name="p26553" class="glabel"/><b>identifier</b>
<div class="gsyntax">(syntax)</div> an Axiom name; a
<a href="#p31774">literal</a> of type <div class="gtype">Symbol</div>. An
identifier begins with an alphabetical character or % and may be
followed by alphabetic characters, digits, ? or !. Certain
distinquished <a href="#p44698">reserved words</a> are not allowed as
identifiers but have special meaning in the Axiom .
</li>
<li><a name="p26892" class="glabel"/><b>immutable</b>
an object is immutable if it cannot be changed by an
<a href="#p36041">operation</a>; not a <a href="#p34398">mutable
object</a>. Algebraic objects generally immutable: changing an
algebraic expression involves copying parts of the original
object. One exception is a matrix object of type
<div class="gtype">Matrix</div>. Examples of mutable objects are data
structures such as those of type <div class="gtype">List</div>. See
also <a href="#p39949">pointer semantics</a>.
</li>
<li><a name="p27325" class="glabel"/><b>implicit export</b>
(of a domain or category) any <a href="#p4093">attribute</a> or
<a href="#p36041">operation</a> which is either an explicit export or
else an explicit export of some category which an explicit category
export <a href="#p20757">extends</a>.
</li>
<li><a name="p27564" class="glabel"/><b>index</b>
<ol>
<li>
a variable that counts the number of times a
<a href="#p33121">loop</a> is repeated.
</li>
<li>
the "address" of an element in a data structure (see also category
<div class="gtype">LinearAggregate</div>).
</li>
</ol>
</li>
<li><a name="p27746" class="glabel"/><b>infix</b>
<div class="gsyntax">(syntax)</div> an
<a href="#p36278">operator</a> placed between two
<a href="#p35946">operands</a>; also called a
<div class="gsyntax">binary operator</div>, e.g.
<div class="gspad">a + b</div>. An infix operator may also be used as a
<a href="#p42559">prefix</a>, e.g. <div class="gspad">+(a, b)</div> is
also permissable in the Axiom language. Infix operators have a
relative <a href="#p42098">precedence</a>.
</li>
<li><a name="p28103" class="glabel"/><b>input area</b>
a rectangular area on a screen into which users can enter text.
</li>
<li><a name="p28185" class="glabel"/><b>instantiate</b>
to build a <a href="#p6628">category</a>, <a href="#p17507">domain</a>,
or <a href="#p36778">package</a> at run-time
</li>
<li><a name="p28282" class="glabel"/><b>integer</b>
a <a href="#p31774">literal</a> object of domain
<div class="gtype">Integer</div>, the class of integers with an unbounded
number of digits. Integer literals consist of one or more consecutive
digits (0-9) with no embedded blanks. Underscores can be used to
separate digits in long integers if desirable.
</li>
<li><a name="p28570" class="glabel"/><b>interactive</b>
a system where the user interacts with the computer step-by-step
</li>
<li><a name="p28640" class="glabel"/><b>interpreter</b>
the subsysystem of Axiom responsible for handling user input during
an interactive session. The following somewhat simplified description
of the typical action of the interpreter. The interpreter parsers the
user<div class="gspad">'s</div> input expression to create an
expression tree then does a bottom-up traversal of the tree. Each
subtree encountered which is not a value consists of a root node
denoting an operation name and one or more leaf nodes denoting
<a href="#p35946">operands</a>. The interpreter resolves type mismatches
and uses type-inferencing and a library database to determine
appropriate types of the operands and the result, and an operation to
be performed. The interpreter then builds a domain to perform the
indicated operation, then invokes a function from the domain to
compute a value. The subtree is then replaced by that value and the
process continues. Once the entire tree has been processed, the value
replacing the top node of the tree is displayed back to the user as
the value of the expression.
</li>
<li><a name="p29675" class="glabel"/><b>invocation</b>
(of a function) the run-time process involved in
<a href="#p19167">evaluating</a> a <a href="#p22911">function</a>
<a href="#p2473">application</a>. This process has two steps. First, a
local <a href="#p19131">environment</a> is created where
<a href="#p21594">formal arguments</a> are locally
<a href="#p4735">bound</a> by <a href="#p3322">assignment</a> to their
respective actual <a href="#p2885">argument</a>. Second, the
<a href="#p23911">function body</a> is evaluated in that local
environment. The evaluation of a function is terminated either by
completely evaluating the function body or by the evaluation of a
<div class="gfunction">return</div> expression.
</li>
<li><a name="p30286" class="glabel"/><b>iteration</b>
repeated evaluation of an expression or a sequence of
expressions. Iterations use the reserved words
<div class="gfunction">for</div>, <div class="gfunction">while</div>, and
<div class="gfunction">repeat</div>.
</li>
<li><a name="p30459" class="glabel"/><b>Join</b>
a primitive Axiom function taking two or more categories as arguments
and producing a category containing all of the operations and
attributes from the respective categories.
</li>
<li><a name="p30645" class="glabel"/><b>KCL</b>
Kyoto Common LISP, a version of <a href="#p10064">Common LISP</a>
which features compilation of the compilation of LISP into the
<div class="gspad">C</div> Programming Language
</li>
<li><a name="p30801" class="glabel"/><b>library</b>
In Axiom , a coolection of compiled modules respresenting the a
<a href="#p6628">category</a> or <a href="#p17507">domain</a>
constructor.
</li>
<li><a name="p30933" class="glabel"/><b>lineage</b>
the sequence of <a href="#p13571">default packages</a> for a given
domain to be searched during
<a href="#p17853">dynamic lookup</a>.
This sequence is computed first by ordering the category
<a href="#p2335">ancestors</a> of the domain according to their <div
class="gsyntax">level number</div>, an integer equal to to the
minimum distance of the domain from the category. Parents have level
1, parents of parents have level 2, and so on. Among categories with
equal level numbers, ones which appear in the left-most branches of
<div class="gsyntax">Join</div><div class="gspad">s</div> in the
source code come first. See also <a href="#p17853">dynamic lookup</a>.
</li>
<li><a name="p31518" class="glabel"/><b>LISP</b>
acronymn for List Processing Language, a language designed for the
manipulation of nonnumerical data. The Axiom library is translated
into LISP then compiled into machine code by an underlying LISP.
</li>
<li><a name="p31730" class="glabel"/><b>list</b>
an object of a <div class="gtype">List</div> domain.
</li>
<li><a name="p31774" class="glabel"/><b>literal</b>
an object with a special syntax in the language. In Axiom , there are
five types of literals: <a href="#p5256">booleans</a>,
<a href="#p28282">integers</a>, <a href="#p21186">floats</a>,
<a href="#p48077">strings</a>, and <a href="#p49347">symbols</a>.
</li>
<li><a name="p31998" class="glabel"/><b>local</b>
<div class="gsyntax">(syntax)</div> A keyword used in user-defined
functions to declare that a variable is a
<a href="#p32278">local variable</a> of that function.
Because of default assumptions on
variables, such a declaration is not necessary but is available to the
user for clarity when appropriate.
</li>
<li><a name="p32278" class="glabel"/><b>local variable</b>
(of a function) a variable <a href="#p4735">bound</a> by that
function and such that its binding is invisible to any function that
function calls. Also called a <div class="gsyntax">lexical</div>
variable. By default in the interpreter:
<ol>
<li>
any variable <div class="gspad">x</div> which appears on the left hand
side of an assignment is regarded a local variable of that
function. If the intention of an assignment is to change the value of
a <a href="#p24833">global variable</a> <div class="gspad">x</div>,
the body of the function must then contain the statement
<div class="gspad">free x</div>.
</li>
<li>
any other variable is regarded as a <a href="#p22739">free variable</a>.
</li>
<li>
An optional declaration <div class="gspad">local x</div> is available
to explicitly declare a variable to be a local variable. All
<a href="#p21594">formal parameters</a> to the function can be regarded
as local variables to the function.
</li>
</ol>
</li>
<li><a name="p33121" class="glabel"/><b>loop</b>
<ol>
<li> an expression containing a <div class="gfunction">repeat</div>
</li>
<li>
a collection expression having a <div class="gfunction">for</div> or a
<div class="gfunction">while</div>, e.g.
<div class="gspad">[f(i) for i in S]</div>.
</li>
</ol>
</li>
<li><a name="p33300" class="glabel"/><b>loop body</b>
the part of a loop following the <div class="gfunction">repeat</div>
that tells what to do each iteration. For example, the body of the
loop <div class="gspad">for x in S repeat B</div> is
<div class="gspad">B</div>. For a collection expression, the body of the
loop precedes the initial <div class="gfunction">for</div> or
<div class="gfunction">while</div>.
</li>
<li><a name="p33585" class="glabel"/><b>macro</b>
<ol>
<li>
<div class="gsyntax">(syntax)</div> An expression of the form
<div class="gspad">macro a == b</div> where <div class="gspad">a</div> is a
<a href="#p49347">symbol</a> causes <div class="gspad">a</div> to be
textually replaced by the expression <div class="gspad">b</div> at
<a href="#p38242">parse</a> time.
</li>
<li>
An expression of the form <div class="gspad">macro f(a) == b</div>
defines a parameterized macro expansion for a parameterized form
<div class="gspad">f</div> This macro causes a form
<div class="gspad">f</div>(<div class="gspad">x</div>) to be textually
replaced by the expression <div class="gspad">c</div> at parse time,
where <div class="gspad">c</div> is the expression obtained by
replacing <div class="gspad">a</div> by <div class="gspad">x</div>
everywhere in <div class="gspad">b</div>. See also
<a href="#p13754">definition</a> where a similar substitution is done
during <a href="#p19167">evaluation</a>.
</li>
</ol>
</li>
<li><a name="p34233" class="glabel"/><b>mode</b>
a type expression containing a question-mark
(<div class="gsyntax">?</div>). For example, the mode
<div class="gsyntax">P ?</div> designates <div class="gsyntax">the class
of all polynomials over an arbitrary ring</div>.
</li>
<li><a name="p34266" class="glabel"/><b>monoid</b>
is a set with a single, associative operation and an identity element
</li>
<li><a name="p34398" class="glabel"/><b>mutable</b>
objects which contain <a href="#p39600">pointers</a> to other objects
and which have operations defined on them which alter these
pointers. Contrast <a href="#p26892">immutable</a>. Axiom uses
<a href="#p39949">pointer semantics</a> as does
<a href="#p31518">LISP</a> in contrast with many other languages such as
Pascal which use <a href="#p12604">copying semantics</a>. See
<a href="#p39949">pointer semantics</a> for details.
</li>
<li><a name="p34778" class="glabel"/><b>name</b>
<ol>
<li>
a <a href="#p49347">symbol</a> denoting a <a href="#p52894">variable</a>,
i.e. the variable <div class="gspad">x</div>.
</li>
<li>
a <a href="#p49347">symbol</a> denoting an
<a href="#p36041">operation</a>, i.e. the operation
<div class="gspad">divide: (Integer, Integer) -> Integer</div>.
</li>
</ol>
</li>
<li><a name="p35023" class="glabel"/><b>nullary</b>
a function with no arguments,
e.g. <div class="gfunction">characteristic</div>.
</li>
<li><a name="p35104" class="glabel"/><b>nullary</b>
operation or function with <a href="#p3173">arity</a> 0
</li>
<li><a name="p35156" class="glabel"/><b>Object</b>
a category with no operations or attributes, from which most categories
in Axiom are <a href="#p8634">category extensions</a>.
</li>
<li><a name="p35301" class="glabel"/><b>object</b>
a data entity created or manipulated by programs. Elements of
domains, functions, and domains themselves are objects. Whereas
categories are created by functions, they cannot be dynamically
manipulated in the current system and are thus not considered as
objects. The most basic objects are <a href="#p31774">literals</a>;
all other objects must be created
<a href="#p22911">functions</a>. Objects can refer to other objects using
<a href="#p39600">pointers</a>. Axiom language uses
<a href="#p39949">pointer semantics</a> when dealing with
<a href="#p34398">mutable</a> objects.
</li>
<li><a name="p35854" class="glabel"/><b>object code</b>
code which can be directly executed by hardware; also known as
<div class="gsyntax">machine language</div>.
</li>
<li><a name="p35946" class="glabel"/><b>operand</b>
an argument of an <a href="#p36278">operator</a> (regarding an
operator as a <a href="#p22911">function</a>).
</li>
<li><a name="p36041" class="glabel"/><b>operation</b>
an abstraction of a <a href="#p22911">function</a>, described by a
<a href="#p46813">signature</a>. For example,
<div align="center" class="gspad">
fact: NonNegativeInteger -> NonNegativeInteger
</div>
describes an operation for "the factorial of a (non-negative) integer".
</li>
<li><a name="p36278" class="glabel"/><b>operator</b>
special reserved words in the language such as
<div class="gfunction">+</div> and <div class="gfunction">*</div>;
operators can be either <a href="#p42559">prefix</a> or
<a href="#p27746">infix</a> and have a relative
<a href="#p42098">precedence</a>.
</li>
<li><a name="p36465" glabel="class"/><b>overloading</b>
the use of the same name to denote distinct functions; a function is
identified by a <a href="#p46813">signature</a> identifying its name,
the number and types of its arguments, and its return types. If two
functions can have identical signatures, a
<a href="#p37520">package call</a> must be made to distinquish the two.
</li>
<li><a name="p36778" class="glabel"/><b>package</b>
a domain whose exported operations depend solely on the parameters
and other explicit domains, e.g. a package for solving systems of
equations of polynomials over any field, e.g. floats, rational
numbers, complex rational functions, or power series. Facilities for
integration, differential equations, solution of linear or polynomial
equations, and group theory are provided by "packages". Technically, a
package is a domain which has no <a href="#p46813">signature</a>
containing the symbol $. While domains intuitively provide
computational objects you can compute with, packages intuitively
provide functions (<a href="#p41450">polymorphic</a> functions) which
will work over a variety of datatypes.
</li>
<li><a name="p37520" class="glabel"/><b>package call</b>
<div class="gsyntax">(syntax)</div> an expression of the form
<div class="gspad">e $ D</div> where <div class="gspad">e</div> is an
<a href="#p2473">application</a> and <div class="gspad">D</div> denotes
some <a href="#p36778">package</a> (or <a href="#p17507">domain</a>).
</li>
<li><a name="p37696" class="glabel"/><b>package call</b>
<div class="gsyntax">(syntax)</div> an expression of the form
<div class="gspad">f(x, y)$D</div> used to identify that the function
<div class="gspad">f</div> is to be one from <div class="gspad">D</div>.
</li>
<li><a name="p37833" class="glabel"/><b>package constructor</b>
same as <a href="#p16173">domain constructor</a>.
</li>
<li><a name="p37878" class="glabel"/><b>parameter</b>
see <a href="#p2885">argument</a>
</li>
<li><a name="p37908" class="glabel"/><b>parameterized datatype</b>
a domain that is built on another, for example, polynomials with
integer coefficients.
</li>
<li><a name="p38004" class="glabel"/><b>parameterized form</b>
a expression of the form <div class="gspad">f(x, y)</div>, an
<a href="#p2473">application</a> of a function.
</li>
<li><a name="p38095" class="glabel"/><b>parent</b>
(of a domain) a category which is explicitly declared in the source
code definition for the domain to be an <a href="#p20171">export</a>
of the domain.
</li>
<li><a name="p38242" class="glabel"/><b>parse</b>
<ol>
<li>
(verb) to produce an internal representation of a user input string;
the resultant internal representation is then "interpreted" by Axiom
to perform some indicated action.
</li>
<li>
the transformation of a user input string representing a valid Axiom
expression into an internal representation as a tree-structure.
</li>
</ol>
</li>
<li><a name="p38572" class="glabel"/><b>partially ordered set</b>
a set with a reflexive, transitive and antisymetric
<a href="#p4684">binary</a> operation.
</li>
<li><a name="p38600" class="glabel"/><b>pattern</b>
The left hand side of a rewrite rule is called a pattern. Rewrite rules
can be used to perform pattern matching, usually for simplification.
The right hand side of a rule is called the
<a href="p49000">substitution</a>.
</li>
<li><a name="p38661" class="glabel"/><b>pattern match</b>
<ol>
<li>
(on expressions) Given a expression called a "subject"
<div class="gspad">u</div>, the attempt to rewrite
<div class="gspad">u</div> using a set of "rewrite rules". Each rule has
the form <div class="gspad">A == B</div> where
<div class="gspad">A</div> indicates a expression called a "pattern" and
<div class="gspad">B</div> denotes a "replacement". The meaning of
this rule is "replace <div class="gspad">A</div> by
<div class="gspad">B"</div>. If a given pattern <div class="gspad">A</div>
matches a subexpression of <div class="gspad">u</div>, that
subexpression is replaced by <div class="gspad">B</div>. Once
rewritten, pattern matching continues until no further changes occur.
</li>
<li>
(on strings) the attempt to match a string indicating a "pattern" to
another string called a "subject", for example, for the purpose of
identifying a list of names. In a browser, users may enter
<a href="#p46294">search strings</a> for the purpose of identifying
constructors, operations, and attributes.
</li>
</ol>
</li>
<li><a name="p39400" class="glabel"/><b>pattern variable</b>
In a rule a symbol which is not a recognized function acts as a
pattern variable and is free to match any subexpression.
</li>
<li><a name="p39494" class="glabel"/><b>pile</b>
alternate syntax for a block, using indentation and column alignment
(see also <a href="#p5086">block</a>).
</li>
<li><a name="p39600" class="glabel"/><b>pointer</b>
a reference implemented by a link directed from one object to another
in the computer memory. An object is said to
<div class="gsyntax">refer</div> to another if it has a pointer to that
other object. Objects can also refer to themselves (cyclic references
are legal). Also more than one object can refer to the same
object. See also <a href="#p39949">pointer semantics</a>.
</li>
<li><a name="p39949" class="glabel"/><b>pointer semantics</b>
the programming language semantics used in languages such as LISP
which allow objects to be <a href="#p34398">mutable</a>. Consider the
following sequence of Axiom statements:
<ol>
<li> <div class="gspad">x : Vector Integer := [1, 4, 7]</div>
</li>
<li> <div class="gspad">y := x</div>
</li>
<li> <div class="gspad">swap!(x, 2, 3)</div>
</li>
</ol>
The function <div class="gfunction">swap!</div> from
<div class="gtype">Vector</div> is used to interchange the 2nd and 3rd
value in the list <div class="gspad">x</div> producing the value
<div class="gspad">[1, 7, 4]</div>. What value does
<div class="gspad">y</div> have after evaluation of the third statement?
The answer is different in Axiom than it is in a language with
<a href="#p12604">copying semantics</a>. In Axiom , first the vector
[1, 2, 3] is created and the variable <div class="gspad">x</div> set to
<a href="#p39600">point</a> to this object. Let
<div class="gspad">'s</div> call this object
<div class="gspad">V</div>. Now <div class="gspad">V</div> refers to its
<a href="#p26892">immutable</a> components 1, 2, and 3. Next, the
variable <div class="gspad">y</div> is made to point to
<div class="gspad">V</div> just as <div class="gspad">x</div> does. Now the
third statement interchanges the last 2 elements of
<div class="gspad">V</div> (the <div class="gsyntax">!</div> at the end of
the name <div class="gfunction">swap!</div> from
<div class="gtype">Vector</div> tells you that this operation is
destructive, that is, it changes the elements <div class="gsyntax">in
place</div>). Both <div class="gspad">x</div> and
<div class="gspad">y</div> perceive this change to
<div class="gspad">V</div>. Thus both <div class="gspad">x</div> and
<div class="gspad">y</div> then have the value
<div class="gspad">[1, 7, 4]</div>.
In Pascal, the second statement causes a copy of
<div class="gspad">V</div> to be stored under
<div class="gspad">y</div>. Thus the change to <div class="gspad">V</div>
made by the third statement does not affect
<div class="gspad">y</div>.
</li>
<li><a name="p41450" class="glabel"/><b>polymorphic</b>
a <a href="#p22911">function</a> parameterized by one or more
<a href="#p17507">domains</a>; a <a href="#p2267">algorithm</a> defined
<a href="#p6628">categorically</a>. Every function defined in a domain
or package constructor with a domain-valued parameter is
polymorphic. For example, the same matrix
<div class="gfunction">*</div> function is used to multiply "matrices over
integers" as "matrices over matrices over integers"
</li>
<li><a name="p41972" class="glabel"/><b>postfix</b>
an <a href="#p36278">operator</a> that follows its single
<a href="#p35946">operand</a>. Postfix operators are not available in
Axiom.
</li>
<li><a name="p42098" class="glabel"/><b>precedence</b>
<div class="gsyntax">(syntax)</div> refers to the so-called
<div class="gsyntax">binding power</div> of an operator. For example,
<div class="gspad">*</div> has higher binding power than
<div class="gspad">+</div> so that the expression
<div class="gspad">a + b * c</div> is equivalent to
<div class="gspad">a + (b * c)</div>.
</li>
<li><a name="p42318" class="glabel"/><b>precision</b>
the number of digits in the specification of a number, e.g. as set by
<div class="gfunction">precision</div> from <div class="gtype">Float</div>.
</li>
<li><a name="p42440" class="glabel"/><b>predicate</b>
<ol>
<li> a Boolean valued function, e.g.
<div class="gspad">odd: Integer -> Boolean</div>.
</li>
<li> an Boolean valued expression
</li>
</ol>
</li>
<li><a name="p42559" class="glabel"/><b>prefix</b>
<div class="gsyntax">(syntax)</div> an
<a href="#p36278">operator</a> such as <div class="gspad">-</div> and
<div class="gspad">not</div> that is written
<div class="gsyntax">before</div> its single
<a href="#p35946">operand</a>. Every function of one argument can be used
as a prefix operator. For example, all of the following have
equivalent meaning in Axiom : <div class="gspad">f(x)</div>,
<div class="gspad">f x</div>, and <div class="gspad">f.x</div>. See also
<a href="#p17269">dot notation</a>.
</li>
<li><a name="p42917" class="glabel"/><b>quote</b>
the prefix <a href="#p36278">operator</a>
<div class="gfunction">'</div> meaning <div class="gsyntax">do not
evaluate</div>.
</li>
<li><a name="p43000" class="glabel"/><b>Record</b>
(basic domain constructor) a domain constructor used to create a
inhomogeneous aggregate composed of pairs of "selectors" and
<a href="#p52710">values</a>. A Record domain is written in the form
<div class="gspad">Record(a1:D1, ..., an:Dn)</div>
(<div class="gspad">n</div> > 0) where <div class="gspad">a1</div>, ...,
<div class="gspad">an</div> are identifiers called the
<div class="gsyntax">selectors</div> of the record, and
<div class="gspad">D1</div>, ..., <div class="gspad">Dn</div> are domains
indicating the type of the component stored under selector
<div class="gspad">an</div>.
</li>
<li><a name="p43448" class="glabel"/><b>recurrence relation</b>
A relation which can be expressed as a function
<div class="gspad">f</div> with some argument <div class="gspad">n</div>
which depends on the value of <div class="gspad">f</div> at
<div class="gspad">k</div> previous values. In many cases, Axiom will
rewrite a recurrence relation on compilation so as to
<a href="#p5499">cache</a> its previous <div class="gspad">k</div> values
and therefore make the computation significantly more efficient.
</li>
<li><a name="p43806" class="glabel"/><b>recursion</b>
use of a self-reference within the body of a function. Indirect
recursion is when a function uses a function below it in the call
chain.
</li>
<li><a name="p43948" class="glabel"/><b>recursive</b>
<ol>
<li> A function that calls itself, either directly or indirectly through
another function.
</li>
<li> self-referential. See also <a href="#p43948">recursive</a>.
</li>
</ol>
</li>
<li><a name="p44097" class="glabel"/><b>reference</b>
see <a href="#p39600">pointer</a>
</li>
<li><a name="p44126" class="glabel"/><b>Rep</b>
a special identifier used as <a href="#p32278">local variable</a> of
a domain constructor body to denote the representation domain for
objects of a domain.
</li>
<li><a name="p44277" class="glabel"/><b>representation</b>
a <a href="#p17507">domain</a> providing a data structure for
elements of a domain; generally denoted by the special identifier
<a href="#p44126">Rep</a> in the Axiom programming language. As domains
are <a href="#p725">abstract datatypes</a>, this representation is not
available to users of the domain, only to functions defined in the
<a href="#p23911">function body</a> for a domain constructor. Any domain
can be used as a representation.
</li>
<li><a name="p44698" class="glabel"/><b>reserved word</b>
a special sequence of non-blank characters with special meaning in
the Axiom language. Examples of reserved words are names such as
<div class="gfunction">for</div>, <div class="gfunction">if</div>, and
<div class="gfunction">free</div>, operator names such as
<div class="gfunction">+</div> and <div class="gspad">mod</div>, special
character strings such as <div class="gspad">==</div> and
<div class="gspad">:=</div>.
</li>
<li><a name="p45044" class="glabel"/><b>retraction</b>
to move an object in a parameterized domain back to the underlying
domain, for example to move the object <div class="gspad">7</div> from
a "fraction of integers"
(domain <div class="gtype">Fraction Integer</div>) to
"the integers" (domain <div class="gtype">Integer</div>).
</li>
<li><a name="p45280" class="glabel"/><b>return</b>
when leaving a function, the value of the expression following
<div class="gfunction">return</div> becomes the value of the function.
</li>
<li><a name="p45405" class="glabel"/><b>ring</b>
a set with a commutative addition, associative multiplication, a unit
element, and multiplication distributes over addition and subtraction.
</li>
<li><a name="p45557" class="glabel"/><b>rule</b>
<div class="gsyntax">(syntax)</div> 1. An expression of the form
<div class="gspad">rule A == B</div> indicating a "rewrite
rule". 2. An expression of the form
<div class="gspad">rule(R1;...;Rn)</div>
indicating a set of "rewrite rules"
<div class="gspad">R1</div>, ..., <div class="gspad">Rn</div>. See
<a href="#p38661">pattern matching</a> for details.
</li>
<li><a name="p45818" class="glabel"/><b>run-time</b>
the time of doing a computation. Contrast
<a href="#p10167">compile-time</a>. rather than prior to it;
<a href="#p17507">dynamic</a> as opposed to
<a href="#p47594">static</a>. For example, the decision of the intepreter
to build a structure such as "matrices with power series entries" in
response to user input is made at run-time.
</li>
<li><a name="p46129" class="glabel"/><b>run-time check</b>
an error-checking which can be done only when the program receives
user input; for example, confirming that a value is in the proper
range for a computation.
</li>
<li><a name="p46200" class="glabel"/><b>search order</b>
the sequence of <a href="#p13571">default packages</a> for a given
domain to be searched during <a href="#p17853">dynamic
lookup</a>. This sequence is computed first by ordering the category
<a href="#p2335">ancestors</a> of the domain according to their
<div class="gsyntax">level number</div>, an integer equal to to the
minimum distance of the domain from the category. Parents have level
1, parents of parents have level 2, and so on. Among categories with
equal level numbers, ones which appear in the left-most branches of
<div class="gsyntax">Join</div><div class="gspad">s</div> in the
source code come first. See also <a href="#p17853">dynamic lookup</a>.
</li>
<li><a name="p46294" class="glabel"/><b>search string</b>
a string entered into an <a href="#p28103">input area</a> on a screen
</li>
<li><a name="p46372" class="glabel"/><b>selector</b>
an identifier used to address a component value of a
<a href="p43000">Record</a> datatype.
</li>
<li><a name="p46454" class="glabel"/><b>semantics</b>
the relationships between symbols and their meanings. The rules for
obtaining the <div class="gsyntax">meaning</div> of any syntactically
valid expression.
</li>
<li><a name="p46594" class="glabel"/><b>semigroup</b>
<div class="gsyntax">(algebra)</div> a <a href="#p34266">monoid</a>
which need not have an identity; it is closed and associative.
</li>
<li><a name="p46699" class="glabel"/><b>side effect</b>
action which changes a component or structure of a value. See
<a href="#p14365">destructive operation</a> for details.
</li>
<li><a name="p46813" class="glabel"/><b>signature</b>
<div class="gsyntax">(syntax)</div> an expression describing an
<a href="#p36041">operation</a>. A signature has the form as
<div class="gspad">name : source -> target</div>, where
<div class="gspad">source</div> gives the type of the arguments of the
operation, and <div class="gspad">target</div> gives the type of the
result.
</li>
<li><a name="p47066" class="glabel"/><b>small float</b>
the domain for hardware floating point arithmetic as provided by the
computer hardware.
</li>
<li><a name="p47159" class="glabel"/><b>small integer</b>
the domain for hardware integer arithmetic. as provided by the computer
hardware.
</li>
<li><a name="p47246" class="glabel"/><b>source</b>
the <a href="#p50664">type</a> of the argument of a
<a href="#p22911">function</a>; the type expression before the
<div class="gspad">-></div> in a <a href="#p46813">signature</a>. For
example, the source of
<div class="gspad">f : (Integer, Integer) -> Integer</div>
is <div class="gspad">(Integer, Integer)</div>.
</li>
<li><a name="p47486" class="glabel"/><b>sparse</b>
data structure whose elements are mostly identical (a sparse matrix
is one filled with mostly zeroes).
</li>
<li><a name="p47594" class="glabel"/><b>static</b>
that computation done before run-time, such as compilation. Contrast
<a href="#p17507">dynamic</a>.
</li>
<li><a name="p47691" class="glabel"/><b>step number</b>
the number which precedes user input lines in an interactive session;
the output of user results is also labeled by this number.
</li>
<li><a name="p47825" class="glabel"/><b>stream</b>
an object of <div class="gtype">Stream(R)</div>, a generalization of
a <a href="#p31730">list</a> to allow an infinite number of
elements. Elements of a stream are computed "on demand". Strings are
used to implement various forms of power series.
</li>
<li><a name="p48077" class="glabel"/><b>string</b>
an object of domain <div class="gtype">String</div>. Strings are
<a href="#p31774">literals</a> consisting of an arbitrary sequence of
<a href="#p9278">characters</a> surrounded by double-quotes
(<div class="gfunction">"</div>), e.g.
<div class="gspad">"Look here!"</div>.
</li>
<li><a name="p48303" class="glabel"/><b>subdomain</b>
<div class="gsyntax">(basic concept)</div> a
<a href="#p17507">domain</a> together with a
<a href="#p42440">predicate</a> characterizing which members of the
domain belong to the subdomain. The exports of a subdomain are usually
distinct from the domain itself. A fundamental assumption however is
that values in the subdomain are automatically
<a href="#p9572">coerceable</a> to values in the domain. For example, if
<div class="gspad">n</div> and <div class="gspad">m</div> are declared
to be members of a subdomain of the integers, then
<div class="gsyntax">any</div> <a href="#p4684">binary</a> operation from
<div class="gtype">Integer</div> is available on
<div class="gspad">n</div> and <div class="gspad">m</div>. On the other
hand, if the result of that operation is to be assigned to, say,
<div class="gspad">k</div>, also declared to be of that subdomain, a
<a href="#p45818">run-time</a> check is generally necessary to ensure
that the result belongs to the subdomain.
</li>
<li><a name="p49000" class="glabel"/><b>substitution</b>
The right hand side of a rule is called the substitution.
The left hand side of a rewrite rule is called a
<a href="p38600">pattern</a>. Rewrite rules
can be used to perform pattern matching, usually for simplification.
</li>
<li><a name="p49128" class="glabel"/><b>such that clause</b>
the use of <div class="gfunction">|</div> followed by an expression
to filter an iteration.
</li>
<li><a name="p49209" class="glabel"/><b>suffix</b>
<div class="gsyntax">(syntax)</div> an
<a href="#p36278">operator</a> which placed after its operand. Suffix
operators are not allowed in the Axiom language.
</li>
<li><a name="p49347" class="glabel"/><b>symbol</b>
objects denoted by <a href="#p26553">identifier</a>
<a href="#p31774">literals</a>; an element of domain
<div class="gtype">Symbol</div>. The interpreter defaultly converts a
symbol <div class="gspad">x</div> into
<div class="gtype">Variable(x)</div>.
</li>
<li><a name="p49538" class="glabel"/><b>syntax</b>
rules of grammar, punctuation etc. for forming correct expressions.
</li>
<li><a name="p49613" class="glabel"/><b>system commands</b>
top-level Axiom statements that begin with
<div class="gsyntax">)</div>. System commands allow users to query the
database, read files, trace functions, and so on.
</li>
<li><a name="p49773" class="glabel"/><b>tag</b>
an identifier used to discriminate a branch of a
<a href="#p51780">Union</a> type.
</li>
<li><a name="p49851" class="glabel"/><b>target</b>
the <a href="#p50664">type</a> of the result of a
<a href="#p22911">function</a>; the type expression following the
<div class="gspad">-></div> in a <a href="#p46813">signature</a>.
</li>
<li><a name="p49990" class="glabel"/><b>top-level</b>
refers to direct user interactions with the Axiom interpreter.
</li>
<li><a name="p50064" class="glabel"/><b>totally ordered set</b>
<div class="gsyntax">(algebra)</div> a partially ordered set where
any two elements are comparable.
</li>
<li><a name="p50148" class="glabel"/><b>trace</b>
use of system function <div class="gcmd">)trace</div> to track the
arguments passed to a function and the values returned.
</li>
<li><a name="p50262" class="glabel"/><b>tuple</b>
an expression of two or more other expressions separated by commas,
e.g. <div class="gspad">4, 7, 11</div>. Tuples are also used for
multiple arguments both for <a href="#p2473">applications</a>
(e.g. <div class="gspad">f(x, y)</div>) and in
<a href="#p46813">signatures</a> (e.g.
<div class="gspad">(Integer, Integer) -> Integer</div>).
A tuple is not a data structure, rather a
syntax mechanism for grouping expressions.
</li>
<li><a name="p50664" class="glabel"/><b>type</b>
The type of any <a href="#p48303">subdomain</a> is the unique symbol
<div class="gsyntax">Category</div>. The type of a
<a href="#p17507">domain</a> is any <a href="#p6628">category</a> that
domain belongs to. The type of any other object is either the (unique)
domain that object belongs to or any <a href="#p48303">subdomain</a>
of that domain. The type of objects is in general not unique.
</li>
<li><a name="p51002" class="glabel"/><b>type checking</b>
a system function which determines whether the datatype of an object is
appropriate for a given operation.
</li>
<li><a name="p51114" class="glabel"/><b>type constructor</b>
a <a href="#p16173">domain constructor</a> or
<a href="#p8355">category constructor</a>.
</li>
<li><a name="p51189" class="glabel"/><b>type inference</b>
when the interpreter chooses the type for an object based on
context. For example, if the user interactively issues the definition
<div align="center" class="gspad">f(x) == (x + %i)**2</div> then
issues <div class="gspad">f(2)</div>, the interpreter will infer the
type of <div class="gspad">f</div> to be
<div class="gspad">Integer -> Complex Integer</div>.
</li>
<li><a name="p51480" class="glabel"/><b>unary</b>
operation or function with <a href="#p3173">arity</a> 1
</li>
<li><a name="p51532" class="glabel"/><b>underlying domain</b>
for a <a href="#p17507">domain</a> that has a single domain-valued
parameter, the <div class="gsyntax">underlying domain</div> refers to
that parameter. For example, the domain "matrices of integers"
(<div class="gtype">Matrix Integer</div>) has underlying domain
<div class="gtype">Integer</div>.
</li>
<li><a name="p51780" class="glabel"/><b>Union</b>
<div class="gsyntax">(basic domain constructor)</div> a domain
constructor used to combine any set of domains into a single domain. A
Union domain is written in the form
<div class="gspad">Union(a1:D1,..., an:Dn)</div>
(<div class="gspad">n</div> > 0) where
<div class="gspad">a1</div>, ..., <div class="gspad">an</div> are
identifiers called the <div class="gsyntax">tags</div> of the union,
and <div class="gspad">D1</div>, ..., <div class="gspad">Dn</div> are
domains called the <div class="gsyntax">branches</div> of the
union. The tags <div class="gspad">ai</div> are optional, but required
when two of the <div class="gspad">Di</div> are equal, e.g.
<div class="gspad">Union(inches:Integer, centimeters:Integer)</div>. In the
interpreter, values of union domains are automatically coerced to
values in the branches and vice-versa as appropriate. See also
<a href="#p6220">case</a>.
</li>
<li><a name="p52482" class="glabel"/><b>unit</b>
<div class="gsyntax">(algebra)</div> an invertible element.
</li>
<li><a name="p52526" class="glabel"/><b>user function</b>
a function defined by a user during an interactive session. Contrast
<a href="#p5399">built-in function</a>.
</li>
<li><a name="p52631" class="glabel"/><b>user variable</b>
a variable created by the user at top-level during an interactive session
</li>
<li><a name="p52710" class="glabel"/><b>value</b>
<ol>
<li>
the result of <a href="#p19167">evaluating</a> an expression.
</li>
<li>
a property associated with a <a href="#p52894">variable</a> in a
<a href="#p4735">binding</a> in an <a href="#p19131">environment</a>.
</li>
</ol>
</li>
<li><a name="p52894" class="glabel"/><b>variable</b>
a means of referring to an object but itself is not an object. A
variable has a name and an associated <a href="#p4735">binding</a>
created by <a href="#p19167">evaluation</a> of Axiom expressions such
as <a href="#p12903">declarations</a>,
<a href="#p3322">assignments</a>, and
<a href="#p13754">definitions</a>. In the top-level
<a href="#p19131">environment</a> of the interpreter, variables are
<a href="#p24833">global variables</a>. Such variables can be freely
referenced in user-defined functions although a
<a href="#p22113">free</a> declaration is needed to assign values to
them. See <a href="#p32278">local variable</a> for details.
</li>
<li><a name="p53484" class="glabel"/><b>Void</b>
the type given when the <a href="#p52710">value</a> and <a
href="#p50664">type</a> of an expression are not needed. Also used
when there is no guarantee at run-time that a value and predictable
mode will result.
</li>
<li><a name="p53681" class="glabel"/><b>wild card</b>
a symbol which matches any substring including the empty string; for
example, the search string <div class="gsyntax">*an*</div> matches an
word containing the consecutive letters <div class="gsyntax">a</div>
and <div class="gsyntax">n</div>
</li>
<li><a name="p53866" class="glabel"/><b>workspace</b>
an interactive record of the user input and output held in an
interactive history file. Each user input and corresponding output
expression in the workspace has a corresponding <a href="#p47691">step
number</a>. The current output expression in the workspace is referred
to as <div class="gspad">%</div>. The output expression associated
with step number <div class="gspad">n</div> is referred to by <div
class="gspad">%%(n)</div>. The <div class="gspad">k</div>-th previous
output expression relative to the current step number <div
class="gspad">n</div> is referred to by <div class="gspad">%%(-
k)</div>. Each interactive <a href="#p21847">frame</a> has its own
workspace.
</li>
</ul>
</body>
</html>
|