SSブログ

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 の影響だったのかな。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。