设计得很好的企业网站,中山网站建设是什么,wordpress 博客园主题,1688接代加工订单鲁莽先生什么都不管
鲁莽先生打开电脑#xff0c;安装一堆东西#xff0c;噼里啪啦敲了一堆代码#xff0c;叽里呱啦说了一堆话#xff0c;然后累了就回家睡觉了。
这可把好奇先生的兴趣勾起来#xff0c;他怎么也睡不着。好奇先生打开电脑#xff0c;看了看鲁莽先生留…
鲁莽先生什么都不管
鲁莽先生打开电脑安装一堆东西噼里啪啦敲了一堆代码叽里呱啦说了一堆话然后累了就回家睡觉了。
这可把好奇先生的兴趣勾起来他怎么也睡不着。好奇先生打开电脑看了看鲁莽先生留下的代码和可执行文件然后开始研究起来。
好奇先生第一次见到Lisp
好奇先生看到了一堆括号他不知道这是什么但是他知道这是一种编程语言于是他开始查资料了解到这是一种叫做Lisp的语言。
这个语言最大的特点就是括号括号里面是函数名括号外面是参数。因为括号很多Lisp也被称为Lots of Irritating Silly Parentheses许多令人烦恼的愚蠢括号。
真是好玩啊好奇先生想真想要试试看。
好奇先生按照鲁莽先生的说明安装SBCL然后打开REPL输入了一行代码
This is SBCL 2.4.6, an implementation of ANSI Common Lisp.
More information about SBCL is available at http://www.sbcl.org/.SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* ( 1 2)
3好的这下可以做加法啦实际上Lisp的加法可以加多个数
( 1 2 3 4 5 6)
21这不是很好理解吗括号里面是一个列表列表的第一个元素是后面的元素是被加的数字。画出来就是这样的 #mermaid-svg-rl3acMO3i5ygqRIL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .error-icon{fill:#552222;}#mermaid-svg-rl3acMO3i5ygqRIL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rl3acMO3i5ygqRIL .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rl3acMO3i5ygqRIL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rl3acMO3i5ygqRIL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rl3acMO3i5ygqRIL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rl3acMO3i5ygqRIL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rl3acMO3i5ygqRIL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rl3acMO3i5ygqRIL .marker.cross{stroke:#333333;}#mermaid-svg-rl3acMO3i5ygqRIL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rl3acMO3i5ygqRIL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .cluster-label text{fill:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .cluster-label span{color:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .label text,#mermaid-svg-rl3acMO3i5ygqRIL span{fill:#333;color:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .node rect,#mermaid-svg-rl3acMO3i5ygqRIL .node circle,#mermaid-svg-rl3acMO3i5ygqRIL .node ellipse,#mermaid-svg-rl3acMO3i5ygqRIL .node polygon,#mermaid-svg-rl3acMO3i5ygqRIL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rl3acMO3i5ygqRIL .node .label{text-align:center;}#mermaid-svg-rl3acMO3i5ygqRIL .node.clickable{cursor:pointer;}#mermaid-svg-rl3acMO3i5ygqRIL .arrowheadPath{fill:#333333;}#mermaid-svg-rl3acMO3i5ygqRIL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rl3acMO3i5ygqRIL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rl3acMO3i5ygqRIL .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-rl3acMO3i5ygqRIL .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-rl3acMO3i5ygqRIL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rl3acMO3i5ygqRIL .cluster text{fill:#333;}#mermaid-svg-rl3acMO3i5ygqRIL .cluster span{color:#333;}#mermaid-svg-rl3acMO3i5ygqRIL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rl3acMO3i5ygqRIL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1 2 3 4 5 6 这不算什么好奇先生想我可以用Lisp来做更复杂的事情。
( 1 (* 2 3) (- 4 5))
6再按照上面的方法画出来 #mermaid-svg-OylfnwCkMukMJg9d {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OylfnwCkMukMJg9d .error-icon{fill:#552222;}#mermaid-svg-OylfnwCkMukMJg9d .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OylfnwCkMukMJg9d .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OylfnwCkMukMJg9d .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OylfnwCkMukMJg9d .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OylfnwCkMukMJg9d .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OylfnwCkMukMJg9d .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OylfnwCkMukMJg9d .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OylfnwCkMukMJg9d .marker.cross{stroke:#333333;}#mermaid-svg-OylfnwCkMukMJg9d svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OylfnwCkMukMJg9d .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OylfnwCkMukMJg9d .cluster-label text{fill:#333;}#mermaid-svg-OylfnwCkMukMJg9d .cluster-label span{color:#333;}#mermaid-svg-OylfnwCkMukMJg9d .label text,#mermaid-svg-OylfnwCkMukMJg9d span{fill:#333;color:#333;}#mermaid-svg-OylfnwCkMukMJg9d .node rect,#mermaid-svg-OylfnwCkMukMJg9d .node circle,#mermaid-svg-OylfnwCkMukMJg9d .node ellipse,#mermaid-svg-OylfnwCkMukMJg9d .node polygon,#mermaid-svg-OylfnwCkMukMJg9d .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OylfnwCkMukMJg9d .node .label{text-align:center;}#mermaid-svg-OylfnwCkMukMJg9d .node.clickable{cursor:pointer;}#mermaid-svg-OylfnwCkMukMJg9d .arrowheadPath{fill:#333333;}#mermaid-svg-OylfnwCkMukMJg9d .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OylfnwCkMukMJg9d .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OylfnwCkMukMJg9d .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OylfnwCkMukMJg9d .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OylfnwCkMukMJg9d .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OylfnwCkMukMJg9d .cluster text{fill:#333;}#mermaid-svg-OylfnwCkMukMJg9d .cluster span{color:#333;}#mermaid-svg-OylfnwCkMukMJg9d div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OylfnwCkMukMJg9d :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1 2 3 4 5 * - 1 2 * 3 (4 - 5) 6 结果是6。其实很直观
好奇先生觉得自己完全懂了每个列表第一个元素是要干什么后面的元素是对谁干。而且后面的元素也可以是列表这个列表的第一个元素同样是要干什么后面的元素是对谁干。
好奇先生更好奇了
好奇先生觉得自己完全懂了Lisp的代码就是一个括号套住的内容包括括号本身可以称为表达式expression表达式的左边一个括号右边一个括号中间是一个操作符operator和零个或多个操作数operand。
left_parenthesis (
right_parenthesis )
expression :: left_parenthesis operator operand* right_parenthesis
operand :: expression | ???这个operator是什么这个operand是什么到底是几个为什么还能是0个这个???是什么好奇先生更好奇了。
好奇先生继续研究
好奇先生因为很好奇早就学过无数种编程语言他能理解这个operator是一个函数或者方法或者操作符比如、-、*、/、sin、cos、tan、sqrt、log、exp等等。而这个operand是一个值或者一个变量。当然无论是值或者变量其实都有一个很本质的含义就是内存中的一块区域这个区域在某些程序设计语言中表达为地址头、内存长度这两个两可以完全定位这个区域。但是在Lisp中到底是什么呢
Lisp的数据类型
好奇先生查了一下Lisp中貌似就只有两类大类数据类型列表list和原子atom。
列表 由括号括起来的列表列表的元素可以是列表列表的元素可以是atomlistp可以判断是否是列表 Atom中文直译为原子在这里可以理解为不可再分的最小单位比如 数字numberp可以判断是否是数字字符串stringp可以判断是否是字符串符号symbolp可以判断是否是符号函数functionp可以判断是否是函数
通过这些操作符函数就能够探索各种对象的类型。好奇先生对自己的说法又有了亿点点更多的好奇。对象什么对象Lisp里面操作的是什么好奇先生继续研究。
Lisp中的字面量
字面量就是直接表示的值比如1、hello、a、t、nil、:my-key等等。这些值是直接表示的不需要计算不需要解释不需要转换就是它们自己。实际上这些值就是Lisp中基本被操作的对象。并非是面向对象编程中的对象。
那么跟C中间每个量实际上都是一块内存区域是否一样呢好奇先生不停地问出新问题。
啊问题太多了太多啦好奇先生觉得自己的好奇心已经被点燃了他决定继续研究继续探索继续学习。
好奇先生工具箱
好奇先生每次到第一个新地方总是最先想知道公共交通能到哪里所以在打探一个新的编程语言时他总是先找找有没有什么探索工具可以用。
比如上面的type-of以及哪些判断类型的命令。此外lisp还有一些其他的工具比如
list-all-packages可以列出所有的包do-external-symbols可以遍历一个包中的所有符号apropos可以找到一个符号的定义
好奇先生最喜欢这种工具箱用这些工具他就能探索这个SBCL世界
packages
Common Lisp中的包package是一种组织符号的方式可以把符号分组然后通过包的名字来访问这些符号。比如cl-user包中有这个符号那么我们可以通过cl-user:来访问这个符号。
(apropos list-all-packages);; LIST-ALL-PACKAGES (fbound)
;; NIL好像没有提供太多的信息。
(list-all-packages);; (#PACKAGE QUICKLISP-CLIENT #PACKAGE UIOP/FILESYSTEM
;; #PACKAGE ALIVE/SBCL/SYMBOLS #PACKAGE IMPL-SPECIFIC-GRAY
;; #PACKAGE QL-IMPL #PACKAGE UIOP/DRIVER #PACKAGE ALIVE/INSPECTOR
;; #PACKAGE SB-WALKER #PACKAGE ASDF/FIND-COMPONENT #PACKAGE SB-MOP
;; #PACKAGE UIOP/PACKAGE #PACKAGE ASDF/BACKWARD-INTERNALS
;; #PACKAGE ALIVE/LSP/TYPES/FORMAT-OPTIONS #PACKAGE QL-MKCL
;; #PACKAGE SB-BIGNUM #PACKAGE ALIVE/PACKAGES
;; #PACKAGE UIOP/BACKWARD-DRIVER #PACKAGE ALIVE/UTILS
;; #PACKAGE UIOP/LAUNCH-PROGRAM #PACKAGE ALIVE/SBCL/THREADS
;; #PACKAGE ASDF/FOOTER #PACKAGE ALIVE/SESSION #PACKAGE SB-REGALLOC
;; #PACKAGE QL-CMUCL #PACKAGE SB-PCL #PACKAGE QL-CCL
;; #PACKAGE SB-EXT #PACKAGE ASDF/OPERATE #PACKAGE ALIVE/RANGE
;; #PACKAGE ALIVE/FILE #PACKAGE UIOP/RUN-PROGRAM
;; #PACKAGE ALIVE/LSP/DEFINITION #PACKAGE ASDF/PARSE-DEFSYSTEM
;; #PACKAGE ALIVE/LSP/COMPLETIONS #PACKAGE ALIVE/STREAMS
;; #PACKAGE QL-DIST-USER #PACKAGE ALIVE/SBCL/FILE #PACKAGE QL-INFO
;; #PACKAGE SB-SYS #PACKAGE QL-CONFIG #PACKAGE ALIVE/LSP/UTILS
;; #PACKAGE ALIVE/SBCL/STREAMS #PACKAGE ALIVE/LSP/TYPES/SEM-TOKENS
;; #PACKAGE SB-DISASSEM #PACKAGE BORDEAUX-THREADS
;; #PACKAGE ALIVE/LSP/PACKET #PACKAGE ALIVE/LSP/MESSAGE/RESPONSE
;; #PACKAGE SB-FASL #PACKAGE UIOP/UTILITY #PACKAGE JSON-SYSTEM
;; #PACKAGE QL-SETUP #PACKAGE SB-POSIX #PACKAGE ALIVE/PARSE/TOKENIZER
;; #PACKAGE ASDF/FIND-SYSTEM #PACKAGE SB-UNICODE
;; #PACKAGE FLEXI-STREAMS-SYSTEM #PACKAGE ASDF/CONCATENATE-SOURCE
;; #PACKAGE SB-DEBUG #PACKAGE ALIVE/FORMAT #PACKAGE QL-UTIL
;; #PACKAGE SB-LOCKLESS #PACKAGE SB-ALIEN-INTERNALS
;; #PACKAGE BORDEAUX-THREADS-2 #PACKAGE SB-ALIEN
;; #PACKAGE ALEXANDRIA-2 #PACKAGE QL-SCL #PACKAGE ASDF/USER
;; #PACKAGE ALIVE/TYPES #PACKAGE ALIVE/THREADS
;; #PACKAGE SPLIT-SEQUENCE #PACKAGE ASDF/COMPONENT
;; #PACKAGE ASDF/FORCING #PACKAGE QL-GUNZIPPER #PACKAGE SB-INTROSPECT
;; #PACKAGE UIOP/STREAM #PACKAGE ASDF/PACKAGE-INFERRED-SYSTEM
;; #PACKAGE SB-PRETTY #PACKAGE ASDF/SOURCE-REGISTRY
;; #PACKAGE SB-SEQUENCE #PACKAGE ASDF/SYSTEM-REGISTRY
;; #PACKAGE SB-APROF #PACKAGE ALIVE/POSITION #PACKAGE SB-PROFILE
;; #PACKAGE ALIVE/COMPILE-MESSAGE #PACKAGE ALEXANDRIA
;; #PACKAGE UIOP/OS #PACKAGE QL-NETWORK #PACKAGE ASDF/LISP-ACTION
;; #PACKAGE ALIVE/LSP/HOVER #PACKAGE ALIVE/LSP/SYMBOL
;; #PACKAGE ASDF/PLAN #PACKAGE ALIVE/LOGGER #PACKAGE SB-C
;; #PACKAGE QL-BUNDLE #PACKAGE UIOP/PATHNAME #PACKAGE SB-BSD-SOCKETS
;; #PACKAGE ALIVE/TEXT-EDIT #PACKAGE ASDF/SESSION #PACKAGE JSON
;; #PACKAGE ALIVE/SELECTION #PACKAGE QL-HTTP #PACKAGE ASDF/INTERFACE
;; #PACKAGE ASDF/OUTPUT-TRANSLATIONS #PACKAGE ALIVE/LSP/PARSE
;; #PACKAGE QL-MINITAR #PACKAGE ASDF/ACTION #PACKAGE UIOP/VERSION
;; #PACKAGE ALIVE/LSP/MESSAGE/REQUEST #PACKAGE SB-THREAD
;; #PACKAGE QL-SBCL #PACKAGE ASDF/BUNDLE #PACKAGE KEYWORD
;; #PACKAGE ALIVE/EVAL #PACKAGE ALIVE/PARSE/FORMS
;; #PACKAGE ALIVE/LSP/MESSAGE/ABSTRACT #PACKAGE SB-LOOP
;; #PACKAGE SB-DI #PACKAGE SB-UNIX #PACKAGE UIOP/CONFIGURATION
;; #PACKAGE UIOP/IMAGE #PACKAGE SB-IMPL #PACKAGE SB-GRAY
;; #PACKAGE COMMON-LISP-USER #PACKAGE SB-BROTHERTREE
;; #PACKAGE ASDF/OPERATION #PACKAGE ALIVE/DEBUGGER
;; #PACKAGE QL-IMPL-UTIL #PACKAGE ALIVE/PARSE/TOKEN
;; #PACKAGE ALIVE/LSP/SEM-ANALYSIS #PACKAGE ALIVE/MACROS
;; #PACKAGE QL-LISPWORKS #PACKAGE SB-VM #PACKAGE GLOBAL-VARS
;; #PACKAGE SB-ASSEM #PACKAGE UIOP/COMMON-LISP
;; #PACKAGE ALIVE/LSP/TYPES/CONFIG-ITEM #PACKAGE TRIVIAL-GARBAGE
;; #PACKAGE ASDF/BACKWARD-INTERFACE #PACKAGE ALIVE/LSP/TYPES/RESTART-INFO
;; #PACKAGE SB-FORMAT #PACKAGE ASDF/UPGRADE #PACKAGE SB-INT
;; #PACKAGE QL-CLISP #PACKAGE USOCKET #PACKAGE ALIVE/PARSE/FORM
;; #PACKAGE ALIVE/LSP/MESSAGE/NOTIFICATION #PACKAGE SB-WIN32
;; #PACKAGE ALIVE/SYMBOLS #PACKAGE SB-EVAL #PACKAGE SB-X86-64-ASM
;; #PACKAGE QL-MEZZANO #PACKAGE QL-PROGRESS #PACKAGE QL-ALLEGRO
;; #PACKAGE COMMON-LISP #PACKAGE ALIVE/SERVER
;; #PACKAGE ALIVE/LSP/MESSAGE/FORMAT-UTILS #PACKAGE QL-CDB
;; #PACKAGE ALIVE/ERRORS #PACKAGE ALIVE/FRAMES #PACKAGE JSON-RPC
;; #PACKAGE QL-CLASP #PACKAGE UIOP/LISP-BUILD #PACKAGE SB-KERNEL
;; #PACKAGE FLEXI-STREAMS #PACKAGE TRIVIAL-GRAY-STREAMS
;; #PACKAGE ASDF/SYSTEM #PACKAGE QL-DIST #PACKAGE ALIVE/LSP/ERRORS
;; #PACKAGE QL-ECL #PACKAGE ALIVE/ASDF
;; #PACKAGE SB-BSD-SOCKETS-INTERNAL #PACKAGE QL-ABCL)原来好奇先生已经安装这么多有用的或者没用的包。
还可以自己定义一个包并且看看自己定义的包是不是能被找到。好奇先生看到结果高兴得不得了。
(let ((before (list-all-packages))) (make-package temp) (set-difference (list-all-packages) before));; (#PACKAGE TEMP)当然我们还可以查找一个包这里用的是find-package。
(find-package cl-user)
(find-package :cl-user)
(find-package CL-USER)这三种形式都可以只是注意最后那个用字符串的方式必须是大写的。太麻烦好奇先生动动手指写了一个函数。
(defun find-package-ignore-case (name)Find a package by name, ignoring case(if (stringp name)(find-package (string-upcase name))(find-package name)))这下子就可以直接忽视大小写了。那么能不能用一个包的名字的一部分来查找一个包呢好奇先生又动动手指写了一个函数。
(defun part-in-list-p (part list)Return true if any element of list contains part(find-if (lambda (x) (search part x)) list))(defun find-package-with-part (part)Find a package by part of its name or nickname(let ((result ())(part-upcase (string-upcase part)))(dolist (package (list-all-packages))(if (or (search part-upcase (package-name package))(part-in-list-p part-upcase (package-nicknames package)))(push package result)))result))第一个函数用来在一个列表中找到是否包含一个字符串如果包含就返回真。第二个函数用来查找一个包的名字或者别名中是否包含一个字符串。
(find-package-with-part cl)
; (#PACKAGE QL-ABCL #PACKAGE QL-ECL #PACKAGE QL-CLASP
; #PACKAGE COMMON-LISP #PACKAGE QL-CLISP #PACKAGE UIOP/COMMON-LISP
; #PACKAGE COMMON-LISP-USER #PACKAGE QL-SBCL #PACKAGE JSON
; #PACKAGE QL-SCL #PACKAGE ALIVE/SBCL/STREAMS
; #PACKAGE ALIVE/SBCL/FILE #PACKAGE QL-CCL #PACKAGE SB-PCL
; #PACKAGE QL-CMUCL #PACKAGE ALIVE/SBCL/THREADS #PACKAGE QL-MKCL
; #PACKAGE ALIVE/SBCL/SYMBOLS #PACKAGE QUICKLISP-CLIENT)现在好奇先生对自己系统中的包了如指掌完全满足了他的部分好奇心因为好奇先生的好奇先生是无穷无尽的知道自己的系统中有这么多包之后好奇先生的好奇心简直要爆炸了每个包里到底有什么
包里有什么呢当然是symbols
粗鲁先生看到好奇先生噼里啪啦地敲着键盘嘴里念念有词突然听到一句”包里有什么呢“他大声回答“当然是符号啦”好奇先生听到这个回答觉得很有道理于是他开始查找一个包里面的所有符号。 ;; list all external symbols in a package
(defun dir (package)(let ((result ())(len 0))(do-external-symbols (s package (values result len)); (format t ~a~% s)(push s result)(incf len))))因为这就像是列出一个目录的文件好奇先生当然把这个函数命名为dir。
(dir (find-package cl))(READ-BYTE FIND-PACKAGE ROUND LET* COPY-SYMBOL BREAK ARRAYLISP-IMPLEMENTATION-TYPE PPRINT-FILL REMHASH FILE-LENGTH FLOORMOST-POSITIVE-LONG-FLOAT STRING BOOLE-C1 LOGNAND BIT-IORSYNONYM-STREAM-SYMBOL STANDARD-GENERIC-FUNCTIONGET-INTERNAL-REAL-TIME DESCRIBE-OBJECT IN-PACKAGE SET*COMPILE-FILE-PATHNAME* ISQRT PROBE-FILE UNION VECTOR MEMBER-IF-NOTLOGBITP STREAM-ERROR-STREAM APPEND NSUBLIS PATHNAMESET-DISPATCH-MACRO-CHARACTER CDAADR PROG SYNONYM-STREAM CONJUGATELOGTEST SPECIAL NIL DOUBLE-FLOAT-EPSILON SHADOW TRACE SYMBOL-PLISTCADAR DELETE-FILE COPY-ALIST PATHNAME-DIRECTORY SIN SHIFTFSTANDARD-METHOD TYPE PROG1 FLOAT-SIGN BIT-AND PLUSP COMPILER-MACRONOT STREAM-ELEMENT-TYPE CADDDR STRING ADJOIN REMPROP CHAR-EQUALRETURN-FROM LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT BOOLE-CLR LCMPOSITION HANDLER-CASE COMPUTE-APPLICABLE-METHODS DEFMETHOD BOOLE-1CONTROL-ERROR CLASS CHAR-LESSP DELETE-PACKAGEBROADCAST-STREAM-STREAMS LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT NULLFIFTH EXP WITH-OUTPUT-TO-STRING FTRUNCATE LAST STRING-CAPITALIZEMAPCON CDDDDR LOGORC2 PRINT-OBJECT USER-HOMEDIR-PATHNAME*MODULES* CAAADR SLOT-MISSING RATIONALIZE TANH BIT-EQV ///ROW-MAJOR-AREF *LOAD-PATHNAME* *PRINT-ESCAPE* READTABLE-CASE NCONCBOOLE-2 STANDARD-CLASS SIMPLE-BIT-VECTOR COUNT-IF BOOLE-SETDEFPARAMETER ZEROP DYNAMIC-EXTENT FILE-STRING-LENGTH STRUCTURERPLACD SET-MACRO-CHARACTER CHAR/ SYMBOL-MACROLET CAAAR // *PACKAGE*WITH-OPEN-FILE DEFSTRUCT TWO-WAY-STREAM ASSOC-IF-NOT SHORT-FLOATEXTENDED-CHAR READ-CHAR-NO-HANG LOGAND ECHO-STREAM-INPUT-STREAM TCHAR FUNCTION BOOLE-ORC2 *MACROEXPAND-HOOK* STRING/ FBOUNDP /RASSOC EVAL-WHEN CLRHASH WARN AND LISTEN RANDOM-STATESPECIAL-OPERATOR-P SYMBOL-PACKAGE COMPILATION-SPEED *LOAD-PRINT*PPRINT-POP SEARCH LONG-FLOAT-EPSILON *TERMINAL-IO* CDDDARADJUST-ARRAY MAKE-PATHNAME KEYWORD MERGE NO-APPLICABLE-METHOD*PRINT-PPRINT-DISPATCH* VECTOR-POP SEQUENCE BIGNUM POP CHAR SETQ MODSIMPLE-STRING-P CERROR MAKE-ECHO-STREAM STRING-NOT-LESSP*PRINT-BASE* UPDATE-INSTANCE-FOR-DIFFERENT-CLASSFLOATING-POINT-UNDERFLOW HASH-TABLE-REHASH-THRESHOLD INCF LDB-TESTLIST MEMBER-IF ARRAY-HAS-FILL-POINTER-P OPEN-STREAM-P THIRD WHOLEBIT-NOT GENSYM CCASE BOOLE-XOR SET-SYNTAX-FROM-CHAR DOLISTALPHANUMERICP STRING-STREAM MOST-NEGATIVE-SINGLE-FLOAT ELT TRUENAMENSTRING-DOWNCASE LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT *READ-BASE*NSET-DIFFERENCE THROW PHASE THE BIT-ANDC1 ASSERT ACOSWILD-PATHNAME-P CDR DIGIT-CHAR-P MACROEXPAND-1 NSET-EXCLUSIVE-ORTYPECASE PPRINT-INDENT CDADR CLASS-NAME COMPILE-FILE-PATHNAMEFDEFINITION RASSOC-IF APROPOS-LIST INTEGER-LENGTH *READ-SUPPRESS*UNLESS NSTRING-CAPITALIZE FTYPE BUILT-IN-CLASS ** MAKE-CONDITIONSTRING ENCODE-UNIVERSAL-TIME BIT-ANDC2 HASH-TABLE-SIZE CELL-ERRORATANH RATIONALP NAME-CHAR SET-DIFFERENCE BIT-NAND CONDITIONCHAR-GREATERP OPTIONAL DISASSEMBLE ERROR CADDR SAFETY CHAR-CODEWARNING ENDP *PRINT-RADIX* STANDARD-OBJECT MAPCAN PATHNAMEPTWO-WAY-STREAM-OUTPUT-STREAM FMAKUNBOUND ARRAY-ROW-MAJOR-INDEXSUBSEQ LOAD DELETE-IF-NOT UNBOUND-SLOT-INSTANCE LOGORC1 OPTIMIZESTRING STABLE-SORT NSUBSTITUTE DIGIT-CHAR ENOUGH-NAMESTRINGBYTE-POSITION PPRINT-LOGICAL-BLOCK SUBSTITUTE-IF TAILPFLOATING-POINT-INEXACT EQL FIND-METHOD FLET ARRAY-TOTAL-SIZE-LIMITUNUSE-PACKAGE RATIO LEAST-NEGATIVE-NORMALIZED-LONG-FLOATGET-DISPATCH-MACRO-CHARACTER MAKE-SEQUENCE NBUTLAST NRECONC MACROLETCHAR MINUSP PRINT-UNREADABLE-OBJECT LOWER-CASE-P STANDARDHASH-TABLE-COUNT FLOAT-PRECISION REVAPPEND CALL-ARGUMENTS-LIMITREAD-FROM-STRING UNDEFINED-FUNCTION COPY-READTABLE ASINDEFINE-SETF-EXPANDER HANDLER-BINDLEAST-POSITIVE-NORMALIZED-LONG-FLOAT PPRINT-TAB NUNION REALPPOSITION-IF BOOLE-ANDC1 ABORT NUMBER DECLAIM COMPILED-FUNCTION-PPACKAGE-USED-BY-LIST CHAR-NOT-LESSP WITH-INPUT-FROM-STRINGSIMPLE-WARNING STORE-VALUE *COMPILE-VERBOSE* DELETE-DUPLICATESMOST-NEGATIVE-FIXNUM DELETE AREF DEFUN STREAM-ERROR BOOLE-C2PPRINT-LINEAR MULTIPLE-VALUE-SETQ FILE-STREAM STRING-TRIMREMOVE-IF-NOT UNREAD-CHAR OTHERWISE DESCRIBE RPLACA WRITE-SEQUENCEMIN SOFTWARE-VERSION *PRINT-LEVEL* SECOND CHECK-TYPE PPRINT BUTLASTBASE-CHAR COMPLEXP PATHNAME-NAME SLOT-UNBOUND ODDP PRIN1-TO-STRINGSTRING-RIGHT-TRIM COMPILE-FILE FILE-ERROR-PATHNAME PRINCGET-PROPERTIES MOST-POSITIVE-FIXNUM MAKE-LOAD-FORM-SAVING-SLOTSREALPART DIRECTORY CDADAR CONSTANTLYFLOATING-POINT-INVALID-OPERATION NOTANY PATHNAME-MATCH-P DECF MEMBERMULTIPLE-VALUE-PROG1 DEFGENERIC IDENTITY CHAR-CODE-LIMIT VECTOR-PUSHDEFINE-SYMBOL-MACRO GETF LEAST-NEGATIVE-LONG-FLOAT CHAR-DOWNCASELEAST-NEGATIVE-DOUBLE-FLOAT SINGLE-FLOAT-NEGATIVE-EPSILONADJUSTABLE-ARRAY-P SUBTYPEP *FEATURES* NUMBERP FILE-ERRORPOSITION-IF-NOT DEFPACKAGE PPRINT-DISPATCHMOST-POSITIVE-SINGLE-FLOAT SUBSTITUTE-IF-NOT COMPILED-FUNCTION LOGDO* PARSE-INTEGER SIMPLE-ERROR LEAST-NEGATIVE-SINGLE-FLOATDEFINE-COMPILER-MACRO LOGANDC2 KEYWORDP FIND-ALL-SYMBOLS BIT-ORC1*PRINT-CIRCLE* ARRAY-DIMENSION-LIMIT CAAR SPACE DOCUMENTATIONUPGRADED-COMPLEX-PART-TYPE STREAM PROGRAM-ERROR PUSHNEW MASK-FIELDCHARACTERP LDIFF DIRECTORY-NAMESTRING LOOP-FINISH DPBCHAR-NOT-GREATERP LENGTH LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOATDRIBBLE SLOT-VALUE PPRINT-TABULAR SIMPLE-BASE-STRING SIGNED-BYTEPACKAGE-ERROR-PACKAGE DEFINE-MODIFY-MACRO SHORT-SITE-NAMEARRAY-RANK-LIMIT CODE-CHAR FUNCALL DEPOSIT-FIELD MAKE-ARRAY EDCOPY-PPRINT-DISPATCH BIT-ORC2 LOGICAL-PATHNAME FIND-SYMBOLWRITE-STRING DO WRITE-BYTE CHAR-NOT-EQUAL MAPLIST BOOLEANECHO-STREAM MAPL NSUBST-IF DEFTYPE EVAL USE-VALUETRANSLATE-LOGICAL-PATHNAME PRINT-NOT-READABLE-OBJECT PROG2SUBSTITUTE *PRINT-PRETTY* TENTH FFLOOR STRING-NOT-EQUALINVOKE-RESTART-INTERACTIVELY / DO-SYMBOLS MAP-INTO CTYPECASEMULTIPLE-VALUE-BIND FOURTH CAADR MOST-NEGATIVE-SHORT-FLOAT BODYBOOLE *TRACE-OUTPUT* LOAD-LOGICAL-PATHNAME-TRANSLATIONSSHORT-FLOAT-NEGATIVE-EPSILON ACOSH ALPHA-CHAR-P SIMPLE-ARRAYPACKAGE-NAME RANDOM APROPOS DEBUG HASH-TABLE-P OR INVOKE-DEBUGGERPRINT-NOT-READABLE CHAR-INT MAKE-SYNONYM-STREAMMAKE-DISPATCH-MACRO-CHARACTER SIMPLE-BIT-VECTOR-P COUNT FILLIGNORE-ERRORS LEAST-NEGATIVE-NORMALIZED-SHORT-FLOATLOGICAL-PATHNAME-TRANSLATIONS DO-ALL-SYMBOLS REVERSE MAKUNBOUND SOMEDECODE-UNIVERSAL-TIME SHORT-FLOAT-EPSILON COMPILER-MACRO-FUNCTIONRETURN PATHNAME-VERSION SUBLIS FIND-IF *STANDARD-INPUT*MAKE-INSTANCE CLEAR-INPUT SINGLE-FLOAT-EPSILON MAKE-SYMBOL IMPORT*PRINT-GENSYM* LET CADDAR BIT-VECTOR NSTRING-UPCASEUPGRADED-ARRAY-ELEMENT-TYPE MULTIPLE-VALUE-LIST NUMERATOR SIMPLE-VECTOR-P SCALE-FLOAT ARITHMETIC-ERROR-OPERANDS PROG*BOOLE-NAND UNTRACE INPUT-STREAM-P PSETF READTABLE METHOD-QUALIFIERSFILE-POSITION USE-PACKAGE SYMBOL-VALUE NEXT-METHOD-P SIMPLE-STRINGGRAPHIC-CHAR-P STREAMP CDDAAR CALL-NEXT-METHODMOST-NEGATIVE-DOUBLE-FLOAT FILE-AUTHOR WHEN TYPE-OF BIT-NOR CHARSINGLE-FLOAT ENSURE-GENERIC-FUNCTION PI *RANDOM-STATE* PSETQ EQHASH-TABLE EVENP *PRINT-RIGHT-MARGIN* OPEN REQUIRE GENTEMP*READTABLE* MAKE-STRING-OUTPUT-STREAM CDAR LOGEQV DEFINE-CONDITIONCLASS-OF SIMPLE-CONDITION-FORMAT-CONTROL STANDARD-CHAR PACKAGE-ERRORLOAD-TIME-VALUE PACKAGE 1- PROGV STORAGE-CONDITION FORMATTERFILE-WRITE-DATE BOOLE-NOR UPDATE-INSTANCE-FOR-REDEFINED-CLASS TANEND-OF-FILE IMAGPART BIT-VECTOR-P EQUAL FIND-CLASS DEFMACRO Y-OR-N-PREST PATHNAME-DEVICE FUNCTION-KEYWORDS SET-EXCLUSIVE-OR NAMESTRINGHASH-TABLE-REHASH-SIZE GET-DECODED-TIME *COMPILE-PRINT*CELL-ERROR-NAME INTEGERP ABS FLOAT-DIGITS SIMPLE-VECTORMOST-NEGATIVE-LONG-FLOAT FIND-RESTART IF REMFDEFINE-METHOD-COMBINATION SHADOWING-IMPORT COMPLEX GOWITH-HASH-TABLE-ITERATOR SET-PPRINT-DISPATCH CONCATENATED-STREAMTYPE-ERROR-DATUM SLOT-MAKUNBOUND LEAST-POSITIVE-SINGLE-FLOATMAKE-INSTANCES-OBSOLETE SORT NSUBST PRINC-TO-STRINGTYPE-ERROR-EXPECTED-TYPE VALUES-LIST YES-OR-NO-P FLOAT-RADIX SIGNUMREAD-SEQUENCE *BREAK-ON-SIGNALS* MULTIPLE-VALUES-LIMIT CONCATENATEPPRINT-NEWLINE COPY-TREE REST ENVIRONMENT METHOD-COMBINATION-ERROR*GENSYM-COUNTER* STRUCTURE-CLASS ETYPECASE PARSE-ERRORSTRING-DOWNCASE * MAP SUBST-IF *DEBUG-IO* STRING-LEFT-TRIM SYMBOLLONG-FLOAT-NEGATIVE-EPSILON PAIRLIS STRINGP LOOP LOGIOR VECTORPBROADCAST-STREAM WITH-SLOTS CATCH MAKE-RANDOM-STATE FORMAT COPY-SEQSTRING-LESSP APPLY REM CALL-METHOD IGNORE CONSP SYMBOLP*PRINT-LENGTH* READ-DELIMITED-LIST SBIT READER-ERROR RESTART-CASEPPRINT-EXIT-IF-LIST-EXHAUSTED FUNCTION-LAMBDA-EXPRESSION SIXTH FINDSYMBOL-FUNCTION LOGNOT TRANSLATE-PATHNAME VALUES MACHINE-INSTANCESTRING-UPCASE CADADR PEEK-CHAR *PRINT-READABLY* RESTART-BIND ASSOCINTERACTIVE-STREAM-P SINH CDDAR UNBOUND-SLOT STRING GCD PACKAGEPUPPER-CASE-P TRUNCATE RENAME-FILE CADAAR BOOLE-IORINITIALIZE-INSTANCE MAKE-STRING STANDARD-CHAR-P AUX NSUBSTITUTE-IFDECLARE CDDR CLOSE ARRAY-DISPLACEMENT WRITE INTEGER CHAR VARIABLEMERGE-PATHNAMES WITH-SIMPLE-RESTART BYTE-SIZE ASH COMPILE IGNORABLENOTEVERY MISMATCH INVALID-METHOD-ERROR FORCE-OUTPUTREMOVE-DUPLICATES UNSIGNED-BYTE MAKE-METHOD RESTART-NAME BOOLE-ANDFINISH-OUTPUT UNWIND-PROTECT BOOLE-EQV *PRINT-CASE* WITH-ACCESSORS*PRINT-ARRAY* SVREF ARRAY-DIMENSIONS - METHOD DEFVAR SEVENTHMOST-POSITIVE-DOUBLE-FLOAT REMOVE-METHOD PATHNAME-TYPE TIME BOUNDPLAMBDA-PARAMETERS-LIMIT ROTATEF LONG-SITE-NAME LOCALLYDIVISION-BY-ZERO SLOT-BOUNDP SIMPLE-CONDITION BOTH-CASE-PGET-MACRO-CHARACTER LIST-ALL-PACKAGES STRUCTURE-OBJECT MAKE-LISTSIMPLE-CONDITION-FORMAT-ARGUMENTS BOOLE-ORC1 MAKE-HASH-TABLEFIND-IF-NOT COPY-LIST CEILING GETHASH BYTECONCATENATED-STREAM-STREAMS DELETE-IF *QUERY-IO* PUSHFLOATING-POINT-OVERFLOW ROOM TYPEP FRESH-LINE PRINT REMOVE NREVERSEMAPHASH DO-EXTERNAL-SYMBOLS ECHO-STREAM-OUTPUT-STREAM COND NTH LISTPFLOAT ARRAYP SHARED-INITIALIZE ASSOC-IF EQUALP ALLOCATE-INSTANCE BITBOOLE-ANDC2 HOST-NAMESTRING CONS BASE-STRINGARITHMETIC-ERROR-OPERATION NSUBSTITUTE-IF-NOT RANDOM-STATE-PNSUBST-IF-NOT READ-LINE READ-CHAR TERPRI MAKE-BROADCAST-STREAMSUBSETP MULTIPLE-VALUE-CALL MAKE-LOAD-FORM STRING-EQUALVECTOR-PUSH-EXTEND MAKE-STRING-INPUT-STREAM TREE-EQUAL CAADDR GETEXPT CONTINUE LEAST-POSITIVE-LONG-FLOAT TAGBODY STRING-NOT-GREATERPOUTPUT-STREAM-P BIT-XOR CLEAR-OUTPUT RASSOC-IF-NOTREINITIALIZE-INSTANCE SXHASH SIMPLE-TYPE-ERRORLEAST-POSITIVE-SHORT-FLOAT INVOKE-RESTART RESTART EXPORT QUOTEADD-METHOD PACKAGE-USE-LIST COPY-STRUCTURE TYPE-ERRORPARSE-NAMESTRING PATHNAME-HOST READ-PRESERVING-WHITESPACE CASEARRAY-TOTAL-SIZE INSPECT LIST* COMPUTE-RESTARTS DEFCONSTANTDENOMINATOR PROCLAIM MACHINE-VERSION LONG-FLOAT CDADDR CAR READMAKE-TWO-WAY-STREAM GENERIC-FUNCTION DEFSETF LABELS ATANARRAY-ELEMENT-TYPE PACKAGE-SHADOWING-SYMBOLS COUNT-IF-NOTARITHMETIC-ERROR MOST-POSITIVE-SHORT-FLOAT CDDADR LDBHASH-TABLE-TEST *DEFAULT-PATHNAME-DEFAULTS* LAMBDALEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT MACRO-FUNCTIONWRITE-TO-STRING REPLACE REMOVE-IF SUBST-IF-NOT ARRAY-RANK MAX INLINELOGXOR INTERNAL-TIME-UNITS-PER-SECOND NTH-VALUEDOUBLE-FLOAT-NEGATIVE-EPSILON COSH SCHAR NINTERSECTION SATISFIESREDUCE ECASE INTERN CDAAR LOGNOR *** INTERSECTION SPEED STRINGDECLARATION *LOAD-VERBOSE* *PRINT-LINES* LEAST-POSITIVE-DOUBLE-FLOATRATIONAL UNBOUND-VARIABLE CHAR-UPCASE FILL-POINTER SLEEP PRIN1 1COMPLEMENT INTEGER-DECODE-FLOAT EVERY RENAME-PACKAGEGET-INTERNAL-RUN-TIME UNEXPORT STREAM-EXTERNAL-FORMATARRAY-IN-BOUNDS-P WITH-PACKAGE-ITERATOR LISP-IMPLEMENTATION-VERSIONCAADAR DOTIMES CIS ENSURE-DIRECTORIES-EXIST CHAR-NAME MUFFLE-WARNING*DEBUGGER-HOOK* FIRST ASINH CONSTANTP DOUBLE-FLOAT*READ-DEFAULT-FLOAT-FORMAT* DEFCLASS STEP METHOD-COMBINATIONWITH-CONDITION-RESTARTS PROVIDE *STANDARD-OUTPUT* MACHINE-TYPE NINTHSQRT COS LOGANDC1 PACKAGE-NICKNAMES FUNCTIONP NO-NEXT-METHOD MAPCCHARACTER CDDDR NOTINLINE MAKE-CONCATENATED-STREAM REAL CDAAARGET-SETF-EXPANSION SLOT-EXISTS-P BLOCK WRITE-LINE CHANGE-CLASS SUBSTWRITE-CHAR READTABLEP NTHCDR SOFTWARE-TYPETWO-WAY-STREAM-INPUT-STREAM MAKE-PACKAGE ACONSLEAST-NEGATIVE-SHORT-FLOAT FLOATP CAAAAR MAPCAR LOGCOUNT ATOMFCEILING ARRAY-DIMENSION DECODE-FLOAT SERIOUS-CONDITION SYMBOL-NAMESTRING-GREATERP SIGNAL *ERROR-OUTPUT* *COMPILE-FILE-TRUENAME*FILE-NAMESTRING *PRINT-MISER-WIDTH* UNINTERN GET-UNIVERSAL-TIMELIST-LENGTH CADR FIXNUM WITH-STANDARD-IO-SYNTAX WITH-OPEN-STREAMDESTRUCTURING-BIND *LOAD-TRUENAME* FROUND WITH-COMPILATION-UNITEIGHTH SETF KEY PROGN LAMBDA-LIST-KEYWORDS STYLE-WARNINGALLOW-OTHER-KEYS CHAR MACROEXPAND GET-OUTPUT-STREAM-STRING COERCE*READ-EVAL*)(nth-value 1 (dir (find-package cl)))
; 978
天啦天啦天啦这个common-lisp包里居然有978个可供外部访问的符号好奇先生简直要疯了
好奇先生想要对每一个符号使用describe并且把所有的符号都输出到一个文件里于是他写了一个函数。
;; print all symbols and doc strings in a file
(defun dir-package (package)List all external symbols in a package and their doc strings in a file(let ((sorted-names (sort (dir package) #string))(fn (format nil ~a.md package)))(with-open-stream (s (open fn :direction :output :if-exists :supersede));; header line(format s # ~a external symbols~%~%~% package);; list all external symbols (let ((index 1))(dolist (name sorted-names)(format s ~d. [~A](#~A)~% index name name)(incf index)))(format s ~%~%);; describe all external symbols(dolist (name sorted-names)(format s ## ~a~%~% name)(format s lisp~%)(describe name s)(format s ~%)))))这下好了好奇先生有一个markdown文件里面包含了所有的符号和他们的文档字符串。好奇先生对这个文件简直是爱不释手。
# CL external symbols1. [ALLOW-OTHER-KEYS](#ALLOW-OTHER-KEYS)
2. [AUX](#AUX)
3. [BODY](#BODY)
4. [ENVIRONMENT](#ENVIRONMENT)
5. [KEY](#KEY)
6. [OPTIONAL](#OPTIONAL)
7. [REST](#REST)
8. [WHOLE](#WHOLE)
9. [*](#*)
10. [**](#**)
11. [***](#***)
12. [*BREAK-ON-SIGNALS*](#*BREAK-ON-SIGNALS*)
13. [*COMPILE-FILE-PATHNAME*](#*COMPILE-FILE-PATHNAME*)
14. [*COMPILE-FILE-TRUENAME*](#*COMPILE-FILE-TRUENAME*)
15. [*COMPILE-PRINT*](#*COMPILE-PRINT*)
16. [*COMPILE-VERBOSE*](#*COMPILE-VERBOSE*)
17. [*DEBUG-IO*](#*DEBUG-IO*)
18. [*DEBUGGER-HOOK*](#*DEBUGGER-HOOK*)
19. [*DEFAULT-PATHNAME-DEFAULTS*](#*DEFAULT-PATHNAME-DEFAULTS*)
20. [*ERROR-OUTPUT*](#*ERROR-OUTPUT*)
21. [*FEATURES*](#*FEATURES*)
22. [*GENSYM-COUNTER*](#*GENSYM-COUNTER*)
23. [*LOAD-PATHNAME*](#*LOAD-PATHNAME*)
24. [*LOAD-PRINT*](#*LOAD-PRINT*)
25. [*LOAD-TRUENAME*](#*LOAD-TRUENAME*)
26. [*LOAD-VERBOSE*](#*LOAD-VERBOSE*)
27. [*MACROEXPAND-HOOK*](#*MACROEXPAND-HOOK*)
28. [*MODULES*](#*MODULES*)
29. [*PACKAGE*](#*PACKAGE*)
30. [*PRINT-ARRAY*](#*PRINT-ARRAY*)
31. [*PRINT-BASE*](#*PRINT-BASE*)
32. [*PRINT-CASE*](#*PRINT-CASE*)
33. [*PRINT-CIRCLE*](#*PRINT-CIRCLE*)
34. [*PRINT-ESCAPE*](#*PRINT-ESCAPE*)
35. [*PRINT-GENSYM*](#*PRINT-GENSYM*)...## YES-OR-NO-PCOMMON-LISP:YES-OR-NO-P[symbol]YES-OR-NO-P names a compiled function:Lambda-list: (OPTIONAL FORMAT-STRING REST ARGUMENTS)Declared type: (FUNCTION(OPTIONAL (OR STRING NULL FUNCTION) REST T)(VALUES BOOLEAN OPTIONAL))Derived type: (FUNCTION (OPTIONAL T REST T)(VALUES BOOLEAN OPTIONAL))Documentation:YES-OR-NO-P is similar to Y-OR-N-P, except that it clears theinput buffer, beeps, and uses READ-LINE to get the stringsYES or NO.Source file: SYS:SRC;CODE;QUERY.LISP## ZEROPCOMMON-LISP:ZEROP[symbol]ZEROP names a compiled function:Lambda-list: (NUMBER)Declared type: (FUNCTION (NUMBER) (VALUES BOOLEAN OPTIONAL))Derived type: (FUNCTION (T) (VALUES BOOLEAN OPTIONAL))Documentation:Is this number zero?Known attributes: foldable, flushable, unsafely-flushable, movableSource file: SYS:SRC;CODE;NUMBERS.LISP这个文件实在太长了只能每个人都产生了在自己电脑上查看。
好奇先生的部分好奇心暂时得到完全的满足他有一整套工具对自己的Lisp系统进行探索。真是太棒了
总结
包是Lisp中的一个重要概念它可以帮助我们组织符号。一个包可以包含很多符号我们可以通过do-external-symbols来遍历一个包中的所有符号。一个符号可以有文档字符串我们可以通过describe来查看一个符号的文档字符串。对于Lisp的学习应该尽快建立REPL工具然后用Lisp来探索Lisp。 文章转载自: http://www.morning.cljpz.cn.gov.cn.cljpz.cn http://www.morning.tbqbd.cn.gov.cn.tbqbd.cn http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.kmwsz.cn.gov.cn.kmwsz.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.wxwall.com.gov.cn.wxwall.com http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.wqbfd.cn.gov.cn.wqbfd.cn http://www.morning.lflsq.cn.gov.cn.lflsq.cn http://www.morning.glxdk.cn.gov.cn.glxdk.cn http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.wwkdh.cn.gov.cn.wwkdh.cn http://www.morning.ljzss.cn.gov.cn.ljzss.cn http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.clpfd.cn.gov.cn.clpfd.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.cbczs.cn.gov.cn.cbczs.cn http://www.morning.guofenmai.cn.gov.cn.guofenmai.cn http://www.morning.c7629.cn.gov.cn.c7629.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.hdrrk.cn.gov.cn.hdrrk.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn http://www.morning.zyrp.cn.gov.cn.zyrp.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.ccsdx.cn.gov.cn.ccsdx.cn http://www.morning.mtmnk.cn.gov.cn.mtmnk.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.qmwzr.cn.gov.cn.qmwzr.cn http://www.morning.bssjz.cn.gov.cn.bssjz.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.monstercide.com.gov.cn.monstercide.com http://www.morning.jkpnm.cn.gov.cn.jkpnm.cn http://www.morning.ailvturv.com.gov.cn.ailvturv.com http://www.morning.stfdh.cn.gov.cn.stfdh.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.jtmrx.cn.gov.cn.jtmrx.cn http://www.morning.xwgbr.cn.gov.cn.xwgbr.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.xrmwc.cn.gov.cn.xrmwc.cn http://www.morning.ptmch.com.gov.cn.ptmch.com http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.crsnb.cn.gov.cn.crsnb.cn http://www.morning.cdlewan.com.gov.cn.cdlewan.com http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.rycd.cn.gov.cn.rycd.cn http://www.morning.csnmd.cn.gov.cn.csnmd.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn http://www.morning.ygflz.cn.gov.cn.ygflz.cn http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn http://www.morning.zpjhh.cn.gov.cn.zpjhh.cn http://www.morning.bssjp.cn.gov.cn.bssjp.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn