Common Lispの関数の引数

C言語Java言語にはないMatlabの使いやすい点としては、関数から複数戻り値が返せる機能です。例えば、配列を並べ替えるのに使われるsort関数の戻り値は「並び替えられた配列」と「それが元配列の何番目にあったか」の2つです。CやJavaでも戻り値を構造体やクラスにしてしまえば同じことができますし、Cだと引数の破壊的操作をしてやることでも対応できますが、言語仕様で用意されているものではないのでやや面倒です。

今日のCommon Lispの勉強では、そこら辺を学びました。

(multiple-value-setq (a b) (some-function x y z))

とすると、some-funcionからaとbを戻り値として得ることができます。多値というらしいです。

PythonR言語にあるキーワード引数もサポートされています。LISPというと古くて凝り固まった言語かと思いきや、Common Lispは意外に柔軟でびっくりしました。