ANSI Common Lisp 笔记六(控制流)

一、区块

有3个构造区块的基本操作符:progn , block 以及 tagbody 。

1、在progn 主体中的表达式会依序求值,并返回最后一个表达式的值。


2、一个 block像是带有名字及紧急出口的progn。第一个参数应为符号。这变成了区块的名字。在主体中的任何地方,你可以停止求值,并透过使用return-from指定区块的名字,来立即返回一个数值:

CL-USER> (block head 
  (format t "Here we go.")
  (return-from head 'idea)
  (format t "We'll never see this."))
Here we go.
IDEA


也有一个return 宏,它把传入的参数当做封闭区块nil的返回值:

CL-USER> (block nil
  (return 27))
27 


一个let* 功能上等同于一系列嵌套的let 。

CL-USER> (let* ((x 1)
(y (+ x 1)))
(+ x y))
  
3


destructuring-bind 宏是通用化的let 。与其接收单一变量,它接受一个模式(pattern) 一个或多个变量所形成的树,并将它们与某个实际的数所对应的部分做绑定。


二、多值

在Common Lisp中,一个表达式可以返回零个或多个数值。values 函数返回多个数值。它一个不少地返回你作为数值所传入的参数:

CL-USER> (values 'a nil (+ 2 4))
A
NIL
6


要接收多个数值,我们使用 multiple-value-bind:

CL-USER> (multiple-value-bind (x y z) (values 1 2 3)
  (list x y z))
(1 2 3)


可以由multiple-value-call 将多值作为参数传递到第二个函数:

CL-USER> (multiple-value-call #' + (values 1 2 3))
6




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值