基本的内部结构
| 数字(numbers) | 二进制数字序列 |
| 字符串(strings) | 字符码字节或字节对序列 |
| 符号(symbols) | 指向中心符号表的指针 |
| 一般表达式(general expressions) | 指向头和元素的指针序列 |
当用户在 Mathematica 插入输入时,一个数据结构被建立在计算机的内存中来表示已经输入的表达式.
一般地,表达式的不同部分被存储在内存的不同地方. 例如,对一个列表如
,其"主要部分"将被存储在一个地方,而每个实际元素将被存储在不同的地方.
列表的主要部分仅由三个指明计算机内存地址的指针组成. 在该地址上,形式列表元素的实际表达式能被找到. 这些表达式依次包含指向子表达式的指针. 当人们达到一个对象,例如一个数或者一个字符串时(该对象以二进制类型直接存储在内存中),这是指针链结束.
对于 Mathematica 运算至关重要的是符合,例如
的表示方法. 当
出现在表达式中间时,Mathematica 用一个指针代表它. 但是,这个指针总是指向内存中的同一个地方——由 Mathematica 进程定义的所有符号中心表的入口.
这个表是关于每个符号所有信息的存储器. 它包含指向给出符号名的串的指针,以及指向给出该符号计算规则的表达式的指针.
Mathematica 使用的每一块内存都保持着当前指向它的指针计数. 当这个计数降为零时,Mathematica 知道这块内存不再被使用,并且立即使这块内存可用于新的任务.
这个策略基本上保证内存不被浪费,Mathematica 使用的任何一块内存实际上正存储着用户需要访问的 Mathematica 进程数据.
在 Mathematica 的中心处有一个在概念上很简单的称为运算器的程序,它取出表达式中的每一个函数,并且对其进行计算.
当函数是建立在 Mathematica 中的数以千计的函数中的一个时,运算器所做的事情是直接执行 Mathematica 系统中的内部代码. 这个代码被建立来执行相应于该函数的运算. 然后建立一个新的表达式来代表结果.
Mathematica 内部函数的一个重要特征是它们支持通用运算. 这意味着在这些函数之外,用户可以构建程序进行计算机能够做的任何类型的运算.
这样,Mathematica 内部函数的一个小的子集合对于支持通用运算已经很充分了. 但是具有函数的整个集合使得在实际运用中更容易构建程序.
然而,因为 Mathematica 支持通用计算,故而用户决不要修改其内部函数,执行特定任务时,用户必须做的事情是以适当的方式将这些函数结合起来.
通用计算是所有标准计算机语言的基础. 但许多语言依赖于编译的思想. 例如,使用 C 或者 Fortran 是,用户首先写出程序,然后编译它生成能在计算机上实际执行的机器代码.
Mathematica 不需要用户进行编译:一旦用户输入完表达式,表达式中的函数能立即被执行.
Mathematica 常常对用户输入的表达式进行预处理,安排事务以便随后的运用尽可能的有效. 但是这样的预处理决不影响生成的结果,而且很少能明显地被看到.
