For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]

11.5 srfi-11 - Let-values

Module: srfi-11

二つのマクロ、let-valueslet*-values を定義しています。 これらは、多値とともに利用すると便利です。([SRFI-11])

Macro: let-values ((vars expr) …) body …

[SRFI-11] vars は変数のリストです。expr は評価され、最初の返り値は、 vars の最初の変数に束縛されます。二番目の返り値は、vars の 二番目の変数に束縛され、以下同様です。そのあと、body が評価されます。 expr のスコープは let と同様に、let-values の 外側になります。

(let-values (((a b) (values 1 2))
             ((c d) (values 3 4)))
  (list a b c d)) ⇒ (1 2 3 4)

(let ((a 1) (b 2) (c 3) (d 4))
  (let-values (((a b) (values c d))
               ((c d) (values a b)))
    (list a b c d))) ⇒ (3 4 1 2)

vars lambda パラメータと同様に、ドット付リストでも、 単一のシンボルでもかまいません。

(let-values (((x . y) (values 1 2 3 4)))
  y) ⇒ (2 3 4)

(let-values ((x (values 1 2 3 4)))
  x) ⇒ (1 2 3 4)

expr によって返された値の数と vars が期待する数とが一致しない 場合にはエラーになります。

Macro: let*-values ((vars expr) …) body …

[SRFI-11] let-valuesと同じですが、各 expr のスコープが先行する vars を含みます。

(let ((a 1) (b 2) (c 3) (d 4))
  (let*-values (((a b) (values c d))
                ((c d) (values a b)))
    (list a b c d))) ⇒ (3 4 3 4)

Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]