lisp base
2024-08-28 19:51:44
一 、quote
lisp 使用s-expr表示数据和代码,通常会将第一项作为函数,而将后续元素当做参数传给第一项进行计算。可以通过quote来进行其他解析,quote可用(‘)表示:
( + 1 1)
2 ‘(+ 1 1)
(+ 1 1)
二 、反引号(·)
(·)按键(~)为同一个键盘按键。作用和quote差不多,但可以使其中部分字符串保留原解析,需要使用,放在需要保留原解析的字符串之前。
`(+ 1 ,(+ 0 1))
(+ 1 1)
三、 #’
该操作符表示对函数的引用
四、控制结构
do
(do ((x 1 (+ x 1))
(y 1 (* y 2)))
((> x 5) y)
(print y)
(print 'working))
cond
(cond
((evenp a) a) ;if a is even return a
((> a 7) (/ a 2)) ;else if a is bigger than 7 return a/2
((< a 5) (- a 1)) ;else if a is smaller than 5 return a-1
(t 17)) ;else return 17 2
case
(setq x 'd)
(case x
(a 5)
((d e) 7)
((b f) 3)
(otherwise 9))
7
loop
(setq a 4)
(loop
(setq a (+ a 1))
(when (> a 6) (return a))) 7
if
(if t 6 5)
6
(if nil 6 5)
5
五、block
Common Lisp 的构造区块(block)的基本操作符:progn 、block 以及 tagbody 。
progn主体中的表达式会顺序求值并返回最后一个表达式的值。
(progn
(format t "a")
(format t "b")
(+ 11 12))
ab
23
block相当于带有特别出口的progn。
(block head
(format t "Here we go.")
(return-from head 'idea)
(format t "We'll never see this."))
Here we go.
IDEA
tagbody大多数迭代操作符都隐含一个tagbody。
(tagbody
(setf x 0)
top
(setf x (+ x 1))
(format t "~A " x)
(if (< x 10) (go top)))
1 2 3 4 5 6 7 8 9 10
NIL
return宏把传入的参数当做封闭区块nil的返回值。
(block nil
(return 27))
27
在一个block(明确定义的或隐含的),不论return-from或者return都不会运行。
六、函数
可通过 symbol-function 给函数配置某个名字:
(setf (symbol-function 'add2)
#'(lambda (x) (+ x 2)))
新的全局函数可以这样定义,用起来和 defun 所定义的函数一样:
(add2 0)
2
通过 defun 或 symbol-function 搭配 setf 定义的函数是全局函数。你可以像存取全局变量那样,在任何地方存取它们。定义局部函数也是有可能的,局部函数和局部变量一样,只在某些上下文内可以访问。
局部函数可以使用 labels 来定义,它是一种像是给函数使用的 let 。它的第一个实参是一个新局部函数的定义列表,而不是一个变量规格说明的列表。列表中的元素为如下形式:
最新文章
- ASP.NET MVC视图中的@Html.xxx(...)
- Eclipse中generate getter and setter对boolean的反应
- JS之类型转换
- excel文档
- libevent学习之二:Windows7(Win7)下编译libevent
- ImageView的属性android:scaleType
- jQuery实现checkbox全选反选及删除等操作
- OpenSUSE 13.2使用VPN(PPTP)
- CentOS网络接口配置文件ifcfg-eth详解
- MySQL数据类型:SQL_MODE设置不容忽视
- abelkhan服务器框架
- 201521123006 《java程序设计》 第10周学习总结
- Redis(一)--安装与简介
- win10更新后出现System.ComponentModel.Win32Exception
- python爬虫之MongoDB测试环境安装
- JavaBasic_01
- ORA-01403:no data found 解决办法
- Python matplot画散列图
- python 等比数列
- flashfxp 命令行
热门文章
- 【转】一点一点学ASP.NET之基础概念——HttpModule
- IOS折线图
- 解决 swap file “*.swp”already exists!问题
- C++学习笔记1(Windows程序运行原理及程序编写流程)
- 如何快速备份还原Sql Server 数据库
- iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具
- 设计模式之状态模式IFORNOIF(二十二)
- sql: Oracle simple example table
- csharp: SQL Server 2005 Database Backup and Restore using C#
- 项目经验:GIS<;MapWinGIS>;建模第二天