# Cadence SKILL 语言参考手册
## 产品版本 ICADVM18.1,2019 年 3 月
### 目录
#### 前言
- **范围**:介绍了手册的适用范围。
- **许可要求**:说明了使用 SKILL 语言所需的许可。
- **相关文档**:提供了其他相关文档的链接,包括“什么是新特性”、“安装、环境和基础设施”、“其他 SKILL 书籍”等内容。
- **额外学习资源**:包括视频库、Virtuoso 视频书籍、快速采用包等。
- **客户支持**:提供了获取客户支持的途径。
- **对文档的反馈**:说明了如何提供对文档的反馈。
- **理解 Cadence SKILL**:介绍了如何使用 SKILL 代码示例、样本 SKILL 代码、访问 API 帮助等。
- **排版和语法约定**:解释了文档中使用的排版和语法规则。
- **用于表示数据类型的标识符**:说明了用于表示不同数据类型的标识符。
#### 第 1 章:列表函数
- **append**:将两个列表合并为一个新列表。
- **append1**:在列表末尾添加一个元素,返回一个新列表。
- 其他列表操作函数,如 `car`、`cdr`、`cons`、`copy`、`length`、`list`、`listp` 等。
#### 第 2 章:数据结构
- **arrayp**:检查是否为数组。
- **arrayref**:引用数组中的元素。
- **assoc, assq, assv**:关联列表操作。
- **declare**:声明变量或函数。
- **defprop**:定义属性。
- **defstruct**:定义结构体。
- **defstructp**:检查是否为结构体。
- **defvar**:定义变量。
- **makeTable**:创建表。
- **makeVector**:创建向量。
- **setarray**:设置数组元素。
- **tablep**:检查是否为表。
- **type, typep**:类型相关操作。
- **vector**:创建向量。
- **vectorp**:检查是否为向量。
#### 第 3 章:数据操作函数
- **alphaNumCmp**:比较字符串。
- **concat**:连接字符串。
- **copy_\<name\>**:复制对象。
- **copyDefstructDeep**:深度复制结构体。
- **get**:获取属性值。
- **getSG**:获取特定属性值。
- **getq**:获取属性值(带引用)。
- **getqq**:获取属性值(带引用)。
- **importSkillVar**:导入 SKILL 变量。
- **integerp**:检查是否为整数。
- **make_\<name\>**:创建对象。
- **otherp**:检查是否为其他类型。
- **plist**:属性列表操作。
- **popf**:弹出元素。
- **postArrayDec**:数组后置递减。
- **postArrayInc**:数组后置递增。
- **postArraySet**:数组后置设置。
- **postdecrement**:后置递减。
- **postincrement**:后置递增。
- **preArrayDec**:数组前置递减。
- **preArrayInc**:数组前置递增。
- **preArraySet**:数组前置设置。
- **predecrement**:前置递减。
- **preincrement**:前置递增。
- **pushf**:压入元素。
- **putprop**:设置属性值。
- **putpropq**:设置属性值(带引用)。
- **putpropqq**:设置属性值(带引用)。
- **quote**:引用符号。
- **remprop**:移除属性。
- **rotatef**:旋转元素。
- **set**:设置变量值。
- **setf**:设置字段值。
- **setf_\<helper\>**:设置字段值的辅助函数。
- **setguard**:设置保护。
- **setplist**:设置属性列表。
- **setq**:设置变量值。
- **setSG**:设置特定值。
- **symbolp**:检查是否为符号。
- **symeval**:符号求值。
- **symstrp**:检查是否为符号字符串。
- **symval**:获取符号值。
#### 第 4 章:类型转换函数
- **charToInt**:字符转整数。
- **intToChar**:整数转字符。
- **listToVector**:列表转向量。
- **stringToFunction**:字符串转函数。
- **stringToSymbol**:字符串转符号。
- **stringToTime**:字符串转时间。
- **symbolToString**:符号转字符串。
- **tableToList**:表转列表。
- **timeToString**:时间转字符串。
- **timeToTm**:时间转时间结构体。
- **tmToTime**:时间结构体转时间。
- **vectorToList**:向量转列表。
#### 第 5 章:字符串函数
- **blankstrp**:检查是否为空字符串。
- **buildString**:构建字符串。
- **getchar**:获取字符。
- **index**:查找索引。
- **lowerCase**:转换为小写。
- **lsprintf**:格式化字符串。
- **nindex**:查找索引(带偏移)。
- **outstringp**:检查是否为输出字符串。
- **parseString**:解析字符串。
- **pcreCompile**:编译正则表达式。
- **pcreExecute**:执行正则表达式。
- **pcreGenCompileOptBits**:生成编译选项。
- **pcreGenExecOptBits**:生成执行选项。
- **pcreGetRecursionLimit**:获取递归限制。
- **pcreListCompileOptBits**:列出编译选项。
- **pcreListExecOptBits**:列出执行选项。
- **pcreMatchAssocList**:匹配关联列表。
- **pcreMatchList**:匹配列表。
- **pcreMatchp**:检查是否匹配。
- **pcreObjectp**:检查是否为正则对象。
- **pcrePrintLastMatchErr**:打印最后匹配错误。
- **pcreReplace**:替换字符串。
- **pcreSetRecursionLimit**:设置递归限制。
- **pcreSubpatCount**:获取子模式数量。
- **pcreSubstitute**:替换子模式。
- **readstring**:读取字符串。
- **rexCompile**:编译正则表达式。
- **rexExecute**:执行正则表达式。
- **rexMagic**:获取正则表达式魔法值。
- **rexMatchAssocList**:匹配关联列表。
- **rexMatchList**:匹配列表。
- **rexMatchp**:检查是否匹配。
- **rexReplace**:替换字符串。
- **rexSubstitute**:替换子模式。
- **rindex**:反向查找索引。
- **sprintf**:格式化字符串。
- **strcat**:连接字符串。
- **strcmp**:比较字符串。
- **stringp**:检查是否为字符串。
- **strlen**:获取字符串长度。
- **strncat**:连接字符串(带长度限制)。
- **strncmp**:比较字符串(带长度限制)。
- **strpbrk**:查找字符。
- **subst**:替换子字符串。
- **substring**:获取子字符串。
- **upperCase**:转换为大写。
#### 第 6 章:算术函数
- **abs**:绝对值。
- **add1**:加 1。
- **atof**:字符串转浮点数。
- **atoi**:字符串转整数。
- **ceiling**:向上取整。
- **defMathConstants**:定义数学常量。
- **difference**:差值。
- **evenp**:检查是否为偶数。
- **exp**:指数函数。
- **expt**:幂函数。
- **fix**:取整。
- **fixp**:检查是否为整数。
- **fix2**:取整(另一种方式)。
- **float**:转换为浮点数。
- **floatp**:检查是否为浮点数。
- **floor**:向下取整。
- **int**:转换为整数。
- **isInfinity**:检查是否为无穷大。
- **isNaN**:检查是否为非数字。
- **leftshift**:左移。
- **log**:自然对数。
- **log10**:以 10 为底的对数。
- **max**:最大值。
- **min**:最小值。
- **minus**:减法。
- **minusp**:检查是否为负数。
- **mod**:取模。
- **modf**:取模(另一种方式)。
- **modulo**:取模。
- **nearlyEqual**:近似相等。
- **negativep**:检查是否为负数。
- **oddp**:检查是否为奇数。
- **onep**:检查是否为 1。
- **plus**:加法。
- **plusp**:检查是否为正数。
- **quotient**:商。
- **random**:随机数。
- **realp**:检查是否为实数。
- **remainder**:余数。
- **rightshift**:右移。
- **round**:四舍五入。
- **round2**:四舍五入(另一种方式)。
- **sort**:排序。
- **sortcar**:按首元素排序。
- **sqrt**:平方根。
- **srandom**:设置随机种子。
- **sub1**:减 1。
- **times**:乘法。
- **truncate**:截断。
- **xdifference**:扩展差值。
- **xplus**:扩展加法。
- **xquotient**:扩展商。
- **xtimes**:扩展乘法。
- **zerop**:检查是否为零。
- **zxtd**:扩展减法。
#### 第 7 章:位运算函数
- **band**:按位与。
- **bitfield**:位字段操作。
- **bitfield1**:位字段操作(另一种方式)。
- **bnand**:按位与非。
- **bnor**:按位或非。
- **bnot**:按位取反。
- **bor**:按位或。
- **bxnor**:按位异或非。
- **bxor**:按位异或。
- **setqbitfield**:设置位字段。
- **setqbitfield1**:设置位字段(另一种方式)。
#### 第 8 章:三角函数
- **asin**:反正弦。
- **atan**:反正切。
- **atan2**:反正切(两个参数)。
- **cos**:余弦。
- **sin**:正弦。
- **tan**:正切。
- **acos**:反余弦。
#### 第 9 章:逻辑和关系函数
- **alphalessp**:按字母顺序比较。
- **and**:逻辑与。
- **compareTime**:比较时间。
- **eq**:检查是否相等。
- **equal**:检查是否相等。
- **eqv**:检查是否等价。
- **geqp**:检查是否大于等于。
- **greaterp**:检查是否大于。
- **leqp**:检查是否小于等于。
- **lessp**:检查是否小于。
- **member, memq, memv**:检查是否为成员。
- **neq**:检查是否不相等。
- **nequal**:检查是否不相等。
- **null**:检查是否为空。
- **numberp**:检查是否为数字。
- **or**:逻辑或。
- **sxtd**:符号扩展。
#### 第 10 章:流程控制函数
- **case**:条件分支。
- **caseq**:条件分支(另一种方式)。
- **catch**:捕获异常。
- **cond**:条件表达式。
- **decode**:解码。
- **do**:循环。
- **exists**:检查是否存在。
- **existss**:检查是否存在(另一种方式)。
- **for**:循环。
- **fors**:循环(另一种方式)。
- **forall**:对所有元素进行操作。
- **foralls**:对所有元素进行操作(另一种方式)。
- **foreach**:对每个元素进行操作。
- **foreachs**:对每个元素进行操作(另一种方式)。
- **if**:条件判断。
- **go**:跳转。
- **map**:映射。
- **mapc**:映射(另一种方式)。
- **mapcan**:映射(另一种方式)。
- **mapcar**:映射(另一种方式)。
- **mapcon**:映射(另一种方式)。
- **mapinto**:映射(另一种方式)。
- **maplist**:映射(另一种方式)。
- **not**:逻辑非。
- **regExitAfter**:注册退出后处理。
- **regExitBefore**:注册退出前处理。
- **remExitProc**:移除退出处理。
- **return**:返回。
- **setof**:设置集合。
- **setofs**:设置集合(另一种方式)。
- **throw**:抛出异常。
- **unless**:除非。
- **when**:当。
- **while**:当。
#### 第 11 章:输入输出函数
- **close**:关闭文件。
- **compress**:压缩。
- **display**:显示。
- **drain**:清空缓冲区。
- **ed**:编辑。
- **edi**:编辑(另一种方式)。
- **edit**:编辑。
- **edl**:编辑(另一种方式)。
- **encrypt**:加密。
- **expandMacroDeep**:深度展开宏。
- **fileLength**:获取文件长度。
- **fileSeek**:文件定位。
- **fileTell**:获取文件位置。
- **fileTimeModified**:获取文件修改时间。
- **fprintf**:格式化输出到文件。
- **fscanf, scanf, sscanf**:格式化输入。
- **get_filename**:获取文件名。
- **getc**:读取字符。
- **getDirFiles**:获取目录文件。
- **getOutstring**:获取输出字符串。
- **gets**:读取字符串。
- **include**:包含文件。
- **infile**:输入文件。
- **info**:显示信息。
- **inportp**:检查是否为输入端口。
- **instring**:输入字符串。
- **isExecutable**:检查是否可执行。
- **isFile**:检查是否为文件。
- **isFileEncrypted**:检查文件是否加密。
- **isFileName**:检查是否为文件名。
- **isLargeFile**:检查是否为大文件。
- **isLink**:检查是否为链接。
- **isPortAtEOF**:检查端口是否到达文件末尾。
- **isReadable**:检查是否可读。
- **isWritable**:检查是否可写。
- **lineread**:按行读取。
- **linereadstring**:按行读取字符串。
- **load**:加载文件。
- **loadi**:加载文件(另一种方式)。
- **loadPort**:加载端口。
- **loadstring**:加载字符串。
- **outstring**:输出字符串。
- **makeTempFileName**:创建临时文件名。
- **newline**:换行。
- **numOpenFiles**:获取打开的文件数量。
- **openportp**:检查是否为打开的端口。
- **outfile**:输出文件。
- **outportp**:检查是否为输出端口。
- **portp**:检查是否为端口。
- **pprint**:格式化打印。
- **print**:打印。
- **printf**:格式化打印。
- **printlev**:按级别打印。
- **println**:打印换行。
- **putc**:输出字符。
- **read**:读取。
- **readTable**:读取表格。
- **renameFile**:重命名文件。
- **simplifyFilename**:简化文件名。
- **simplifyFilenameUnique**:简化文件名(唯一)。
- **truename**:获取真实文件名。
- **which**:查找命令。
- **write**:写入。
- **writeTable**:写入表格。
#### 第 12 章:核心函数
- **arglist**:获取参数列表。
- **assert**:断言。
- **atom**:检查是否为原子类型。
- **bcdp**:检查是否为 BCD 类型。
- **booleanp**:检查是否为布尔类型。
- **boundp**:检查是否已绑定。
- **describe**:描述对象。
- **fdoc**:获取函数文档。
- **gc**:垃圾回收。
- **gensym**:生成符号。
- **getMuffleWarnings**:获取警告抑制状态。
- **getSkillVersion**:获取 SKILL 版本。
- **get_pname**:获取程序名。
- **get_string**:获取字符串。
- **getVersion**:获取版本信息。
- **getWarn**:获取警告状态。
- **help**:获取帮助信息。
- **inScheme**:检查是否在 Scheme 模式下。
- **inSkill**:检查是否在 SKILL 模式下。
- **isVarImported**:检查变量是否已导入。
- **makeSymbol**:创建符号。
- **measureTime**:测量时间。
- **muffleWarnings**:抑制警告。
- **needNCells**:需要的单元数量。
- **restoreFloat**:恢复浮点数。
- **saveFloat**:保存浮点数。
- **schemeTopLevelEnv**:获取 Scheme 顶层环境。
- **setPrompts**:设置提示符。
- **sstatus**:设置状态。
- **status**:获取状态。
- **theEnvironment**:获取当前环境。
- **unbindVar**:解绑变量。
#### 第 13 章:函数和程序结构
- **addDefstructClass**:添加结构体类。
- **alias**:创建别名。
- **apply**:应用函数。
- **argc**:获取参数数量。
- **argv**:获取参数列表。
- **begin**:开始。
- **clearExitProcs**:清除退出处理。
- **declareLambda**:声明 lambda 函数。
- **declareNLambda**:声明 nlambda 函数。
- **declareSQNLambda**:声明 sqnlambda 函数。
- **defdynamic**:定义动态变量。
- **defglobalfun**:定义全局函数。
- **define**:定义变量或函数。
- **define_syntax**:定义语法。
- **defmacro**:定义宏。
- **defsetf**:定义 setf 函数。
- **defun**:定义函数。
- **defUserInitProc**:定义用户初始化过程。
- **destructuringBind**:解构绑定。
- **dynamic**:动态变量。
- **dynamicLet**:动态 let。
- **err**:错误。
- **error**:错误。
- **errset**:错误设置。
- **errsetstring**:错误设置(字符串)。
- **eval**:求值。
- **evalstring**:求值字符串。
- **expandMacro**:展开宏。
- **fboundp**:检查是否为绑定的函数。
- **flet**:函数 let。
- **funcall**:调用函数。
- **getd**:获取定义。
- **getFnWriteProtect**:获取函数写保护。
- **getFunType**:获取函数类型。
- **getVarWriteProtect**:获取变量写保护。
- **globalProc**:全局过程。
- **isCallable**:检查是否可调用。
- **isMacro**:检查是否为宏。
- **labels**:标签。
- **lambda**:lambda 函数。
- **let**:let。
- **letrec**:letrec。
- **letseq**:letseq。
- **mprocedure**:多参数过程。
- **nlambda**:nlambda 函数。
- **nprocedure**:nprocedure 函数。
- **procedure**:过程。
- **procedurep**:检查是否为过程。
- **prog**:程序。
- **prog1**:程序(返回第一个表达式的值)。
- **prog2**:程序(返回第二个表达式的值)。
- **progn**:程序(返回最后一个表达式的值)。
- **putd**:放置定义。
- **setf_dynamic**:动态设置。
- **setFnWriteProtect**:设置函数写保护。
- **setVarWriteProtect**:设置变量写保护。
- **unalias**:取消别名。
- **unwindProtect**:保护。
- **warn**:警告。
#### 第 14 章:环境函数
- **cdsGetInstPath**:获取安装路径。
- **cdsGetToolsPath**:获取工具路径。
- **cdsPlat**:获取平台信息。
- **changeWorkingDir**:更改工作目录。
- **cputime**:获取 CPU 时间。
- **createDir**:创建目录。
- **createDirHier**:创建目录层次。
- **csh**:调用 csh 命令。
- **deleteDir**:删除目录。
- **deleteFile**:删除文件。
- **exit**:退出。
- **getCurrentTime**:获取当前时间。
- **getInstallPath**:获取安装路径。
- **getLogin**:获取登录信息。
- **getPrompts**:获取提示符。
- **getShellEnvVar**:获取 Shell 环境变量。
- **getSkillPath**:获取 SKILL 路径。
- **getTempDir**:获取临时目录。
- **getWorkingDir**:获取工作目录。
- **isDir**:检查是否为目录。
- **prependInstallPath**:在安装路径前添加。
- **setShellEnvVar**:设置 Shell 环境变量。
- **setSkillPath**:设置 SKILL 路径。
- **sh, shell**:调用 Shell 命令。
- **system**:调用系统命令。
- **unsetShellEnvVar**:取消设置 Shell 环境变量。
- **vi, vii, vil**:调用 vi 编辑器。
#### 第 15 章:命名空间函数
- **makeNamespace**:创建命名空间。
- **findNamespace**:查找命名空间。
- **useNamespace**:使用命名空间。
- **unuseNamespace**:取消使用命名空间。
- **importSymbol**:导入符号。
- **findSymbol**:查找符号。
- **addToExportList**:添加到导出列表。
- **getSymbolNamespace**:获取符号命名空间。
- **removeFromExportList**:从导出列表中移除。
- **addToNamespace**:添加到命名空间。
- **shadow**:创建影子符号。
- **shadowImport**:影子导入。
- **removeShadowImport**:移除影子导入。
- **unimportSymbol**:取消导入符号。
#### 附录 A:Scheme/SKILL++ 等价表
- **词法结构**:词法结构的等价表。
- **表达式**:表达式的等价表。
- **函数**:函数的等价表。
#### 附录 B:符号到值的映射
- 符号到值的映射关系。
#### 附录 C:setf 辅助函数
- **setf_\<helper\>**:setf 的辅助函数。
#### 附录 D:类型内省函数
- 类型内省相关函数。
---
以上是该 HTML 文件的主要内容概要。如果您需要更详细的信息或特定部分的翻译,请告诉我。