Common Lisp の multiple value [Lisp]
「岩波コンピュータサイエンス Common Lisp 入門」という本が本屋にあったので買ってみた。3ページ目くらいでいきなり驚いたんだけど Lisp にも Lua と同様 multiple value があるらしい。
> (floor 11 3) 3 2
それと振る舞いも良く似ている。
一つの値が期待される文脈では2つめ以降の値は単純に捨てられる。
Lua:
> function floor(x,y) return math.floor(x/y),x%y end > a = floor(11,3) > print(a) 3
Lisp:
> (setq a floor 11 3)) 3 > a 3
値が足りない分は nil で埋められる。
Lua:
> x,y,z=floor(11,3) > print(x,y,z) 3 2 nil
Lisp:
> (multiple-value-setq (x y z) (floor 11 3)) 3 > x 3 > y 2 > z NIL
タプルのようなデータ構造ではない形で multiple value を持ってる言語って相当特異だと思ってたんだけど Lua のそれは Common Lisp の影響だったのかな。
コメント 0