281_返回多值的函数

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp

    继续学习emacs以及lisp,今天梳理一下common lisp中的函数如何返回多个数值。直接看一个简单的例子:

    在这个例子中,函数返回了两个数值,实现方式就是使用了vlaues函数。看上去或许是有与之前的例子类似的地方,但是其实本质上的输出是不同的。我们回看之前的例子:

    这个只是返回值中包含了两个数据,其实是返回了一个lisp对象,也就是一个list。

    这个是接着第一个示范的代码来做的,由于test函数返回了两个lisp对象,这里test-1最后执行了test,并将结果作为返回值。因此,这里也直接返回了两个lisp对象。

    这个例子,首先得回头复习一下之前学到的let以及let*。这是一种变量引入的方式,除了引入变量给定初值之外,还有一个body可以执行一定的操作。这里的这个操作用于了temp返回。从这里看就可以看出一个怪现象了,返回值丢了一个。其实,这就是返回对象是两个的一个侧面印证了。

    这种方式能够捕获到两个元素,功能有点类似之前的列表拆分。形式有点类似let,有一个变量定义赋值的匹配对儿,还有一个body用于执行部分操作。

    如果这里使用values,那么test的返回值转了一个圈就又回来了。其实,这里还能够继续转圈转回去,就像下面这个。

    这里还有一个函数values-list可以用于实现一个多值组合输出。上面是一个演示的例子。

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp

发布了891 篇原创文章 · 获赞 170 · 访问量 176万+

猜你喜欢

转载自blog.csdn.net/grey_csdn/article/details/104545665