面向记忆的学习材料
快速学习并记住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.
(format t "My dog is a ~a.
(format t "My dog is ~a years old.
;; 输出:
;; 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
总结