5011 lines
176 KiB
Plaintext
5011 lines
176 KiB
Plaintext
# SOME DESCRIPTIVE TITLE
|
||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||
# This file is distributed under the same license as the PACKAGE package.
|
||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||
#
|
||
#, fuzzy
|
||
msgid ""
|
||
msgstr ""
|
||
"Project-Id-Version: PACKAGE VERSION\n"
|
||
"POT-Creation-Date: 2021-11-07 12:11+0900\n"
|
||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||
"Language: \n"
|
||
"MIME-Version: 1.0\n"
|
||
"Content-Type: text/plain; charset=UTF-8\n"
|
||
"Content-Transfer-Encoding: 8bit\n"
|
||
|
||
#. type: chapter
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:6
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:7
|
||
#, no-wrap
|
||
msgid "Control Structures"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:8
|
||
#, no-wrap
|
||
msgid "special forms for control structures"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:9
|
||
#, no-wrap
|
||
msgid "forms for control structures"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:10
|
||
#, no-wrap
|
||
msgid "control structures"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:17
|
||
msgid ""
|
||
"A Lisp program consists of a set of @dfn{expressions}, or @dfn{forms} "
|
||
"(@pxref{Forms}). We control the order of execution of these forms by "
|
||
"enclosing them in @dfn{control structures}. Control structures are special "
|
||
"forms which control when, whether, or how many times to execute the forms "
|
||
"they contain."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:18
|
||
#, no-wrap
|
||
msgid "textual order"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:27
|
||
msgid ""
|
||
"The simplest order of execution is sequential execution: first form @var{a}, "
|
||
"then form @var{b}, and so on. This is what happens when you write several "
|
||
"forms in succession in the body of a function, or at top level in a file of "
|
||
"Lisp code---the forms are executed in the order written. We call this "
|
||
"@dfn{textual order}. For example, if a function body consists of two forms "
|
||
"@var{a} and @var{b}, evaluation of the function evaluates first @var{a} and "
|
||
"then @var{b}. The result of evaluating @var{b} becomes the value of the "
|
||
"function."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:30
|
||
msgid ""
|
||
"Explicit control structures make possible an order of execution other than "
|
||
"sequential."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:37
|
||
msgid ""
|
||
"Emacs Lisp provides several kinds of control structure, including other "
|
||
"varieties of sequencing, conditionals, iteration, and (controlled) "
|
||
"jumps---all discussed below. The built-in control structures are special "
|
||
"forms since their subforms are not necessarily evaluated or not evaluated "
|
||
"sequentially. You can use macros to define your own control structure "
|
||
"constructs (@pxref{Macros})."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:48
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:49
|
||
#, no-wrap
|
||
msgid "Sequencing"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "Evaluation in textual order."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:148
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:149
|
||
#, no-wrap
|
||
msgid "Conditionals"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "@code{if}, @code{cond}, @code{when}, @code{unless}."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:297
|
||
#, no-wrap
|
||
msgid "Combining Conditions"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "@code{and}, @code{or}, @code{not}, and friends."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:431
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:432
|
||
#, no-wrap
|
||
msgid "Pattern-Matching Conditional"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "How to use @code{pcase} and friends."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1329
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1330
|
||
#, no-wrap
|
||
msgid "Iteration"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "@code{while} loops."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1421
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1422
|
||
#, no-wrap
|
||
msgid "Generators"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "Generic sequences and coroutines."
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1539
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1540
|
||
#, no-wrap
|
||
msgid "Nonlocal Exits"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:46
|
||
msgid "Jumping out of a sequence."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:50
|
||
#, no-wrap
|
||
msgid "sequencing"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:51
|
||
#, no-wrap
|
||
msgid "sequential execution"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:52
|
||
#, no-wrap
|
||
msgid "forms for sequential execution"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:59
|
||
msgid ""
|
||
"Evaluating forms in the order they appear is the most common way control "
|
||
"passes from one form to another. In some contexts, such as in a function "
|
||
"body, this happens automatically. Elsewhere you must use a control "
|
||
"structure construct to do this: @code{progn}, the simplest control construct "
|
||
"of Lisp."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:61
|
||
msgid "A @code{progn} special form looks like this:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:65
|
||
#, no-wrap
|
||
msgid "(progn @var{a} @var{b} @var{c} @dots{})\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:73
|
||
msgid ""
|
||
"and it says to execute the forms @var{a}, @var{b}, @var{c}, and so on, in "
|
||
"that order. These forms are called the @dfn{body} of the @code{progn} "
|
||
"form. The value of the last form in the body becomes the value of the "
|
||
"entire @code{progn}. @code{(progn)} returns @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:74
|
||
#, no-wrap
|
||
msgid "implicit @code{progn}"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:85
|
||
msgid ""
|
||
"In the early days of Lisp, @code{progn} was the only way to execute two or "
|
||
"more forms in succession and use the value of the last of them. But "
|
||
"programmers found they often needed to use a @code{progn} in the body of a "
|
||
"function, where (at that time) only one form was allowed. So the body of a "
|
||
"function was made into an implicit @code{progn}: several forms are allowed "
|
||
"just as in the body of an actual @code{progn}. Many other control "
|
||
"structures likewise contain an implicit @code{progn}. As a result, "
|
||
"@code{progn} is not used as much as it was many years ago. It is needed now "
|
||
"most often inside an @code{unwind-protect}, @code{and}, @code{or}, or in the "
|
||
"@var{then}-part of an @code{if}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:86
|
||
#, no-wrap
|
||
msgid "progn forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:89
|
||
msgid ""
|
||
"This special form evaluates all of the @var{forms}, in textual order, "
|
||
"returning the result of the final form."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:99
|
||
#, no-wrap
|
||
msgid ""
|
||
"(progn (print \"The first form\")\n"
|
||
" (print \"The second form\")\n"
|
||
" (print \"The third form\"))\n"
|
||
" @print{} \"The first form\"\n"
|
||
" @print{} \"The second form\"\n"
|
||
" @print{} \"The third form\"\n"
|
||
"@result{} \"The third form\"\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:105
|
||
msgid ""
|
||
"Two other constructs likewise evaluate a series of forms but return "
|
||
"different values:"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:106
|
||
#, no-wrap
|
||
msgid "prog1 form1 forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:109
|
||
msgid ""
|
||
"This special form evaluates @var{form1} and all of the @var{forms}, in "
|
||
"textual order, returning the result of @var{form1}."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:119
|
||
#, no-wrap
|
||
msgid ""
|
||
"(prog1 (print \"The first form\")\n"
|
||
" (print \"The second form\")\n"
|
||
" (print \"The third form\"))\n"
|
||
" @print{} \"The first form\"\n"
|
||
" @print{} \"The second form\"\n"
|
||
" @print{} \"The third form\"\n"
|
||
"@result{} \"The first form\"\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:124
|
||
msgid ""
|
||
"Here is a way to remove the first element from a list in the variable "
|
||
"@code{x}, then return the value of that former element:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:127
|
||
#, no-wrap
|
||
msgid "(prog1 (car x) (setq x (cdr x)))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:130
|
||
#, no-wrap
|
||
msgid "prog2 form1 form2 forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:134
|
||
msgid ""
|
||
"This special form evaluates @var{form1}, @var{form2}, and all of the "
|
||
"following @var{forms}, in textual order, returning the result of "
|
||
"@var{form2}."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:144
|
||
#, no-wrap
|
||
msgid ""
|
||
"(prog2 (print \"The first form\")\n"
|
||
" (print \"The second form\")\n"
|
||
" (print \"The third form\"))\n"
|
||
" @print{} \"The first form\"\n"
|
||
" @print{} \"The second form\"\n"
|
||
" @print{} \"The third form\"\n"
|
||
"@result{} \"The second form\"\n"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:150
|
||
#, no-wrap
|
||
msgid "conditional evaluation"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:151
|
||
#, no-wrap
|
||
msgid "forms, conditional"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:159
|
||
msgid ""
|
||
"Conditional control structures choose among alternatives. Emacs Lisp has "
|
||
"five conditional forms: @code{if}, which is much the same as in other "
|
||
"languages; @code{when} and @code{unless}, which are variants of @code{if}; "
|
||
"@code{cond}, which is a generalized case statement; and @code{pcase}, which "
|
||
"is a generalization of @code{cond} (@pxref{Pattern-Matching Conditional})."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:160
|
||
#, no-wrap
|
||
msgid "if condition then-form else-forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:167
|
||
msgid ""
|
||
"@code{if} chooses between the @var{then-form} and the @var{else-forms} based "
|
||
"on the value of @var{condition}. If the evaluated @var{condition} is "
|
||
"non-@code{nil}, @var{then-form} is evaluated and the result returned. "
|
||
"Otherwise, the @var{else-forms} are evaluated in textual order, and the "
|
||
"value of the last one is returned. (The @var{else} part of @code{if} is an "
|
||
"example of an implicit @code{progn}. @xref{Sequencing}.)"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:170
|
||
msgid ""
|
||
"If @var{condition} has the value @code{nil}, and no @var{else-forms} are "
|
||
"given, @code{if} returns @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:174
|
||
msgid ""
|
||
"@code{if} is a special form because the branch that is not selected is never "
|
||
"evaluated---it is ignored. Thus, in this example, @code{true} is not "
|
||
"printed because @code{print} is never called:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:181
|
||
#, no-wrap
|
||
msgid ""
|
||
"(if nil\n"
|
||
" (print 'true)\n"
|
||
" 'very-false)\n"
|
||
"@result{} very-false\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:185
|
||
#, no-wrap
|
||
msgid "when condition then-forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:188
|
||
msgid ""
|
||
"This is a variant of @code{if} where there are no @var{else-forms}, and "
|
||
"possibly several @var{then-forms}. In particular,"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:191
|
||
#, no-wrap
|
||
msgid "(when @var{condition} @var{a} @var{b} @var{c})\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:195
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:210
|
||
msgid "is entirely equivalent to"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:198
|
||
#, no-wrap
|
||
msgid "(if @var{condition} (progn @var{a} @var{b} @var{c}) nil)\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:201
|
||
#, no-wrap
|
||
msgid "unless condition forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:203
|
||
msgid "This is a variant of @code{if} where there is no @var{then-form}:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:206
|
||
#, no-wrap
|
||
msgid "(unless @var{condition} @var{a} @var{b} @var{c})\n"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:214
|
||
#, no-wrap
|
||
msgid ""
|
||
"(if @var{condition} nil\n"
|
||
" @var{a} @var{b} @var{c})\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:217
|
||
#, no-wrap
|
||
msgid "cond clause@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:222
|
||
msgid ""
|
||
"@code{cond} chooses among an arbitrary number of alternatives. Each "
|
||
"@var{clause} in the @code{cond} must be a list. The @sc{car} of this list "
|
||
"is the @var{condition}; the remaining elements, if any, the "
|
||
"@var{body-forms}. Thus, a clause looks like this:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:225
|
||
#, no-wrap
|
||
msgid "(@var{condition} @var{body-forms}@dots{})\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:232
|
||
msgid ""
|
||
"@code{cond} tries the clauses in textual order, by evaluating the "
|
||
"@var{condition} of each clause. If the value of @var{condition} is "
|
||
"non-@code{nil}, the clause succeeds; then @code{cond} evaluates its "
|
||
"@var{body-forms}, and returns the value of the last of @var{body-forms}. "
|
||
"Any remaining clauses are ignored."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:235
|
||
msgid ""
|
||
"If the value of @var{condition} is @code{nil}, the clause fails, so the "
|
||
"@code{cond} moves on to the following clause, trying its @var{condition}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:237
|
||
msgid "A clause may also look like this:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:240
|
||
#, no-wrap
|
||
msgid "(@var{condition})\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:245
|
||
msgid ""
|
||
"Then, if @var{condition} is non-@code{nil} when tested, the @code{cond} form "
|
||
"returns the value of @var{condition}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:248
|
||
msgid ""
|
||
"If every @var{condition} evaluates to @code{nil}, so that every clause "
|
||
"fails, @code{cond} returns @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:252
|
||
msgid ""
|
||
"The following example has four clauses, which test for the cases where the "
|
||
"value of @code{x} is a number, string, buffer and symbol, respectively:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:261
|
||
#, no-wrap
|
||
msgid ""
|
||
"(cond ((numberp x) x)\n"
|
||
" ((stringp x) x)\n"
|
||
" ((bufferp x)\n"
|
||
" (setq temporary-hack x) ; @r{multiple body-forms}\n"
|
||
" (buffer-name x)) ; @r{in one clause}\n"
|
||
" ((symbolp x) (symbol-value x)))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:270
|
||
msgid ""
|
||
"Often we want to execute the last clause whenever none of the previous "
|
||
"clauses was successful. To do this, we use @code{t} as the @var{condition} "
|
||
"of the last clause, like this: @code{(t @var{body-forms})}. The form "
|
||
"@code{t} evaluates to @code{t}, which is never @code{nil}, so this clause "
|
||
"never fails, provided the @code{cond} gets to it at all. For example:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:277
|
||
#, no-wrap
|
||
msgid ""
|
||
"(setq a 5)\n"
|
||
"(cond ((eq a 'hack) 'foo)\n"
|
||
" (t \"default\"))\n"
|
||
"@result{} \"default\"\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:283
|
||
msgid ""
|
||
"This @code{cond} expression returns @code{foo} if the value of @code{a} is "
|
||
"@code{hack}, and returns the string @code{\"default\"} otherwise."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:288
|
||
msgid ""
|
||
"Any conditional construct can be expressed with @code{cond} or with "
|
||
"@code{if}. Therefore, the choice between them is a matter of style. For "
|
||
"example:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:294
|
||
#, no-wrap
|
||
msgid ""
|
||
"(if @var{a} @var{b} @var{c})\n"
|
||
"@equiv{}\n"
|
||
"(cond (@var{a} @var{b}) (t @var{c}))\n"
|
||
msgstr ""
|
||
|
||
#. type: section
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:298
|
||
#, no-wrap
|
||
msgid "Constructs for Combining Conditions"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:299
|
||
#, no-wrap
|
||
msgid "combining conditions"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:305
|
||
msgid ""
|
||
"This section describes constructs that are often used together with "
|
||
"@code{if} and @code{cond} to express complicated conditions. The constructs "
|
||
"@code{and} and @code{or} can also be used individually as kinds of multiple "
|
||
"conditional constructs."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:306
|
||
#, no-wrap
|
||
msgid "not condition"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:311
|
||
msgid ""
|
||
"This function tests for the falsehood of @var{condition}. It returns "
|
||
"@code{t} if @var{condition} is @code{nil}, and @code{nil} otherwise. The "
|
||
"function @code{not} is identical to @code{null}, and we recommend using the "
|
||
"name @code{null} if you are testing for an empty list."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:313
|
||
#, no-wrap
|
||
msgid "and conditions@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:317
|
||
msgid ""
|
||
"The @code{and} special form tests whether all the @var{conditions} are "
|
||
"true. It works by evaluating the @var{conditions} one by one in the order "
|
||
"written."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:322
|
||
msgid ""
|
||
"If any of the @var{conditions} evaluates to @code{nil}, then the result of "
|
||
"the @code{and} must be @code{nil} regardless of the remaining "
|
||
"@var{conditions}; so @code{and} returns @code{nil} right away, ignoring the "
|
||
"remaining @var{conditions}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:328
|
||
msgid ""
|
||
"If all the @var{conditions} turn out non-@code{nil}, then the value of the "
|
||
"last of them becomes the value of the @code{and} form. Just @code{(and)}, "
|
||
"with no @var{conditions}, returns @code{t}, appropriate because all the "
|
||
"@var{conditions} turned out non-@code{nil}. (Think about it; which one did "
|
||
"not?)"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:333
|
||
msgid ""
|
||
"Here is an example. The first condition returns the integer 1, which is not "
|
||
"@code{nil}. Similarly, the second condition returns the integer 2, which is "
|
||
"not @code{nil}. The third condition is @code{nil}, so the remaining "
|
||
"condition is never evaluated."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:340
|
||
#, no-wrap
|
||
msgid ""
|
||
"(and (print 1) (print 2) nil (print 3))\n"
|
||
" @print{} 1\n"
|
||
" @print{} 2\n"
|
||
"@result{} nil\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:344
|
||
msgid "Here is a more realistic example of using @code{and}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:349
|
||
#, no-wrap
|
||
msgid ""
|
||
"(if (and (consp foo) (eq (car foo) 'x))\n"
|
||
" (message \"foo is a list starting with x\"))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:355
|
||
msgid ""
|
||
"Note that @code{(car foo)} is not executed if @code{(consp foo)} returns "
|
||
"@code{nil}, thus avoiding an error."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:358
|
||
msgid ""
|
||
"@code{and} expressions can also be written using either @code{if} or "
|
||
"@code{cond}. Here's how:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:366
|
||
#, no-wrap
|
||
msgid ""
|
||
"(and @var{arg1} @var{arg2} @var{arg3})\n"
|
||
"@equiv{}\n"
|
||
"(if @var{arg1} (if @var{arg2} @var{arg3}))\n"
|
||
"@equiv{}\n"
|
||
"(cond (@var{arg1} (cond (@var{arg2} @var{arg3}))))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:370
|
||
#, no-wrap
|
||
msgid "or conditions@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:374
|
||
msgid ""
|
||
"The @code{or} special form tests whether at least one of the "
|
||
"@var{conditions} is true. It works by evaluating all the @var{conditions} "
|
||
"one by one in the order written."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:379
|
||
msgid ""
|
||
"If any of the @var{conditions} evaluates to a non-@code{nil} value, then the "
|
||
"result of the @code{or} must be non-@code{nil}; so @code{or} returns right "
|
||
"away, ignoring the remaining @var{conditions}. The value it returns is the "
|
||
"non-@code{nil} value of the condition just evaluated."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:385
|
||
msgid ""
|
||
"If all the @var{conditions} turn out @code{nil}, then the @code{or} "
|
||
"expression returns @code{nil}. Just @code{(or)}, with no @var{conditions}, "
|
||
"returns @code{nil}, appropriate because all the @var{conditions} turned out "
|
||
"@code{nil}. (Think about it; which one did not?)"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:388
|
||
msgid ""
|
||
"For example, this expression tests whether @code{x} is either @code{nil} or "
|
||
"the integer zero:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:391
|
||
#, no-wrap
|
||
msgid "(or (eq x nil) (eq x 0))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:395
|
||
msgid ""
|
||
"Like the @code{and} construct, @code{or} can be written in terms of "
|
||
"@code{cond}. For example:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:403
|
||
#, no-wrap
|
||
msgid ""
|
||
"(or @var{arg1} @var{arg2} @var{arg3})\n"
|
||
"@equiv{}\n"
|
||
"(cond (@var{arg1})\n"
|
||
" (@var{arg2})\n"
|
||
" (@var{arg3}))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:407
|
||
msgid "You could almost write @code{or} in terms of @code{if}, but not quite:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:413
|
||
#, no-wrap
|
||
msgid ""
|
||
"(if @var{arg1} @var{arg1}\n"
|
||
" (if @var{arg2} @var{arg2}\n"
|
||
" @var{arg3}))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:420
|
||
msgid ""
|
||
"This is not completely equivalent because it can evaluate @var{arg1} or "
|
||
"@var{arg2} twice. By contrast, @code{(or @var{arg1} @var{arg2} @var{arg3})} "
|
||
"never evaluates any argument more than once."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:422
|
||
#, no-wrap
|
||
msgid "xor condition1 condition2"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:427
|
||
msgid ""
|
||
"This function returns the boolean exclusive-or of @var{condition1} and "
|
||
"@var{condition2}. That is, @code{xor} returns @code{nil} if either both "
|
||
"arguments are @code{nil}, or both are non-@code{nil}. Otherwise, it returns "
|
||
"the value of that argument which is non-@code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:429
|
||
msgid "Note that in contrast to @code{or}, both arguments are always evaluated."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:433
|
||
#, no-wrap
|
||
msgid "pcase"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:434
|
||
#, no-wrap
|
||
msgid "pattern matching, programming style"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:443
|
||
msgid ""
|
||
"Aside from the four basic conditional forms, Emacs Lisp also has a "
|
||
"pattern-matching conditional form, the @code{pcase} macro, a hybrid of "
|
||
"@code{cond} and @code{cl-case} (@pxref{Conditionals,,,cl,Common Lisp "
|
||
"Extensions}) that overcomes their limitations and introduces the "
|
||
"@dfn{pattern matching programming style}. The limitations that @code{pcase} "
|
||
"overcomes are:"
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:451
|
||
msgid ""
|
||
"The @code{cond} form chooses among alternatives by evaluating the predicate "
|
||
"@var{condition} of each of its clauses (@pxref{Conditionals}). The primary "
|
||
"limitation is that variables let-bound in @var{condition} are not available "
|
||
"to the clause's @var{body-forms}."
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:456
|
||
msgid ""
|
||
"Another annoyance (more an inconvenience than a limitation) is that when a "
|
||
"series of @var{condition} predicates implement equality tests, there is a "
|
||
"lot of repeated code. (@code{cl-case} solves this inconvenience.)"
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:461
|
||
msgid ""
|
||
"The @code{cl-case} macro chooses among alternatives by evaluating the "
|
||
"equality of its first argument against a set of specific values."
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:463
|
||
msgid "Its limitations are two-fold:"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:467
|
||
msgid "The equality tests use @code{eql}."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:469
|
||
msgid "The values must be known and written in advance."
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:475
|
||
msgid ""
|
||
"These render @code{cl-case} unsuitable for strings or compound data "
|
||
"structures (e.g., lists or vectors). (@code{cond} doesn't have these "
|
||
"limitations, but it has others, see above.)"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:485
|
||
msgid ""
|
||
"Conceptually, the @code{pcase} macro borrows the first-arg focus of "
|
||
"@code{cl-case} and the clause-processing flow of @code{cond}, replacing "
|
||
"@var{condition} with a generalization of the equality test which is a "
|
||
"variant of @dfn{pattern matching}, and adding facilities so that you can "
|
||
"concisely express a clause's predicate, and arrange to share let-bindings "
|
||
"between a clause's predicate and @var{body-forms}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:490
|
||
msgid ""
|
||
"The concise expression of a predicate is known as a @dfn{pattern}. When the "
|
||
"predicate, called on the value of the first arg, returns non-@code{nil}, we "
|
||
"say that ``the pattern matches the value'' (or sometimes ``the value matches "
|
||
"the pattern'')."
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "The @code{pcase} macro: pcase Macro"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Includes examples and caveats."
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Extending @code{pcase}: Extending pcase"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Define new kinds of patterns."
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Backquote-Style Patterns: Backquote Patterns"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Structural patterns matching."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1217
|
||
#, no-wrap
|
||
msgid "Destructuring with pcase Patterns"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:496
|
||
msgid "Using pcase patterns to extract subfields."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:498
|
||
#, no-wrap
|
||
msgid "pcase Macro"
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:499
|
||
#, no-wrap
|
||
msgid "The @code{pcase} macro"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:502
|
||
msgid "For background, @xref{Pattern-Matching Conditional}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:503
|
||
#, no-wrap
|
||
msgid "pcase expression &rest clauses"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:506
|
||
msgid ""
|
||
"Each clause in @var{clauses} has the form: @w{@code{(@var{pattern} "
|
||
"@var{body-forms}@dots{})}}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:510
|
||
msgid ""
|
||
"Evaluate @var{expression} to determine its value, @var{expval}. Find the "
|
||
"first clause in @var{clauses} whose @var{pattern} matches @var{expval} and "
|
||
"pass control to that clause's @var{body-forms}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:514
|
||
msgid ""
|
||
"If there is a match, the value of @code{pcase} is the value of the last of "
|
||
"@var{body-forms} in the successful clause. Otherwise, @code{pcase} "
|
||
"evaluates to @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:516
|
||
#, no-wrap
|
||
msgid "pcase pattern"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:520
|
||
msgid ""
|
||
"Each @var{pattern} has to be a @dfn{pcase pattern}, which can use either one "
|
||
"of the core patterns defined below, or one of the patterns defined via "
|
||
"@code{pcase-defmacro} (@pxref{Extending pcase})."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:525
|
||
msgid ""
|
||
"The rest of this subsection describes different forms of core patterns, "
|
||
"presents some examples, and concludes with important caveats on using the "
|
||
"let-binding facility provided by some pattern forms. A core pattern can "
|
||
"have the following forms:"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:528
|
||
#, no-wrap
|
||
msgid "_"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:531
|
||
msgid ""
|
||
"Matches any @var{expval}. This is also known as @dfn{don't care} or "
|
||
"@dfn{wildcard}."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:532
|
||
#, no-wrap
|
||
msgid "'@var{val}"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:535
|
||
msgid ""
|
||
"Matches if @var{expval} equals @var{val}. The comparison is done as if by "
|
||
"@code{equal} (@pxref{Equality Predicates})."
|
||
msgstr ""
|
||
|
||
#. type: var{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:536
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1140
|
||
#, no-wrap
|
||
msgid "keyword"
|
||
msgstr ""
|
||
|
||
#. type: var{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:537
|
||
#, no-wrap
|
||
msgid "integer"
|
||
msgstr ""
|
||
|
||
#. type: var{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:538
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1142
|
||
#, no-wrap
|
||
msgid "string"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:542
|
||
msgid ""
|
||
"Matches if @var{expval} equals the literal object. This is a special case "
|
||
"of @code{'@var{val}}, above, possible because literal objects of these types "
|
||
"are self-quoting."
|
||
msgstr ""
|
||
|
||
#. type: var{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:543
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1139
|
||
#, no-wrap
|
||
msgid "symbol"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:547
|
||
msgid ""
|
||
"Matches any @var{expval}, and additionally let-binds @var{symbol} to "
|
||
"@var{expval}, such that this binding is available to @var{body-forms} "
|
||
"(@pxref{Dynamic Binding})."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:552
|
||
msgid ""
|
||
"If @var{symbol} is part of a sequencing pattern @var{seqpat} (e.g., by using "
|
||
"@code{and}, below), the binding is also available to the portion of "
|
||
"@var{seqpat} following the appearance of @var{symbol}. This usage has some "
|
||
"caveats, see @ref{pcase-symbol-caveats,,caveats}."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:557
|
||
msgid ""
|
||
"Two symbols to avoid are @code{t}, which behaves like @code{_} (above) and "
|
||
"is deprecated, and @code{nil}, which signals an error. Likewise, it makes "
|
||
"no sense to bind keyword symbols (@pxref{Constant Variables})."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:558
|
||
#, no-wrap
|
||
msgid "(cl-type @var{type})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:562
|
||
msgid ""
|
||
"Matches if @var{expval} is of type @var{type}, which is a type descriptor as "
|
||
"accepted by @code{cl-typep} (@pxref{Type Predicates,,,cl,Common Lisp "
|
||
"Extensions}). Examples:"
|
||
msgstr ""
|
||
|
||
#. type: lisp
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:566
|
||
#, no-wrap
|
||
msgid ""
|
||
"(cl-type integer)\n"
|
||
"(cl-type (integer 0 10))\n"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:568
|
||
#, no-wrap
|
||
msgid "(pred @var{function})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:573
|
||
msgid ""
|
||
"Matches if the predicate @var{function} returns non-@code{nil} when called "
|
||
"on @var{expval}. The test can be negated with the syntax @code{(pred (not "
|
||
"@var{function}))}. The predicate @var{function} can have one of the "
|
||
"following forms:"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:575
|
||
#, no-wrap
|
||
msgid "function name (a symbol)"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:577
|
||
msgid "Call the named function with one argument, @var{expval}."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:579
|
||
msgid "Example: @code{integerp}"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:580
|
||
#, no-wrap
|
||
msgid "lambda expression"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:583
|
||
msgid ""
|
||
"Call the anonymous function with one argument, @var{expval} (@pxref{Lambda "
|
||
"Expressions})."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:585
|
||
msgid "Example: @code{(lambda (n) (= 42 n))}"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:586
|
||
#, no-wrap
|
||
msgid "function call with @var{n} args"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:590
|
||
msgid ""
|
||
"Call the function (the first element of the function call) with @var{n} "
|
||
"arguments (the other elements) and an additional @var{n}+1-th argument that "
|
||
"is @var{expval}."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:594
|
||
msgid ""
|
||
"Example: @code{(= 42)}@* In this example, the function is @code{=}, @var{n} "
|
||
"is one, and the actual function call becomes: @w{@code{(= 42 "
|
||
"@var{expval})}}."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:596
|
||
#, no-wrap
|
||
msgid "(app @var{function} @var{pattern})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:602
|
||
msgid ""
|
||
"Matches if @var{function} called on @var{expval} returns a value that "
|
||
"matches @var{pattern}. @var{function} can take one of the forms described "
|
||
"for @code{pred}, above. Unlike @code{pred}, however, @code{app} tests the "
|
||
"result against @var{pattern}, rather than against a boolean truth value."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:603
|
||
#, no-wrap
|
||
msgid "(guard @var{boolean-expression})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:605
|
||
msgid "Matches if @var{boolean-expression} evaluates to non-@code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:606
|
||
#, no-wrap
|
||
msgid "(let @var{pattern} @var{expr})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:610
|
||
msgid ""
|
||
"Evaluates @var{expr} to get @var{exprval} and matches if @var{exprval} "
|
||
"matches @var{pattern}. (It is called @code{let} because @var{pattern} can "
|
||
"bind symbols to values using @var{symbol}.)"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:612
|
||
#, no-wrap
|
||
msgid "sequencing pattern"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:619
|
||
msgid ""
|
||
"A @dfn{sequencing pattern} (also known as @var{seqpat}) is a pattern that "
|
||
"processes its sub-pattern arguments in sequence. There are two for "
|
||
"@code{pcase}: @code{and} and @code{or}. They behave in a similar manner to "
|
||
"the special forms that share their name (@pxref{Combining Conditions}), but "
|
||
"instead of processing values, they process sub-patterns."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:621
|
||
#, no-wrap
|
||
msgid "(and @var{pattern1}@dots{})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:626
|
||
msgid ""
|
||
"Attempts to match @var{pattern1}@dots{}, in order, until one of them fails "
|
||
"to match. In that case, @code{and} likewise fails to match, and the rest of "
|
||
"the sub-patterns are not tested. If all sub-patterns match, @code{and} "
|
||
"matches."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:627
|
||
#, no-wrap
|
||
msgid "(or @var{pattern1} @var{pattern2}@dots{})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:631
|
||
msgid ""
|
||
"Attempts to match @var{pattern1}, @var{pattern2}, @dots{}, in order, until "
|
||
"one of them succeeds. In that case, @code{or} likewise matches, and the "
|
||
"rest of the sub-patterns are not tested."
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:637
|
||
msgid ""
|
||
"To present a consistent environment (@pxref{Intro Eval}) to "
|
||
"@var{body-forms} (thus avoiding an evaluation error on match), the set of "
|
||
"variables bound by the pattern is the union of the variables bound by each "
|
||
"sub-pattern. If a variable is not bound by the sub-pattern that matched, "
|
||
"then it is bound to @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:640
|
||
msgid "rx in pcase"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:640
|
||
#, no-wrap
|
||
msgid "(rx @var{rx-expr}@dots{})"
|
||
msgstr ""
|
||
|
||
#. type: ifnottex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:644
|
||
msgid ""
|
||
"Matches strings against the regexp @var{rx-expr}@dots{}, using the @code{rx} "
|
||
"regexp notation (@pxref{Rx Notation}), as if by @code{string-match}."
|
||
msgstr ""
|
||
|
||
#. type: ifnottex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:647
|
||
msgid ""
|
||
"In addition to the usual @code{rx} syntax, @var{rx-expr}@dots{} can contain "
|
||
"the following constructs:"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:649
|
||
#, no-wrap
|
||
msgid "(let @var{ref} @var{rx-expr}@dots{})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:654
|
||
msgid ""
|
||
"Bind the symbol @var{ref} to a submatch that matches "
|
||
"@var{rx-expr}@enddots{}. @var{ref} is bound in @var{body-forms} to the "
|
||
"string of the submatch or nil, but can also be used in @code{backref}."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:655
|
||
#, no-wrap
|
||
msgid "(backref @var{ref})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:659
|
||
msgid ""
|
||
"Like the standard @code{backref} construct, but @var{ref} can here also be a "
|
||
"name introduced by a previous @code{(let @var{ref} @dots{})} construct."
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:665
|
||
msgid "pcase-example-0"
|
||
msgstr ""
|
||
|
||
#. type: subheading
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:665
|
||
#, no-wrap
|
||
msgid "Example: Advantage Over @code{cl-case}"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:670
|
||
msgid ""
|
||
"Here's an example that highlights some advantages @code{pcase} has over "
|
||
"@code{cl-case} (@pxref{Conditionals,,,cl,Common Lisp Extensions})."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:677
|
||
#, no-wrap
|
||
msgid ""
|
||
"(pcase (get-return-code x)\n"
|
||
" ;; string\n"
|
||
" ((and (pred stringp) msg)\n"
|
||
" (message \"%s\" msg))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:684
|
||
#, no-wrap
|
||
msgid ""
|
||
" ;; symbol\n"
|
||
" ('success (message \"Done!\"))\n"
|
||
" ('would-block (message \"Sorry, can't do it now\"))\n"
|
||
" ('read-only (message \"The shmliblick is read-only\"))\n"
|
||
" ('access-denied (message \"You do not have the needed rights\"))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:688
|
||
#, no-wrap
|
||
msgid ""
|
||
" ;; default\n"
|
||
" (code (message \"Unknown return code %S\" code)))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:696
|
||
msgid ""
|
||
"With @code{cl-case}, you would need to explicitly declare a local variable "
|
||
"@code{code} to hold the return value of @code{get-return-code}. Also "
|
||
"@code{cl-case} is difficult to use with strings because it uses @code{eql} "
|
||
"for comparison."
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:698
|
||
msgid "pcase-example-1"
|
||
msgstr ""
|
||
|
||
#. type: subheading
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:698
|
||
#, no-wrap
|
||
msgid "Example: Using @code{and}"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:704
|
||
msgid ""
|
||
"A common idiom is to write a pattern starting with @code{and}, with one or "
|
||
"more @var{symbol} sub-patterns providing bindings to the sub-patterns that "
|
||
"follow (as well as to the body forms). For example, the following pattern "
|
||
"matches single-digit integers."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:711
|
||
#, no-wrap
|
||
msgid ""
|
||
"(and\n"
|
||
" (pred integerp)\n"
|
||
" n ; @r{bind @code{n} to @var{expval}}\n"
|
||
" (guard (<= -9 n 9)))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:723
|
||
msgid ""
|
||
"First, @code{pred} matches if @w{@code{(integerp @var{expval})}} evaluates "
|
||
"to non-@code{nil}. Next, @code{n} is a @var{symbol} pattern that matches "
|
||
"anything and binds @code{n} to @var{expval}. Lastly, @code{guard} matches "
|
||
"if the boolean expression @w{@code{(<= -9 n 9)}} (note the reference to "
|
||
"@code{n}) evaluates to non-@code{nil}. If all these sub-patterns match, "
|
||
"@code{and} matches."
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:725
|
||
msgid "pcase-example-2"
|
||
msgstr ""
|
||
|
||
#. type: subheading
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:725
|
||
#, no-wrap
|
||
msgid "Example: Reformulation with @code{pcase}"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:735
|
||
msgid ""
|
||
"Here is another example that shows how to reformulate a simple matching task "
|
||
"from its traditional implementation (function @code{grok/traditional}) to "
|
||
"one using @code{pcase} (function @code{grok/pcase}). The docstring for both "
|
||
"these functions is: ``If OBJ is a string of the form \"key:NUMBER\", return "
|
||
"NUMBER (a string). Otherwise, return the list (\"149\" default).'' First, "
|
||
"the traditional implementation (@pxref{Regular Expressions}):"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:743
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun grok/traditional (obj)\n"
|
||
" (if (and (stringp obj)\n"
|
||
" (string-match \"^key:\\\\([[:digit:]]+\\\\)$\" obj))\n"
|
||
" (match-string 1 obj)\n"
|
||
" (list \"149\" 'default)))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:749
|
||
#, no-wrap
|
||
msgid ""
|
||
"(grok/traditional \"key:0\") @result{} \"0\"\n"
|
||
"(grok/traditional \"key:149\") @result{} \"149\"\n"
|
||
"(grok/traditional 'monolith) @result{} (\"149\" default)\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:755
|
||
msgid ""
|
||
"The reformulation demonstrates @var{symbol} binding as well as @code{or}, "
|
||
"@code{and}, @code{pred}, @code{app} and @code{let}."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:769
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun grok/pcase (obj)\n"
|
||
" (pcase obj\n"
|
||
" ((or ; @r{line 1}\n"
|
||
" (and ; @r{line 2}\n"
|
||
" (pred stringp) ; @r{line 3}\n"
|
||
" (pred (string-match ; @r{line 4}\n"
|
||
" \"^key:\\\\([[:digit:]]+\\\\)$\")) ; @r{line 5}\n"
|
||
" (app (match-string 1) ; @r{line 6}\n"
|
||
" val)) ; @r{line 7}\n"
|
||
" (let val (list \"149\" 'default))) ; @r{line 8}\n"
|
||
" val))) ; @r{line 9}\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:775
|
||
#, no-wrap
|
||
msgid ""
|
||
"(grok/pcase \"key:0\") @result{} \"0\"\n"
|
||
"(grok/pcase \"key:149\") @result{} \"149\"\n"
|
||
"(grok/pcase 'monolith) @result{} (\"149\" default)\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:784
|
||
msgid ""
|
||
"The bulk of @code{grok/pcase} is a single clause of a @code{pcase} form, the "
|
||
"pattern on lines 1-8, the (single) body form on line 9. The pattern is "
|
||
"@code{or}, which tries to match in turn its argument sub-patterns, first "
|
||
"@code{and} (lines 2-7), then @code{let} (line 8), until one of them "
|
||
"succeeds."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:790
|
||
msgid ""
|
||
"As in the previous example (@pxref{pcase-example-1,,Example 1}), @code{and} "
|
||
"begins with a @code{pred} sub-pattern to ensure the following sub-patterns "
|
||
"work with an object of the correct type (string, in this case). If "
|
||
"@w{@code{(stringp @var{expval})}} returns @code{nil}, @code{pred} fails, and "
|
||
"thus @code{and} fails, too."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:796
|
||
msgid ""
|
||
"The next @code{pred} (lines 4-5) evaluates @w{@code{(string-match RX "
|
||
"@var{expval})}} and matches if the result is non-@code{nil}, which means "
|
||
"that @var{expval} has the desired form: @code{key:NUMBER}. Again, failing "
|
||
"this, @code{pred} fails and @code{and}, too."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:803
|
||
msgid ""
|
||
"Lastly (in this series of @code{and} sub-patterns), @code{app} evaluates "
|
||
"@w{@code{(match-string 1 @var{expval})}} (line 6) to get a temporary value "
|
||
"@var{tmp} (i.e., the ``NUMBER'' substring) and tries to match @var{tmp} "
|
||
"against pattern @code{val} (line 7). Since that is a @var{symbol} pattern, "
|
||
"it matches unconditionally and additionally binds @code{val} to @var{tmp}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:808
|
||
msgid ""
|
||
"Now that @code{app} has matched, all @code{and} sub-patterns have matched, "
|
||
"and so @code{and} matches. Likewise, once @code{and} has matched, @code{or} "
|
||
"matches and does not proceed to try sub-pattern @code{let} (line 8)."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:814
|
||
msgid ""
|
||
"Let's consider the situation where @code{obj} is not a string, or it is a "
|
||
"string but has the wrong form. In this case, one of the @code{pred} (lines "
|
||
"3-5) fails to match, thus @code{and} (line 2) fails to match, thus @code{or} "
|
||
"(line 1) proceeds to try sub-pattern @code{let} (line 8)."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:821
|
||
msgid ""
|
||
"First, @code{let} evaluates @w{@code{(list \"149\" 'default)}} to get "
|
||
"@w{@code{(\"149\" default)}}, the @var{exprval}, and then tries to match "
|
||
"@var{exprval} against pattern @code{val}. Since that is a @var{symbol} "
|
||
"pattern, it matches unconditionally and additionally binds @code{val} to "
|
||
"@var{exprval}. Now that @code{let} has matched, @code{or} matches."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:830
|
||
msgid ""
|
||
"Note how both @code{and} and @code{let} sub-patterns finish in the same way: "
|
||
"by trying (always successfully) to match against the @var{symbol} pattern "
|
||
"@code{val}, in the process binding @code{val}. Thus, @code{or} always "
|
||
"matches and control always passes to the body form (line 9). Because that "
|
||
"is the last body form in a successfully matched @code{pcase} clause, it is "
|
||
"the value of @code{pcase} and likewise the return value of @code{grok/pcase} "
|
||
"(@pxref{What Is a Function})."
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:832
|
||
msgid "pcase-symbol-caveats"
|
||
msgstr ""
|
||
|
||
#. type: subheading
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:832
|
||
#, no-wrap
|
||
msgid "Caveats for @var{symbol} in Sequencing Patterns"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:838
|
||
msgid ""
|
||
"The preceding examples all use sequencing patterns which include the "
|
||
"@var{symbol} sub-pattern in some way. Here are some important details about "
|
||
"that usage."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:840
|
||
#, no-wrap
|
||
msgid "When @var{symbol} occurs more than once in @var{seqpat},"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:843
|
||
msgid ""
|
||
"the second and subsequent occurrences do not expand to re-binding, but "
|
||
"instead expand to an equality test using @code{eq}."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:850
|
||
msgid ""
|
||
"The following example features a @code{pcase} form with two clauses and two "
|
||
"@var{seqpat}, A and B@. Both A and B first check that @var{expval} is a "
|
||
"pair (using @code{pred}), and then bind symbols to the @code{car} and "
|
||
"@code{cdr} of @var{expval} (using one @code{app} each)."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:855
|
||
msgid ""
|
||
"For A, because symbol @code{st} is mentioned twice, the second mention "
|
||
"becomes an equality test using @code{eq}. On the other hand, B uses two "
|
||
"separate symbols, @code{s1} and @code{s2}, both of which become independent "
|
||
"bindings."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:864
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun grok (object)\n"
|
||
" (pcase object\n"
|
||
" ((and (pred consp) ; seqpat A\n"
|
||
" (app car st) ; first mention: st\n"
|
||
" (app cdr st)) ; second mention: st\n"
|
||
" (list 'eq st))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:870
|
||
#, no-wrap
|
||
msgid ""
|
||
" ((and (pred consp) ; seqpat B\n"
|
||
" (app car s1) ; first mention: s1\n"
|
||
" (app cdr s2)) ; first mention: s2\n"
|
||
" (list 'not-eq s1 s2))))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:877
|
||
#, no-wrap
|
||
msgid ""
|
||
"(let ((s \"yow!\"))\n"
|
||
" (grok (cons s s))) @result{} (eq \"yow!\")\n"
|
||
"(grok (cons \"yo!\" \"yo!\")) @result{} (not-eq \"yo!\" \"yo!\")\n"
|
||
"(grok '(4 2)) @result{} (not-eq 4 (2))\n"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:880
|
||
#, no-wrap
|
||
msgid "Side-effecting code referencing @var{symbol} is undefined."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:884
|
||
msgid ""
|
||
"Avoid. For example, here are two similar functions. Both use @code{and}, "
|
||
"@var{symbol} and @code{guard}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:891
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun square-double-digit-p/CLEAN (integer)\n"
|
||
" (pcase (* integer integer)\n"
|
||
" ((and n (guard (< 9 n 100))) (list 'yes n))\n"
|
||
" (sorry (list 'no sorry))))\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:894
|
||
#, no-wrap
|
||
msgid ""
|
||
"(square-double-digit-p/CLEAN 9) @result{} (yes 81)\n"
|
||
"(square-double-digit-p/CLEAN 3) @result{} (no 9)\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:901
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun square-double-digit-p/MAYBE (integer)\n"
|
||
" (pcase (* integer integer)\n"
|
||
" ((and n (guard (< 9 (incf n) 100))) (list 'yes n))\n"
|
||
" (sorry (list 'no sorry))))\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:904
|
||
#, no-wrap
|
||
msgid ""
|
||
"(square-double-digit-p/MAYBE 9) @result{} (yes 81)\n"
|
||
"(square-double-digit-p/MAYBE 3) @result{} (yes 9) ; @r{WRONG!}\n"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:913
|
||
msgid ""
|
||
"The difference is in @var{boolean-expression} in @code{guard}: @code{CLEAN} "
|
||
"references @code{n} simply and directly, while @code{MAYBE} references "
|
||
"@code{n} with a side-effect, in the expression @code{(incf n)}. When "
|
||
"@code{integer} is 3, here's what happens:"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:915
|
||
#, no-wrap
|
||
msgid "The first @code{n} binds it to @var{expval},"
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:917
|
||
msgid "i.e., the result of evaluating @code{(* 3 3)}, or 9."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:918
|
||
#, no-wrap
|
||
msgid "@var{boolean-expression} is evaluated:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:925
|
||
#, no-wrap
|
||
msgid ""
|
||
"start: (< 9 (incf n) 100)\n"
|
||
"becomes: (< 9 (setq n (1+ n)) 100)\n"
|
||
"becomes: (< 9 (setq n (1+ 9)) 100)\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:932
|
||
#, no-wrap
|
||
msgid ""
|
||
"becomes: (< 9 (setq n 10) 100)\n"
|
||
" ; @r{side-effect here!}\n"
|
||
"becomes: (< 9 n 100) ; @r{@code{n} now bound to 10}\n"
|
||
"becomes: (< 9 10 100)\n"
|
||
"becomes: t\n"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:935
|
||
#, no-wrap
|
||
msgid "Because the result of the evaluation is non-@code{nil},"
|
||
msgstr ""
|
||
|
||
#. type: itemize
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:938
|
||
msgid ""
|
||
"@code{guard} matches, @code{and} matches, and control passes to that "
|
||
"clause's body forms."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:945
|
||
msgid ""
|
||
"Aside from the mathematical incorrectness of asserting that 9 is a "
|
||
"double-digit integer, there is another problem with @code{MAYBE}. The body "
|
||
"form references @code{n} once more, yet we do not see the updated "
|
||
"value---10---at all. What happened to it?"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:951
|
||
msgid ""
|
||
"To sum up, it's best to avoid side-effecting references to @var{symbol} "
|
||
"patterns entirely, not only in @var{boolean-expression} (in @code{guard}), "
|
||
"but also in @var{expr} (in @code{let}) and @var{function} (in @code{pred} "
|
||
"and @code{app})."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:952
|
||
#, no-wrap
|
||
msgid "On match, the clause's body forms can reference the set"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:958
|
||
msgid ""
|
||
"of symbols the pattern let-binds. When @var{seqpat} is @code{and}, this set "
|
||
"is the union of all the symbols each of its sub-patterns let-binds. This "
|
||
"makes sense because, for @code{and} to match, all the sub-patterns must "
|
||
"match."
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:966
|
||
msgid ""
|
||
"When @var{seqpat} is @code{or}, things are different: @code{or} matches at "
|
||
"the first sub-pattern that matches; the rest of the sub-patterns are "
|
||
"ignored. It makes no sense for each sub-pattern to let-bind a different set "
|
||
"of symbols because the body forms have no way to distinguish which "
|
||
"sub-pattern matched and choose among the different sets. For example, the "
|
||
"following is invalid:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:975
|
||
#, no-wrap
|
||
msgid ""
|
||
"(require 'cl-lib)\n"
|
||
"(pcase (read-number \"Enter an integer: \")\n"
|
||
" ((or (and (pred cl-evenp)\n"
|
||
" e-num) ; @r{bind @code{e-num} to @var{expval}}\n"
|
||
" o-num) ; @r{bind @code{o-num} to @var{expval}}\n"
|
||
" (list e-num o-num)))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:980
|
||
#, no-wrap
|
||
msgid ""
|
||
"Enter an integer: 42\n"
|
||
"@error{} Symbol’s value as variable is void: o-num\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:984
|
||
#, no-wrap
|
||
msgid ""
|
||
"Enter an integer: 149\n"
|
||
"@error{} Symbol’s value as variable is void: e-num\n"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:992
|
||
msgid ""
|
||
"Evaluating body form @w{@code{(list e-num o-num)}} signals error. To "
|
||
"distinguish between sub-patterns, you can use another symbol, identical in "
|
||
"name in all sub-patterns but differing in value. Reworking the above "
|
||
"example:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1002
|
||
#, no-wrap
|
||
msgid ""
|
||
"(require 'cl-lib)\n"
|
||
"(pcase (read-number \"Enter an integer: \")\n"
|
||
" ((and num ; @r{line 1}\n"
|
||
" (or (and (pred cl-evenp) ; @r{line 2}\n"
|
||
" (let spin 'even)) ; @r{line 3}\n"
|
||
" (let spin 'odd))) ; @r{line 4}\n"
|
||
" (list spin num))) ; @r{line 5}\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1007
|
||
#, no-wrap
|
||
msgid ""
|
||
"Enter an integer: 42\n"
|
||
"@result{} (even 42)\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1011
|
||
#, no-wrap
|
||
msgid ""
|
||
"Enter an integer: 149\n"
|
||
"@result{} (odd 149)\n"
|
||
msgstr ""
|
||
|
||
#. type: enumerate
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1022
|
||
msgid ""
|
||
"Line 1 ``factors out'' the @var{expval} binding with @code{and} and "
|
||
"@var{symbol} (in this case, @code{num}). On line 2, @code{or} begins in the "
|
||
"same way as before, but instead of binding different symbols, uses "
|
||
"@code{let} twice (lines 3-4) to bind the same symbol @code{spin} in both "
|
||
"sub-patterns. The value of @code{spin} distinguishes the sub-patterns. The "
|
||
"body form references both symbols (line 5)."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1024
|
||
#, no-wrap
|
||
msgid "Extending pcase"
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1025
|
||
#, no-wrap
|
||
msgid "Extending @code{pcase}"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1026
|
||
#, no-wrap
|
||
msgid "pcase, defining new kinds of patterns"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1032
|
||
msgid ""
|
||
"The @code{pcase} macro supports several kinds of patterns "
|
||
"(@pxref{Pattern-Matching Conditional}). You can add support for other kinds "
|
||
"of patterns using the @code{pcase-defmacro} macro."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1033
|
||
#, no-wrap
|
||
msgid "pcase-defmacro name args [doc] &rest body"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1040
|
||
msgid ""
|
||
"Define a new kind of pattern for @code{pcase}, to be invoked as "
|
||
"@w{@code{(@var{name} @var{actual-args})}}. The @code{pcase} macro expands "
|
||
"this into a function call that evaluates @var{body}, whose job it is to "
|
||
"rewrite the invoked pattern into some other pattern, in an environment where "
|
||
"@var{args} are bound to @var{actual-args}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1046
|
||
msgid ""
|
||
"Additionally, arrange to display @var{doc} along with the docstring of "
|
||
"@code{pcase}. By convention, @var{doc} should use @code{EXPVAL} to stand "
|
||
"for the result of evaluating @var{expression} (first arg to @code{pcase})."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1055
|
||
msgid ""
|
||
"Typically, @var{body} rewrites the invoked pattern to use more basic "
|
||
"patterns. Although all patterns eventually reduce to core patterns, "
|
||
"@code{body} need not use core patterns straight away. The following example "
|
||
"defines two patterns, named @code{less-than} and @code{integer-less-than}."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1061
|
||
#, no-wrap
|
||
msgid ""
|
||
"(pcase-defmacro less-than (n)\n"
|
||
" \"Matches if EXPVAL is a number less than N.\"\n"
|
||
" `(pred (> ,n)))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1068
|
||
#, no-wrap
|
||
msgid ""
|
||
"(pcase-defmacro integer-less-than (n)\n"
|
||
" \"Matches if EXPVAL is an integer less than N.\"\n"
|
||
" `(and (pred integerp)\n"
|
||
" (less-than ,n)))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1080
|
||
msgid ""
|
||
"Note that the docstrings mention @var{args} (in this case, only one: "
|
||
"@code{n}) in the usual way, and also mention @code{EXPVAL} by convention. "
|
||
"The first rewrite (i.e., @var{body} for @code{less-than}) uses one core "
|
||
"pattern: @code{pred}. The second uses two core patterns: @code{and} and "
|
||
"@code{pred}, as well as the newly-defined pattern @code{less-than}. Both "
|
||
"use a single backquote construct (@pxref{Backquote})."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1081
|
||
#, no-wrap
|
||
msgid "Backquote Patterns"
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1082
|
||
#, no-wrap
|
||
msgid "Backquote-Style Patterns"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1083
|
||
#, no-wrap
|
||
msgid "backquote-style patterns"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1084
|
||
#, no-wrap
|
||
msgid "matching, structural"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1085
|
||
#, no-wrap
|
||
msgid "structural matching"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1090
|
||
msgid ""
|
||
"This subsection describes @dfn{backquote-style patterns}, a set of builtin "
|
||
"patterns that eases structural matching. For background, "
|
||
"@pxref{Pattern-Matching Conditional}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1094
|
||
msgid ""
|
||
"Backquote-style patterns are a powerful set of @code{pcase} pattern "
|
||
"extensions (created using @code{pcase-defmacro}) that make it easy to match "
|
||
"@var{expval} against specifications of its @emph{structure}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1098
|
||
msgid ""
|
||
"For example, to match @var{expval} that must be a list of two elements whose "
|
||
"first element is a specific string and the second element is any value, you "
|
||
"can write a core pattern:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1103
|
||
#, no-wrap
|
||
msgid ""
|
||
"(and (pred listp)\n"
|
||
" ls\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1108
|
||
#, no-wrap
|
||
msgid ""
|
||
" (guard (= 2 (length ls)))\n"
|
||
" (guard (string= \"first\" (car ls)))\n"
|
||
" (let second-elem (cadr ls)))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1113
|
||
msgid "or you can write the equivalent backquote-style pattern:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1116
|
||
#, no-wrap
|
||
msgid "`(\"first\" ,second-elem)\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1122
|
||
msgid ""
|
||
"The backquote-style pattern is more concise, resembles the structure of "
|
||
"@var{expval}, and avoids binding @code{ls}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1125
|
||
msgid ""
|
||
"A backquote-style pattern has the form @code{`@var{qpat}} where @var{qpat} "
|
||
"can have the following forms:"
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1128
|
||
#, no-wrap
|
||
msgid "(@var{qpat1} . @var{qpat2})"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1133
|
||
msgid ""
|
||
"Matches if @var{expval} is a cons cell whose @code{car} matches @var{qpat1} "
|
||
"and whose @code{cdr} matches @var{qpat2}. This readily generalizes to lists "
|
||
"as in @w{@code{(@var{qpat1} @var{qpat2} @dots{})}}."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1134
|
||
#, no-wrap
|
||
msgid "[@var{qpat1} @var{qpat2} @dots{} @var{qpatm}]"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1138
|
||
msgid ""
|
||
"Matches if @var{expval} is a vector of length @var{m} whose "
|
||
"@code{0}..@code{(@var{m}-1)}th elements match @var{qpat1}, @var{qpat2} "
|
||
"@dots{} @var{qpatm}, respectively."
|
||
msgstr ""
|
||
|
||
#. type: var{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1141
|
||
#, no-wrap
|
||
msgid "number"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1145
|
||
msgid ""
|
||
"Matches if the corresponding element of @var{expval} is @code{equal} to the "
|
||
"specified literal object."
|
||
msgstr ""
|
||
|
||
#. type: item
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1146
|
||
#, no-wrap
|
||
msgid ",@var{pattern}"
|
||
msgstr ""
|
||
|
||
#. type: table
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1153
|
||
msgid ""
|
||
"Matches if the corresponding element of @var{expval} matches @var{pattern}. "
|
||
"Note that @var{pattern} is any kind that @code{pcase} supports. (In the "
|
||
"example above, @code{second-elem} is a @var{symbol} core pattern; it "
|
||
"therefore matches anything, and let-binds @code{second-elem}.)"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1160
|
||
msgid ""
|
||
"The @dfn{corresponding element} is the portion of @var{expval} that is in "
|
||
"the same structural position as the structural position of @var{qpat} in the "
|
||
"backquote-style pattern. (In the example above, the corresponding element "
|
||
"of @code{second-elem} is the second element of @var{expval}.)"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1166
|
||
msgid ""
|
||
"Here is an example of using @code{pcase} to implement a simple interpreter "
|
||
"for a little expression language (note that this requires lexical binding "
|
||
"for the lambda expression in the @code{fn} clause to properly capture "
|
||
"@code{body} and @code{arg} (@pxref{Lexical Binding}):"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1173
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun evaluate (form env)\n"
|
||
" (pcase form\n"
|
||
" (`(add ,x ,y) (+ (evaluate x env)\n"
|
||
" (evaluate y env)))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1180
|
||
#, no-wrap
|
||
msgid ""
|
||
" (`(call ,fun ,arg) (funcall (evaluate fun env)\n"
|
||
" (evaluate arg env)))\n"
|
||
" (`(fn ,arg ,body) (lambda (val)\n"
|
||
" (evaluate body (cons (cons arg val)\n"
|
||
" env))))\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1185
|
||
#, no-wrap
|
||
msgid ""
|
||
" ((pred numberp) form)\n"
|
||
" ((pred symbolp) (cdr (assq form env)))\n"
|
||
" (_ (error \"Syntax error: %S\" form))))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1197
|
||
msgid ""
|
||
"The first three clauses use backquote-style patterns. @code{`(add ,x ,y)} "
|
||
"is a pattern that checks that @code{form} is a three-element list starting "
|
||
"with the literal symbol @code{add}, then extracts the second and third "
|
||
"elements and binds them to symbols @code{x} and @code{y}, respectively. The "
|
||
"clause body evaluates @code{x} and @code{y} and adds the results. "
|
||
"Similarly, the @code{call} clause implements a function call, and the "
|
||
"@code{fn} clause implements an anonymous function definition."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1206
|
||
msgid ""
|
||
"The remaining clauses use core patterns. @code{(pred numberp)} matches if "
|
||
"@code{form} is a number. On match, the body evaluates it. @code{(pred "
|
||
"symbolp)} matches if @code{form} is a symbol. On match, the body looks up "
|
||
"the symbol in @code{env} and returns its association. Finally, @code{_} is "
|
||
"the catch-all pattern that matches anything, so it's suitable for reporting "
|
||
"syntax errors."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1209
|
||
msgid ""
|
||
"Here are some sample programs in this small language, including their "
|
||
"evaluation results:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1215
|
||
#, no-wrap
|
||
msgid ""
|
||
"(evaluate '(add 1 2) nil) @result{} 3\n"
|
||
"(evaluate '(add x y) '((x . 1) (y . 2))) @result{} 3\n"
|
||
"(evaluate '(call (fn x (add 1 x)) 2) nil) @result{} 3\n"
|
||
"(evaluate '(sub 1 2) nil) @result{} error\n"
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1218
|
||
#, no-wrap
|
||
msgid "Destructuring with @code{pcase} Patterns"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1219
|
||
#, no-wrap
|
||
msgid "destructuring with pcase patterns"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1225
|
||
msgid ""
|
||
"Pcase patterns not only express a condition on the form of the objects they "
|
||
"can match, but they can also extract sub-fields of those objects. For "
|
||
"example we can extract 2 elements from a list that is the value of the "
|
||
"variable @code{my-list} with the following code:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1229
|
||
#, no-wrap
|
||
msgid ""
|
||
" (pcase my-list\n"
|
||
" (`(add ,x ,y) (message \"Contains %S and %S\" x y)))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1236
|
||
msgid ""
|
||
"This will not only extract @code{x} and @code{y} but will additionally test "
|
||
"that @code{my-list} is a list containing exactly 3 elements and whose first "
|
||
"element is the symbol @code{add}. If any of those tests fail, @code{pcase} "
|
||
"will immediately return @code{nil} without calling @code{message}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1243
|
||
msgid ""
|
||
"Extraction of multiple values stored in an object is known as "
|
||
"@dfn{destructuring}. Using @code{pcase} patterns allows to perform "
|
||
"@dfn{destructuring binding}, which is similar to a local binding "
|
||
"(@pxref{Local Variables}), but gives values to multiple elements of a "
|
||
"variable by extracting those values from an object of compatible structure."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1249
|
||
msgid ""
|
||
"The macros described in this section use @code{pcase} patterns to perform "
|
||
"destructuring binding. The condition of the object to be of compatible "
|
||
"structure means that the object must match the pattern, because only then "
|
||
"the object's subfields can be extracted. For example:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1253
|
||
#, no-wrap
|
||
msgid ""
|
||
" (pcase-let ((`(add ,x ,y) my-list))\n"
|
||
" (message \"Contains %S and %S\" x y))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1264
|
||
msgid ""
|
||
"does the same as the previous example, except that it directly tries to "
|
||
"extract @code{x} and @code{y} from @code{my-list} without first verifying if "
|
||
"@code{my-list} is a list which has the right number of elements and has "
|
||
"@code{add} as its first element. The precise behavior when the object does "
|
||
"not actually match the pattern is undefined, although the body will not be "
|
||
"silently skipped: either an error is signaled or the body is run with some "
|
||
"of the variables potentially bound to arbitrary values like @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1268
|
||
msgid ""
|
||
"The pcase patterns that are useful for destructuring bindings are generally "
|
||
"those described in @ref{Backquote Patterns}, since they express a "
|
||
"specification of the structure of objects that will match."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1271
|
||
msgid "For an alternative facility for destructuring binding, see @ref{seq-let}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1272
|
||
#, no-wrap
|
||
msgid "pcase-let bindings body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1275
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1300
|
||
msgid ""
|
||
"Perform destructuring binding of variables according to @var{bindings}, and "
|
||
"then evaluate @var{body}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1279
|
||
msgid ""
|
||
"@var{bindings} is a list of bindings of the form @w{@code{(@var{pattern} "
|
||
"@var{exp})}}, where @var{exp} is an expression to evaluate and @var{pattern} "
|
||
"is a @code{pcase} pattern."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1286
|
||
msgid ""
|
||
"All @var{exp}s are evaluated first, after which they are matched against "
|
||
"their respective @var{pattern}, introducing new variable bindings that can "
|
||
"then be used inside @var{body}. The variable bindings are produced by "
|
||
"destructuring binding of elements of @var{pattern} to the values of the "
|
||
"corresponding elements of the evaluated @var{exp}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1288
|
||
msgid "Here's a trivial example:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1294
|
||
#, no-wrap
|
||
msgid ""
|
||
"(pcase-let ((`(,major ,minor)\n"
|
||
"\t (split-string \"image/png\" \"/\")))\n"
|
||
" minor)\n"
|
||
" @result{} \"png\"\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1297
|
||
#, no-wrap
|
||
msgid "pcase-let* bindings body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1306
|
||
msgid ""
|
||
"@var{bindings} is a list of bindings of the form @code{(@var{pattern} "
|
||
"@var{exp})}, where @var{exp} is an expression to evaluate and @var{pattern} "
|
||
"is a @code{pcase} pattern. The variable bindings are produced by "
|
||
"destructuring binding of elements of @var{pattern} to the values of the "
|
||
"corresponding elements of the evaluated @var{exp}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1313
|
||
msgid ""
|
||
"Unlike @code{pcase-let}, but similarly to @code{let*}, each @var{exp} is "
|
||
"matched against its corresponding @var{pattern} before processing the next "
|
||
"element of @var{bindings}, so the variable bindings introduced in each one "
|
||
"of the @var{bindings} are available in the @var{exp}s of the @var{bindings} "
|
||
"that follow it, additionally to being available in @var{body}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1315
|
||
#, no-wrap
|
||
msgid "pcase-dolist (pattern list) body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1322
|
||
msgid ""
|
||
"Execute @var{body} once for each element of @var{list}, on each iteration "
|
||
"performing a destructuring binding of variables in @var{pattern} to the "
|
||
"values of the corresponding subfields of the element of @var{list}. The "
|
||
"bindings are performed as if by @code{pcase-let}. When @var{pattern} is a "
|
||
"simple variable, this ends up being equivalent to @code{dolist} "
|
||
"(@pxref{Iteration})."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1324
|
||
#, no-wrap
|
||
msgid "pcase-setq pattern value@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1327
|
||
msgid ""
|
||
"Assign values to variables in a @code{setq} form, destructuring each "
|
||
"@var{value} according to its respective @var{pattern}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1331
|
||
#, no-wrap
|
||
msgid "iteration"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1332
|
||
#, no-wrap
|
||
msgid "recursion"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1333
|
||
#, no-wrap
|
||
msgid "forms, iteration"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1339
|
||
msgid ""
|
||
"Iteration means executing part of a program repetitively. For example, you "
|
||
"might want to repeat some computation once for each element of a list, or "
|
||
"once for each integer from 0 to @var{n}. You can do this in Emacs Lisp with "
|
||
"the special form @code{while}:"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1340
|
||
#, no-wrap
|
||
msgid "while condition forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1346
|
||
msgid ""
|
||
"@code{while} first evaluates @var{condition}. If the result is "
|
||
"non-@code{nil}, it evaluates @var{forms} in textual order. Then it "
|
||
"reevaluates @var{condition}, and if the result is non-@code{nil}, it "
|
||
"evaluates @var{forms} again. This process repeats until @var{condition} "
|
||
"evaluates to @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1350
|
||
msgid ""
|
||
"There is no limit on the number of iterations that may occur. The loop will "
|
||
"continue until either @var{condition} evaluates to @code{nil} or until an "
|
||
"error or @code{throw} jumps out of it (@pxref{Nonlocal Exits})."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1352
|
||
msgid "The value of a @code{while} form is always @code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1357
|
||
#, no-wrap
|
||
msgid ""
|
||
"(setq num 0)\n"
|
||
" @result{} 0\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1367
|
||
#, no-wrap
|
||
msgid ""
|
||
"(while (< num 4)\n"
|
||
" (princ (format \"Iteration %d.\" num))\n"
|
||
" (setq num (1+ num)))\n"
|
||
" @print{} Iteration 0.\n"
|
||
" @print{} Iteration 1.\n"
|
||
" @print{} Iteration 2.\n"
|
||
" @print{} Iteration 3.\n"
|
||
" @result{} nil\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1374
|
||
msgid ""
|
||
"To write a repeat-until loop, which will execute something on each iteration "
|
||
"and then do the end-test, put the body followed by the end-test in a "
|
||
"@code{progn} as the first argument of @code{while}, as shown here:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1380
|
||
#, no-wrap
|
||
msgid ""
|
||
"(while (progn\n"
|
||
" (forward-line 1)\n"
|
||
" (not (looking-at \"^$\"))))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1387
|
||
msgid ""
|
||
"This moves forward one line and continues moving by lines until it reaches "
|
||
"an empty line. It is peculiar in that the @code{while} has no body, just "
|
||
"the end test (which also does the real work of moving point)."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1391
|
||
msgid ""
|
||
"The @code{dolist} and @code{dotimes} macros provide convenient ways to write "
|
||
"two common kinds of loops."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1392
|
||
#, no-wrap
|
||
msgid "dolist (var list [result]) body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1398
|
||
msgid ""
|
||
"This construct executes @var{body} once for each element of @var{list}, "
|
||
"binding the variable @var{var} locally to hold the current element. Then it "
|
||
"returns the value of evaluating @var{result}, or @code{nil} if @var{result} "
|
||
"is omitted. For example, here is how you could use @code{dolist} to define "
|
||
"the @code{reverse} function:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1404
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun reverse (list)\n"
|
||
" (let (value)\n"
|
||
" (dolist (elt list value)\n"
|
||
" (setq value (cons elt value)))))\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1407
|
||
#, no-wrap
|
||
msgid "dotimes (var count [result]) body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1414
|
||
msgid ""
|
||
"This construct executes @var{body} once for each integer from 0 (inclusive) "
|
||
"to @var{count} (exclusive), binding the variable @var{var} to the integer "
|
||
"for the current iteration. Then it returns the value of evaluating "
|
||
"@var{result}, or @code{nil} if @var{result} is omitted. Use of @var{result} "
|
||
"is deprecated. Here is an example of using @code{dotimes} to do something "
|
||
"100 times:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1418
|
||
#, no-wrap
|
||
msgid ""
|
||
"(dotimes (i 100)\n"
|
||
" (insert \"I will not obey absurd orders\\n\"))\n"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1423
|
||
#, no-wrap
|
||
msgid "generators"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1428
|
||
msgid ""
|
||
"A @dfn{generator} is a function that produces a potentially-infinite stream "
|
||
"of values. Each time the function produces a value, it suspends itself and "
|
||
"waits for a caller to request the next value."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1429
|
||
#, no-wrap
|
||
msgid "iter-defun name args [doc] [declare] [interactive] body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1438
|
||
msgid ""
|
||
"@code{iter-defun} defines a generator function. A generator function has "
|
||
"the same signature as a normal function, but works differently. Instead of "
|
||
"executing @var{body} when called, a generator function returns an iterator "
|
||
"object. That iterator runs @var{body} to generate values, emitting a value "
|
||
"and pausing where @code{iter-yield} or @code{iter-yield-from} appears. When "
|
||
"@var{body} returns normally, @code{iter-next} signals "
|
||
"@code{iter-end-of-sequence} with @var{body}'s result as its condition data."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1442
|
||
msgid ""
|
||
"Any kind of Lisp code is valid inside @var{body}, but @code{iter-yield} and "
|
||
"@code{iter-yield-from} cannot appear inside @code{unwind-protect} forms."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1445
|
||
#, no-wrap
|
||
msgid "iter-lambda args [doc] [interactive] body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1448
|
||
msgid ""
|
||
"@code{iter-lambda} produces an unnamed generator function that works just "
|
||
"like a generator function produced with @code{iter-defun}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1450
|
||
#, no-wrap
|
||
msgid "iter-yield value"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1455
|
||
msgid ""
|
||
"When it appears inside a generator function, @code{iter-yield} indicates "
|
||
"that the current iterator should pause and return @var{value} from "
|
||
"@code{iter-next}. @code{iter-yield} evaluates to the @code{value} parameter "
|
||
"of next call to @code{iter-next}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1457
|
||
#, no-wrap
|
||
msgid "iter-yield-from iterator"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1462
|
||
msgid ""
|
||
"@code{iter-yield-from} yields all the values that @var{iterator} produces "
|
||
"and evaluates to the value that @var{iterator}'s generator function returns "
|
||
"normally. While it has control, @var{iterator} receives values sent to the "
|
||
"iterator using @code{iter-next}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1470
|
||
msgid ""
|
||
"To use a generator function, first call it normally, producing a "
|
||
"@dfn{iterator} object. An iterator is a specific instance of a generator. "
|
||
"Then use @code{iter-next} to retrieve values from this iterator. When there "
|
||
"are no more values to pull from an iterator, @code{iter-next} raises an "
|
||
"@code{iter-end-of-sequence} condition with the iterator's final value."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1477
|
||
msgid ""
|
||
"It's important to note that generator function bodies only execute inside "
|
||
"calls to @code{iter-next}. A call to a function defined with "
|
||
"@code{iter-defun} produces an iterator; you must drive this iterator with "
|
||
"@code{iter-next} for anything interesting to happen. Each call to a "
|
||
"generator function produces a @emph{different} iterator, each with its own "
|
||
"state."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1478
|
||
#, no-wrap
|
||
msgid "iter-next iterator value"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1484
|
||
msgid ""
|
||
"Retrieve the next value from @var{iterator}. If there are no more values to "
|
||
"be generated (because @var{iterator}'s generator function returned), "
|
||
"@code{iter-next} signals the @code{iter-end-of-sequence} condition; the data "
|
||
"value associated with this condition is the value with which "
|
||
"@var{iterator}'s generator function returned."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1490
|
||
msgid ""
|
||
"@var{value} is sent into the iterator and becomes the value to which "
|
||
"@code{iter-yield} evaluates. @var{value} is ignored for the first "
|
||
"@code{iter-next} call to a given iterator, since at the start of "
|
||
"@var{iterator}'s generator function, the generator function is not "
|
||
"evaluating any @code{iter-yield} form."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1492
|
||
#, no-wrap
|
||
msgid "iter-close iterator"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1499
|
||
msgid ""
|
||
"If @var{iterator} is suspended inside an @code{unwind-protect}'s "
|
||
"@code{bodyform} and becomes unreachable, Emacs will eventually run unwind "
|
||
"handlers after a garbage collection pass. (Note that @code{iter-yield} is "
|
||
"illegal inside an @code{unwind-protect}'s @code{unwindforms}.) To ensure "
|
||
"that these handlers are run before then, use @code{iter-close}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1503
|
||
msgid ""
|
||
"Some convenience functions are provided to make working with iterators "
|
||
"easier:"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1504
|
||
#, no-wrap
|
||
msgid "iter-do (var iterator) body @dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1507
|
||
msgid ""
|
||
"Run @var{body} with @var{var} bound to each value that @var{iterator} "
|
||
"produces."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1511
|
||
msgid ""
|
||
"The Common Lisp loop facility also contains features for working with "
|
||
"iterators. @xref{Loop Facility,,,cl,Common Lisp Extensions}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1514
|
||
msgid ""
|
||
"The following piece of code demonstrates some important principles of "
|
||
"working with iterators."
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1521
|
||
#, no-wrap
|
||
msgid ""
|
||
"(require 'generator)\n"
|
||
"(iter-defun my-iter (x)\n"
|
||
" (iter-yield (1+ (iter-yield (1+ x))))\n"
|
||
" ;; Return normally\n"
|
||
" -1)\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1530
|
||
#, no-wrap
|
||
msgid ""
|
||
"(let* ((iter (my-iter 5))\n"
|
||
" (iter2 (my-iter 0)))\n"
|
||
" ;; Prints 6\n"
|
||
" (print (iter-next iter))\n"
|
||
" ;; Prints 9\n"
|
||
" (print (iter-next iter 8))\n"
|
||
" ;; Prints 1; iter and iter2 have distinct states\n"
|
||
" (print (iter-next iter2 nil))\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1537
|
||
#, no-wrap
|
||
msgid ""
|
||
" ;; We expect the iter sequence to end now\n"
|
||
" (condition-case x\n"
|
||
" (iter-next iter)\n"
|
||
" (iter-end-of-sequence\n"
|
||
" ;; Prints -1, which my-iter returned normally\n"
|
||
" (print (cdr x)))))\n"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1541
|
||
#, no-wrap
|
||
msgid "nonlocal exits"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1548
|
||
msgid ""
|
||
"A @dfn{nonlocal exit} is a transfer of control from one point in a program "
|
||
"to another remote point. Nonlocal exits can occur in Emacs Lisp as a result "
|
||
"of errors; you can also use them under explicit control. Nonlocal exits "
|
||
"unbind all variable bindings made by the constructs being exited."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1556
|
||
#, no-wrap
|
||
msgid "Catch and Throw"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
msgid "Nonlocal exits for the program's own purposes."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1656
|
||
#, no-wrap
|
||
msgid "Examples of Catch"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
msgid "Showing how such nonlocal exits can be written."
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1731
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1732
|
||
#, no-wrap
|
||
msgid "Errors"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
msgid "How errors are signaled and handled."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2317
|
||
#, no-wrap
|
||
msgid "Cleanups"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1554
|
||
msgid "Arranging to run a cleanup form if an error happens."
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1557
|
||
#, no-wrap
|
||
msgid "Explicit Nonlocal Exits: @code{catch} and @code{throw}"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1558
|
||
#, no-wrap
|
||
msgid "forms for nonlocal exits"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1566
|
||
msgid ""
|
||
"Most control constructs affect only the flow of control within the construct "
|
||
"itself. The function @code{throw} is the exception to this rule of normal "
|
||
"program execution: it performs a nonlocal exit on request. (There are other "
|
||
"exceptions, but they are for error handling only.) @code{throw} is used "
|
||
"inside a @code{catch}, and jumps back to that @code{catch}. For example:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1572
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun foo-outer ()\n"
|
||
" (catch 'foo\n"
|
||
" (foo-inner)))\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1578
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun foo-inner ()\n"
|
||
" @dots{}\n"
|
||
" (if x\n"
|
||
" (throw 'foo t))\n"
|
||
" @dots{})\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1586
|
||
msgid ""
|
||
"The @code{throw} form, if executed, transfers control straight back to the "
|
||
"corresponding @code{catch}, which returns immediately. The code following "
|
||
"the @code{throw} is not executed. The second argument of @code{throw} is "
|
||
"used as the return value of the @code{catch}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1595
|
||
msgid ""
|
||
"The function @code{throw} finds the matching @code{catch} based on the first "
|
||
"argument: it searches for a @code{catch} whose first argument is @code{eq} "
|
||
"to the one specified in the @code{throw}. If there is more than one "
|
||
"applicable @code{catch}, the innermost one takes precedence. Thus, in the "
|
||
"above example, the @code{throw} specifies @code{foo}, and the @code{catch} "
|
||
"in @code{foo-outer} specifies the same symbol, so that @code{catch} is the "
|
||
"applicable one (assuming there is no other matching @code{catch} in "
|
||
"between)."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1605
|
||
msgid ""
|
||
"Executing @code{throw} exits all Lisp constructs up to the matching "
|
||
"@code{catch}, including function calls. When binding constructs such as "
|
||
"@code{let} or function calls are exited in this way, the bindings are "
|
||
"unbound, just as they are when these constructs exit normally (@pxref{Local "
|
||
"Variables}). Likewise, @code{throw} restores the buffer and position saved "
|
||
"by @code{save-excursion} (@pxref{Excursions}), and the narrowing status "
|
||
"saved by @code{save-restriction}. It also runs any cleanups established "
|
||
"with the @code{unwind-protect} special form when it exits that form "
|
||
"(@pxref{Cleanups})."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1613
|
||
msgid ""
|
||
"The @code{throw} need not appear lexically within the @code{catch} that it "
|
||
"jumps to. It can equally well be called from another function called within "
|
||
"the @code{catch}. As long as the @code{throw} takes place chronologically "
|
||
"after entry to the @code{catch}, and chronologically before exit from it, it "
|
||
"has access to that @code{catch}. This is why @code{throw} can be used in "
|
||
"commands such as @code{exit-recursive-edit} that throw back to the editor "
|
||
"command loop (@pxref{Recursive Editing})."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1614
|
||
#, no-wrap
|
||
msgid "CL note---only @code{throw} in Emacs"
|
||
msgstr ""
|
||
|
||
#. type: quotation
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1621
|
||
msgid ""
|
||
"@b{Common Lisp note:} Most other versions of Lisp, including Common Lisp, "
|
||
"have several ways of transferring control nonsequentially: @code{return}, "
|
||
"@code{return-from}, and @code{go}, for example. Emacs Lisp has only "
|
||
"@code{throw}. The @file{cl-lib} library provides versions of some of "
|
||
"these. @xref{Blocks and Exits,,,cl,Common Lisp Extensions}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1623
|
||
#, no-wrap
|
||
msgid "catch tag body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1624
|
||
#, no-wrap
|
||
msgid "tag on run time stack"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1629
|
||
msgid ""
|
||
"@code{catch} establishes a return point for the @code{throw} function. The "
|
||
"return point is distinguished from other such return points by @var{tag}, "
|
||
"which may be any Lisp object except @code{nil}. The argument @var{tag} is "
|
||
"evaluated normally before the return point is established."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1634
|
||
msgid ""
|
||
"With the return point in effect, @code{catch} evaluates the forms of the "
|
||
"@var{body} in textual order. If the forms execute normally (without error "
|
||
"or nonlocal exit) the value of the last body form is returned from the "
|
||
"@code{catch}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1639
|
||
msgid ""
|
||
"If a @code{throw} is executed during the execution of @var{body}, specifying "
|
||
"the same value @var{tag}, the @code{catch} form exits immediately; the value "
|
||
"it returns is whatever was specified as the second argument of @code{throw}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1641
|
||
#, no-wrap
|
||
msgid "throw tag value"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1647
|
||
msgid ""
|
||
"The purpose of @code{throw} is to return from a return point previously "
|
||
"established with @code{catch}. The argument @var{tag} is used to choose "
|
||
"among the various existing return points; it must be @code{eq} to the value "
|
||
"specified in the @code{catch}. If multiple return points match @var{tag}, "
|
||
"the innermost one is used."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1650
|
||
msgid ""
|
||
"The argument @var{value} is used as the value to return from that "
|
||
"@code{catch}."
|
||
msgstr ""
|
||
|
||
#. type: kindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1651
|
||
#, no-wrap
|
||
msgid "no-catch"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1654
|
||
msgid ""
|
||
"If no return point is in effect with tag @var{tag}, then a @code{no-catch} "
|
||
"error is signaled with data @code{(@var{tag} @var{value})}."
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1657
|
||
#, no-wrap
|
||
msgid "Examples of @code{catch} and @code{throw}"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1663
|
||
msgid ""
|
||
"One way to use @code{catch} and @code{throw} is to exit from a doubly nested "
|
||
"loop. (In most languages, this would be done with a @code{goto}.) Here we "
|
||
"compute @code{(foo @var{i} @var{j})} for @var{i} and @var{j} varying from 0 "
|
||
"to 9:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1676
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun search-foo ()\n"
|
||
" (catch 'loop\n"
|
||
" (let ((i 0))\n"
|
||
" (while (< i 10)\n"
|
||
" (let ((j 0))\n"
|
||
" (while (< j 10)\n"
|
||
" (if (foo i j)\n"
|
||
" (throw 'loop (list i j)))\n"
|
||
" (setq j (1+ j))))\n"
|
||
" (setq i (1+ i))))))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1684
|
||
msgid ""
|
||
"If @code{foo} ever returns non-@code{nil}, we stop immediately and return a "
|
||
"list of @var{i} and @var{j}. If @code{foo} always returns @code{nil}, the "
|
||
"@code{catch} returns normally, and the value is @code{nil}, since that is "
|
||
"the result of the @code{while}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1688
|
||
msgid ""
|
||
"Here are two tricky examples, slightly different, showing two return points "
|
||
"at once. First, two return points with the same tag, @code{hack}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1695
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun catch2 (tag)\n"
|
||
" (catch tag\n"
|
||
" (throw 'hack 'yes)))\n"
|
||
"@result{} catch2\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1703
|
||
#, no-wrap
|
||
msgid ""
|
||
"(catch 'hack\n"
|
||
" (print (catch2 'hack))\n"
|
||
" 'no)\n"
|
||
"@print{} yes\n"
|
||
"@result{} no\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1712
|
||
msgid ""
|
||
"Since both return points have tags that match the @code{throw}, it goes to "
|
||
"the inner one, the one established in @code{catch2}. Therefore, "
|
||
"@code{catch2} returns normally with value @code{yes}, and this value is "
|
||
"printed. Finally the second body form in the outer @code{catch}, which is "
|
||
"@code{'no}, is evaluated and returned from the outer @code{catch}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1714
|
||
msgid "Now let's change the argument given to @code{catch2}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1721
|
||
#, no-wrap
|
||
msgid ""
|
||
"(catch 'hack\n"
|
||
" (print (catch2 'quux))\n"
|
||
" 'no)\n"
|
||
"@result{} yes\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1730
|
||
msgid ""
|
||
"We still have two return points, but this time only the outer one has the "
|
||
"tag @code{hack}; the inner one has the tag @code{quux} instead. Therefore, "
|
||
"@code{throw} makes the outer @code{catch} return the value @code{yes}. The "
|
||
"function @code{print} is never called, and the body-form @code{'no} is never "
|
||
"evaluated."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1733
|
||
#, no-wrap
|
||
msgid "errors"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1737
|
||
msgid ""
|
||
"When Emacs Lisp attempts to evaluate a form that, for some reason, cannot be "
|
||
"evaluated, it @dfn{signals} an @dfn{error}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1742
|
||
msgid ""
|
||
"When an error is signaled, Emacs's default reaction is to print an error "
|
||
"message and terminate execution of the current command. This is the right "
|
||
"thing to do in most cases, such as if you type @kbd{C-f} at the end of the "
|
||
"buffer."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1752
|
||
msgid ""
|
||
"In complicated programs, simple termination may not be what you want. For "
|
||
"example, the program may have made temporary changes in data structures, or "
|
||
"created temporary buffers that should be deleted before the program is "
|
||
"finished. In such cases, you would use @code{unwind-protect} to establish "
|
||
"@dfn{cleanup expressions} to be evaluated in case of error. "
|
||
"(@xref{Cleanups}.) Occasionally, you may wish the program to continue "
|
||
"execution despite an error in a subroutine. In these cases, you would use "
|
||
"@code{condition-case} to establish @dfn{error handlers} to recover control "
|
||
"in case of error."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1756
|
||
msgid ""
|
||
"Resist the temptation to use error handling to transfer control from one "
|
||
"part of the program to another; use @code{catch} and @code{throw} instead. "
|
||
"@xref{Catch and Throw}."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1764
|
||
#, no-wrap
|
||
msgid "Signaling Errors"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
msgid "How to report an error."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1889
|
||
#, no-wrap
|
||
msgid "Processing of Errors"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
msgid "What Emacs does when you report an error."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1926
|
||
#, no-wrap
|
||
msgid "Handling Errors"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
msgid "How you can trap errors and continue execution."
|
||
msgstr ""
|
||
|
||
#. type: node
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2219
|
||
#, no-wrap
|
||
msgid "Error Symbols"
|
||
msgstr ""
|
||
|
||
#. type: menuentry
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1762
|
||
msgid "How errors are classified for trapping them."
|
||
msgstr ""
|
||
|
||
#. type: subsubsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1765
|
||
#, no-wrap
|
||
msgid "How to Signal an Error"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1766
|
||
#, no-wrap
|
||
msgid "signaling errors"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1773
|
||
msgid ""
|
||
"@dfn{Signaling} an error means beginning error processing. Error processing "
|
||
"normally aborts all or part of the running program and returns to a point "
|
||
"that is set up to handle the error (@pxref{Processing of Errors}). Here we "
|
||
"describe how to signal an error."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1779
|
||
msgid ""
|
||
"Most errors are signaled automatically within Lisp primitives which you call "
|
||
"for other purposes, such as if you try to take the @sc{car} of an integer or "
|
||
"move forward a character at the end of the buffer. You can also signal "
|
||
"errors explicitly with the functions @code{error} and @code{signal}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1783
|
||
msgid ""
|
||
"Quitting, which happens when the user types @kbd{C-g}, is not considered an "
|
||
"error, but it is handled almost like an error. @xref{Quitting}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1789
|
||
msgid ""
|
||
"Every error specifies an error message, one way or another. The message "
|
||
"should state what is wrong (``File does not exist''), not how things ought "
|
||
"to be (``File must exist''). The convention in Emacs Lisp is that error "
|
||
"messages should start with a capital letter, but should not end with any "
|
||
"sort of punctuation."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1790
|
||
#, no-wrap
|
||
msgid "error format-string &rest args"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1794
|
||
msgid ""
|
||
"This function signals an error with an error message constructed by applying "
|
||
"@code{format-message} (@pxref{Formatting Strings}) to @var{format-string} "
|
||
"and @var{args}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1796
|
||
msgid "These examples show typical uses of @code{error}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1801
|
||
#, no-wrap
|
||
msgid ""
|
||
"(error \"That is an error -- try something else\")\n"
|
||
" @error{} That is an error -- try something else\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1806
|
||
#, no-wrap
|
||
msgid ""
|
||
"(error \"Invalid name `%s'\" \"A%%B\")\n"
|
||
" @error{} Invalid name ‘A%%B’\n"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1812
|
||
msgid ""
|
||
"@code{error} works by calling @code{signal} with two arguments: the error "
|
||
"symbol @code{error}, and a list containing the string returned by "
|
||
"@code{format-message}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1817
|
||
msgid ""
|
||
"Typically grave accent and apostrophe in the format translate to matching "
|
||
"curved quotes, e.g., @t{\"Missing `%s'\"} might result in @t{\"Missing "
|
||
"‘foo’\"}. @xref{Text Quoting Style}, for how to influence or inhibit this "
|
||
"translation."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1823
|
||
msgid ""
|
||
"@strong{Warning:} If you want to use your own string as an error message "
|
||
"verbatim, don't just write @code{(error @var{string})}. If @var{string} "
|
||
"@var{string} contains @samp{%}, @samp{`}, or @samp{'} it may be reformatted, "
|
||
"with undesirable results. Instead, use @code{(error \"%s\" @var{string})}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1825
|
||
#, no-wrap
|
||
msgid "signal error-symbol data"
|
||
msgstr ""
|
||
|
||
#. type: anchor{#1}
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1830
|
||
msgid "Definition of signal"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1830
|
||
msgid ""
|
||
"This function signals an error named by @var{error-symbol}. The argument "
|
||
"@var{data} is a list of additional Lisp objects relevant to the "
|
||
"circumstances of the error."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1835
|
||
msgid ""
|
||
"The argument @var{error-symbol} must be an @dfn{error symbol}---a symbol "
|
||
"defined with @code{define-error}. This is how Emacs Lisp classifies "
|
||
"different sorts of errors. @xref{Error Symbols}, for a description of error "
|
||
"symbols, error conditions and condition names."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1843
|
||
msgid ""
|
||
"If the error is not handled, the two arguments are used in printing the "
|
||
"error message. Normally, this error message is provided by the "
|
||
"@code{error-message} property of @var{error-symbol}. If @var{data} is "
|
||
"non-@code{nil}, this is followed by a colon and a comma separated list of "
|
||
"the unevaluated elements of @var{data}. For @code{error}, the error message "
|
||
"is the @sc{car} of @var{data} (that must be a string). Subcategories of "
|
||
"@code{file-error} are handled specially."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1848
|
||
msgid ""
|
||
"The number and significance of the objects in @var{data} depends on "
|
||
"@var{error-symbol}. For example, with a @code{wrong-type-argument} error, "
|
||
"there should be two objects in the list: a predicate that describes the type "
|
||
"that was expected, and the object that failed to fit that type."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1853
|
||
msgid ""
|
||
"Both @var{error-symbol} and @var{data} are available to any error handlers "
|
||
"that handle the error: @code{condition-case} binds a local variable to a "
|
||
"list of the form @code{(@var{error-symbol} .@: @var{data})} (@pxref{Handling "
|
||
"Errors})."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1856
|
||
msgid "The function @code{signal} never returns."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1861
|
||
#, no-wrap
|
||
msgid ""
|
||
"(signal 'wrong-number-of-arguments '(x y))\n"
|
||
" @error{} Wrong number of arguments: x, y\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1866
|
||
#, no-wrap
|
||
msgid ""
|
||
"(signal 'no-such-error '(\"My unknown error condition\"))\n"
|
||
" @error{} peculiar error: \"My unknown error condition\"\n"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1870
|
||
#, no-wrap
|
||
msgid "user errors, signaling"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1871
|
||
#, no-wrap
|
||
msgid "user-error format-string &rest args"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1881
|
||
msgid ""
|
||
"This function behaves exactly like @code{error}, except that it uses the "
|
||
"error symbol @code{user-error} rather than @code{error}. As the name "
|
||
"suggests, this is intended to report errors on the part of the user, rather "
|
||
"than errors in the code itself. For example, if you try to use the command "
|
||
"@code{Info-history-back} (@kbd{l}) to move back beyond the start of your "
|
||
"Info browsing history, Emacs signals a @code{user-error}. Such errors do "
|
||
"not cause entry to the debugger, even when @code{debug-on-error} is "
|
||
"non-@code{nil}. @xref{Error Debugging}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1883
|
||
#, no-wrap
|
||
msgid "CL note---no continuable errors"
|
||
msgstr ""
|
||
|
||
#. type: quotation
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1887
|
||
msgid ""
|
||
"@b{Common Lisp note:} Emacs Lisp has nothing like the Common Lisp concept of "
|
||
"continuable errors."
|
||
msgstr ""
|
||
|
||
#. type: subsubsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1890
|
||
#, no-wrap
|
||
msgid "How Emacs Processes Errors"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1891
|
||
#, no-wrap
|
||
msgid "processing of errors"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1901
|
||
msgid ""
|
||
"When an error is signaled, @code{signal} searches for an active "
|
||
"@dfn{handler} for the error. A handler is a sequence of Lisp expressions "
|
||
"designated to be executed if an error happens in part of the Lisp program. "
|
||
"If the error has an applicable handler, the handler is executed, and control "
|
||
"resumes following the handler. The handler executes in the environment of "
|
||
"the @code{condition-case} that established it; all functions called within "
|
||
"that @code{condition-case} have already been exited, and the handler cannot "
|
||
"return to them."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1908
|
||
msgid ""
|
||
"If there is no applicable handler for the error, it terminates the current "
|
||
"command and returns control to the editor command loop. (The command loop "
|
||
"has an implicit handler for all kinds of errors.) The command loop's "
|
||
"handler uses the error symbol and associated data to print an error "
|
||
"message. You can use the variable @code{command-error-function} to control "
|
||
"how this is done:"
|
||
msgstr ""
|
||
|
||
#. type: defvar
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1909
|
||
#, no-wrap
|
||
msgid "command-error-function"
|
||
msgstr ""
|
||
|
||
#. type: defvar
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1917
|
||
msgid ""
|
||
"This variable, if non-@code{nil}, specifies a function to use to handle "
|
||
"errors that return control to the Emacs command loop. The function should "
|
||
"take three arguments: @var{data}, a list of the same form that "
|
||
"@code{condition-case} would bind to its variable; @var{context}, a string "
|
||
"describing the situation in which the error occurred, or (more often) "
|
||
"@code{nil}; and @var{caller}, the Lisp function which called the primitive "
|
||
"that signaled the error."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1919
|
||
#, no-wrap
|
||
msgid "@code{debug-on-error} use"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1925
|
||
msgid ""
|
||
"An error that has no explicit handler may call the Lisp debugger. The "
|
||
"debugger is enabled if the variable @code{debug-on-error} (@pxref{Error "
|
||
"Debugging}) is non-@code{nil}. Unlike error handlers, the debugger runs in "
|
||
"the environment of the error, so that you can examine values of variables "
|
||
"precisely as they were at the time of the error."
|
||
msgstr ""
|
||
|
||
#. type: subsubsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1927
|
||
#, no-wrap
|
||
msgid "Writing Code to Handle Errors"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1928
|
||
#, no-wrap
|
||
msgid "error handler"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1929
|
||
#, no-wrap
|
||
msgid "handling errors"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1930
|
||
#, no-wrap
|
||
msgid "handle Lisp errors"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1931
|
||
#, no-wrap
|
||
msgid "forms for handling errors"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1938
|
||
msgid ""
|
||
"The usual effect of signaling an error is to terminate the command that is "
|
||
"running and return immediately to the Emacs editor command loop. You can "
|
||
"arrange to trap errors occurring in a part of your program by establishing "
|
||
"an error handler, with the special form @code{condition-case}. A simple "
|
||
"example looks like this:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1944
|
||
#, no-wrap
|
||
msgid ""
|
||
"(condition-case nil\n"
|
||
" (delete-file filename)\n"
|
||
" (error nil))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1951
|
||
msgid ""
|
||
"This deletes the file named @var{filename}, catching any error and returning "
|
||
"@code{nil} if an error occurs. (You can use the macro @code{ignore-errors} "
|
||
"for a simple case like this; see below.)"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1957
|
||
msgid ""
|
||
"The @code{condition-case} construct is often used to trap errors that are "
|
||
"predictable, such as failure to open a file in a call to "
|
||
"@code{insert-file-contents}. It is also used to trap errors that are "
|
||
"totally unpredictable, such as when the program evaluates an expression read "
|
||
"from the user."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1968
|
||
msgid ""
|
||
"The second argument of @code{condition-case} is called the @dfn{protected "
|
||
"form}. (In the example above, the protected form is a call to "
|
||
"@code{delete-file}.) The error handlers go into effect when this form "
|
||
"begins execution and are deactivated when this form returns. They remain in "
|
||
"effect for all the intervening time. In particular, they are in effect "
|
||
"during the execution of functions called by this form, in their subroutines, "
|
||
"and so on. This is a good thing, since, strictly speaking, errors can be "
|
||
"signaled only by Lisp primitives (including @code{signal} and @code{error}) "
|
||
"called by the protected form, not by the protected form itself."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1976
|
||
msgid ""
|
||
"The arguments after the protected form are handlers. Each handler lists one "
|
||
"or more @dfn{condition names} (which are symbols) to specify which errors it "
|
||
"will handle. The error symbol specified when an error is signaled also "
|
||
"defines a list of condition names. A handler applies to an error if they "
|
||
"have any condition names in common. In the example above, there is one "
|
||
"handler, and it specifies one condition name, @code{error}, which covers all "
|
||
"errors."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1981
|
||
msgid ""
|
||
"The search for an applicable handler checks all the established handlers "
|
||
"starting with the most recently established one. Thus, if two nested "
|
||
"@code{condition-case} forms offer to handle the same error, the inner of the "
|
||
"two gets to handle it."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1985
|
||
msgid ""
|
||
"If an error is handled by some @code{condition-case} form, this ordinarily "
|
||
"prevents the debugger from being run, even if @code{debug-on-error} says "
|
||
"this error should invoke the debugger."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1991
|
||
msgid ""
|
||
"If you want to be able to debug errors that are caught by a "
|
||
"@code{condition-case}, set the variable @code{debug-on-signal} to a "
|
||
"non-@code{nil} value. You can also specify that a particular handler should "
|
||
"let the debugger run first, by writing @code{debug} among the conditions, "
|
||
"like this:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:1997
|
||
#, no-wrap
|
||
msgid ""
|
||
"(condition-case nil\n"
|
||
" (delete-file filename)\n"
|
||
" ((debug error) nil))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2005
|
||
msgid ""
|
||
"The effect of @code{debug} here is only to prevent @code{condition-case} "
|
||
"from suppressing the call to the debugger. Any given error will invoke the "
|
||
"debugger only if @code{debug-on-error} and the other usual filtering "
|
||
"mechanisms say it should. @xref{Error Debugging}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2006
|
||
#, no-wrap
|
||
msgid "condition-case-unless-debug var protected-form handlers@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2011
|
||
msgid ""
|
||
"The macro @code{condition-case-unless-debug} provides another way to handle "
|
||
"debugging of such forms. It behaves exactly like @code{condition-case}, "
|
||
"unless the variable @code{debug-on-error} is non-@code{nil}, in which case "
|
||
"it does not handle any errors at all."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2019
|
||
msgid ""
|
||
"Once Emacs decides that a certain handler handles the error, it returns "
|
||
"control to that handler. To do so, Emacs unbinds all variable bindings made "
|
||
"by binding constructs that are being exited, and executes the cleanups of "
|
||
"all @code{unwind-protect} forms that are being exited. Once control arrives "
|
||
"at the handler, the body of the handler executes normally."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2026
|
||
msgid ""
|
||
"After execution of the handler body, execution returns from the "
|
||
"@code{condition-case} form. Because the protected form is exited completely "
|
||
"before execution of the handler, the handler cannot resume execution at the "
|
||
"point of the error, nor can it examine variable bindings that were made "
|
||
"within the protected form. All it can do is clean up and proceed."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2033
|
||
msgid ""
|
||
"Error signaling and handling have some resemblance to @code{throw} and "
|
||
"@code{catch} (@pxref{Catch and Throw}), but they are entirely separate "
|
||
"facilities. An error cannot be caught by a @code{catch}, and a @code{throw} "
|
||
"cannot be handled by an error handler (though using @code{throw} when there "
|
||
"is no suitable @code{catch} signals an error that can be handled)."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2034
|
||
#, no-wrap
|
||
msgid "condition-case var protected-form handlers@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2042
|
||
msgid ""
|
||
"This special form establishes the error handlers @var{handlers} around the "
|
||
"execution of @var{protected-form}. If @var{protected-form} executes without "
|
||
"error, the value it returns becomes the value of the @code{condition-case} "
|
||
"form (in the absence of a success handler; see below). In this case, the "
|
||
"@code{condition-case} has no effect. The @code{condition-case} form makes a "
|
||
"difference when an error occurs during @var{protected-form}."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2050
|
||
msgid ""
|
||
"Each of the @var{handlers} is a list of the form @code{(@var{conditions} "
|
||
"@var{body}@dots{})}. Here @var{conditions} is an error condition name to be "
|
||
"handled, or a list of condition names (which can include @code{debug} to "
|
||
"allow the debugger to run before the handler). A condition name of @code{t} "
|
||
"matches any condition. @var{body} is one or more Lisp expressions to be "
|
||
"executed when this handler handles an error. Here are examples of handlers:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2054
|
||
#, no-wrap
|
||
msgid ""
|
||
"(error nil)\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2056
|
||
#, no-wrap
|
||
msgid ""
|
||
"(arith-error (message \"Division by zero\"))\n"
|
||
"\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2060
|
||
#, no-wrap
|
||
msgid ""
|
||
"((arith-error file-error)\n"
|
||
" (message\n"
|
||
" \"Either division by zero or failure to open a file\"))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2070
|
||
msgid ""
|
||
"Each error that occurs has an @dfn{error symbol} that describes what kind of "
|
||
"error it is, and which describes also a list of condition names "
|
||
"(@pxref{Error Symbols}). Emacs searches all the active "
|
||
"@code{condition-case} forms for a handler that specifies one or more of "
|
||
"these condition names; the innermost matching @code{condition-case} handles "
|
||
"the error. Within this @code{condition-case}, the first applicable handler "
|
||
"handles the error."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2074
|
||
msgid ""
|
||
"After executing the body of the handler, the @code{condition-case} returns "
|
||
"normally, using the value of the last form in the handler body as the "
|
||
"overall value."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2075
|
||
#, no-wrap
|
||
msgid "error description"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2085
|
||
msgid ""
|
||
"The argument @var{var} is a variable. @code{condition-case} does not bind "
|
||
"this variable when executing the @var{protected-form}, only when it handles "
|
||
"an error. At that time, it binds @var{var} locally to an @dfn{error "
|
||
"description}, which is a list giving the particulars of the error. The "
|
||
"error description has the form @code{(@var{error-symbol} . @var{data})}. "
|
||
"The handler can refer to this list to decide what to do. For example, if "
|
||
"the error is for failure opening a file, the file name is the second element "
|
||
"of @var{data}---the third element of the error description."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2088
|
||
msgid ""
|
||
"If @var{var} is @code{nil}, that means no variable is bound. Then the error "
|
||
"symbol and associated data are not available to the handler."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2089
|
||
#, no-wrap
|
||
msgid "success handler"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2094
|
||
msgid ""
|
||
"As a special case, one of the @var{handlers} can be a list of the form "
|
||
"@code{(:success @var{body}@dots{})}, where @var{body} is executed with "
|
||
"@var{var} (if non-@code{nil}) bound to the return value of "
|
||
"@var{protected-form} when that expression terminates without error."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2095
|
||
#, no-wrap
|
||
msgid "rethrow a signal"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2099
|
||
msgid ""
|
||
"Sometimes it is necessary to re-throw a signal caught by "
|
||
"@code{condition-case}, for some outer-level handler to catch. Here's how to "
|
||
"do that:"
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2102
|
||
#, no-wrap
|
||
msgid " (signal (car err) (cdr err))\n"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2108
|
||
msgid ""
|
||
"where @code{err} is the error description variable, the first argument to "
|
||
"@code{condition-case} whose error condition you want to re-throw. "
|
||
"@xref{Definition of signal}."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2110
|
||
#, no-wrap
|
||
msgid "error-message-string error-descriptor"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2114
|
||
msgid ""
|
||
"This function returns the error message string for a given error "
|
||
"descriptor. It is useful if you want to handle an error by printing the "
|
||
"usual error message for that error. @xref{Definition of signal}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2116
|
||
#, no-wrap
|
||
msgid "@code{arith-error} example"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2120
|
||
msgid ""
|
||
"Here is an example of using @code{condition-case} to handle the error that "
|
||
"results from dividing by zero. The handler displays the error message (but "
|
||
"without a beep), then returns a very large number."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2127
|
||
#, no-wrap
|
||
msgid ""
|
||
"(defun safe-divide (dividend divisor)\n"
|
||
" (condition-case err\n"
|
||
" ;; @r{Protected form.}\n"
|
||
" (/ dividend divisor)\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2135
|
||
#, no-wrap
|
||
msgid ""
|
||
" ;; @r{The handler.}\n"
|
||
" (arith-error ; @r{Condition.}\n"
|
||
" ;; @r{Display the usual message for this error.}\n"
|
||
" (message \"%s\" (error-message-string err))\n"
|
||
" 1000000)))\n"
|
||
"@result{} safe-divide\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2141
|
||
#, no-wrap
|
||
msgid ""
|
||
"(safe-divide 5 0)\n"
|
||
" @print{} Arithmetic error: (arith-error)\n"
|
||
"@result{} 1000000\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2148
|
||
msgid ""
|
||
"The handler specifies condition name @code{arith-error} so that it will "
|
||
"handle only division-by-zero errors. Other kinds of errors will not be "
|
||
"handled (by this @code{condition-case}). Thus:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2153
|
||
#, no-wrap
|
||
msgid ""
|
||
"(safe-divide nil 3)\n"
|
||
" @error{} Wrong type argument: number-or-marker-p, nil\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2158
|
||
msgid ""
|
||
"Here is a @code{condition-case} that catches all kinds of errors, including "
|
||
"those from @code{error}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2163
|
||
#, no-wrap
|
||
msgid ""
|
||
"(setq baz 34)\n"
|
||
" @result{} 34\n"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2176
|
||
#, no-wrap
|
||
msgid ""
|
||
"(condition-case err\n"
|
||
" (if (eq baz 35)\n"
|
||
" t\n"
|
||
" ;; @r{This is a call to the function @code{error}.}\n"
|
||
" (error \"Rats! The variable %s was %s, not 35\" 'baz baz))\n"
|
||
" ;; @r{This is the handler; it is not a form.}\n"
|
||
" (error (princ (format \"The error was: %s\" err))\n"
|
||
" 2))\n"
|
||
"@print{} The error was: (error \"Rats! The variable baz was 34, not 35\")\n"
|
||
"@result{} 2\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2179
|
||
#, no-wrap
|
||
msgid "ignore-errors body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2184
|
||
msgid ""
|
||
"This construct executes @var{body}, ignoring any errors that occur during "
|
||
"its execution. If the execution is without error, @code{ignore-errors} "
|
||
"returns the value of the last form in @var{body}; otherwise, it returns "
|
||
"@code{nil}."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2187
|
||
msgid ""
|
||
"Here's the example at the beginning of this subsection rewritten using "
|
||
"@code{ignore-errors}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2192
|
||
#, no-wrap
|
||
msgid ""
|
||
" (ignore-errors\n"
|
||
" (delete-file filename))\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2196
|
||
#, no-wrap
|
||
msgid "ignore-error condition body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2199
|
||
msgid ""
|
||
"This macro is like @code{ignore-errors}, but will only ignore the specific "
|
||
"error condition specified."
|
||
msgstr ""
|
||
|
||
#. type: example
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2203
|
||
#, no-wrap
|
||
msgid ""
|
||
" (ignore-error end-of-file\n"
|
||
" (read \"\"))\n"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2206
|
||
msgid "@var{condition} can also be a list of error conditions."
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2208
|
||
#, no-wrap
|
||
msgid "with-demoted-errors format body@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: defmac
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2217
|
||
msgid ""
|
||
"This macro is like a milder version of @code{ignore-errors}. Rather than "
|
||
"suppressing errors altogether, it converts them into messages. It uses the "
|
||
"string @var{format} to format the message. @var{format} should contain a "
|
||
"single @samp{%}-sequence; e.g., @code{\"Error: %S\"}. Use "
|
||
"@code{with-demoted-errors} around code that is not expected to signal "
|
||
"errors, but should be robust if one does occur. Note that this macro uses "
|
||
"@code{condition-case-unless-debug} rather than @code{condition-case}."
|
||
msgstr ""
|
||
|
||
#. type: subsubsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2220
|
||
#, no-wrap
|
||
msgid "Error Symbols and Condition Names"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2221
|
||
#, no-wrap
|
||
msgid "error symbol"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2222
|
||
#, no-wrap
|
||
msgid "error name"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2223
|
||
#, no-wrap
|
||
msgid "condition name"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2224
|
||
#, no-wrap
|
||
msgid "user-defined error"
|
||
msgstr ""
|
||
|
||
#. type: kindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2225
|
||
#, no-wrap
|
||
msgid "error-conditions"
|
||
msgstr ""
|
||
|
||
#. type: kindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2226
|
||
#, no-wrap
|
||
msgid "define-error"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2232
|
||
msgid ""
|
||
"When you signal an error, you specify an @dfn{error symbol} to specify the "
|
||
"kind of error you have in mind. Each error has one and only one error "
|
||
"symbol to categorize it. This is the finest classification of errors "
|
||
"defined by the Emacs Lisp language."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2242
|
||
msgid ""
|
||
"These narrow classifications are grouped into a hierarchy of wider classes "
|
||
"called @dfn{error conditions}, identified by @dfn{condition names}. The "
|
||
"narrowest such classes belong to the error symbols themselves: each error "
|
||
"symbol is also a condition name. There are also condition names for more "
|
||
"extensive classes, up to the condition name @code{error} which takes in all "
|
||
"kinds of errors (but not @code{quit}). Thus, each error has one or more "
|
||
"condition names: @code{error}, the error symbol if that is distinct from "
|
||
"@code{error}, and perhaps some intermediate classifications."
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2243
|
||
#, no-wrap
|
||
msgid "define-error name message &optional parent"
|
||
msgstr ""
|
||
|
||
#. type: defun
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2250
|
||
msgid ""
|
||
"In order for a symbol to be an error symbol, it must be defined with "
|
||
"@code{define-error} which takes a parent condition (defaults to "
|
||
"@code{error}). This parent defines the conditions that this kind of error "
|
||
"belongs to. The transitive set of parents always includes the error symbol "
|
||
"itself, and the symbol @code{error}. Because quitting is not considered an "
|
||
"error, the set of parents of @code{quit} is just @code{(quit)}."
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2252
|
||
#, no-wrap
|
||
msgid "peculiar error"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2257
|
||
msgid ""
|
||
"In addition to its parents, the error symbol has a @var{message} which is a "
|
||
"string to be printed when that error is signaled but not handled. If that "
|
||
"message is not valid, the error message @samp{peculiar error} is used. "
|
||
"@xref{Definition of signal}."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2261
|
||
msgid ""
|
||
"Internally, the set of parents is stored in the @code{error-conditions} "
|
||
"property of the error symbol and the message is stored in the "
|
||
"@code{error-message} property of the error symbol."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2263
|
||
msgid "Here is how we define a new error symbol, @code{new-error}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2267
|
||
#, no-wrap
|
||
msgid "(define-error 'new-error \"A new error\" 'my-own-errors)\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2275
|
||
msgid ""
|
||
"This error has several condition names: @code{new-error}, the narrowest "
|
||
"classification; @code{my-own-errors}, which we imagine is a wider "
|
||
"classification; and all the conditions of @code{my-own-errors} which should "
|
||
"include @code{error}, which is the widest of all."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2278
|
||
msgid ""
|
||
"The error string should start with a capital letter but it should not end "
|
||
"with a period. This is for consistency with the rest of Emacs."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2282
|
||
msgid ""
|
||
"Naturally, Emacs will never signal @code{new-error} on its own; only an "
|
||
"explicit call to @code{signal} (@pxref{Definition of signal}) in your code "
|
||
"can do this:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2287
|
||
#, no-wrap
|
||
msgid ""
|
||
"(signal 'new-error '(x y))\n"
|
||
" @error{} A new error: x, y\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2293
|
||
msgid ""
|
||
"This error can be handled through any of its condition names. This example "
|
||
"handles @code{new-error} and any other errors in the class "
|
||
"@code{my-own-errors}:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2299
|
||
#, no-wrap
|
||
msgid ""
|
||
"(condition-case foo\n"
|
||
" (bar nil t)\n"
|
||
" (my-own-errors nil))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2307
|
||
msgid ""
|
||
"The significant way that errors are classified is by their condition "
|
||
"names---the names used to match errors with handlers. An error symbol "
|
||
"serves only as a convenient way to specify the intended error message and "
|
||
"list of condition names. It would be cumbersome to give @code{signal} a "
|
||
"list of condition names rather than one error symbol."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2313
|
||
msgid ""
|
||
"By contrast, using only error symbols without condition names would "
|
||
"seriously decrease the power of @code{condition-case}. Condition names make "
|
||
"it possible to categorize errors at various levels of generality when you "
|
||
"write an error handler. Using error symbols alone would eliminate all but "
|
||
"the narrowest level of classification."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2316
|
||
msgid ""
|
||
"@xref{Standard Errors}, for a list of the main error symbols and their "
|
||
"conditions."
|
||
msgstr ""
|
||
|
||
#. type: subsection
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2318
|
||
#, no-wrap
|
||
msgid "Cleaning Up from Nonlocal Exits"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2319
|
||
#, no-wrap
|
||
msgid "nonlocal exits, cleaning up"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2320
|
||
#, no-wrap
|
||
msgid "forms for cleanup"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2328
|
||
msgid ""
|
||
"The @code{unwind-protect} construct is essential whenever you temporarily "
|
||
"put a data structure in an inconsistent state; it permits you to make the "
|
||
"data consistent again in the event of an error or throw. (Another more "
|
||
"specific cleanup construct that is used only for changes in buffer contents "
|
||
"is the atomic change group; @ref{Atomic Changes}.)"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2329
|
||
#, no-wrap
|
||
msgid "unwind-protect body-form cleanup-forms@dots{}"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2330
|
||
#, no-wrap
|
||
msgid "cleanup forms"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2331
|
||
#, no-wrap
|
||
msgid "protected forms"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2332
|
||
#, no-wrap
|
||
msgid "error cleanup"
|
||
msgstr ""
|
||
|
||
#. type: cindex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2333
|
||
#, no-wrap
|
||
msgid "unwinding"
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2340
|
||
msgid ""
|
||
"@code{unwind-protect} executes @var{body-form} with a guarantee that the "
|
||
"@var{cleanup-forms} will be evaluated if control leaves @var{body-form}, no "
|
||
"matter how that happens. @var{body-form} may complete normally, or execute "
|
||
"a @code{throw} out of the @code{unwind-protect}, or cause an error; in all "
|
||
"cases, the @var{cleanup-forms} will be evaluated."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2345
|
||
msgid ""
|
||
"If @var{body-form} finishes normally, @code{unwind-protect} returns the "
|
||
"value of @var{body-form}, after it evaluates the @var{cleanup-forms}. If "
|
||
"@var{body-form} does not finish, @code{unwind-protect} does not return any "
|
||
"value in the normal sense."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2352
|
||
msgid ""
|
||
"Only @var{body-form} is protected by the @code{unwind-protect}. If any of "
|
||
"the @var{cleanup-forms} themselves exits nonlocally (via a @code{throw} or "
|
||
"an error), @code{unwind-protect} is @emph{not} guaranteed to evaluate the "
|
||
"rest of them. If the failure of one of the @var{cleanup-forms} has the "
|
||
"potential to cause trouble, then protect it with another "
|
||
"@code{unwind-protect} around that form."
|
||
msgstr ""
|
||
|
||
#. type: defspec
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2357
|
||
msgid ""
|
||
"The number of currently active @code{unwind-protect} forms counts, together "
|
||
"with the number of local variable bindings, against the limit "
|
||
"@code{max-specpdl-size} (@pxref{Definition of max-specpdl-size,, Local "
|
||
"Variables})."
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2361
|
||
msgid ""
|
||
"For example, here we make an invisible buffer for temporary use, and make "
|
||
"sure to kill it before finishing:"
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2369
|
||
#, no-wrap
|
||
msgid ""
|
||
"(let ((buffer (get-buffer-create \" *temp*\")))\n"
|
||
" (with-current-buffer buffer\n"
|
||
" (unwind-protect\n"
|
||
" @var{body-form}\n"
|
||
" (kill-buffer buffer))))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2380
|
||
msgid ""
|
||
"You might think that we could just as well write @code{(kill-buffer "
|
||
"(current-buffer))} and dispense with the variable @code{buffer}. However, "
|
||
"the way shown above is safer, if @var{body-form} happens to get an error "
|
||
"after switching to a different buffer! (Alternatively, you could write a "
|
||
"@code{save-current-buffer} around @var{body-form}, to ensure that the "
|
||
"temporary buffer becomes current again in time to kill it.)"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2385
|
||
msgid ""
|
||
"Emacs includes a standard macro called @code{with-temp-buffer} which expands "
|
||
"into more or less the code shown above (@pxref{Definition of "
|
||
"with-temp-buffer,, Current Buffer}). Several of the macros defined in this "
|
||
"manual use @code{unwind-protect} in this way."
|
||
msgstr ""
|
||
|
||
#. type: findex
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2386
|
||
#, no-wrap
|
||
msgid "ftp-login"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2394
|
||
msgid ""
|
||
"Here is an actual example derived from an FTP package. It creates a process "
|
||
"(@pxref{Processes}) to try to establish a connection to a remote machine. "
|
||
"As the function @code{ftp-login} is highly susceptible to numerous problems "
|
||
"that the writer of the function cannot anticipate, it is protected with a "
|
||
"form that guarantees deletion of the process in the event of failure. "
|
||
"Otherwise, Emacs might fill up with useless subprocesses."
|
||
msgstr ""
|
||
|
||
#. type: group
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2405
|
||
#, no-wrap
|
||
msgid ""
|
||
"(let ((win nil))\n"
|
||
" (unwind-protect\n"
|
||
" (progn\n"
|
||
" (setq process (ftp-setup-buffer host file))\n"
|
||
" (if (setq win (ftp-login process host user password))\n"
|
||
" (message \"Logged in\")\n"
|
||
" (error \"Ftp login failed\")))\n"
|
||
" (or win (and process (delete-process process)))))\n"
|
||
msgstr ""
|
||
|
||
#. type: Plain text
|
||
#: /Users/suzume/Documents/Repositories/Projet OmegaT de Documentation Emacs -
|
||
#: Sources/doc/lispref/control.texi:2412
|
||
msgid ""
|
||
"This example has a small bug: if the user types @kbd{C-g} to quit, and the "
|
||
"quit happens immediately after the function @code{ftp-setup-buffer} returns "
|
||
"but before the variable @code{process} is set, the process will not be "
|
||
"killed. There is no easy way to fix this bug, but at least it is very "
|
||
"unlikely."
|
||
msgstr ""
|