Common Lisp中#\a、'a与#'a的区别是什么?
Common Lisp中
#\a、'a、#'a的区别 这三个写法在Common Lisp中属于完全不同的语法结构,对应不同类型的Lisp对象,具体区别如下:
#\a:字符字面量,代表小写字母a本身,属于character类型。你给出的示例中创建元素类型为character的数组时用它做初始值,最终生成的字符数组等价于字符串,所以输出为"aaaaaaaaaa"。'a:符号(Symbol)字面量,'是特殊操作符quote的简写,'a完全等价于(quote a),作用是阻止对标识符a的求值,直接返回a对应的符号对象。Common Lisp默认读取符号时会自动转为大写,所以示例中二位数组的输出为#2A((A A) (A A))。#'a:函数对象引用,#'是特殊操作符function的简写,#'a完全等价于(function a),作用是获取当前环境中绑定到名字a的函数对象,常用于高阶函数传参场景。如果当前环境中a没有绑定为函数,直接调用该语法会抛出未定义函数的错误。
你可以通过type-of函数直接验证三者的类型差异:
; 验证字符类型 (type-of #\a) ; 验证符号类型 (type-of 'a) ; 先定义函数a再验证函数类型 (defun a () "测试函数") (type-of #'a)
内容的提问来源于stack exchange,提问作者Pedro Henrique Dadalt de Queir
相关产品推荐
相关产品推荐

