[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.7 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)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.