面向记忆的学习材料
快速学习并记住Common Lisp编程语言的基础知识
知识点: Common Lisp的基本语法单元
题目: Common Lisp的两个基本语法单元是什么?
选项:
A. 函数和变量✅
B. 类和对象✅
C. 原子和S-表达式✅
D. 字符串和数字✅
知识点: Common Lisp的注释语法 题目: 在Common Lisp中,如何编写一个段落注释? 选项: 知识点: Common Lisp的基本数据类型 题目: 在Common Lisp中,表示复数的语法是什么? 选项: 知识点: Common Lisp的变量定义 题目: 在Common Lisp中,如何定义一个全局(动态)变量? 选项: 知识点: Common Lisp的结构体定义 题目: 在Common Lisp中,如何定义一个名为”dog”的结构体,包含name、breed和age三个字段? 选项: 知识点: Common Lisp的列表操作 题目: 在Common Lisp中,哪个函数用于将一个元素添加到列表的开头? 选项: 知识点: Common Lisp的函数定义 题目: 在Common Lisp中,如何定义一个名为”hello”的函数,接受一个名字参数并返回问候语? 选项: 知识点: Common Lisp的可选参数 题目: 在Common Lisp中,如何在函数定义中指定一个可选参数? 选项: 知识点: Common Lisp的相等性判断 题目: 在Common Lisp中,哪个函数用于比较两个数值是否相等? 选项: 知识点: Common Lisp的条件语句 题目: 在Common Lisp中,最基本的条件语句是什么? 选项: 知识点: Common Lisp的符号操作 题目: 在Common Lisp中,哪个函数用于从字符串创建符号? 选项: 知识点: Common Lisp的包系统 题目: 在Common Lisp中,如何切换到名为”MY-PACKAGE”的包? 选项: 知识点: Common Lisp的宏定义 题目: 在Common Lisp中,如何定义一个简单的宏? 选项: 知识点: Common Lisp的类型声明 题目: 在Common Lisp中,如何声明一个变量的类型为整数? 选项: 知识点: Common Lisp的错误处理 题目: 在Common Lisp中,哪个宏用于捕获和处理错误? 选项: 知识点: Common Lisp的输入输出 题目: 在Common Lisp中,哪个函数用于格式化输出字符串? 选项: 知识点: Common Lisp的循环 题目: 在Common Lisp中,哪个是最通用和强大的循环构造? 选项: 知识点: Common Lisp的文件操作 题目: 在Common Lisp中,哪个函数用于打开文件? 选项: 知识点: Common Lisp的CLOS (Common Lisp Object System) 题目: 在CLOS中,如何定义一个简单的类? 选项: 知识点: Common Lisp的读取宏 题目: 在Common Lisp中,哪个函数用于定义新的读取宏? 选项: 知识点: Common Lisp的多值返回 题目: 在Common Lisp中,如何定义一个返回多个值的函数? 选项: Common Lisp是一种强大而灵活的编程语言,具有以下特点: 掌握这些基础知识点将帮助你开始Common Lisp编程之旅。记住,实践是学习编程语言的最佳方式,所以要多写代码,多使用REPL进行实验。 然而,为了更全面地理解,需要补充一些细节: 在 Common Lisp 中, 以下是使用特殊变量的示例:
A. 使用单个分号(;)✅
B. 使用两个分号(;;)✅
C. 使用三个分号(;;;)✅
D. 使用四个分号(;;;;)✅
A. (complex 1 2)✅
B. #C(1 2)✅
C. 1+2i✅
D. (1, 2)✅
A. (setq ✅var value)
B. (let ((var value)))✅
C. (defvar var value)✅
D. (defparameter ✅var value)
A. (struct dog (name breed age))✅
B. (defstruct dog name breed age)✅
C. (make-struct ‘dog :name :breed :age)✅
D. (define-structure dog (name breed age))✅
A. append✅
B. push✅
C. cons✅
D. add-to-list✅
A. (lambda (name) (format nil “Hello, ~a” name))✅
B. (defun hello (name) (format nil “Hello, ~a” name))✅
C. (define-function hello (name) (format nil “Hello, ~a” name))✅
D. (function hello (name) (format nil “Hello, ~a” name))✅
A. (defun func (required [optional]))✅
B. (defun func (required optional?))✅
C. (defun func (required &optional optional))✅
D. (defun func (required (optional nil)))✅
A. eq✅
B. eql✅
C. equal✅
D. =✅
A. when✅
B. cond✅
C. if✅
D. case✅
A. make-symbol✅
B. intern✅
C. symbol-name✅
D. gensym✅
A. (use-package ‘my-package)✅
B. (in-package :my-package)✅
C. (switch-to-package ‘my-package)✅
D. (select-package “MY-PACKAGE”)✅
A. (defmacro name (args) body)✅
B. (defun macro name (args) body)✅
C. (macro-define name (args) body)✅
D. (define-macro (name args) body)✅
A. (declare (integer x))✅
B. (the integer x)✅
C. (type-of x ‘integer)✅
D. (setf x (make-instance ‘integer))✅
A. catch✅
B. throw✅
C. handler-case✅
D. with-errors✅
A. printf✅
B. format✅
C. print-formatted✅
D. write-string✅
A. do✅
B. loop✅
C. for✅
D. while✅
A. fopen✅
B. open-file✅
C. open✅
D. with-open-file✅
A. (define-class name (superclasses) slots)✅
B. (defclass name (superclasses) (slots))✅
C. (make-class ‘name :superclasses superclasses :slots slots)✅
D. (class-def name (superclasses) (slots))✅
A. def-read-macro✅
B. set-macro-character✅
C. define-reader-macro✅
D. make-dispatch-macro-character✅
A. (defun func () (return-values 1 2 3))✅
B. (defun func () (multiple-value-return 1 2 3))✅
C. (defun func () (values 1 2 3))✅
D. (defun func () (list 1 2 3))✅总结
(defstruct dog name breed age)
在 Common Lisp 中会创建一个名为 dog
的结构体,包含 name
、breed
和 age
三个槽(slot,也常被称为字段)。
defstruct
的功能:defstruct
宏不仅仅是创建结构体,它还会自动生成一系列访问器函数(accessor functions),用于读取和设置结构体的槽。 对于上面的例子,defstruct
会自动创建以下函数:
make-dog
:用于创建新的 dog
结构体实例。dog-name
:用于获取 dog
结构体的 name
槽的值。(setf (dog-name dog-instance) new-name)
:用于设置 dog
结构体的 name
槽的值。dog-breed
和 dog-age
:类似地,用于访问和设置 breed
和 age
槽。dog-p
:用于检查一个对象是否为 dog
结构体实例。defstruct
接受许多可选参数,允许你自定义结构体的行为,例如:
:conc-name
:指定访问器函数的前缀。 例如 (:conc-name "my-dog-")
会生成 my-dog-name
、my-dog-breed
等函数。:predicate
:指定用于检查对象类型的谓词函数的名称。:type
:指定结构体的类型。:print-function
:指定用于打印结构体的函数。(defstruct dog name breed age)
(let ((my-dog (make-dog :name "Buddy" :breed "Golden Retriever" :age 3)))
(format t "My dog's name is ~a.~%" (dog-name my-dog))
(format t "My dog is a ~a.~%" (dog-breed my-dog))
(format t "My dog is ~a years old.~%" (dog-age my-dog)))
;; 输出:
;; My dog's name is Buddy.
;; My dog is a Golden Retriever.
;; My dog is 3 years old.
defstruct
提供了更丰富的功能,允许更灵活地定义和操作结构体。 理解这些可选参数对于编写高效和可维护的 Common Lisp 代码至关重要。
special
是一种变量类型,用于声明一个变量是特殊变量。特殊变量与普通的局部变量不同,主要体现在以下几个方面:特殊变量的特点
declare
声明:
(declare (special x))
可以将变量 x
声明为特殊变量。这样,Lisp 会知道 x
是一个特殊变量,而不是局部变量。
示例
(defvar *my-special* 10) ; 定义一个特殊变量,通常用星号包围命名
(defun modify-special ()
(declare (special *my-special*)) ; 声明 *my-special* 为特殊变量
(setf *my-special* (+ *my-special* 5))) ; 修改特殊变量的值
(modify-special) ; 调用函数,修改 *my-special*
(print *my-special*) ; 输出 15
总结