Created
October 1, 2013 03:13
-
-
Save bizenn/6773408 to your computer and use it in GitHub Desktop.
Add some Japanese text to Gauche's info.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/doc/corelib.texi b/doc/corelib.texi | |
index ae84764..da3885c 100644 | |
--- a/doc/corelib.texi | |
+++ b/doc/corelib.texi | |
@@ -10327,26 +10327,49 @@ Common Lisp. | |
@subsection Folding generated values | |
@c NODE 生成された値の畳み込み | |
+@c EN | |
Sometimes a procedure is used as a @emph{generator} of a series | |
of values, by yielding one value at a time. Customary an EOF | |
object is used to mark the end of the series. For example, | |
@code{read-char} is such a procedure that yields a series | |
of characters, terminated by EOF. | |
+@c JP | |
+一度にひとつの値を生成することで、手続きを一連の値を生成する@emph{ジェネレータ}として | |
+使うことがあります。値の連続の終端を表すマークとしては、慣例としてEOFが使われます。 | |
+例えば@code{read-char}はそうした、一連の文字を生成し、終端としてEOFを返す手続きです。 | |
+@c COMMON | |
+@c EN | |
Since it is such a handy abstraction, Gauche provides a | |
set of utilties (see @ref{Generators}) to construct and generators | |
out of various sources, including other generators. | |
+@c JP | |
+こうした抽象化は手軽であるため、Gaucheは、他のジェネレータを含むさまざまなソースから | |
+ジェネレータを構築するユーティリティをひとそろい提供しています。 | |
+@c COMMON | |
+@c EN | |
The generated values needs to be consumed eventually. Here we | |
provide several procedures to do that. These are useful | |
when combined with input procedures like @code{read}, so we | |
have them built-in instead of putting them in a separate module. | |
+@c JP | |
+生成された値は最終的に消費されなければなりません。そのための手続きもいくつか | |
+提供されています。こうした手続きは、@code{read}のような入力手続きと組み合わせるのに | |
+有用です。このため、別のモジュールに分割するのではなく、ビルトイン手続きになっています。 | |
+@c COMMON | |
@defun generator-fold proc seed gen gen2 @dots{} | |
+@c EN | |
Works like @code{fold} on the generated values by generator | |
procedures @var{gen} @var{gen2} @dots{} (@xref{Walking over lists}, | |
for the details of @code{fold}). | |
+@c JP | |
+ジェネレータである手続き @var{gen} @var{gen2} @dots{} が生成する値に対して | |
+ @code{fold} のように働きます(@code{fold}の詳細: @xref{Walking over lists})。 | |
+@c COMMON | |
+@c EN | |
When one generator is given, for each value @var{v} generated by @var{gen}, | |
@var{proc} is called as @code{(@var{proc} @var{v} @var{r})}, where | |
@var{r} is the current accumulated result; the initial value of the | |
@@ -10354,13 +10377,29 @@ accumulated result is @var{seed}, | |
and the return value from @var{proc} becomes the next accumulated result. | |
When @var{gen} returns EOF, the accumulated result at that time is returned | |
from @code{generator-fold}. | |
+@c JP | |
+引数としてジェネレータがひとつ与えられると、その @var{gen} が生成する各値 @var{v} に | |
+対して、@var{proc} が @code{(@var{proc} @var{v} @var{r})} のように呼び出されます。 | |
+@var{r}は現在の積算結果であり、その初期値は @var{seed} です。そして、@var{proc} が | |
+返す値が次回の @var{proc} 呼び出し時の積算値として渡されることになります。 | |
+@var{gen}がEOFを返すと、その時点の積算値が @code{generator-fold} から値として | |
+返されます。 | |
+@c COMMON | |
+@c EN | |
When more than one generator is given, @var{proc} is | |
called as @code{(@var{proc} @var{v1} @var{v2} @dots{} @var{r})}, | |
where @var{v1}, @var{v2} @dots{} are the values yielded from | |
@var{gen}, @var{gen2}, @dots{}, respectively, and @var{r} is | |
the current accumulated result. The iteration terminates when | |
any one of the generators returns EOF. | |
+@c JP | |
+2つ以上のジェネレータが渡された場合は、@var{proc}は | |
+@code{(@var{proc} @var{v1} @var{v2} @dots{} @var{r})} のように呼び出されます。 | |
+@var{v1}, @var{v2} @dots{} はそれぞれ @var{gen}, @var{gen2}, @dots{} が生成 | |
+した値であり、@var{r}は現在の積算値です。ジェネレータのどれかひとつ以上がEOFを返すと、 | |
+イテレーションは終了します。 | |
+@c COMMON | |
@example | |
(with-input-from-string "a b c d e" | |
@@ -10370,19 +10409,34 @@ any one of the generators returns EOF. | |
@end defun | |
@defun generator-fold-right proc seed gen gen2 @dots{} | |
+@c EN | |
Works like @code{fold-right} on the generated values by generator | |
procedures @var{gen} @var{gen2} @dots{} (@xref{Walking over lists}, | |
for the details of @code{fold-right}). | |
+@c JP | |
+ジェネレータである手続き@var{gen} @var{gen2} @dots{}が生成する値に対して | |
+@code{fold-right}のように働きます(@code{fold-right}の詳細: @xref{Walking over lists})。 | |
+@c COMMON | |
+@c EN | |
This is provided for completeness, but it isn't a good way to | |
handle generators; in order to combine values right-associatively, | |
we should read all the values from the generators (until any one | |
of the generator returns EOF), then start | |
calling @var{proc} as | |
+@c JP | |
+この手続きは完全性のために提供されていますが、ジェネレータをうまく扱えません; | |
+値を右結合で計算していくためには、ジェネレータから(少なくともどれかひとつのジェネレータがEOFを返すまで) | |
+全ての値を読み取らなければなりません。そうして初めて @var{proc} の呼び出しが始まることになります。 | |
+@c COMMON | |
@example | |
(proc v0_0 v1_0 ... (proc v0_1 v1_1 ... (proc v0_n v1_n ... seed) ...)) | |
@end example | |
+@c EN | |
where @var{vn_m} is the @var{m}-th value yielded by @var{n}-th generator. | |
+@c JP | |
+@var{vn_m}は、@var{n}番目のジェネレータが@var{m}回目の呼び出しで返した値です。 | |
+@c COMMON | |
@example | |
(with-input-from-string "a b c d e" | |
@@ -10390,23 +10444,44 @@ where @var{vn_m} is the @var{m}-th value yielded by @var{n}-th generator. | |
@result{} (a b c d e . z) | |
@end example | |
+@c EN | |
As you see, keeping all intermediate values kind of defeats the | |
benefit of generators. | |
+@c JP | |
+ごらんのように、全ての中間値を保持することで、ジェネレータの利点が | |
+ある意味帳消しになってしまうのです。 | |
+@c COMMON | |
@end defun | |
@defun generator-for-each proc gen gen2 @dots{} | |
+@c EN | |
A generator version of @code{for-each}. Repeatedly applies @var{proc} on | |
the values yielded by @var{gen}, @var{gen2} @dots{} until any one of | |
the generators yields EOF. The values returned from @var{proc} are discarded. | |
+@c JP | |
+ジェネレータ版の@code{for-each}です。@var{gen}, @var{gen2} @dots{} が生成する | |
+値に対して、ジェネレータのどれかがEOFを返すまで @var{proc} を繰り返し適用していきます。 | |
+@var{proc}が返す値は無視されます。 | |
+@c COMMON | |
+@c EN | |
This is a handy procedure to consume generated values with side effects. | |
+@c JP | |
+これは、生成される値を副作用で消費するのに便利です。 | |
+@c COMMON | |
@end defun | |
@defun generator-map proc gen gen2 @dots{} | |
+@c EN | |
A generator version of @code{map}. Repeatedly applies @var{proc} on | |
the values yielded by @var{gen}, @var{gen2} @dots{} until any one of | |
the generators yields EOF. The values returned from @var{proc} | |
are collected into a list and returned. | |
+@c JP | |
+ジェネレータ版の@code{map}です。@var{gen}, @var{gen2} @dots{} が生成する | |
+値に対して、ジェネレータのどれかがEOFを返すまで @var{proc} を繰り返し適用していきます。 | |
+@var{proc}が返す値をひとつのリストに束ねて返します。 | |
+@c COMMON | |
@example | |
(with-input-from-string "a b c d e" | |
@@ -10414,9 +10489,14 @@ are collected into a list and returned. | |
@result{} ("a" "b" "c" "d" "e") | |
@end example | |
+@c EN | |
The same effects can be achieved by combining @code{generator->list} | |
and @code{gmap} (@xref{Generator operations}). This procedure | |
is provided for the backward compatibility. | |
+@c JP | |
+@code{generator->list}と@code{gmap}(@xref{Generator operations})の組み合わせと | |
+同じ挙動を実現します。この手続きは後方互換性のために提供されています。 | |
+@c COMMON | |
@example | |
(generator->list (gmap proc gen gen2 @dots{})) | |
@@ -10424,20 +10504,33 @@ is provided for the backward compatibility. | |
@end defun | |
@defun generator-find pred gen | |
+@c EN | |
Returns the first item from the generator @var{gen} that satisfies | |
the predicate @var{pred}. | |
+@c JP | |
+ジェネレータ@var{gen}から返された中から、述語@var{pred}を満たす最初の要素を返します。 | |
+@c COMMON | |
+@c EN | |
The following example returns the first line matching the regexp | |
@code{#/XYZ/} from the file @file{foo.txt}. | |
+@c JP | |
+以下の例は、ファイル@file{foo.txt}の中から正規表現@code{#/XYZ/}にマッチする最初の行を返します。 | |
+@c COMMON | |
@example | |
(with-input-from-file "foo.txt" | |
(cut generator-find #/XYZ/ read-line)) | |
@end example | |
+@c EN | |
Note: If you want to pick all the lines matching the regexp, | |
like the @code{grep} command, | |
you can use @code{gfilter} and @code{generator->list}. | |
+@c JP | |
+註: @code{grep}コマンドのように、正規表現にマッチする全ての行を取り出したいなら、 | |
+@code{gfilter}と@code{generator->list}が使えます。 | |
+@c COMMON | |
@end defun | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment