5.1 广义的引用(Generalized Reference)

    &KEY 标识允许出现在 DEFSETF lambda列表中, 但是对应的关键字也必须出想在程序文本中.任何试图去修改只读数据都会发出一个 ERROR. 从文件里载入的程序文本还有引用常量都被认为是只读数据. 这个检测只为字符串执行, 不包括cons, 其他类型的数组, 还有用户定义的数据类型.也见 Section 31.11.2, “Macros EXT:LETF & EXT:LETF*”.

5.2 setf的展开(Setf Expansions)

    (GET-SETF-EXPANSION form &OPTIONAL environment), (EXT:GET-SETF-METHOD form &OPTIONAL environment), 还有 (EXT:GET-SETF-METHOD-MULTIPLE-VALUE form &OPTIONAL environment) 都接受一个可选的参数 environment ,这里的environment在宏展开时是很有必要的. 在 DEFINE-SETF-EXPANDER 和 EXT:DEFINE-SETF-METHOD lambda 列表 中, 可以指定一个 &ENVIRONMENT 和一个变量, 这个变量会绑定给 environment. 这个 environment 应该被传递给 所有的 GET-SETF-EXPANSION, EXT:GET-SETF-METHOD 和 EXT:GET-SETF-METHOD-MULTIPLE-VALUE 调用. 如果这个被执行了, 甚至本地的宏会被解释为适当的 place.

5.3 place的种类(Kinds of Places)

    另外 places:FUNCALL(SETF (FUNCALL #'symbol ...) object) 和 (SETF (FUNCALL 'symbol ...) object) 等价于 (SETF (symbol ...) object).PROGN(SETF (PROGN form ... place) object)LOCALLY(SETF (LOCALLY declaration ... form ... place) object)IF(SETF (IF condition place1 place2) object)GET-DISPATCH-MACRO-CHARACTER(SETF (GET-DISPATCH-MACRO-CHARACTER ...) ...) 调用 SET-DISPATCH-MACRO-CHARACTER.EXT:LONG-FLOAT-DIGITS:(SETF (EXT:LONG-FLOAT-DIGITS) digits) 设置默认的 LONG-FLOAT 尾数长度为 digits 位.VALUES-LIST(SETF (VALUES-LIST list) form) 等价于 (VALUES-LIST (SETF list (MULTIPLE-VALUE-LIST form))).注意注意这个 place 是受限的: 它只能用于 SETF, EXT:LETF, EXT:LETF*, 不能用于其他的.

5.4 Miscellaneous

    函数 FUNCTION-LAMBDA-EXPRESSION一个 FFI:FOREIGN-FUNCTION 的名字是一个字符串 (下层 C 函数的名字), 不是一个lisp function name.宏 DESTRUCTURING-BIND这个宏不会去执行全部的错误检查.宏 PROG1, PROG2, AND, OR, PSETQ, WHEN, UNLESS, COND, CASE, MULTIPLE-VALUE-LIST, MULTIPLE-VALUE-BIND, MULTIPLE-VALUE-SETQ这些宏被实现为特殊操作符 (被 [sec_3-1-2-1-2-2] 许可的) , 所以它们的性能很高.

5.5 宏 DEFCONSTANT

    这个初始值不会在编译时求值, 就像 DEFVAR 和 DEFPARAMETER. 如果你在编译的时候需要这个值就使用 EVAL-WHEN .constant variables 可能不会被动态或者词法绑定.也见 Section 3.3.2, “Declaration EXT:CONSTANT-NOTINLINE”.如果你需要去撤销一个 DEFCONSTANT 结构的影响, 声明这个符号为 SPECIAL (去把一个常量转化为动态变量), 然后声明它为 EXT:NOTSPECIAL (把这个动态变量转化为词法变量).注意如果你遵守通常的变量命名规则 ( DEFVAR 和 DEFPARAMETER 为*FOO* ,DEFCONSTANT 为 +BAR+ , LET/LET* 为 ZOT), 你会为自己减少很多麻烦. 也见 Q: A.4.14.

5.5.1. 变量 CUSTOM:*SUPPRESS-SIMILAR-CONSTANT-REDEFINITION-WARNING*

    如果被 DEFCONSTANT 定义的变量已经绑定一个值,它不和新的值 EQL , 会发出一个 WARNING . 然而,如果新值看上去和旧值相似 (打印为同一个字符串, 就像重复加载文件那样), 可以通过设置 CUSTOM:*SUPPRESS-SIMILAR-CONSTANT-REDEFINITION-WARNING* 为一个非NIL的值来抑制这个警告.CUSTOM:*SUPPRESS-SIMILAR-CONSTANT-REDEFINITION-WARNING* 的初始值是 NIL.

5.6 宏 EXT:FCASE

    这个宏允许为 CASE 指定测试的值,比如,
(fcase string= (subseq foo 0 (position #\Space foo))("first" 1)(("second" "two") 2)(("true" "yes") t)(otherwise nil))
    和以下结构一样
(let ((var (subseq foo 0 (position #\Space foo))))(cond ((string= var "first") 1)((or (string= var "second") (string= var "two")) 2)((or (string= var "true") (string= var "yes")) t)(t nil)))
    如果你使用内置的 HASH-TABLE 测试方式 (见 Section 18.4, “Function HASH-TABLE-TEST”) 作为这个测试值 (比如, EQUAL 而不是上述 STRING= , 但不是用  EXT:DEFINE-HASH-TABLE-TEST 定义的测试方式), 编译器就可能会优化这个 EXT:FCASE 结构,优于对应的 COND 结构.

5.7 函数 EXT:XOR

    这个函数检查它的参数中是否一个为非NIL, 如果是的话, 以多值返回它的值和在参数列表中的索引否则返回 NIL.

5.8 函数 EQ

    EQ 比较 CHARACTER 和 FIXNUM 就像 EQL 所做的. 没有不必要的 CHARACTER 和 NUMBER 的拷贝. 然而, 还是应该使用 EQL 因为它跨 Common Lisp 实现时具有更好的移植性.(LET ((x y)) (EQ x x)) 总是返回 T 对于任何的Lisp对象 y. 也见 Equality of foreign values.

5.9 特殊操作符 FUNCTION

    (FUNCTION symbol) 如果由 FLET or LABELS 建立的局部的函数定义存在就返回这个, 否则返回全局函数定义.(SPECIAL-OPERATOR-P symbol) 返回 NIL 或者 T. 如果它返回 T, 那么 (SYMBOL-FUNCTION symbol) 返回这个特殊操作符的处理者 (无用的) .

CLISP 实现记录:5.数据和控制流相关推荐

  1. innodb一页为什么要存储两行记录_innodb数据记录存储结构

    innodb页 数据存储在磁盘上:数据处理的过程发生在内存中,需要把磁盘的数据加载到内存中:处理写入或修改请求时,需要把内存中的内容刷新到磁盘上: innodb存储引擎,不是一条一条从磁盘读取记录,而 ...

  2. 使用sharepreferce记录数组数据

    使用sharepreferce记录数组数据 1 /** 2 * 3 * sharepreference纪录news数据 4 * 5 * 6 */ 7 private static final Stri ...

  3. 记录mysql数据库存表情

    记录mysql数据库存表情 项目需求:类似于淘宝的订单评价页面 扩展:数据存储与传输显示.扣扣表情包 项目需求:类似于淘宝的订单评价页面 期望页面显示出,在编辑信息框中输入的表情 一开始我们数据库表使 ...

  4. 宝宝成长记录标准数据

    宝宝体重和身高标准 今天带宝宝去打预防针,同时也做一下身体健康检查.宝宝刚满二个月,现在体重:6.8kg, 身高:60.4cm,长势不错啊很健康. 下面的表格是宝宝成长记录标准数据表,每次自己好好对一 ...

  5. 【应急基础】————7、Tomcat日志如何记录POST数据

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选. 对于常使用web服务器的朋 ...

  6. 不记录用户数据浏览器

    不记录用户数据浏览器 秘迹搜索 searx duckduckgo

  7. 1588 数字游戏(LOJ10166) 暴力0分 需要记录中间数据的数位DP

    总目录 在线测评地址(ybt) 在线测评地址(LOJ) 1.暴力0分 ybt 未通过 测试点 结果 内存 时间 测试点1 答案错误 612KB 2MS LOJ 暴力0分代码如下: #include & ...

  8. 几种常用的记录总线数据的Log文件以及如何保存和转换

    不管你是测试还是开发人员,一定免不了和总线打交道,对于测试工程师,提bug时经常需要上传log文件,其中就涉及到总线数据的保存:对于软件工程师,分析问题时需要用总线数据文件进行回放复现,这些都离不开记 ...

  9. 谷歌Jeff Dean团队提出利用深度学习对「电子健康记录」数据进行分析,可提高医疗诊断预测的准确性

    原文来源:arXiv 作者:Alvin Rajkomar.Eyal Oren.Kai Chen.Andrew M. Dai.Nissan Hajaj.Peter J. Liu.Xiaobing Liu ...

最新文章

  1. KDD Cup 2021城市大脑赛题解析!报名倒计时3天
  2. 第六篇:并发-粒度锁
  3. 从 AlphaGo 到具有人类智慧的 AI 究竟有多远?Keras之父François Chollet告诉你
  4. 2001年 数的划分
  5. 设计模式--状态(State)模式
  6. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。
  7. 【网址收藏】dubbo特新概念及特性、环境搭建、dubbo-monitor安装、rpc原理以及dubbo原理:框架设计、启动解析加载配置信息、服务暴露、服务引用及调用
  8. VTK:Points之ExtractSurfaceDemo
  9. python经典程序实例-Python3经典100例(③)
  10. VNC+SSH相关应用
  11. 数据传输类型与通信方式
  12. php中fread用法,php fread函数与fread函数用法_PHP教程
  13. matlab 象限图,【数据可视化】Tableau教程(十)象限图
  14. wd移动硬盘插电脑没反应_WD MY BOOK 桌面移动硬盘 插电脑不识别的解决办法。
  15. 探秘BOF 和EOF
  16. 228句最常用英文口语短句(转)
  17. 小程序+动易SF制作随手拍实例全景式操作(3)
  18. 西瓜视频中视频计划还有机会吗?
  19. 答:本科生写论文对考研有用吗?
  20. 螺旋矩阵(Java)

热门文章

  1. ping 192.168.1.1-t命令有什么用?是什么意思?
  2. English语法_原型不定式
  3. 浙大程序员甘愿放弃三万月薪跑滴滴,自称开心比什么都好
  4. 个人云盘、企业云盘傻傻分不清楚?3分钟带你清晰两者差异!
  5. 出现腰肌劳损怎么办?治疗护理6步走,帮你摆脱痛苦
  6. Python爬虫——Requests 库基本使用
  7. 整合Springboot+Vue(基础框架)
  8. 如何做二维码?教你一招轻松制作个性二维码
  9. 《从菜鸟到大师-杨老师课程笔记》Python工程师之 01
  10. 【屏蔽贴吧广告】贴吧广告屏蔽办法-解决方案 【普通用户 非会员】