S-表达式(或性经验,对于“符号表达式”)是一个数据结构约翰·麦卡锡在编程语言Lisp中引入[1],也用于Scheme[2] [3] [4]和某些其他编程语言。
S-表达式
基本上有两种不同的语法用于表示S表达式:内部的,所谓的“点对表示法”,反映了S表达式存储在计算机内存中的方式,以及外部的符号,基于嵌套列表,通常在S表达式从文件系统或程序员控制台输入或输出时使用。下面,无上下文文法是为这两种语法的略微受限版本.
首先,对于内部“点对”-语法:
对于外部“嵌套列表”-语法:
在这里可以代表任何原子的项目,例如用于数字和符号,还包括空列表(称为无用Lisp的说法)。
上述定义产生同构结构。这个同构两个变量之间的语法由函数实现哪个映射自虚线对到列表语法如下:
例如,函数映射内部虚线S表达式到一个外部的无点列表和内部的虚线S表达式到外部无点列表由两个元素组成。
仅以()为终端的S表达式
如果我们将注意力局限于S表达式的子集,其中只允许原子(即终端节点)’s,则上述语法被简化为:
用于内部语法,以及
用于外部语法。
因此,第一个语法生成平面二叉树而第二种语法生成平衡括号,这是两个不同的加泰罗尼亚数的组合解释.
将域为S表达式的函数表示为整数序列
要将一个函数表示为整数序列,该函数的域(可能还包括其范围)是一组所有S-表达式,其行为不依赖于S-表达式原子元素的特定身份,只需记录它如何作用于上面定义的子集,该子集由仅具有的作为其终端节点。为此,应该修复所有此类S-表达式的总排序(即,平面二叉树或括号),以便每个都可以用范围内唯一的整数引用.顺序A014486级为我们提供了一种非常自然的订购方式,这种结构按大小订购词典编纂顺序.
因此,要从一个函数中创建一个整数序列,该函数的域是所有S-表达式的集合,其范围是一组整数或自然数,可以将该函数应用于从A014486号,并将函数返回的整数记录为第个序列的项。参见示例。A057514号,A057515号,A126306号,A126307号和A127284号.
还有几个函数,其范围也是S表达式的子集,在这种情况下相应的整数序列将结果的位置记录在A014486号在相同的映射之后。
笔记