while (< a 4) collect a) ;; Evaluates to: (1 2 3) (loop for a in '(1 2 3 4 5 6 7) while (< a 4) repeat 1 collect a) ;; Evaluates to: (1) 确定哪个列表更长,并在知道答案后立即中断迭代: (defun longerp (list-1 list-2) (loop for cdr1 on list-1 for cdr2 on list...
(setf connections (remove ready connections))) (loop for c in connections do (loop while (socket-close c))) 在lisp 中初始化: CL-USER> (in-package :echo) #<PACKAGE "ECHO"> ECHO> (echo-server 12321) Got message... 使用telnet测试: ╭─toni@Antonios-MBP ~ ‹ruby-2.2.3@laguna› ...
类型在 Common Lisp 里不是对象。举例来说,没有对象对应到integer这个类型。我们像是从type-of函数里所获得的,以及作为传给像是typep函数的参数,不是一个类型,而是一个类型标识符 (type specifier)。 一个类型标识符是一个类型的名称。最简单的类型标识符是像是integer的符号。这些符号形成了 Common Lisp 里的...
;; 有很多不同的Common Lisp的实现;并且大部分的实现是一致(可移植)的。 ;; 对于入门学习来说,CLISP是个不错的选择。 ;; 可以通过QuickLisp.org的Quicklisp系统管理你的库。 ;; 通常,使用文本编辑器和“REPL”来开发Common Lisp; ;; (译者注:“REPL”指读取-求值-打印循环)。 ;; “REPL”允许对程序进行...
(defmacro while (test &rest body) `(do () ((not ,test)) ,@body)) 10.4 示例:快速排序法(Example: Quicksort) 图10.1 包含了重度依赖宏的一个示例函数 ── 一个使用快速排序演算法 λ 来排序向量的函数。这个函数的工作方式如下: (defun quicksort (vec l r) (let ((i l) (j r) (p (sv...
REPL代表“阅读-评估-打印-循环”(Read-Evaluate-Print-Loop),它简单表示注释器的一个交互式提示符。你可以从这 里输出一些简单的Lisp代码。如果你使用另一种注释器提示符,你可以在这里使用提示符作为计算器输出一些基本的数学表达式——但它不能正常运行。在 CLISP中输入5*2不会返回任何有意义的结果: ...
Practical Common Lisp(二)一个简单的“数据库” lisp的功能还是挺强大的,简单的几十行代码就搞定了一个小的“数据库”(经验:调试macro的时候可以用macroexpand-1展开该macro,看是否与设想的一样)。 感受一下lisp吧: CL-USER> (load "D:/database.lisp")...
假设我们想要一个while宏,只要初始测试表达式为真,对其主体求值: >(let((x0))(while(<x10)(princx)(incfx)))0123456789NIL 我们可以通过使用一个剩余参数 (rest parameter) ,搜集主体的表达式列表,来定义一个这样的宏,接着使用 comma-at 来扒开这个列表放至展开式里:...
(loop for i = 0 then (1+ j) as j = (position #\Space string :start i) collect (subseq string i j) while j)) SPLIT-BY-ONE-SPACE * (split-by-one-space "Singing in the rain") ("Singing" "in" "the" "rain") * (split-by-one-space "Singing in the rain") ...
安装:Common Lisp没有统一的执行标准,推荐使用CLISP,它在多个平台上都能运行良好。Lispbox是一个方便的工具,提供Common Lisp环境和Emacs集成。REPL:即”ReadEvaluatePrintLoop”,是Common Lisp的交互式命令行,用于编写和测试基本的Lisp代码。基本语法:表达式:Lisp的每个表达式都有返回值,...