OSDN Git Service

add base.rst
authorrezoo <rezoolab@gmail.com>
Thu, 19 Nov 2009 12:53:59 +0000 (21:53 +0900)
committerrezoo <rezoolab@gmail.com>
Thu, 19 Nov 2009 12:53:59 +0000 (21:53 +0900)
base.rst [new file with mode: 0644]

diff --git a/base.rst b/base.rst
new file mode 100644 (file)
index 0000000..a16db5f
--- /dev/null
+++ b/base.rst
@@ -0,0 +1,823 @@
+.. 9-base
+
+.. _label9:
+
+9. 基本ライブラリ
+==================================
+
+.. _label9.1:
+
+9.1 ビルドイン変数
+----------------------------------
+
+.. index:
+   single: OMAKE_VERSION
+
+OMAKE_VERSION
+^^^^^^^^^^^^^^^^^^^^^^^^^
+OMakeのバージョンを表します。
+
+STDLIB
+OMakeの基本ライブラリのファイルがあるディレクトリを表します。起動時に、この変数のデフォルトの値は以下のようにして決定されます。
+
+* OMAKELIB環境変数の値が存在している場合は用いられます。ただし、値は絶対パスでなければなりません。
+* Windows上では、レジストリのキー ``HKEY_CURRENT_USER\SOFTWARE\MetaPRL\OMake\OMAKELIB`` と ``HKEY_LOCAL_MACHINE\SOFTWARE\MetaPRL\OMake\OMAKELIB`` が調べられ、もし存在している場合にはその値が用いられます。
+* さもなければコンパイルされた時の値が用いられます。
+
+現在のデフォルトの値は ``omake --version`` を走らせることによって参照できます。
+
+.. index:
+   single: OMAKE_PATH
+
+OMAKEPATH
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``include`` と ``open`` 文における検索パスを指定した、ディレクトリの配列です(詳細は4.7を参照してください)。
+デフォルトの値は ``.`` と ``$(STDLIB)`` が格納されています。
+
+OSTYPE
+omakeを走らせているマシンのアーキテクチャの集合です。考えられる値は ``Unix`` (LinuxやMac OS Xを含む、すべてのUnixのバージョンを表します), ``Win32`` (MS-Windowsでは、OMakeはMSVC++かMingwを用いてコンパイルします), ``Cygwin`` (MS-Windowsでは、OMakeはCygwinを用いてコンパイルします)があります。
+
+.. index:
+   single: SYSNAME
+
+SYSNAME
+^^^^^^^^^^^^^^^^^^^^^^^^^
+現在のマシンのOSの名前を表します。
+
+.. index:
+   single: NODENAME
+
+NODENAME
+^^^^^^^^^^^^^^^^^^^^^^^^^
+現在のマシンのホスト名を表します。
+
+.. index:
+   single: OS_VERSION
+
+OS_VERSION
+^^^^^^^^^^^^^^^^^^^^^^^^^
+OSのバージョンを表します。
+
+.. index:
+   single: MACHINE
+
+MACHINE
+^^^^^^^^^^^^^^^^^^^^^^^^^
+マシンのアーキテクチャを表します(例: ``i386`` , ``sparc`` , etc...)。
+
+.. index:
+   single: HOST
+
+HOST
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``NODENAME`` と等価です。
+
+.. index:
+   single: USER
+
+USER
+^^^^^^^^^^^^^^^^^^^^^^^^^
+処理を実行しているユーザのログイン名を表します。
+
+.. index:
+   single: HOME
+
+HOME
+^^^^^^^^^^^^^^^^^^^^^^^^^
+処理を実行しているユーザのホームディレクトリを表します。
+
+.. index:
+   single: PID
+
+PID
+^^^^^^^^^^^^^^^^^^^^^^^^^
+OMakeのプロセスIDを表します。
+
+.. index:
+   single: TARGETS
+
+TARGETS
+^^^^^^^^^^^^^^^^^^^^^^^^^
+コマンドラインのターゲットを表す文字列です。例えば、もしOMakeが以下のコマンドラインで実行されたとしましょう。 ::
+
+      omake CFLAGS=1 foo bar.c
+
+この場合、 ``TARGETS`` は ``foo bar.c`` が定義されます。
+
+.. index:
+   single: BUILD_SUMMARY
+
+BUILD_SUMMARY
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``BUILD_SUMMARY`` 変数は ``omake`` がビルド状況を要約したファイルが定義されています(メッセージはビルドの最後で出力されます)。ビルドが開始されたとき、このファイルは空です。あなたはビルド中にこのファイルを編集したり追加することで、ビルドの要約に何らかのメッセージを追加できます。
+
+例えば、もしあなたがいくつかのアクションが発生した場所を把握しておきたいとしますと、ビルドの要約に以下を追加することで実現できます。 ::
+
+   foo: boo
+       echo "The file foo was built" >> $(BUILD_SUMMARY)
+       ...build foo...
+
+.. index:
+   single: VERBOSE
+
+VERBOSE
+^^^^^^^^^^^^^^^^^^^^^^^^^
+いくつかのコマンドのメッセージが冗長に出力されます。デフォルトの値は ``false`` で、 ``--verbose`` オプションを用いてOMakeが実行された場合、変数の値は ``true`` となります。
+
+.. _label9.2:
+
+9.2 論理式、真偽関数、コマンドのコントロール
+-------------------------------------------------
+omakeのブーリアン型は状況に無反応な(case-insensitive)文字列によって表現されます。「偽」は文字列 ``false`` , ``no`` , ``nil`` , ``undefined`` , ``0`` のいづれかによって表現されます。それ以外はすべて「真」となります。
+
+.. index:
+   single: not()
+.. _label9.2.1
+
+9.2.1 not
+^^^^^^^^^^^^^^^^^^^^^^^^^
+   $(not e) : String
+      e : String
+
+``not`` 関数は真偽値を反転させます。
+
+例えば、 ``$(not false)`` は ``true`` が返され、 ``$(not hello world)`` は ``false`` が返されます。
+
+.. index:
+   single: equal()
+.. _label9.2.2
+
+9.2.2 equal
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``equal`` 関数は2つの値が等しいかどうか比較します。
+
+例えば、 ``$(equal a, b)`` は ``false`` が返され、 ``$(equal hello world, hello world)`` は ``true`` が返されます。
+
+.. index:
+   single: and()
+.. _label9.2.3
+
+9.2.3 and
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+    $(and e1, ..., en) : String
+       e1, ..., en: Sequence
+
+``and`` 関数は引数の論理積を評価します。
+
+例えば、以下のコードでは ``X`` は真で、 ``Y``は偽となります。 ::
+
+    A = a
+    B = b
+    X = $(and $(equal $(A), a) true $(equal $(B), b))
+    Y = $(and $(equal $(A), a) true $(equal $(A), $(B)))
+
+.. index:
+   single: or()
+.. _label9.2.4
+
+9.2.4 or
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   $(or e1, ..., en) : String
+      e1, ..., en: String Sequence
+
+
+``or`` 関数は引数の選言を評価します。
+
+例えば、以下のコードでは ``X`` は真で、 ``Y`` は偽となります。 ::
+
+    A = a
+    B = b
+    X = $(or $(equal $(A), a) false $(equal $(A), $(B)))
+    Y = $(or $(equal $(A), $(B)) $(equal $(A), b))
+
+.. index:
+   single: if()
+.. _label9.2.5
+
+9.2.5 if
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+    $(if e1, e2[, e3]) : value
+       e1 : String
+       e2, e3 : value
+
+``if`` 関数は真偽値を基にした条件分岐を行います。例えば、 ``$(if $(equal a, b), c, d)`` は ``d`` と評価されます。
+
+条件分岐は以下のような文を用いても宣言できます。 ::
+
+   if e1
+      body1
+   elseif e2
+      body2
+   ...
+   else
+      bodyn
+
+もし式 ``e1`` が偽でなかったら、 ``body1`` が評価され、結果は条件分岐の値として返されます。もし ``e1`` が偽であるなら、条件分岐は移り変わり ``e2`` の式が用いられます。もしどの条件式も真でなかった場合、 ``bodyn`` が評価され、結果は条件分岐の値として返されます。
+
+``if`` 文は任意の数の ``elseif`` 文を加えることができます。また、 ``else`` 文はなくても構いません。
+
+
+.. note::
+  各々の条件分岐文はそれぞれのスコープを持っているので、条件文中で定義された変数は通常外から見ることができません。 ``export`` コマンドはスコープ中で定義された変数をエクスポートするために用いられます。たとえば、以下の式はCコンパイラの設定を定義するために良く用いられる方法です。 ::
+
+   if $(equal $(OSTYPE), Win32)
+      CC = cl
+      CFLAGS += /DWIN32
+      export
+   else
+      CC = gcc
+      CFLAGS += -g -O2
+      export
+
+.. index:
+   single: switch()
+   single: match()
+.. _label9.2.6
+
+9.2.6 switch, match
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``switch`` , ``match`` 関数はパターンのマッチングに用いられます。
+
+``$(switch <arg>, <pattern_1>, <value_1>, ..., <pattern_n>, <value_n>) $(match <arg>, <pattern_1>, <value_1>, ..., <pattern_n>, <value_n>)``
+
+``<pattern>/<value>`` の数は任意です。ただし、引数の数は必ず奇数でなければなりません。
+
+``<arg>`` は文字列として評価され、 ``<pattern_1>`` を用いて比較されます。もしマッチしている場合、結果の式は ``<value_1>`` が返されます。そうでない場合、マッチする文が見つかるまで、残りのパターンを用いて評価が行われます。
+
+``switch`` 関数はパターンと引数を比較するために用いられます。例えば、以下の表現式では、 ``FILE`` 変数は ``OSTYPE`` 変数の値に依存して、 ``foo`` , ``bar`` , あるいは空の文字列が定義されます。 ::
+
+    FILE = $(switch $(OSTYPE), Win32, foo, Unix, bar)
+
+``match`` 関数は正規表現を用います( ``grep`` 関数を参照してください)。もしマッチしているパターンが見つかった場合、変数 ``$1, $2, ...`` は ``\(`` と ``\)`` デリミタの間にある文字列が束縛されます。 ``\0`` 変数は全体のマッチ文が定義されており、 ``$*`` はマッチした文字列の配列が定義されます。 ::
+
+    FILE = $(match foo_xyz/bar.a, foo_\\\(.*\\\)/\\\(.*\\\)\.a, foo_$2/$1.o)
+
+``switch`` と ``match`` 関数は代わりに(もっと便利な)以下のような形に書くことができます。 ::
+
+   match e
+   case pattern1
+      body1
+   case pattern2
+      body2
+   ...
+   default
+      bodyd
+
+式 ``e`` が前回のパターンでマッチせずに ``pattern_i`` でマッチした場合、 ``body_i`` が評価され、 ``match`` の結果として返されます。 ``switch`` 関数は文字列の比較を行います。 ``match`` 関数は正規表現でのマッチングを行います。 ::
+
+   match $(FILE)
+   case $".*\(\.[^\/.]*\)"
+      println(The string $(FILE) has suffix $1)
+   default
+      println(The string $(FILE) has no suffix)
+
+.. index:
+   single: try
+.. _label9.2.7
+
+9.2.7 try
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   try
+      try-body
+   catch class1(v1)
+      catch-body
+   when expr
+      when-body
+   ...
+   finally
+      finally-body
+
+``try`` 文は例外を扱うために用いられます。はじめに、 ``try-body`` の式が評価されます。
+
+もし値 ``v`` が例外を出さなかった場合、 ``finally-body`` の式が評価され値 ``v`` が結果として返されます。
+
+もし ``try-body`` の評価がオブジェクト ``obj`` の例外を送出した場合、 ``catch`` 文が代わりに評価されます。 ``catch`` 文の ``catch class(v)`` を実行している最中、もし例外のオブジェクト ``obj`` がクラス名 ``class`` のインスタンスであったならば、変数 ``v`` が例外のオブジェクトとして束縛され、 ``catch-body`` の式が評価されます。
+
+もし ``catch`` 文が評価されている最中 ``when`` 文に遭遇した場合、評価式 ``expr`` が評価されます。もし結果が真であったならば、 ``when-body`` の式が続けて評価されます。さもなければ、次の ``catch`` 文が評価されます。
+
+``catch-body`` か ``when-body`` の評価が完全に終わった場合、別の ``when`` 文を評価することなく ``finally-body`` の式が評価され、値 ``v`` が返されます。
+
+``try`` 文には任意の数の ``catch`` 文を含めることができます。また、 ``finally`` 文はなくても構いません。
+
+.. index:
+   single: raise()
+.. _label9.2.8
+
+9.2.8 raise
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``raise`` 関数は例外を送出します。 ``exn`` は任意のオブジェクトです。しかしながら、通常は ``Exception`` オブジェクトを送出します。
+
+もし例外が捕らえられなかった場合、全体のオブジェクトはエラーメッセージとして詳細に出力されます。しかしながら、もしオブジェクトが ``Exception`` で ``message`` プロパティを含んでいた場合、エラーメッセージは ``message`` のみが出力されます。
+
+.. index:
+   single: exit()
+.. _label9.2.9
+
+9.2.9 exit
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   exit(code)
+      code : Int
+
+``exit`` 関数はomakeを異常終了させます。
+
+``$(exit <code>)``
+
+``exit`` 関数は終了コードである整数を引数に指定します。0でない値は異常終了を表します。
+
+.. index:
+   single: defined()
+.. _label9.2.10
+
+9.2.10 defined
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   $(defined sequence) : String
+      sequence : Sequence
+
+``defined`` 関数はシーケンス中のすべての変数が現在定義されているか試します。例えば、以下のコードでは変数 ``X`` が既に定義されていないかどうかを定義しています。 ::
+
+    if $(not $(defined X))
+       X = a b c
+       export
+
+これは修飾された変数にも用いることができます。 ::
+
+    $(defined X.a.b)
+    $(defined public.X)
+
+.. index:
+   single: defined-env()
+.. _label9.2.11
+
+9.2.11 defined-env
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   $(defined-env sequence) : String
+      sequence : String
+
+``defined-env`` 関数は処理している環境で、指定された変数が定義されているかどうか試します。
+
+例えば、以下のコードでは、環境変数 ``DEBUG`` が定義されている場合は ``-g`` コンパイルオプションを追加します。 ::
+
+if $(defined-env DEBUG)
+    CFLAGS += -g
+    export
+
+.. index:
+   single: getenv()
+.. _label9.2.12
+
+9.2.12 getenv
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   $(getenv name) : String
+   $(getenv name, default) : String
+
+``getenv`` 関数は現在処理している環境での変数の値を取得します。この関数は一つか二つの引数を指定する必要があります。
+
+一つの引数を指定した場合、もし環境中で変数が定義されていなかったならば例外を送出します。二つの引数を指定した場合、もし定義されていなかったならば二番目の引数が返されます。
+
+例えば、以下のコードでは、もし環境変数 ``PATH``が定義されていた場合は、その値を空白で分割したリストとして ``X`` を定義します。さもなければ ``/bin /usr/bin`` が代わりに使われます。 ::
+
+    X = $(split $(PATHSEP), $(getenv PATH, /bin:/usr/bin))
+
+あなたは以下のような形でも定義することができます。 ::
+
+     getenv(NAME)
+         default
+
+.. index:
+   single: setenv()
+.. _label9.2.13
+
+9.2.13 setenv
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   setenv(name, value)
+      name : String
+      value : String
+
+``setenv`` 関数は現在処理している環境での変数を定義します。環境変数は通常の変数のようにスコープされます。
+
+.. index:
+   single: unsetenv()
+.. _label9.2.14
+
+9.2.14 unsetenv
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   unsetenv(names)
+      names : String Array
+
+``unsetenv`` 関数は現在処理している環境からいくつかの変数を削除します。環境変数は通常の変数のようにスコープされます。
+
+.. index:
+   single: get-registry()
+.. _label9.2.15
+
+9.2.15 get-registry
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   get-registry(hkey, key, field) : String
+   get-registry(hkey, key, field, default) : String
+       hkey : String
+       key : String
+       field : String
+
+``get-registry`` 関数はWin32上のシステムレジストリから文字列を取得します。他のアーキテクチャ上では、レジストリの値は返されません。
+
+``hive`` (私はこの呼び方が正しいと思っています)では、使用するレジストリの区分を指定します。これは以下の値である必要があります。(訳注: よく意味がわかりませんがhkeyとfiveをもじったもの?)
+
+* HKEY_CLASSES_ROOT 
+* HKEY_CURRENT_CONFIG 
+* HKEY_CURRENT_USER 
+* HKEY_LOCAL_MACHINE 
+* HKEY_USERS 
+
+もしこれらの意味について知りたい場合はマイクロソフトのドキュメントを参照してください。
+
+``key`` はレジストリから取得したいフィールドを指定します。これは ``A\B\C`` のような形である必要があります(通常のスラッシュを用いた場合はバックスラッシュに変換されます)。 ``field`` は ``key`` のサブフィールドを指定します。
+
+4つの引数を取る場合、 ``default`` の値が失敗したときに返されます。あなたはこれを別の形で用いることもできます。 ::
+
+    get-registry(hkey, key, field)
+       default
+
+.. index:
+   single: getvar()
+.. _label9.2.16
+
+9.2.16 getvar
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   $(getvar name) : String
+
+``getvar`` 関数は変数の値を取得します。
+
+もし変数が定義されていない場合は例外が送出されます。
+
+例えば、以下のコードではXを文字列abcで定義します。 ::
+
+    NAME = foo
+    foo_1 = abc
+    X = $(getvar $(NAME)_1)
+
+これは修飾された変数にも使うことができます。 ::
+
+    $(getvar X.a.b)
+
+.. index:
+   single: setvar()
+.. _label9.2.17
+
+9.2.17 setvar
+^^^^^^^^^^^^^^^^^^^^^^^^^
+::
+
+   setvar(name, value)
+      name : String
+      value : String
+
+``setvar`` 関数は新しい変数を定義します。例えば、以下のコードでは ``X`` は文字列 ``abc`` で定義されます。 ::
+
+   NAME = X
+   setvar($(NAME), abc)
+
+これは修飾された変数にも使うことができます。 ::
+
+    setvar(public.X, abc)
+
+9.3 配列とシーケンス
+----------------------------------
+
+.. index:
+   single: array()
+.. _label9.3.1
+
+9.3.1 array
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: split()
+.. _label9.3.2
+
+9.3.2 split
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: concat()
+.. _label9.3.3
+
+9.3.3 concat
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: length()
+.. _label9.3.4
+
+9.3.4 length
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: nth()
+.. _label9.3.5
+
+9.3.5 nth
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: replace-nth()
+.. _label9.3.6
+
+9.3.6 replace-nth
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: nth-hd()
+.. _label9.3.7
+
+9.3.7 nth-hd
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: nth-tl()
+.. _label9.3.8
+
+9.3.8 nth-tl
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: subrange()
+.. _label9.3.9
+
+9.3.9 subrange
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: rev()
+.. _label9.3.10
+
+9.3.10 rev
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: join()
+.. _label9.3.11
+
+9.3.11 join
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: string()
+.. _label9.3.12
+
+9.3.12 string
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: string-length()
+.. _label9.3.13
+
+9.3.13 string-length
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: string-escaped()
+   single: ocaml-escaped()
+   single: html-escaped()
+   single: html-pre-escaped()
+   single: c-escaped()
+   single: id-escaped()
+.. _label9.3.14
+
+9.3.14 string-escaped, ocaml-escaped, html-escaped, html-pre-escaped, c-escaped, id-escaped
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: decode-uri()
+   single: encode-uri()
+.. _label9.3.15
+
+9.3.15 decode-uri, encode-uri
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: quote()
+.. _label9.3.16
+
+9.3.16 quote
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: quote-argv()
+.. _label9.3.17
+
+9.3.17 quote-argv
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: html-string()
+.. _label9.3.18
+
+9.3.18 html-string
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: addsuffix()
+.. _label9.3.19
+
+9.3.19 addsuffix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: mapsuffix()
+.. _label9.3.20
+
+9.3.20 mapsuffix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: addsuffixes()
+.. _label9.3.21
+
+9.3.21 addsuffixes
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: removeprefix()
+.. _label9.3.22
+
+9.3.22 removeprefix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: removesuffix()
+.. _label9.3.23
+
+9.3.23 removesuffix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: replacesuffixes()
+.. _label9.3.24
+
+9.3.24 replacesuffixes
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: addprefix()
+.. _label9.3.25
+
+9.3.25 addprefix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: mapprefix()
+.. _label9.3.26
+
+9.3.26 mapprefix
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: add-wrapper()
+.. _label9.3.27
+
+9.3.27 add-wrapper
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: set()
+.. _label9.3.28
+
+9.3.28 set
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: mem()
+.. _label9.3.29
+
+9.3.29 mem
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: intersection()
+.. _label9.3.30
+
+9.3.30 intersection
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: intersects()
+.. _label9.3.31
+
+9.3.31 intersects
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: set-diff()
+.. _label9.3.32
+
+9.3.32 set-diff
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: filter()
+.. _label9.3.33
+
+9.3.33 filter
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: filter-out()
+.. _label9.3.34
+
+9.3.34 filter-out
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: capitalize()
+.. _label9.3.35
+
+9.3.35 capitalize
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: uncapitalize()
+.. _label9.3.36
+
+9.3.36 uncapitalize
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: uppercase()
+.. _label9.3.37
+
+9.3.37 uppercase
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: lowercase()
+.. _label9.3.38
+
+9.3.38 lowercase
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: system()
+.. _label9.3.39
+
+9.3.39 system
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: shell()
+.. _label9.3.40
+
+9.3.40 shell
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: export()
+.. _label9.3.41
+
+9.3.41 export
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: while()
+.. _label9.3.42
+
+9.3.42 while
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: break()
+.. _label9.3.43
+
+9.3.43 break
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. index:
+   single: random()
+   single: random-init()
+.. _label9.3.44
+
+9.3.44 random, random-init
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^