输入语法
输入字符
• 直接输入(如 ) |
• 通过全名输入(如 ) |
| • 通过别名输入 (如 Esc a Esc ) (仅限于笔记本前端) |
| • 通过从面板选择输入(仅限于笔记本前端) |
• 通过字符码输入(如 ) |
输入字符的典型方式.
所有可显示的 ASCII 字符可以直接输入. 那些非字母或数字的字符在
Mathematica 中被赋予明确的名称,使它们即使在没有明确显示的位置也能够在键盘直接输入.
| | \[RawSpace] |
| ! | \[RawExclamation] |
| " | \[RawDoubleQuote] |
| # | \[RawNumberSign] |
| $ | \[RawDollar] |
| % | \[RawPercent] |
| & | \[RawAmpersand] |
| ' | \[RawQuote] |
| ( | \[RawLeftParenthesis] |
| ) | \[RawRightParenthesis] |
| * | \[RawStar] |
| + | \[RawPlus] |
| , | \[RawComma] |
| - | \[RawDash] |
| . | \[RawDot] |
| / | \[RawSlash] |
| : | \[RawColon] |
|
| ; | \[RawSemicolon] |
| < | \[RawLess] |
| = | \[RawEqual] |
| > | \[RawGreater] |
| ? | \[RawQuestion] |
| @ | \[RawAt] |
| [ | \[RawLeftBracket] |
| \ | \[RawBackslash] |
| ] | \[RawRightBracket] |
| ^ | \[RawWedge] |
| _ | \[RawUnderscore] |
| ` | \[RawBackquote] |
| { | \[RawLeftBrace] |
| | | \[RawVerticalBar] |
| } | \[RawRightBrace] |
| ~ | \[RawTilde] |
|
非字母数字ASCII字符的全名.
输入
Mathematica 内核的所有字符都是根据源流的
CharacterEncoding 选项的设置进行解释的.
| \[Name] | 具有特定全名的字符 |
| \nnn | 具有八进制代码 nnn 的字符 |
| \.nn | 具有十六进制代码 nn 的字符 |
| \:nnnn | 具有十六进制代码 nnnn 的字符 |
输入字符的方式.
字符码可以使用
ToCharacterCode 产生. 这里遵循具有各种扩展的 Unicode 标准.
8位字符的编码小于256;16位字符的编码在256和65535之间. 大约有900个字符在
Mathematica 中被指定明确的名称. 其它字符必须使用各自的字符码输入.
| \\ | 单反斜线(十进制代码92) |
| \ | 单一空间(十进制代码32) |
| \" | 双引号(十进制代码34) |
| \b | 退格键或 Ctrl+H(十进制代码8) |
| \t | tab 或者 Ctrl+I(十进制代码9) |
| \n | 换行符或者 Ctrl+J(十进制代码10;全名 ) |
| \f | 换页或者 Ctrl+L(十进制代码12) |
| \r | 回车或者 Ctrl+M(十进制代码13) |
| \000 | null字节(代码0) |
一些特别的8位字符.
输入语法的类别
Mathematica 所采用的标准输入语法是
InputForm 和
StandardForm 中默认使用的. 可以通过定义
MakeExpression
来修改语法.
可以设置选项来指定什么输入形式应该被一个笔记本中或者从特定流得到的特定单元接受.
一般情况下,输入语法用来确定一个特定的字符串或框集合应该如何解释为一个表达式. 当使用笔记本前端创建框的时候,可以有隐藏的
InterpretationBox 或者
TagBox 对象修改框的解释.
由字符组成的字符串
 | 一个由字符组成的字符串 |
 | 在字符组成的字符串中的 |
 | 在字符组成的字符串中的 |
(在行末尾) | 忽略接下来的换行 |
 | 表示二维框的子串 |
输入由字符组成的字符串.
字符字符串可以包含8位或16位字符的任意序列. 由名称或字符码输入的字符如同字符直接输入一般存储.
在笔记本前端,默认粘贴到一个字符串的文本自动插入合适的 \ 字符,以使得在
Mathematica 中存储的字符串重新生成被粘贴的文本.
在

中,任何使用/序列表示的框结构都可以被采用.
StringExpression 对象可以用来表示包括符号结构(如模式元素等)的字符串.
符号名和上下文
| name | 符号名 |
| `name | 在当前上下文中的符号名 |
| context`name | 在特定上下文中的符号名 |
| context` | 上下文名 |
| context1`context2` | 复合上下文名 |
| `context` | 与当前上下文相关的上下文 |
符号名和上下文.
符号名和上下文可以包含由
Mathematica 作为字母或类字母形式处理的任意字符. 它们可以包含数字,但不使用数字开头. 上下文必须使用

结束.
数
| digits | 整数 |
| digits.digits | 近似数 |
| base^^digits | 指定基数的整数 |
| base^^digits.digits | 指定基数的近似数 |
| mantissa*^n | 科学表示法(mantissa× ) |
| base^^mantissa*^n | 指定基数的科学表示法 (mantissa× ) |
| number` | 机器精度近似数 |
| number`s | 精度为 的任意精度数 |
| number``s | 准确度为 的任意精度数 |
数的输入形式.
数字可以使用基数在

到

之间的表示法

输入. 基数本身以十进制形式给出. 对于大于

的基数,其余的数字从字母

-

或

-

中选择. 对于这些用途来说,大写字母和小写字母是等价的. 浮点数字可以通过在
digits 序列中包括

来指定.
在科学表示法中,
mantissa 可以包含

记号. 指数

必须始终是一个整数,用十进制数指定.
精确度或准确度

可以是任意实数;不必是整数.
在形式

中,精确度

以十进制形式给出,但是它给出在特定基数,而非基数10上的精确度的数字的有效数目.
如果对一个近似数

给出的数字数目是
Ceiling[$MachinePrecision]+1 或更少,那么它采取机器精度. 如果给出更多的数字,那么

作为一个任意精度数采用.

的准确度为在小数点右边出现的数字数目,而它的精度为
Log[10, Abs[x]]+Accuracy[x].
以
0``s 形式输入的数字采用精度0和准确度

.
括号内的对象
括号内的对象使用明确的左右分隔符来表明它们的范围. 它们可以在
Mathematica 输入的任何位置出现,并且可以被以任何方式嵌套.
在括号内的对象中的分隔符是匹配操作符(
matchfix operators). 但是由于这些分隔符明确封装了所有操作数,对这样的操作符,不需要分配任何优先级.
| (*any text*) | 注释 |
| (expr) | 括号(parenthesization):输入的分组 |
元素不使用逗号分隔的括号内的对象.
注释可以嵌套,也可以持续任意行. 它们可以包含8位或16位字符.
括号必须对单个完整表达式进行封装;既不允许使用

,也不允许

.
| {e1,e2,...} | List[e1,e2,...] |
e1,e2,... | AngleBracket[e1,e2,...] |
expr | Floor[expr] |
expr | Ceiling[expr] |
e1,e2,... | BracketingBar[e1,e2,...] |
e1,e2,... | DoubleBracketingBar[e1,e2,...] |
| \(input\) | 输入或者框的分组 |
允许使用逗号分隔元素的括号内的对象.

可以包含任意数目的元素,使用逗号分隔连续的元素.

是
List
,具有零个元素的列表.

可以作为

输入.
字符

可以和普通的逗号交替使用;唯一的不同是

不被显示.
当分隔符是特殊的字符时,传统上,它们被命名为

和

.

用来使用一维字符串输入框. 注意,在所用输入块的最外层的

中的语法与外层稍有不同,如
"框的输入" 所述.
| h[e1,e2,...] | 标准表达式 |
| e[[i1,i2,...]] | Part[e,i1,i2,...] |
e i1,i2,... | Part[e,i1,i2,...] |
具有头部的括号内的对象.
具有头部的括号内的对象明确分隔所有操作数,除了头部. 优先级必须分配用来定义头部的范围.

的优先级足够高,使得

解释为
Not
. 然而,

解释为

.
二维输入形式
| xy | Power[x,y] |
 | Divide[x,y] |
 | Sqrt[x] |
 | Power[x,1/n] |
| {{a11,a12,...},{a21,a22,...}} |
xy | D[y,x] |
x,...y | D[y,x,...] |
|
y x | Integrate[y,{x,xmin,xmax}] |
  x | Integrate[y w/z,{x,xmin,xmax}] |
y | Sum[y,{x,xmin,xmax}] |
y | Product[y,{x,xmin,xmax}] |
|
采用内置计算规则的二维输入形式.
由
GridBox 表示的表达式的任何阵列可以解释为列表的列表. 即使
GridBox 只有一行,解释仍然是

.
在

形式中,可以忽略极限

和

,正如

和

可以一样.
不采用内置计算规则的二维输入形式.
对于如

和

这样的操作数由操作符展开的形式,不存在优先级问题. 对于如

和

这样左边的优先级不必指定的形式,这样的形式在上述优先级表中包含.
框的输入
输入框的方式.
控制键
| Ctrl+2 或 Ctrl+@ | 平方根 |
| Ctrl+5 或 Ctrl+% | 转换到另一个位置(如下标到上标) |
| Ctrl+6 或 Ctrl+^ | 上标 |
| Ctrl+7 或 Ctrl+& | 顶标 |
| Ctrl+9 或 Ctrl+( | 在一个存在的单元中开始新的单元 |
| Ctrl+0 或 Ctrl+) | 在一个存在的单元中结束新的单元 |
| Ctrl+- 或 Ctrl+_ | 下标 |
| Ctrl+4 或 Ctrl+$ | 底标 |
| Ctrl+Enter | 在表格中创建一个新行 |
| Ctrl+, | 在表格中创建一个新列 |
| Ctrl+. | 扩大当前的选择 |
| Ctrl+/ | 分数 |
| Ctrl+Space | 从当前位置或状态返回 |
Ctrl+ , Ctrl+ , Ctrl+ , Ctrl+ | 通过屏幕上最小的增量移动对象 |
标准控制键.
在英文键盘中,在给出另一种方法的时候,两种形式都可以适用. 在其他键盘上,第一种形式可以使用,但第二种可能不行.
从文本构建的框
当用户给出的文本输入用来构建框,如笔记本中的
StandardForm 或者
TraditionalForm 单元,对于输入的处理与当它直接输给内核的情况稍有不同.
输入分成不同的令牌(
tokens),并且每个令牌作为单独的字符字符串包括在框结构中. 因此,例如,

被分成令牌

,

,

.
• 符号名(如 ) |
• 数字(如 ) |
• 操作符 (如 ) |
• 空白(如 ) |
• 字符字符串(如 ) |
用来构建框的文本中的令牌类型.
构建
RowBox 用来保持每个操作符和操作数.
RowBox 对象的嵌套由标准
Mathematica 语法中操作符的优先级决定.
注意,空间字符不自动被丢弃. 相反地,每个这样的字符的序列被作为单独的令牌.
基于字符串的输入
| \(...\) | 输入原始框 |
| \!\(...\) | 输入和解释框 |
输入原始和解释框.
用户给出的任何位于

和

之间的文本输入用来指定构建的框. 只有在用户指定

应该被完成的情况下,才对框进行解释. 否则,例如,

被保留作为
SuperscriptBox
,而没有转换为
Power
.
在最外层的

之内,进一步的

指定分组,并且导致
RowBox 对象的插入.
| \(box1,box2,...\) | RowBox[box1,box2,...] |
| box1\^box2 | SuperscriptBox[box1,box2] |
| box1\_box2 | SubscriptBox[box1,box2] |
| box1\_box2\%box3 | SubsuperscriptBox[box1,box2,box3] |
| box1\&box2 | OverscriptBox[box1,box2] |
| box1\+box2 | UnderscriptBox[box1,box2] |
| box1\+box2\%box3 | UnderoverscriptBox[box1,box2,box3] |
| box1\/box2 | FractionBox[box1,box2] |
| \@box | SqrtBox[box] |
| form\` box | FormBox[box,form] |
| \*input | 通过解释 input 构建框 |
\ | 插入一个空格 |
| \n | 插入一个新行 |
| \t | 在一个行的开头缩进 |
构建原始框的基于字符串的方式.
在位于

和

之间的空间中的字符串输入,制表符和换行符被丢弃.

可以用来插入一个单一的空格. 特殊间隔字符如
\[ThinSpace],
\[ThickSpace] 或者
\[NegativeThinSpace] 不被忽略.
当用户把排版形式输入为一个字符串,字符串的内部表示使用上述的形式. 前端显示排版形式,但是当把内容保存为一个文件或者当把字符串发送给内核来计算的时候,使用

表示法.
输入表达式的范围
Mathematica 将把用户在单个行的所有输入作为相同表达式的一部分.
Mathematica 允许单个表达式持续多个行. 一般情况下,它把用户在连续的行的输入作为属于同一表达式处理,不论在不这样做的情况下,有没有形成完整的表达式.
因此,例如,如果一个行以

结尾,那么
Mathematica 将假定表达式将在下一行继续. 如果例如括号或其它用以匹配的操作符在行结尾是开放的,那么
Mathematica 将做同样的假定.
如果用户给出的特定行的末尾对应于一个完整的表达式,那么
Mathematica 将立即开始执行该表达式.
然而,如果用户通过在行的末尾放置一个

或者一个

(
\[Continuation]) 明确告诉
Mathematica 某个特定的表达式不是完整的.
Mathematica 将在同样的表达式里包含下一行,而放弃在行开头出现的任何空格或制表符.
特殊输入
| ?symbol | 获取信息 |
| ??symbol | 获取更多信息 |
| ?s1s2... | 在一些对象上获取信息 |
| !command | 执行外部命令(仅限于基于文本的界面) |
| !!file | 显示一个外部文件的内容(仅限于基于文本的界面) |
特殊输入行.
在
Mathematica 的绝大多数实现中,用户可以在输入的任何位置中给出特殊输入行. 唯一的限制是特殊输入必须始于一个行的开头.
一些
Mathematica 实现可能不允许用户使用
!command 执行外部命令.
前端文件
笔记本文件和前端初始文件可以包含标准
Mathematica 语言语法的一个子集. 该语法包括:
- 以 {...} 形式表示的列表. 操作符
,
和
. 表示函数slot的
形式.
- 各种 Mathematica 操作符,如
,
,
,等等.
- 涉及
,
和其它操作符的框(box)的字符串表示.
- 由
和
分隔的 Mathematica 注释.