Wolfram 系统会话的全局特征

主循环
在任何交互进程中,Wolfram 系統循环运行. 等待输入、处理输入、显示结果,然后再返回来等待新的输入. 作为这个 主循环 的一部分,Wolfram 系統保持和使用各种全局对象. 用这些对象工作常常是很有用的.
但是要清楚,通过某一特定前端使用 Wolfram 系統时,该前端会建立自己的主循环,本节所叙述的内容不一定适用.
In[n]
n 个输入行的表达式
InString[n]
n 个输入行的文本形式
%n
or
Out[n]
n 个输出行的表达式
Out[{n1,n2,}]
输出表达式列表
%%%
( n times) or
Out[-n]
倒数第 n 个输出行的表达式
MessageList[n]
处理第 n 行时产生的信息列表
$Line
当前行号(可重新设置)
输入输出表达式.
在标准的交互进程中有一个输入和输出行序列. Wolfram 系統将这些行的表达式值存放在 In[n]Out[n] 中.
像通常由 In[n]:= 提示所表明的一样,输入表达式用延时赋值存放. 这意味着每次需要 In[n] 时,这一输入表达式将在当前环境中重新计算.
x 赋一个值:
使用 x 的值:
删除所有赋给 x 的值:
在当前环境中重新计算,对 x 没有赋任何值:
给出第二个输入行的文本形式,适合于编辑和其他文本操作:
$HistoryLength
要保持前面输入和输出的行数
指定要保持的进程历史长度.
Wolfram 系統默认保存进程过程中所有输入和输出行. 在很长的进程中,这会占用大量的计算机内存. 但通过使用 Unprotect[In,Out],后跟 Clear[In,Out] 明显清除 InOut 的值可以删除输入和输出行. 通过设置全局变量 $HistoryLength 也可以令 Wolfram 系統保存前面的有限行.
注意在一个进程的任何点,可以重新设置计数器 $Line,这样就可以用新行去覆盖前面的行.
$PreRead
在送往 Wolfram 系統之前用于每个输入字符串的函数
$Pre
在计算之前用于每个表达式的函数
$Post
计算之后用于每个表达式的函数
$PrePrint
Out[n] 赋值后,但在结果显示之前使用的函数
$SyntaxHandler
用于任何一个有语法错误输入行的函数
在主循环中使用的全局函数.
Wolfram 系統提供各种 挂钩 以便插入用于主循环各个阶段表达式的函数. 例如,赋以全局变量 $Pre 的值的函数在任何输入的表达式计算之前自动使用.
对于一个特定输入行而言,标准的主循环从得到一个输入文本字符串开始. 特别是需要处理特殊字符串时,有可能在Wolfram 系統进一步加工之前需要修改这个文本字符串. 这可以通过将一个函数赋以全局变量 $PreRead 的值来实现. 该函数将作用于这个字符串,其结果将作为这个特殊输入行实际的输入字符串.
令 Wolfram 系統在每个输入字符串中用 {} 代替 listHead
将列表当作 listHead 表达式输入:
当对于 $PreRead 的定义不修改输入字符串时,可以如下方式删除 $PreRead 的值:
当 Wolfram 系統成功地读入一个表达式后就可计算. 在计算之前,Wolfram 系統使用指定为 $Pre 值的函数,计算之后使用指定为 $Post 值的函数. 注意,除非 $Pre 函数保持其变量不计算,则该函数与 $Post 有相同的效果.
$Post 用来给出从 Wolfram 系統所得结果的 后处理. 例如,为了使用 Wolfram 系統得到所产生结果的近似值,需要设置 $Post=N.
令 Wolfram 系統对每个结果使用函数 N
Wolfram 系統对任何输入进行近似:
删除所给定的后处理函数:
Wolfram 系統产生结果后使用某个指定的 $Post 函数,然后取出结果赋于 Out[$Line]. 下一步 Wolfram 系統显示该结果,但在这之前要使用某个指定为 $PrePrint 值的函数.
令 Wolfram 系統将所有输出缩短为 2 行:
仅显示 2 行形式的输出:
删除赋于 $PrePrint 的值:
在一般的 Wolfram 系統进程中产生各种类型的输出. 一般来说,每一种类型的输出送往确定的输出通道,如 "流和底层的输入输出" 中所述. 每一个输出通道有一个全局变量,其给出要包含在这个输出通道中的输出流列表.
$Output
标准输出和由 Print 产生的文本
$Echo
每个输入行的回响(储存在 InString[n] 中)
$Urgent
输入提示和其他紧急输出
$Messages
标准信息和由 Message 产生的输出
在标准 Wolfram 系統对话中的输出通道.
通过修改在给定输出通道中的流列表,可以重新定向或者复制特定类型的 Wolfram 系統输出. 例如,通过打开一个到文件的输入流,且将其包含在 $Echo 列表中,就可以将每个对 Wolfram 系統的输入存在一个文件中.
Streams[]
所有打开的流列表
Streams["name"]
所有具有指定名称的打开流列表
$Input
当前输入流的名称
$InputFileName
当前搜索输入的文件绝对路径
在 Wolfram 系統进程中打开流.
函数 Streams 显示所有输入、输出和在一个 Wolfram 系統进程中的某一点打开的其他流. 变量 $Input 给出特定点Wolfram 系統输入流的名称. 在 Get 命令的执行过程中,重新设置 $Input. Get 也将 $InputFileName 设置为输入文件的绝对路径.
$MessagePrePrint
用于信息中给出的表达式的函数
$Language
信息所用默认语言列表
信息参数.
有各种确定 Wolfram 系統所产生信息形式的全局参数.
"消息" 节讨论的一样,典型的信息包含一个表达式的序列,与 StringForm 的信息文本相结合. $MessagePrePrint 给出在显示之前作用于表达式的函数. $MessagePrePrint 的默认值对于文本格式化为 Short,而对于排版来说是 ShortShallow 的组合.
"国际消息" 节讨论的一样,在 Wolfram 系統中可以指定信息所使用的语言. 在一个特定的 Wolfram 系統进程中,可以把一个语言名列表指定为 $Language 的值.
Exit[]
or
Quit[]
结束所使用的 Wolfram 系統进程
$Epilog
在结束之前计算的一个全局变量
结束 Wolfram 系統进程.
Wolfram 系統在明确告诉退出之前,将一直进行主循环. 大部分 Wolfram 系統界面提供了退出的特殊方法. 但总可以调用 ExitQuit 退出.
Wolfram 系統允许对全局变量 $Epilog 给出一个值去指定 Wolfram 系統实际退出之前进行的运算. 用这种方法可以让 Wolfram 系統在退出之前保存某些对象.
$IgnoreEOF
是否忽略文件结束字符
决定处理文件结束字符的全局变量.
"字符串中的特殊字符" 中讨论的一样,Wolfram 系統通常并不按特殊方式处理特殊字符. 但可能有一个例外,用默认设置 $IgnoreEOF=False 时,Wolfram 系統能识别文件结束字符. 当在标准交互 Wolfram 系統进程的一个输入行仅接收到一个文件结束字符时,Wolfram 系統就退出这个进程.
怎样输入文件结束字符依赖于所使用的计算机系统. 例如,在 Unix 中,一般用 Ctrl+D.
注意,如果在 批处理模式 下使用 Wolfram 系統,其中所有的输入来源于一个文件,不管 $IgnoreEOF 的值如何,到文件结束就自动退出.
对话
在标准交互式进程中,可以用 Wolfram 语言命令 Dialog 去建立一个子进程或者对话. 在进行计算的过程中,可以用对话与 Wolfram 语言相互作用. 像 "追踪运算" 中提到的一样,TraceDialog 在一个表达式计算的过程中的指定点自动调用 Dialog. 另外,在计算过程中要中断 Wolfram 语言时,一般用对话检查其状态.
Dialog[]
启动 Wolfram 语言对话
Dialog[expr]
启动对话,将 expr 作为 % 的当前值
Return[]
从对话返回,取 % 的当前值作为返回值
Return[expr]
从对话返回,取 expr 作为返回值
启动对话和从对话返回.
启动一个对话:
在对话中可以像在任何一个 Wolfram 语言进程中一样地进行计算:
Return 从一个对话中退出:
退出一个对话时,可以用 Return[expr] 返回一个对话值. 若不需要返回值,并且已经设置$IgnoreEOF=False 时,至少在基于文本界面的系统中可以用给出一个文件结束字符退出对话.
为计算表达式,Wolfram 语言启动一个对话:
对话的返回值 a+b 现在被插入原来的表达式中:
在开始一个对话时,有一些 初始表达式 是有用的. 如果用 Dialog[expr],那么 Wolfram 语言就开始一个对话,将expr 作为初始表达式,可以按 % 的值访问.
开始一个有初始表达式 a^2 的对话:
% 是对话中的初始表达式:
从第一个对话返回一个值,开始具有初始表达式 b+c 的第二个对话:
从第二个对话返回一个值,最后结果是有从这两个对话中插入值的原始表达式:
Dialog 通过标准 Wolfram 语言主循环的一个辅助版本工作. 所启动的每个对话从基本主循环 继承 各种值. 但有些值相对于该对话是局部的,退出对话时就恢复其原始值.
例如,启动对话时继承当前行数 $Line. 这意味着对话中的行数按主循环中的序号排列. 但是 $Line 的值相对应该对话是局部的. 于是,当退出该对话时,$Line 的值就恢复到在主循环中的值.
如果在 Wolfram 语言进程的第 10 行开始一个对话,则该对话的第一行就标记为 In[11]. 对话的相继行就标记为 In[12]In[13] 等. 当退出对话时,在主循环中的下行将标记为 In[11]. 此时,仍然可以引用对话中所产生的结果 Out[11]Out[12] 等. 但这些结果当主循环进行到行 In[12]In[13] 等时就会被覆盖.
在一个标准 Wolfram 语言进程中,通过观察输入和输出行是否缩进可以判断是否处于一个对话中. 当从对话中再调用对话时,将缩进两个层次. 一般地,在 d 嵌套循环中的缩进由对象 DialogIndent[d] 的输出形式决定. 通过定义该对象的格式就可以指定在所用的 Wolfram 语言进程中的对话怎样缩进.
DialogSymbols:>{x,y,}
其值相对于对话是局部的符号
DialogSymbols:>{x=x0,y=y0,}
具有初始值的符号
DialogProlog:>expr
在开始对话之前计算的表达式
Dialog 选项.
不论对 DialogSymbols 进行什么设置,Dialog 总是将 $Line$Epilog$MessageList 的值作为局部处理. 注意,对 $Epilog 给出一个值时,在退出对话时其就自动计算.
调用 Dialog 时首选局部化变量的值,然后计算对 DialogProlog 选项设置的任何表达式. 如果对 Dialog 函数明确给出了变量,接下来就计算. 最后才实际开始该对话.
退出对话时可以明确用 Return[expr] 指定返回值. 不这样做时,返回值就是对话中最后产生的一个值.
日期和时间函数
DateList[]
按形式 {year,month,day,hour,minute,second} 给出当前的本地日期和时间
DateList[TimeZone->z]
给出时区 z 中的当前日期和时间
$TimeZone
给出所用计算机系统设定的时区
找出日期和时间.
给出当前日期和时间:
Wolfram 语言 DateList 函数的返回值是所用计算机系统设定的当前日期和时间. 其假定夏令时等已经在所用计算机系统中进行了处理. 并且假定已经对所用计算机系统设置了适当的时区.
变量 $TimeZone 返回所用计算机系统设定的当前时区. 时区按小时数给出,加上 Greenwich 标准时间(GMT)后就得到正确的当地时间. 例如,美国东部标准时间(EST)对应于时区 . 注意,夏令时校正必须包含在时区中,所以美国东部夏令时(EDT)对应于时区 .
给出由计算机系统设定的当前时区:
时区给出当前日期和时间,这是日本的时区:
AbsoluteTime[]
从1900年1月1日起的总秒数
SessionTime[]
当前 Wolfram 系统进程开始后的秒数
TimeUsed[]
当前 Wolfram 系统进程开始中 CPU 使用秒数
$TimeUnit
所用计算机系统中最小时间区间
时间函数.
应当认识到,在任何计算机系统中,有一个确定的时间测量 刻度. 该刻度以全局变量 $TimeUnit 的值给出. 一般是一秒的 或者 .
Pause[n]
至少暂停 n
计算中的暂停.
给出各种时间函数:
暂停10秒,然后重新计算时间函数. 注意,TimeUsed[] 不受暂停影响:
AbsoluteTime[date]
从日期转换为绝对时间
DateList[time]
从绝对时间转换为日期
日期和绝对时间之间的转换.
d 为当前日期:
给当前日期加一个月:
给出所加这一个月的秒数:
DateList["string"]
把日期字符串转换为日期列表
DateList[{"string",{"e1","e2",}}]
通过从 "string" 中提取元素 "ei" 获得日期列表
从不同的日期格式转换.
可以使用 DateList["string"] 把日期字符串转换为日期列表,只要日期格式足够清楚.
试图把字符串解释为日期:
为了对转换过程进行更多的控制,可以指定字符串中出现的日期元素的顺序和类型. 元素可以是字符串,如 "Year""Quarter""Month""MonthName""Day""DayName""Hour""AMPM""Minute" 或者 "Second".
使用指定的元素提取日期:
如果日期元素分隔符包含字母或者数字,那么他们也必须被指定为日期元素的一部分.
提取包含字母作为分隔符的日期:
DateString[]
给出表示当前本地日期和时间的字符串
DateString[datespec,elems]
给出日期的元素 elems 以及由 datespec 给定的时间
转换为不同的日期格式.
DateString 用于给出日期和时间的美观的字符串表示. 精确输出格式可以从日期元素的长列表,例如 "DateTime""DayName""HourShort" 等中指定.
以默认格式给出当前日期和时间:
对给定的日期指定格式:
DatePattern[elems]
匹配具有给定元素的日期的字符串模式
从字符串中提取日期.
用户可以在字符串匹配函数中使用 DatePattern[elems] 作为字符串模式. 日期元素与 DateList 中使用的相同,虽然默认的日期元素分隔符被限制为 /-: 或者 . 字符. 其他分隔符可以在日期元素列表中明确给出.
从字符串中提取具有给定格式的日期:
使用明确分隔符提取日期:
DateListPlot[list]
从具有日期坐标的数据列表中生成图线
DateListPlot[list,datespec]
从具有以 datespec 指定的日期的数据列表中生成图线
DateListLogPlot[list]
从具有日期坐标的数据列表中生成线性对数图线
DateListLogPlot[list,datespec]
从具有以 datespec 指定的日期的数据列表中生成线性对数图线
使用日期坐标画出数据的图形.
DateListPlot 可以用来使用日期或时间的水平坐标画出数据图形. 日期可以是列表、字符串或者绝对时间,分别对应于DateListDateStringAbsoluteTime. 日期指定值 datespec 可以赋给具有给定数据 {y1,y2,} 的相关日期. DateListLogPlot 允许用户使用对数垂直标度画出数据图形.
收集一些金融时间序列的数据:
画出该金融数据的图线:
在对数标度上画出同样的数据:
画出不包含明确日期的月数据的图线:
Timing[expr]
计算 expr,并且返回所需的CPU时间列表,包括取得的结果
AbsoluteTiming[expr]
计算 expr,给出采用的绝对时间
Wolfram 语言计时(timing)操作.
Timing 用来计算与单个 Wolfram 语言表达式计算有关的时间. TimingTimeUsed 的增量对应. 注意,这仅包含与在 Wolfram 语言内核中表达式实际计算有关的时间. 表达式的输出格式化时间以及与外部程序有关的时间没有包括在内.
AbsoluteTiming 允许用户测量绝对的总占用时间. 然而,应当认识到,AbsoluteTimingTiming 的特定计算所报告的时间取决于许多因素.
首先,该时间依赖于所用计算机系统. 其不仅依赖于指令时间,而且依赖于内存缓冲,以及在计算中对 Wolfram 语言内部代码进行编译时优化的细节.
这个时间也依赖于进行计算时 Wolfram 语言进程的确切状态. 许多 Wolfram 语言所用的内部优化依赖于前面计算的细节. 例如,Wolfram 语言经常使用前面的计算结果,以避免不必要的重复计算. 另外,第一次按某种特殊方式调用一些Wolfram 语言函数时他们建立一些内部表,再次按同一种方式调用时运行就快得多. 由于这些原因,一个运算在同一个 Wolfram 语言进程的不同点进行时所用的时间不一定相同.
给出这个运算所需要的 CPU 时间. 其中,使计算结果作为空值 Null 给出:
Wolfram 语言内部已经建立了阶乘运算的表,在可测量范围内该计算几乎不花 CPU 时间:
一些绝对时间确实是流逝了:
注意,由 Timing 所得的结果精确到所用计算机系统的时间刻度 $TimeUnit. 例如,计时(timing)报告的结果 0 事实上有可能与 $TimeUnit 相同.
TimeConstrained[expr,t]
计算表达式 exprt 秒钟以后中断计算
TimeConstrained[expr,t,failexpr]
没有满足时间限制时返回 failexpr
限时计算.
在交互式地使用 Wolfram 语言时,经常要进行一个计算,但这个计算时间如果太长时,我们要退出该计算. 可以用 TimeConstrained 在一个程序中模拟这个过程. TimeConstrained 计算一个表达式,到一定的时间后,在没有完成时就中断这个计算,返回 $Aborted 或者所指定的表达式.
TimeConstrained 可以令 Wolfram 语言在限定的时间内按一种特定的方式处理一个问题,当这种处理方式没有成功时就转向另一种处理方式. 但要注意到当 Wolfram 语言在某一计算过程中不能中断时,TimeConstrained 可能会超时. 另外,不同计算机系统的运行速度不同,所以使用 TimeConstrained 的程序往往在不同的计算机系统中会给出不同的结果.
内存管理
MemoryInUse[]
当前 Wolfram 系统所使用内存的字节数
MaxMemoryUsed[]
在这个进程中 Wolfram 系统所使用内存的最大字节数
找出所用的内存.
特别是在符号运算中,内存是限制计算量的主要资源. 计算速度慢时,只要延长计算时间即可. 但是,如果一个计算产生的中间表达式不能放入内存时,就无法使计算继续下去.
Wolfram 系统使用内存时很仔细,每次当所产生的中间结果不再使用时,Wolfram 系统就立即回收分配给它的内存. 这意味着在进程的任意点,Wolfram 系统仅保存实际需要的那些表达式,不保存后面不需要的对象.
给出 Wolfram 系统当前所使用内存的字节数:
产生 10000 个元素的列表:
需要额外的内存去存放这个列表:
这个列表保存 Out[2] 的值. 当删除 Out[2] 时,该列表就不再使用:
所使用的内存减少:
显示在此进程的任意点所需要的最大内存:
经常出现的一个问题是在某一计算机系统中 Wolfram 系统实际能使用多少内存. 通常某个时刻在该计算机上运行的所有过程能使用的内存是一个确定的量. 有时候该内存量等于该计算机中 RAM 的物理字节数. 常常还包括一些虚拟内存,这是通过与存储设备交换数据而得到的.
运行 Wolfram 系统时,数据和代码都需要空间. 完整的 Wolfram 系统代码一般有几兆字节. 对任何特定的计算而言,通常仅使用其代码的一部分. 然而在计算 Wolfram 系统数据的总有效空间时,不要忘记 Wolfram 系统代码所占用的空间. 另外还要包括正在计算机上运行的其他过程所占用的空间. 运行的作业少时,自己的作业就可以使用更多的内存.
也要看到所需计算时间在很大程度上也依赖于物理内存量. 尽管虚拟内存可以使我们使用大量的内存空间,但通常比物理内存的访问要慢几百甚至几千倍. 因此需要虚拟内存的大型计算运行非常慢.
MemoryConstrained[expr,b]
计算 expr,当所需要的内存大于 b 时放弃
MemoryConstrained[expr,b,failexpr]
当没有满足内存限制时,返回 failexpr
限制内存的计算.
MemoryConstrainedTimeConstrained 的工作过程相同. 当所需要的内存超过指定值时,MemoryConstrained 就试图放弃所给的计算. 与 TimeConstrained 相同,在放弃计算之前所使用的实际内存可能会超过给定值.
ByteCount[expr]
存放 expr 所需内存的最大字节
LeafCount[expr]
expr 表达式树中的终结点数
找出表达式的大小.
尽管 ByteCount 在估计能处理类型表达式的大小时是有用的,但 ByteCount 给出的结果随着 Wolfram 系统版本的不同有很大的差异.
一个要点是 ByteCount 给出的总是存储一个表达式时所需的最大内存. Wolfram 系统通常使用少得多的内存去存放这个表达式. 主要问题是该表达式中有多少子表达式可以共用.
f[1+x,1+x] 等表达式中,这两个子表达式 1+x 完全相同,但实际上不一定能存放在计算机内存的同一块内存中. ByteCount 假设所有子表达式都不共用,在此基础上给出存放表达式所需要的字节数. 但要看到一旦使用了 /. 操作符等运算后,就破坏了子表达式的共用.
然而可以通过使用函数 Share 明确告诉 Wolfram 系统去共用子表达式. 用这一方法,可以大大减少存放一个表达式时所需的实际内存.
Share[expr]
expr 的存储中共用相同的表达式
Share[]
在整个内存中共用相同的子表达式
优化内存使用.
在大部分计算机系统中,运行一个程序时所需的内存分为两部分:由程序明确分配的内存和 堆栈空间. 在程序中每次调用一个内部例行子程序时,一定量的堆栈空间就用来存放与这个调用有关的参数. 在许多计算机系统中,由一个程序所使用的堆栈空间的最大值必须事先给出. 当指定的堆栈空间被超过时,该程序通常就退出.
在 Wolfram 系统中,堆栈空间的主要用途之一就是处理 Wolfram 系统函数的相互调用. 所有这样的调用被明确记录在Wolfram 系统 Stack 中,如 "运算堆栈" 中所述. 用户可以通过设置全局参数 $RecursionLimit 控制这个堆栈的大小. 应该将这个参数设置得足够小以保证在所用计算机系统中不会用尽堆栈空间.
全局系统信息
为了写出最通用的 Wolfram 语言程序,有时需要得到有关运行程序的系统的全局信息.
因此,例如要判断程序是否应该调用诸如 NotebookWrite 的函数时,就要确定该程序是否在使用这个笔记本前端的一个 Wolfram 语言会话中运行. 通过检测全局变量 $Notebooks 就能达到以上目的.
$Notebooks
一个笔记本前端是否正在使用
确定一个笔记本前端是否正在使用.
Wolfram 语言通常被交互式地使用,也可以按批处理模式运行,例如,从一个文件得到输入,再将结果写到另一个文件中去. 在这种情况下,一个程序不可能期望来自用户的交互式输入.
$BatchInput
输入是否按批处理模式给出
$BatchOutput
输出是否按批处理模式给出,没有添加标签等
指定批处理模式运行的变量.
Wolfram 语言内核是在所用计算机操作系统下运行的一个进程. 在 Wolfram 语言中有几个全局变量,可以用来确定这个进程的特点和其环境.
$CommandLine
用来启动 Wolfram 语言内核的原始命令行
$ParentLink
指定启动内核程序的 WSTP LinkObject (内核直接启动时为 Null
$ProcessID
操作系统分配给 Wolfram 系统内核进程的 ID
$ParentProcessID
调用 Wolfram 系统内核的进程 ID
$Username
运行 Wolfram 系统内核的用户登录名
Environment["var"]
由操作系统定义的变量值
与 Wolfram 语言内核进程有关的变量.
在一个特定的 Wolfram 语言会话中使用了诸如 x 的变量时,可能要求其与另一个 Wolfram 语言会话中的 x 相同或不同. 为了保证不同会话中的对象不同,Wolfram 语言支持 $SessionID 变量,利用开始时间、进程 ID和机器 ID 等对每一个 Wolfram 语言会话给出不同的值,不论这些会话是在同一机器或不同的机器上运行.
$SessionID
对每一个 Wolfram 语言会话设置的不同且唯一的编号
每一个 Wolfram 语言进程的唯一编号.
Wolfram 语言提供了判断运行内核版本的各种不同的全局变量. 这一点在编写利用一些功能(如第6版中的新功能)的程序时是重要的. 可以用 $VersionNumber 去检查这些功能是否可用.
$Version
给出所用 Wolfram 语言版本的字符串
$VersionNumber
Wolfram 系统的内核版本号(如 11.2)
$ReleaseNumber
在所用计算机系统上 Wolfram 系统内核的版本号
$CreationDate
该 Wolfram 系统版本创建的日期(用 DateObject 格式)
指定所用 Wolfram 语言版本的变量.
Wolfram 语言的设置是尽量与所运行的计算机相独立. 然而,如果要访问所用计算机系统外部各个方面,就需要找到其特征.
$System
描述所用计算机系统的完全字符串
$SystemID
指定所用计算机系统的简短字符串
$ProcessorType
所给计算机系统的处理器类型
$MachineType
所用计算机系统的总类型
$ByteOrdering
所用计算机系统上产生字节的排序约定
$OperatingSystem
所用的基本操作系统
$SystemCharacterEncoding
所用操作系统编码的默认原始字符
给出所用计算机特征的变量.
Wolfram 语言使用 $SystemID 的值去标记不同计算机系统下版本文件的目录,参见 "读取和写入 Wolfram 系统文件"和 "WSTP 程序的可移植性" 中讨论的. $SystemID 相同的计算机系统一般是二进制兼容的.
$OperatingSystem 的值为 "Windows" 或者 "Unix" 等. 通过测试 $OperatingSystem 可以确定一个外部程序是否可在这个计算机上运行.
给出用来计算输入的计算机系统的一些特征:
$MachineAddresses
当前 IP 地址列表
$MachineName
正在运行 Wolfram 语言的计算机名
$MachineDomains
计算机所在的当前网络域
$MachineID
Wolfram 系统赋给该计算机的唯一 ID
识别 Wolfram 语言运行的计算机的变量.
$ActivationKey
Wolfram 语言运行所需的激活密钥
$LicenseExpirationDate
许可证过期的日期
$NetworkLicense
是否是网络许可证
$LicenseServer
许可证服务器的机器全名
$LicenseProcesses
在该许可证下当前运行的 Wolfram 系统处理器数目
$MaxLicenseProcesses
由许可证所提供的最大进程数目
$PasswordFile
启动内核时的密码文件
与许可证管理有关的变量.
Wolfram 系统会话

命令行选项和环境变量

-pwfile
Wolfram 系统密码文件
-run
用以运行的 Wolfram 语言输入(仅包括内核)
-initfile
Wolfram 系统初始化文件(仅包括内核)
-noinit
不运行初始化文件(仅包括内核)
-wstp
只通过 WSTP 通讯
Wolfram 系统可执行文件的典型命令行选项.
如果 Wolfram 系统前端使用作为命令行参数的笔记本文件调用,那么该笔记本将成为最初选中的笔记本. 否则,将因此创建一个新的笔记本.
Wolfram 语言内核和前端也可以使用对于特定窗口环境专用的其他命令行选项.
Wolfram 系统前端的命令行环境
Wolfram 语言内核的命令行环境
$BaseDirectory 的设置
环境变量.
Wolfram 系统将读取操作系统环境变量的值,并且将把这些值作为给定的任意命令行选项的附加来使用.

初始化

在启动的时候,Wolfram 语言内核进行以下操作:

主循环

所有 Wolfram 系统会话重复执行以下主循环:
注意,如果从外部程序的 Wolfram Symbolic Transfer Protocol (WSTP) 中调用 Wolfram 语言,那么必须有效地创建自己的主循环,这通常与上述描述的过程不同.

消息

在一个 Wolfram 系统会话中,消息或者可以通过对 Message 的明确调用,或者在执行其他内置函数的过程中产生.
f::name::lang
在指定语言中的消息
f::name
在默认语言中的消息
General::name
具有给定名称的一般消息
消息名称.
如果对一个特定的消息没有指定语言,那么消息文本在每个由 $Language 指定的语言中搜索. 如果 f::name 未被定义,那么搜索 General::name 的定义. 如果仍然未找到消息,那么对 f"name" 运用给 $NewMessage 定义的任意值.
当阻止消息在计算过程中显示,Quiet[expr] 计算 expr. Off[message] 阻止指定的消息显示. Check 允许用户决定是否在表达式计算过程中产生特定消息. $MessageListMessageList[n] 记录所有在 Wolfram 系统会话的一个特定行的计算过程中产生的所有消息.
消息被指定为用于 StringForm 的第一个变量的字符串. $MessagePrePrint 被用于每个拼接为字符串的表达式.

终止

Exit[]
or
Quit[]
终止 Wolfram 系统
$Epilog
在 Wolfram 系统退出前计算的符号
$IgnoreEOF
当接收到一个文件末尾的字符,是否退出交互式 Wolfram 系统会话
end.m
当 Wolfram 系统终止时读取的文件
Wolfram 系统终止.
有一些方式可以终止一个 Wolfram 系统会话. 如果用户正在交互式地使用 Wolfram 系统,在一个输入行键入Exit[] 或者 Quit[] 将总是终止 Wolfram 系统.
如果从一个文件获取 Wolfram 语言的输入,那么到达文件末尾时 Wolfram 系统将退出. 如果用户正在交互式地使用 Wolfram 系统,如果收到一个文件结束字符(通常为 Ctrl+d),仍然将退出. 用户可以通过设置 $IgnoreEOF=True 终止 Wolfram 系统的运行.

网络许可证管理

single-machine license
进程必须总是运行在特定的机器上
network license
进程可以运行在网络的任意机器上
单机和网络许可证.
Wolfram 系统的副本可以使用单机或者网络许可证设置. 一个网络许可证是由以 !name 开头的 mathpass 文件中的行指示的,其中 name 是网络许可证的服务器名.
网络许可证由 Wolfram 系统许可证管理程序 mathlm 控制,运行在服务器上. 无论什么时候使用具有网络许可证的 Wolfram 系统,程序必须在运行. 通常用户想要设置自己的系统,使得无论什么时候启动系统,也启动 mathlm.
在命令行直接输入 .mathlm
mathlm 作为 Windows 服务加入
在 Microsoft Windows 中启动网络许可证管理器的方式.
在 Unix 命令行直接输入 ./mathlm
在中心系统启动脚本中加入一行以启动 mathlm
在 Macintosh 和 Linux 系统中启动网络许可证管理器的方式.
mathlm 不是直接从命令行启动的时候,通常把自己设为背景进程,并且继续运行直到明确被终止. 注意,如果一个 mathlm 进程正在运行,那么任何其他用户试图启动的 mathlm 进程将自动立即退出.
-logfile file
file 写入许可证服务器行为日志
-loglevel n
如何做出详细日志条目(1至4)
-logformat string
使用由 string 指定的日志格式
-language name
用于消息的语言(默认为 English
-pwfile file
使用指定的 mathpass 文件(默认为 ./mathpass
-timeout n
n 个小时以后暂停已经停止的 Wolfram 系统任务的授权
-restrict file
使用指定的限制文件
-mathid
打印许可证服务器的 MathID,然后退出
-foreground
在前台运行 mathlm,登陆到 stdout
-install
mathlm 作为 Windows 服务安装(只用于 Microsoft Windows)
-uninstall
mathlm 作为 Windows 服务卸载(只用于 Microsoft Windows)
mathlm 的一些命令行选项.
关于 mathlm 的更多详细信息,参见 "Mathematica 系统管理".
monitorlm
监控网络许可证活动的程序
monitorlm name
许可证服务器 name 的监控活动
监控网络许可证活动.
如果 monitorlm 运行在可以启动网络浏览器的环境中,将会自动在浏览器中生成 HTML 输出. 否则,就会产生纯文本.
-file file
把输出写入文件
-format spec
使用指定格式(texthtml、或者 cgi
-template file
把指定文件作为输出的模板使用
monitorlm 的一些命令行选项.