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

10.1 srfi-0 - 機能条件式

Module: srfi-0

このモジュールは SRFI-0 の cond-expand マクロ形式を提供します。 現在、このモジュールは cond-expand を使用したときに、自動的に ロードされますので、明示的に (use srfi-0) を書く必要はありません。 ポータブルなプログラムにするには、'use' 形式を使わない方が良いでしょう。

Macro: cond-expand (feature-requirement command-or-definition …) …

[SRFI-0] Gauche が feature-requirement をサポートしていれば、このマクロは command-or-definition … を展開します。 異るScheme の実装による機能の差異を吸収するのに使えると言えるでしょう。

feature-requiremnt は以下のような構文でなければなりません。

 
feature-requirement
  : feature-identifier
  | (and feature-requirement …)
  | (or  feature-requirement …)
  | (not feature-requirement)

feature-identifier は機能を示すシンボルです。ある機能が Gauche で サポートされているなら、それは、feature-requirement を満たします。 より複雑な条件を構成するために、feature-requirement のブール代数による 組み合わせを用いることが出来ます。

このマクロは feature-requirement を順にテストし、そのひとつが 満たされたら、対応する command-or-definition … に展開されます。

最後の節は、feature-requirement ではなく、else で始めることも できます。これ以前に満たされた条件がない場合には、このマクロは else 節の command-or-definition に展開されます。もし、else 節がなく、 満たされる条件節がひとつもなければ、エラーが発生します。

現時点の Gauche では、サポートされている SRFI の機能は、srfi 名 (たとえば、srfi-1)で識別されます(サポートされている SRFI に ついては 標準への準拠 を参照してください)。 また、シンボル gauchefeature-identifier として認識されます。

srfi-13 (文字列ライブラリ)を必要とするプログラムを書いているとしましょう。 Gauche では、標準的には、以下のようにします。

 
(use srfi-13)

;; ... あなたのプログラム ...

しかし、この 'use' マクロは Gauche 専用で、他の Scheme の実装では 動作しません。代りに以下のように書くことができます。

 
(cond-expand
  (srfi-13
    ;; ... あなたのプログラム ...
  ))

その実装が srfi-13 をサポートしていれば、この形式は「あなたの プログラム」に展開されます。Gauche では、この場合に 内部で(use srfi-13)を呼び出します。

上記のフォームは実装がsrfi-13をサポートしていなければエラーとなります。 そのような実装の上でもプログラムを走らせたい時は、 代替となるライブラリ定義を提供すると良いでしょう。

 
(cond-expand
 (srfi-13
   ;; ... あなたのプログラム ...
 )
 (else
   (load "my-srfi-13-implementation")
   ;; ... あなたのプログラム ...
 ))

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

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