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