# 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.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2014-08-12 21:14+0200\n"
"PO-Revision-Date: 2018-05-22 17:56+0200\n"
"Last-Translator: David Arroyo Men@'endez <davidam@gnu.org>\n"
"Language-Team: Spanish <elisp-es-traductores@nongnu.org>\n"
"Language: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. type: titlefont{#1}
#: emacs-lisp-intro.texi:6 emacs-lisp-intro.texi:288
#, no-wrap
msgid "Programming in Emacs Lisp"
msgstr "Programaci@'on en Emacs Lisp"

#. type: ifset
#: emacs-lisp-intro.texi:18
msgid "@smallbook"
msgstr "@smallbook"

#. type: tex
#: emacs-lisp-intro.texi:36
#, no-wrap
msgid "\\global\\hbadness=6666 % don't worry about not-too-underfull boxes\n"
msgstr "\\global\\hbadness=6666 % don't worry about not-too-underfull boxes\n"

#. type: tex
#: emacs-lisp-intro.texi:199
#, no-wrap
msgid "\\global\\parskip 6pt plus 1pt\n"
msgstr "\\global\\parskip 6pt plus 1pt\n"

#. type: tex
#: emacs-lisp-intro.texi:215
#, no-wrap
msgid ""
"\\if \\xrefprintnodename\n"
" \\global\\def\\xrefprintnodename#1{\\unskip, ``#1''}\n"
" \\else\n"
" \\global\\def\\xrefprintnodename#1{ ``#1''}\n"
"\\fi\n"
"% \\global\\def\\xrefprintnodename#1{, ``#1''}\n"
msgstr ""
"\\if \\xrefprintnodename\n"
" \\global\\def\\xrefprintnodename#1{\\unskip, ``#1''}\n"
" \\else\n"
" \\global\\def\\xrefprintnodename#1{ ``#1''}\n"
"\\fi\n"
"% \\global\\def\\xrefprintnodename#1{, ``#1''}\n"

#. type: dircategory
#: emacs-lisp-intro.texi:219
#, no-wrap
msgid "GNU Emacs Lisp"
msgstr "GNU Emacs Lisp"

#. type: menuentry
#: emacs-lisp-intro.texi:223
msgid "Emacs Lisp Intro: (eintr)"
msgstr "Introducci@'on a Emacs Lisp: (eintr)"

#. type: menuentry
#: emacs-lisp-intro.texi:223
msgid "A simple introduction to Emacs Lisp programming."
msgstr "Una introducci@'on simple a la programaci@'on a Emacs Lisp"

#. type: copying
#: emacs-lisp-intro.texi:228
msgid ""
"This is an @cite{Introduction to Programming in Emacs Lisp}, for people who "
"are not programmers."
msgstr ""
"Esto es una @cite{Introducci@'on a la Programaci@'on en Emacs Lisp},\n"
"para personas que no son programadoras."

#. type: copying
#: emacs-lisp-intro.texi:230
msgid "Edition @value{edition-number}, @value{update-date}"
msgstr "Traducido desde la edici@'on @value{edition-number}."

#. type: copying
#: emacs-lisp-intro.texi:233
msgid ""
"Copyright @copyright{} 1990--1995, 1997, 2001--2013 Free Software "
"Foundation, Inc."
msgstr "Copyright @copyright{} 2015 Libremanuals."

#. type: iftex
#: emacs-lisp-intro.texi:237
msgid "Published by the:@*"
msgstr "Publicado por:@*"

#. type: iftex
#: emacs-lisp-intro.texi:243
msgid ""
"GNU Press, @hfill @uref{http://www.fsf.org/campaigns/gnu-press/}@* a "
"division of the @hfill email: @email{sales@@fsf.org}@* Free Software "
"Foundation, Inc.  @hfill Tel: +1 (617) 542-5942@* 51 Franklin Street, Fifth "
"Floor @hfill Fax: +1 (617) 542-2652@* Boston, MA 02110-1301 USA"
msgstr ""
"Libremanuals,                     @hfill\n"
"@uref{http://www.libremanuals.net/}@*\n"
"Puede descargar una copia de las fuentes desde\n"
"https://savannah.nongnu.org/git/?group=elisp-es"

#. type: ifnottex
#: emacs-lisp-intro.texi:247
msgid "Published by the:"
msgstr "Publicado por el:"

#. type: example
#: emacs-lisp-intro.texi:254
#, no-wrap
msgid ""
"GNU Press,                        http://www.fsf.org/campaigns/gnu-press/\n"
"a division of the                 email: sales@@fsf.org\n"
"Free Software Foundation, Inc.    Tel: +1 (617) 542-5942\n"
"51 Franklin Street, Fifth Floor   Fax: +1 (617) 542-2652\n"
"Boston, MA 02110-1301 USA\n"
msgstr "Libremanuals,                     @hfill @uref{http://www.libremanuals.net/}@* \n"

#. type: copying
#: emacs-lisp-intro.texi:260
msgid "ISBN 1-882114-43-4"
msgstr "ISBN: 978-84-608-5935-2"

#. type: copying
#: emacs-lisp-intro.texi:268
msgid ""
"Permission is granted to copy, distribute and/or modify this document under "
"the terms of the GNU Free Documentation License, Version 1.3 or any later "
"version published by the Free Software Foundation; there being no Invariant "
"Section, with the Front-Cover Texts being ``A GNU Manual'', and with the "
"Back-Cover Texts as in (a) below.  A copy of the license is included in the "
"section entitled ``GNU Free Documentation License''."
msgstr ""
"Permission is granted to copy, distribute and/or modify this document under "
"the terms of the GNU Free Documentation License, Version 1.3 or any later "
"version published by the Free Software Foundation; there being no Invariant "
"Section, with the Front-Cover Texts being ``A GNU Manual'', and with the "
"Back-Cover Texts as in (a) below.  A copy of the license is included in the "
"section entitled ``GNU Free Documentation License''."

#. type: copying
#: emacs-lisp-intro.texi:272
msgid ""
"(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and modify "
"this GNU manual.  Buying copies from the FSF supports it in developing GNU "
"and promoting software freedom.''"
msgstr ""
"(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and modify "
"this GNU manual.  Buying copies from the FSF supports it in developing GNU "
"and promoting software freedom.''"

#. type: tex
#: emacs-lisp-intro.texi:282
#, no-wrap
msgid ""
"{\\begingroup%\n"
"    \\hbox{}\\vskip 1.5in \\chaprm \\centerline{An Introduction to}%\n"
"        \\endgroup}%\n"
"{\\begingroup\\hbox{}\\vskip 0.25in \\chaprm%\n"
"        \\centerline{Programming in Emacs Lisp}%\n"
"        \\endgroup\\page\\hbox{}\\page}\n"
msgstr ""
"{\\begingroup%\n"
"    \\hbox{}\\vskip 1.5in \\chaprm \\centerline{Una Introducci@'on}%\n"
"        \\endgroup}%\n"
"{\\begingroup\\hbox{}\\vskip 0.25in \\chaprm%\n"
"        \\centerline{a la Programaci@'on en Emacs Lisp}%\n"
"        \\endgroup\\page\\hbox{}\\page}\n"

#. type: titlefont{#1}
#: emacs-lisp-intro.texi:286
#, no-wrap
msgid "An Introduction to"
msgstr "Una Introducci@'on a la"

#. type: center
#: emacs-lisp-intro.texi:290
#, no-wrap
msgid "Revised Third Edition"
msgstr "Revisada la tercera edici@'on"

#. type: center
#: emacs-lisp-intro.texi:292
#, no-wrap
msgid "by Robert J. Chassell"
msgstr "Escrito por Robert J. Chassell. Traducido por David Arroyo Men@'endez."

#. type: iftex
#: emacs-lisp-intro.texi:303
msgid ""
"@evenheading @thispage @| @| @thischapter @oddheading @thissection @| @| "
"@thispage"
msgstr ""
"@evenheading @thispage @| @| @thischapter \n"
"@oddheading @thissection @| @| @thispage"

#. type: tex
#: emacs-lisp-intro.texi:311
#, no-wrap
msgid ""
"\\global\\parskip 2pt plus 1pt\n"
"\\global\\advance\\baselineskip by -1pt\n"
msgstr ""
"\\global\\parskip 2pt plus 1pt\n"
"\\global\\advance\\baselineskip by -1pt\n"

#. type: node
#: emacs-lisp-intro.texi:319
#, no-wrap
msgid "Top"
msgstr "Top"

#. type: top
#: emacs-lisp-intro.texi:320
#, no-wrap
msgid "An Introduction to Programming in Emacs Lisp"
msgstr "Una Introducci@'on a la Programaci@'on en Emacs Lisp"

#. type: ifnottex
#: emacs-lisp-intro.texi:326
msgid ""
"This master menu first lists each chapter and index; then it lists every "
"node in every chapter."
msgstr ""
"Este men@'u maestro primero lista cada cap@'{@dotless{i}}tulo e\n"
"indexa; entonces lista cada nodo en cada cap@'{@dotless{i}}tulo."

#. type: unnumbered
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:374
#: emacs-lisp-intro.texi:833 emacs-lisp-intro.texi:834
#, no-wrap
msgid "Preface"
msgstr "Prefacio"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "What to look for."
msgstr "Qu@'e buscas"

#. type: chapter
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:383
#: emacs-lisp-intro.texi:1098 emacs-lisp-intro.texi:1099
#, no-wrap
msgid "List Processing"
msgstr "Procesamiento de listas"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "What is Lisp?"
msgstr "@questiondown{}Qu@'e es Lisp?"

#. type: chapter
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:438
#: emacs-lisp-intro.texi:2620 emacs-lisp-intro.texi:2621
#, no-wrap
msgid "Practicing Evaluation"
msgstr "Practicando evaluaci@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Running several programs."
msgstr "Ejecutando varios programas."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:3032
#, no-wrap
msgid "Writing Defuns"
msgstr "Escribiendo funciones"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How to write function definitions."
msgstr "C@'omo escribir definiciones de funciones."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:4640
#, no-wrap
msgid "Buffer Walk Through"
msgstr "Un paseo a trav@'es de los b@'uffers"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Exploring a few buffer-related functions."
msgstr "Explorando unas pocas funciones relacionadas con los b@'uffers."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:5535
#, no-wrap
msgid "More Complex"
msgstr "M@'as complejidad"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "A few, even more complex functions."
msgstr "Unas pocas, incluso m@'as complejas funciones."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:6556
#, no-wrap
msgid "Narrowing & Widening"
msgstr "Encogiendo y extendiendo"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Restricting your and Emacs attention to a region."
msgstr "Restringi@'endote a t@'i y a Emacs a una regi@'on."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:6882
#, no-wrap
msgid "car cdr & cons"
msgstr "Car cdr y cons"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Fundamental functions in Lisp."
msgstr "Funciones fundamentales en Lisp."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:7535
#, no-wrap
msgid "Cutting & Storing Text"
msgstr "Cortando y almacenando texto"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Removing text and saving it."
msgstr "Eliminando texto y guard@'andolo."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:9562
#, no-wrap
msgid "List Implementation"
msgstr "Implementaci@'on de listas"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How lists are implemented in the computer."
msgstr "C@'omo las listas se implementan en el ordenador"

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:10035
#, no-wrap
msgid "Yanking"
msgstr "Pegando"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Pasting stored text."
msgstr "Pegando texto almacenado."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:10265
#, no-wrap
msgid "Loops & Recursion"
msgstr "Bucles y recursi@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How to repeat a process."
msgstr "C@'omo repetir un proceso."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:12259
#, no-wrap
msgid "Regexp Search"
msgstr "Buscar regexp"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Regular expression searches."
msgstr "B@'usquedas de expresiones regulares."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:13684
#, no-wrap
msgid "Counting Words"
msgstr "Contando palabras"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "A review of repetition and regexps."
msgstr "Una revisi@'on de repetici@'on y regexps."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:14562
#, no-wrap
msgid "Words in a defun"
msgstr "Palabras en una funci@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Counting words in a @code{defun}."
msgstr "Contando palabras en una @code{defun}."

#. type: chapter
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:746
#: emacs-lisp-intro.texi:16161 emacs-lisp-intro.texi:16162
#, no-wrap
msgid "Readying a Graph"
msgstr "Leyendo un grafo"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "A prototype graph printing function."
msgstr "Un grafo prototipo imprimiendo una funci@'on."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:16830
#, no-wrap
msgid "Emacs Initialization"
msgstr "Inicializaci@'on de Emacs"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How to write a @file{.emacs} file."
msgstr "C@'omo escribir un fichero @file{.emacs}."

#. type: chapter
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:772
#: emacs-lisp-intro.texi:18284 emacs-lisp-intro.texi:18285
#, no-wrap
msgid "Debugging"
msgstr "Depurando"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How to run the Emacs Lisp debuggers."
msgstr "C@'omo ejecutar los depuradores de Emacs Lisp."

#. type: chapter
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:18790
#: emacs-lisp-intro.texi:18791
#, no-wrap
msgid "Conclusion"
msgstr "Conclusi@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Now you have the basics."
msgstr "Ahora tienes las bases."

#. type: findex
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:18910
#: emacs-lisp-intro.texi:18912
#, no-wrap
msgid "the-the"
msgstr "the-the"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "An appendix: how to find reduplicated words."
msgstr "Un ap@'endice: c@'omo encontrar palabras reduplicadas."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:19007
#, no-wrap
msgid "Kill Ring"
msgstr "Kill Ring"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "An appendix: how the kill ring works."
msgstr "Un ap@'endice: c@'omo el kill ring funciona."

#. type: node
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:19616
#, no-wrap
msgid "Full Graph"
msgstr "Grafo completo"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "How to create a graph with labeled axes."
msgstr "C@'omo crear un grafo con ejes etiquetados."

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Free Software and Free Manuals::"
msgstr "Software Libre y Manuales Libres::"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "GNU Free Documentation License::"
msgstr "GNU Free Documentation License::"

#. type: menuentry
#: emacs-lisp-intro.texi:369
msgid "Index::"
msgstr "@'Indice::"

#. type: unnumbered
#: emacs-lisp-intro.texi:369 emacs-lisp-intro.texi:22094
#: emacs-lisp-intro.texi:22099 emacs-lisp-intro.texi:22100
#, no-wrap
msgid "About the Author"
msgstr "Acerca del Autor"

#. type: menuentry
#: emacs-lisp-intro.texi:372
msgid "--- The Detailed Node Listing ---"
msgstr "--- El Listado Detallado de Nodos ---"

#. type: node
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
#: emacs-lisp-intro.texi:862
#, no-wrap
msgid "Why"
msgstr "Por qu@'e"

#. type: menuentry
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
msgid "Why learn Emacs Lisp?"
msgstr "@questiondown{}Por qu@'e aprender Emacs Lisp?"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
#: emacs-lisp-intro.texi:876 emacs-lisp-intro.texi:877
#, no-wrap
msgid "On Reading this Text"
msgstr "Leyendo este texto"

#. type: menuentry
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
msgid "Read, gain familiarity, pick up habits...."
msgstr "Leer, ganar familiaridad, coger h@'abitos..."

#. type: node
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
#: emacs-lisp-intro.texi:926
#, no-wrap
msgid "Who You Are"
msgstr "Quien eres"

#. type: menuentry
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
msgid "For whom this is written."
msgstr "Para quien es este escrito."

#. type: menuentry
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
msgid "Lisp History::"
msgstr "Historia de Lisp::"

#. type: node
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
#: emacs-lisp-intro.texi:1005
#, no-wrap
msgid "Note for Novices"
msgstr "Nota para principiantes"

#. type: menuentry
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
msgid "You can read this as a novice."
msgstr "Tu puedes leer esto como un novato"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:381 emacs-lisp-intro.texi:859
#: emacs-lisp-intro.texi:1052 emacs-lisp-intro.texi:1053
#, no-wrap
msgid "Thank You"
msgstr "Se agradece"

#. type: cindex
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:397
#: emacs-lisp-intro.texi:1125 emacs-lisp-intro.texi:1127
#: emacs-lisp-intro.texi:1128 emacs-lisp-intro.texi:1129
#, no-wrap
msgid "Lisp Lists"
msgstr "Listas Lisp"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "What are lists?"
msgstr "@questiondown{}Qu@'e son listas?"

#. type: section
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:1329 emacs-lisp-intro.texi:1330
#, no-wrap
msgid "Run a Program"
msgstr "Ejecutar un programa"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Any list in Lisp is a program ready to run."
msgstr "Cualquier lista en Lisp es un programa listo para ejecutarse."

#. type: node
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:1391
#, no-wrap
msgid "Making Errors"
msgstr "Creando errores"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Generating an error message."
msgstr "Generando un mensaje de error."

#. type: node
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:1541
#, no-wrap
msgid "Names & Definitions"
msgstr "Nombres y definiciones"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Names of symbols and function definitions."
msgstr "Nombres de s@'{@dotless{i}}mbolos y definiciones de funci@'on."

#. type: node
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:1575
#, no-wrap
msgid "Lisp Interpreter"
msgstr "Interpr@'ete Lisp"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "What the Lisp interpreter does."
msgstr "Qu@'e hace el int@'erprete Lisp."

#. type: cindex
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:409
#: emacs-lisp-intro.texi:1125 emacs-lisp-intro.texi:1655
#: emacs-lisp-intro.texi:1656 emacs-lisp-intro.texi:1657
#, no-wrap
msgid "Evaluation"
msgstr "Evaluaci@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Running a program."
msgstr "Ejecutando un programa."

#. type: cindex
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:414
#: emacs-lisp-intro.texi:1125 emacs-lisp-intro.texi:1761
#: emacs-lisp-intro.texi:1762 emacs-lisp-intro.texi:1763
#, no-wrap
msgid "Variables"
msgstr "Variables"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Returning a value from a variable."
msgstr "Devolviendo un valor desde una variable."

#. type: cindex
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:421
#: emacs-lisp-intro.texi:1125 emacs-lisp-intro.texi:1956
#: emacs-lisp-intro.texi:1957 emacs-lisp-intro.texi:1958
#, no-wrap
msgid "Arguments"
msgstr "Argumentos"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Passing information to a function."
msgstr "Pasando informaci@'on a una funci@'on."

#. type: node
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:2354
#, no-wrap
msgid "set & setq"
msgstr "set y setq"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "Setting the value of a variable."
msgstr "Configurando el valor de una variable."

#. type: section
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:2536 emacs-lisp-intro.texi:2537
#, no-wrap
msgid "Summary"
msgstr "Resumen"

#. type: menuentry
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
msgid "The major points."
msgstr "Los mayores puntos."

#. type: node
#: emacs-lisp-intro.texi:395 emacs-lisp-intro.texi:1125
#: emacs-lisp-intro.texi:2598
#, no-wrap
msgid "Error Message Exercises"
msgstr "Ejercicios de mensajes de error"

#. type: node
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
#: emacs-lisp-intro.texi:1159
#, no-wrap
msgid "Numbers Lists"
msgstr "Listas de n@'umeros"

#. type: menuentry
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
msgid "List have numbers, other lists, in them."
msgstr "Lista tener n@'umeros, otras listas, en ellas."

#. type: cindex
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
#: emacs-lisp-intro.texi:1187 emacs-lisp-intro.texi:1188
#: emacs-lisp-intro.texi:1189
#, no-wrap
msgid "Lisp Atoms"
msgstr "@'Atomos Lisp"

#. type: menuentry
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
msgid "Elemental entities."
msgstr "Entidades Elementales."

#. type: subsection
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
#: emacs-lisp-intro.texi:1267 emacs-lisp-intro.texi:1268
#, no-wrap
msgid "Whitespace in Lists"
msgstr "Espacios en blanco en listas"

#. type: menuentry
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
msgid "Formatting lists to be readable."
msgstr "Formatenado listas para ser legibles."

#. type: node
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
#: emacs-lisp-intro.texi:1307
#, no-wrap
msgid "Typing Lists"
msgstr "Escribiendo listas"

#. type: menuentry
#: emacs-lisp-intro.texi:402 emacs-lisp-intro.texi:1156
msgid "How GNU Emacs helps you type lists."
msgstr "C@'omo GNU Emacs te ayuda a escribir listas."

#. type: section
#: emacs-lisp-intro.texi:404 emacs-lisp-intro.texi:1576
#, no-wrap
msgid "The Lisp Interpreter"
msgstr "El int@'erprete Lisp"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:407 emacs-lisp-intro.texi:1598
#: emacs-lisp-intro.texi:1601 emacs-lisp-intro.texi:1602
#, no-wrap
msgid "Complications"
msgstr "Complicaciones"

#. type: menuentry
#: emacs-lisp-intro.texi:407 emacs-lisp-intro.texi:1598
msgid "Variables, Special forms, Lists within."
msgstr "Variables, formas especiales, Listas."

#. type: subsection
#: emacs-lisp-intro.texi:407 emacs-lisp-intro.texi:1598
#: emacs-lisp-intro.texi:1632 emacs-lisp-intro.texi:1633
#, no-wrap
msgid "Byte Compiling"
msgstr "Compilaci@'on de bytes"

#. type: menuentry
#: emacs-lisp-intro.texi:407 emacs-lisp-intro.texi:1598
msgid "Specially processing code for speed."
msgstr "Especialmente procesando c@'odigo por la velocidad."

#. type: node
#: emacs-lisp-intro.texi:412 emacs-lisp-intro.texi:1669
#: emacs-lisp-intro.texi:1672
#, no-wrap
msgid "How the Interpreter Acts"
msgstr "C@'omo el int@'erprete act@'ua"

#. type: menuentry
#: emacs-lisp-intro.texi:412 emacs-lisp-intro.texi:1669
msgid "Returns and Side Effects..."
msgstr "Devolver y Efectos Colaterales..."

#. type: subsection
#: emacs-lisp-intro.texi:412 emacs-lisp-intro.texi:1669
#: emacs-lisp-intro.texi:1698 emacs-lisp-intro.texi:1699
#, no-wrap
msgid "Evaluating Inner Lists"
msgstr "Evaluando listas propias"

#. type: menuentry
#: emacs-lisp-intro.texi:412 emacs-lisp-intro.texi:1669
msgid "Lists within lists..."
msgstr "Listas con listas..."

#. type: menuentry
#: emacs-lisp-intro.texi:419 emacs-lisp-intro.texi:1798
msgid "fill-column Example::"
msgstr "Ejemplo de rellenar columna::"

#. type: node
#: emacs-lisp-intro.texi:419 emacs-lisp-intro.texi:1798
#: emacs-lisp-intro.texi:1838
#, no-wrap
msgid "Void Function"
msgstr "Funci@'on vac@'{@dotless{i}}a"

#. type: menuentry
#: emacs-lisp-intro.texi:419 emacs-lisp-intro.texi:1798
msgid "The error message for a symbol without a function."
msgstr "El mensaje de error para un s@'{@dotless{i}}mbolo sin una funci@'on."

#. type: node
#: emacs-lisp-intro.texi:419 emacs-lisp-intro.texi:1798
#: emacs-lisp-intro.texi:1890
#, no-wrap
msgid "Void Variable"
msgstr "Variable vac@'{@dotless{i}}a"

#. type: menuentry
#: emacs-lisp-intro.texi:419 emacs-lisp-intro.texi:1798
msgid "The error message for a symbol without a value."
msgstr "El mensaje de error para un s@'{@dotless{i}}mbolo sin un valor."

#. type: cindex
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
#: emacs-lisp-intro.texi:2009 emacs-lisp-intro.texi:2011
#, no-wrap
msgid "Data types"
msgstr "Tipos de datos"

#. type: menuentry
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
msgid "Types of data passed to a function."
msgstr "Tipos de datos pasados a una funci@'on."

#. type: node
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
#: emacs-lisp-intro.texi:2063
#, no-wrap
msgid "Args as Variable or List"
msgstr "Argumentos como variables o listas"

#. type: menuentry
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
msgid "An argument can be the value of a variable or list."
msgstr "Un argumento puede ser el valor de una variable o lista."

#. type: subsection
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
#: emacs-lisp-intro.texi:2104 emacs-lisp-intro.texi:2105
#, no-wrap
msgid "Variable Number of Arguments"
msgstr "N@'umero de variables de argumentos"

#. type: menuentry
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
msgid "Some functions may take a variable number of arguments."
msgstr "Algunas funciones pueden tomar un n@'umero variable de argumentos."

#. type: node
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
#: emacs-lisp-intro.texi:2148
#, no-wrap
msgid "Wrong Type of Argument"
msgstr "Tipo incorrecto de argumento"

#. type: menuentry
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
msgid "Passing an argument of the wrong type to a function."
msgstr "Pasando un argumento del tipo incorrecto a una funci@'on."

#. type: item
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
#: emacs-lisp-intro.texi:2242 emacs-lisp-intro.texi:2244
#: emacs-lisp-intro.texi:4565
#, no-wrap
msgid "message"
msgstr "message"

#. type: menuentry
#: emacs-lisp-intro.texi:430 emacs-lisp-intro.texi:2007
msgid "A useful function for sending messages."
msgstr "Una funci@'on @'util para enviar mensajes."

#. type: section
#: emacs-lisp-intro.texi:432 emacs-lisp-intro.texi:2355
#, no-wrap
msgid "Setting the Value of a Variable"
msgstr "Configurando el valor de una variable"

#. type: node
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
#: emacs-lisp-intro.texi:2374
#, no-wrap
msgid "Using set"
msgstr "Usando set"

#. type: menuentry
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
msgid "Setting values."
msgstr "Configurando valores."

#. type: node
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
#: emacs-lisp-intro.texi:2430
#, no-wrap
msgid "Using setq"
msgstr "Usando setq"

#. type: menuentry
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
msgid "Setting a quoted value."
msgstr "Configurando un valor citado."

#. type: cindex
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
#: emacs-lisp-intro.texi:2490 emacs-lisp-intro.texi:2491
#: emacs-lisp-intro.texi:2492
#, no-wrap
msgid "Counting"
msgstr "Contando"

#. type: menuentry
#: emacs-lisp-intro.texi:436 emacs-lisp-intro.texi:2372
msgid "Using @code{setq} to count."
msgstr "Usando @code{setq} para contar."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:2646 emacs-lisp-intro.texi:2647
#, no-wrap
msgid "How to Evaluate"
msgstr "C@'omo evaluar"

#. type: menuentry
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
msgid "Typing editing commands or @kbd{C-x C-e} causes evaluation."
msgstr "Escribiendo comandos de edici@'on o con @kbd{C-x C-e}."

#. type: section
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:2677 emacs-lisp-intro.texi:2678
#, no-wrap
msgid "Buffer Names"
msgstr "Nombres de b@'uffer"

#. type: menuentry
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
msgid "Buffers and files are different."
msgstr "Buffers y ficheros son diferentes."

#. type: section
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:2802 emacs-lisp-intro.texi:2803
#, no-wrap
msgid "Getting Buffers"
msgstr "Obteniendo b@'uffers"

#. type: menuentry
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
msgid "Getting a buffer itself, not merely its name."
msgstr ""
"Obteniendo un buffer por s@'{@dotless{i}} mismo, no solamente su nombre."

#. type: section
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:2870 emacs-lisp-intro.texi:2871
#, no-wrap
msgid "Switching Buffers"
msgstr "Cambiando b@'uffers"

#. type: menuentry
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
msgid "How to change to another buffer."
msgstr "C@'omo cambiar a otro buffer."

#. type: node
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:2959
#, no-wrap
msgid "Buffer Size & Locations"
msgstr "Tama@~no de b@'uffer y localizaciones"

#. type: menuentry
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
msgid "Where point is located and the size of the buffer."
msgstr "D@'onde el punto est@'a localizado y el tama@~no del buffer."

#. type: node
#: emacs-lisp-intro.texi:447 emacs-lisp-intro.texi:2643
#: emacs-lisp-intro.texi:3026
#, no-wrap
msgid "Evaluation Exercise"
msgstr "Ejercicio de evaluaci@'on"

#. type: chapter
#: emacs-lisp-intro.texi:449 emacs-lisp-intro.texi:3033
#, no-wrap
msgid "How To Write Function Definitions"
msgstr "C@'omo escribir definiciones de funciones"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Primitive Functions::"
msgstr "Funciones primitivas::"

#. type: item
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3088 emacs-lisp-intro.texi:3090
#: emacs-lisp-intro.texi:4387
#, no-wrap
msgid "defun"
msgstr "defun"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "The @code{defun} special form."
msgstr "La forma especial @code{defun}."

#. type: enumerate
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3260 emacs-lisp-intro.texi:20178
#, no-wrap
msgid "Install"
msgstr "Instalar"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Install a function definition."
msgstr "Instalar una definici@'on de funci@'on."

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3373
#, no-wrap
msgid "Interactive"
msgstr "Interactive"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Making a function interactive."
msgstr "Creando una funci@'on interactive."

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3522
#, no-wrap
msgid "Interactive Options"
msgstr "Opciones de interactive."

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Different options for @code{interactive}."
msgstr "Diferentes opciones para @code{interactive}."

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3600
#, no-wrap
msgid "Permanent Installation"
msgstr "Instalaci@'on Permanente"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Installing code permanently."
msgstr "Instalando c@'odigo permanentemente."

#. type: item
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:475
#: emacs-lisp-intro.texi:3060 emacs-lisp-intro.texi:3648
#: emacs-lisp-intro.texi:3649 emacs-lisp-intro.texi:3650
#: emacs-lisp-intro.texi:4457
#, no-wrap
msgid "let"
msgstr "let"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Creating and initializing local variables."
msgstr "Creando e inicializando variables locales."

#. type: item
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:3865 emacs-lisp-intro.texi:3867
#: emacs-lisp-intro.texi:4496
#, no-wrap
msgid "if"
msgstr "if"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "What if?"
msgstr "@questiondown{}Y qu@'e si?"

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:4065
#, no-wrap
msgid "else"
msgstr "else"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "If--then--else expressions."
msgstr "Expresiones If--then--else."

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:4153
#, no-wrap
msgid "Truth & Falsehood"
msgstr "Verdad y falsedad"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "What Lisp considers false and true."
msgstr "Que considera Lisp falso y cierto."

#. type: item
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:491
#: emacs-lisp-intro.texi:3060 emacs-lisp-intro.texi:4240
#: emacs-lisp-intro.texi:4241 emacs-lisp-intro.texi:4242
#: emacs-lisp-intro.texi:4479 emacs-lisp-intro.texi:5483
#, no-wrap
msgid "save-excursion"
msgstr "save-excursion"

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Keeping track of point, mark, and buffer."
msgstr "Guardando la traza del punto, la marca, y el buffer."

#. type: menuentry
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
msgid "Review::"
msgstr "Revisar::"

#. type: node
#: emacs-lisp-intro.texi:463 emacs-lisp-intro.texi:3060
#: emacs-lisp-intro.texi:4626
#, no-wrap
msgid "defun Exercises"
msgstr "Ejercicios defun"

#. type: cindex
#: emacs-lisp-intro.texi:465 emacs-lisp-intro.texi:3261
#: emacs-lisp-intro.texi:3262
#, no-wrap
msgid "Install a Function Definition"
msgstr "Instalar una definici@'on de funci@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:468 emacs-lisp-intro.texi:3295
msgid "Effect of installation::"
msgstr "Efecto de instalaci@'on::"

#. type: node
#: emacs-lisp-intro.texi:468 emacs-lisp-intro.texi:3295
#: emacs-lisp-intro.texi:3328
#, no-wrap
msgid "Change a defun"
msgstr "Cambiar un defun"

#. type: menuentry
#: emacs-lisp-intro.texi:468 emacs-lisp-intro.texi:3295
msgid "How to change a function definition."
msgstr "C@'omo cambiar una definici@'on de funci@'on"

#. type: section
#: emacs-lisp-intro.texi:470 emacs-lisp-intro.texi:3374
#, no-wrap
msgid "Make a Function Interactive"
msgstr "Crear una funci@'on interactive"

#. type: node
#: emacs-lisp-intro.texi:473 emacs-lisp-intro.texi:3395
#: emacs-lisp-intro.texi:3398
#, no-wrap
msgid "Interactive multiply-by-seven"
msgstr "multiply-by-seven interactivo"

#. type: menuentry
#: emacs-lisp-intro.texi:473 emacs-lisp-intro.texi:3395
msgid "An overview."
msgstr "Un resumen"

#. type: node
#: emacs-lisp-intro.texi:473 emacs-lisp-intro.texi:3395
#: emacs-lisp-intro.texi:3453
#, no-wrap
msgid "multiply-by-seven in detail"
msgstr "multiply-by-seven en detalle"

#. type: menuentry
#: emacs-lisp-intro.texi:473 emacs-lisp-intro.texi:3395
msgid "The interactive version."
msgstr "La versi@'on interactive."

#. type: menuentry
#: emacs-lisp-intro.texi:480 emacs-lisp-intro.texi:3678
msgid "Prevent confusion::"
msgstr "Prevenir confusi@'on::"

#. type: menuentry
#: emacs-lisp-intro.texi:480 emacs-lisp-intro.texi:3678
msgid "Parts of let Expression::"
msgstr "Partes de la expresi@'on let::"

#. type: menuentry
#: emacs-lisp-intro.texi:480 emacs-lisp-intro.texi:3678
msgid "Sample let Expression::"
msgstr "Ejemplo de expresi@'on let::"

#. type: node
#: emacs-lisp-intro.texi:480 emacs-lisp-intro.texi:3678
#: emacs-lisp-intro.texi:3817
#, no-wrap
msgid "Uninitialized let Variables"
msgstr "Variables let inicializadas"

#. type: section
#: emacs-lisp-intro.texi:482 emacs-lisp-intro.texi:3866
#, no-wrap
msgid "The @code{if} Special Form"
msgstr "La forma especial @code{if}"

#. type: menuentry
#: emacs-lisp-intro.texi:485 emacs-lisp-intro.texi:3885
msgid "if in more detail::"
msgstr "if en m@'as detalle::"

#. type: node
#: emacs-lisp-intro.texi:485 emacs-lisp-intro.texi:3885
#: emacs-lisp-intro.texi:3978
#, no-wrap
msgid "type-of-animal in detail"
msgstr "tipo-de-animal en detalle"

#. type: menuentry
#: emacs-lisp-intro.texi:485 emacs-lisp-intro.texi:3885
msgid "An example of an @code{if} expression."
msgstr "Un ejemplo de una expresi@'on @code{if}."

#. type: section
#: emacs-lisp-intro.texi:487 emacs-lisp-intro.texi:4154
#, no-wrap
msgid "Truth and Falsehood in Emacs Lisp"
msgstr "Verdad y falsedad en Emacs Lisp"

#. type: node
#: emacs-lisp-intro.texi:489 emacs-lisp-intro.texi:4174
#: emacs-lisp-intro.texi:4177
#, no-wrap
msgid "nil explained"
msgstr "nil explicado"

#. type: menuentry
#: emacs-lisp-intro.texi:489 emacs-lisp-intro.texi:4174
msgid "@code{nil} has two meanings."
msgstr "@code{nil} tiene dos significados."

#. type: node
#: emacs-lisp-intro.texi:494 emacs-lisp-intro.texi:4262
#: emacs-lisp-intro.texi:4265
#, no-wrap
msgid "Point and mark"
msgstr "Punto y marca"

#. type: menuentry
#: emacs-lisp-intro.texi:494 emacs-lisp-intro.texi:4262
msgid "A review of various locations."
msgstr "Una revisi@'on de varias localizaciones."

#. type: node
#: emacs-lisp-intro.texi:494 emacs-lisp-intro.texi:4262
#: emacs-lisp-intro.texi:4322
#, no-wrap
msgid "Template for save-excursion"
msgstr "Plantilla para save-excursion"

#. type: chapter
#: emacs-lisp-intro.texi:496 emacs-lisp-intro.texi:4641
#, no-wrap
msgid "A Few Buffer--Related Functions"
msgstr "Unas pocas funciones de buffer relacionadas"

#. type: node
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:4662
#, no-wrap
msgid "Finding More"
msgstr "Encontrando m@'as"

#. type: menuentry
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
msgid "How to find more information."
msgstr "C@'omo encontrar m@'as informaci@'on."

#. type: findex
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:4758 emacs-lisp-intro.texi:4760
#, no-wrap
msgid "simplified-beginning-of-buffer"
msgstr "simplified-beginning-of-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:526
#: emacs-lisp-intro.texi:4660 emacs-lisp-intro.texi:5553
msgid "Shows @code{goto-char}, @code{point-min}, and @code{push-mark}."
msgstr "Muestra @code{goto-char}, @code{point-min}, y @code{push-mark}."

#. type: item
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:4886 emacs-lisp-intro.texi:4888
#: emacs-lisp-intro.texi:5502
#, no-wrap
msgid "mark-whole-buffer"
msgstr "mark-whole-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
msgid "Almost the same as @code{beginning-of-buffer}."
msgstr "Casi lo mismo que @code{beginning-of-buffer}."

#. type: findex
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:5025 emacs-lisp-intro.texi:5027
#, no-wrap
msgid "append-to-buffer"
msgstr "append-to-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
msgid "Uses @code{save-excursion} and @code{insert-buffer-substring}."
msgstr "Usa @code{save-excursion} y @code{insert-buffer-substring}."

#. type: node
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:5466
#, no-wrap
msgid "Buffer Related Review"
msgstr "Revisa lo relacionado con el b@'uffer"

#. type: menuentry
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
msgid "Review."
msgstr "Revisa"

#. type: node
#: emacs-lisp-intro.texi:505 emacs-lisp-intro.texi:4660
#: emacs-lisp-intro.texi:5518
#, no-wrap
msgid "Buffer Exercises"
msgstr "Ejercicios de b@'uffer"

#. type: section
#: emacs-lisp-intro.texi:507 emacs-lisp-intro.texi:4887
#, no-wrap
msgid "The Definition of @code{mark-whole-buffer}"
msgstr "La definici@'on de @code{mark-whole-buffer}"

#. type: menuentry
#: emacs-lisp-intro.texi:510 emacs-lisp-intro.texi:4903
msgid "mark-whole-buffer overview::"
msgstr "resumen de mark-whole-buffer::"

#. type: node
#: emacs-lisp-intro.texi:510 emacs-lisp-intro.texi:4903
#: emacs-lisp-intro.texi:4952
#, no-wrap
msgid "Body of mark-whole-buffer"
msgstr "Cuerpo de mark-whole-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:510 emacs-lisp-intro.texi:4903
msgid "Only three lines of code."
msgstr "Solo tres l@'{@dotless{i}}neas de c@'odigo."

#. type: section
#: emacs-lisp-intro.texi:512 emacs-lisp-intro.texi:5026
#, no-wrap
msgid "The Definition of @code{append-to-buffer}"
msgstr "La definici@'on de @code{append-to-buffer}"

#. type: menuentry
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
msgid "append-to-buffer overview::"
msgstr "resumen de append-to-buffer::"

#. type: node
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
#: emacs-lisp-intro.texi:5122
#, no-wrap
msgid "append interactive"
msgstr "append interactivo"

#. type: menuentry
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
msgid "A two part interactive expression."
msgstr "Una expresi@'on interactiva de dos partes."

#. type: node
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
#: emacs-lisp-intro.texi:5190
#, no-wrap
msgid "append-to-buffer body"
msgstr "cuerpo append-to-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
msgid "Incorporates a @code{let} expression."
msgstr "Incorpora una expresi@'on @code{let}."

#. type: node
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
#: emacs-lisp-intro.texi:5289
#, no-wrap
msgid "append save-excursion"
msgstr "append save-excursion"

#. type: menuentry
#: emacs-lisp-intro.texi:517 emacs-lisp-intro.texi:5039
msgid "How the @code{save-excursion} works."
msgstr "C@'omo @code{save-excursion} trabaja."

#. type: chapter
#: emacs-lisp-intro.texi:519 emacs-lisp-intro.texi:5536
#, no-wrap
msgid "A Few More Complex Functions"
msgstr "Unas pocas funciones m@'as complejas"

#. type: findex
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
#: emacs-lisp-intro.texi:5555 emacs-lisp-intro.texi:5557
#, no-wrap
msgid "copy-to-buffer"
msgstr "copy-to-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
msgid "With @code{set-buffer}, @code{get-buffer-create}."
msgstr "Con @code{set-buffer}, @code{get-buffer-create}."

#. type: findex
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
#: emacs-lisp-intro.texi:5633 emacs-lisp-intro.texi:5635
#, no-wrap
msgid "insert-buffer"
msgstr "insert-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
msgid "Read-only, and with @code{or}."
msgstr "Solo lectura, y con @code{or}."

#. type: findex
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
#: emacs-lisp-intro.texi:6063 emacs-lisp-intro.texi:6065
#, no-wrap
msgid "beginning-of-buffer"
msgstr "beginning-of-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
msgid "Second Buffer Related Review::"
msgstr "Revisar el segundo b@'uffer relacionado::"

#. type: node
#: emacs-lisp-intro.texi:526 emacs-lisp-intro.texi:5553
#: emacs-lisp-intro.texi:6547
#, no-wrap
msgid "optional Exercise"
msgstr "Ejercicio opcional"

#. type: section
#: emacs-lisp-intro.texi:528 emacs-lisp-intro.texi:5634
#, no-wrap
msgid "The Definition of @code{insert-buffer}"
msgstr "La definici@'on de @code{insert-buffer}"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "insert-buffer code::"
msgstr "c@'odigo insert-buffer::"

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:5707
#, no-wrap
msgid "insert-buffer interactive"
msgstr "insert-buffer interactivo"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "When you can read, but not write."
msgstr "Cuando tu puedes leer, pero no escribir."

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:5754
#, no-wrap
msgid "insert-buffer body"
msgstr "cuerpo insert-buffer"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "The body has an @code{or} and a @code{let}."
msgstr "El cuerpo tiene un @code{or} y un @code{let}."

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:5789
#, no-wrap
msgid "if & or"
msgstr "si y o"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "Using an @code{if} instead of an @code{or}."
msgstr "Usando un @code{if} en vez de un @code{or}."

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:5869
#, no-wrap
msgid "Insert or"
msgstr "Insertar o"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "How the @code{or} expression works."
msgstr "C@'omo la expresi@'on @code{or} funciona."

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:5927
#, no-wrap
msgid "Insert let"
msgstr "Insertar let"

#. type: menuentry
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
msgid "Two @code{save-excursion} expressions."
msgstr "Dos expresiones @code{save-excursion}."

#. type: node
#: emacs-lisp-intro.texi:536 emacs-lisp-intro.texi:5660
#: emacs-lisp-intro.texi:6025
#, no-wrap
msgid "New insert-buffer"
msgstr "Nuevo insert-buffer"

#. type: subsection
#: emacs-lisp-intro.texi:538 emacs-lisp-intro.texi:5708
#, no-wrap
msgid "The Interactive Expression in @code{insert-buffer}"
msgstr "La expresi@'on interactiva en @code{insert-buffer}"

#. type: cindex
#: emacs-lisp-intro.texi:541 emacs-lisp-intro.texi:5718
#: emacs-lisp-intro.texi:5720 emacs-lisp-intro.texi:5722
#, no-wrap
msgid "Read-only buffer"
msgstr "B@'uffer solo lectura"

#. type: menuentry
#: emacs-lisp-intro.texi:541 emacs-lisp-intro.texi:5718
msgid "When a buffer cannot be modified."
msgstr "Cuando un buffer no puede ser modificado."

#. type: node
#: emacs-lisp-intro.texi:541 emacs-lisp-intro.texi:5718
#: emacs-lisp-intro.texi:5734
#, no-wrap
msgid "b for interactive"
msgstr "b para interactivo"

#. type: menuentry
#: emacs-lisp-intro.texi:541 emacs-lisp-intro.texi:5718
msgid "An existing buffer or else its name."
msgstr "Un buffer existe o adem@'as su nombre."

#. type: section
#: emacs-lisp-intro.texi:543 emacs-lisp-intro.texi:6064
#, no-wrap
msgid "Complete Definition of @code{beginning-of-buffer}"
msgstr "Definici@'on completa de @code{beginning-of-buffer}"

#. type: menuentry
#: emacs-lisp-intro.texi:547 emacs-lisp-intro.texi:6093
msgid "Optional Arguments::"
msgstr "Argumentos opcionales::"

#. type: node
#: emacs-lisp-intro.texi:547 emacs-lisp-intro.texi:6093
#: emacs-lisp-intro.texi:6178
#, no-wrap
msgid "beginning-of-buffer opt arg"
msgstr "beginning-of-buffer opt arg"

#. type: menuentry
#: emacs-lisp-intro.texi:547 emacs-lisp-intro.texi:6093
msgid "Example with optional argument."
msgstr "Ejemplo con argumento opcional."

#. type: node
#: emacs-lisp-intro.texi:547 emacs-lisp-intro.texi:6093
#: emacs-lisp-intro.texi:6376
#, no-wrap
msgid "beginning-of-buffer complete"
msgstr "Completo beginning-of-buffer"

#. type: subsection
#: emacs-lisp-intro.texi:549 emacs-lisp-intro.texi:6179
#, no-wrap
msgid "@code{beginning-of-buffer} with an Argument"
msgstr "@code{beginning-of-buffer} con un argumento"

#. type: menuentry
#: emacs-lisp-intro.texi:553 emacs-lisp-intro.texi:6204
msgid "Disentangle beginning-of-buffer::"
msgstr "Desenmara@~nar beginning-of-buffer::"

#. type: menuentry
#: emacs-lisp-intro.texi:553 emacs-lisp-intro.texi:6204
msgid "Large buffer case::"
msgstr "El caso del buffer largo::"

#. type: node
#: emacs-lisp-intro.texi:553 emacs-lisp-intro.texi:6204
#: emacs-lisp-intro.texi:6319
#, no-wrap
msgid "Small buffer case"
msgstr "Peque@~no caso de b@'uffer"

#. type: chapter
#: emacs-lisp-intro.texi:555 emacs-lisp-intro.texi:6557
#, no-wrap
msgid "Narrowing and Widening"
msgstr "Encogiendo y extendiendo"

#. type: node
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
#: emacs-lisp-intro.texi:6575
#, no-wrap
msgid "Narrowing advantages"
msgstr "Ventajas de encoger"

#. type: menuentry
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
msgid "The advantages of narrowing"
msgstr "Las ventajas de encoger"

#. type: item
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
#: emacs-lisp-intro.texi:6609 emacs-lisp-intro.texi:6611
#: emacs-lisp-intro.texi:9495
#, no-wrap
msgid "save-restriction"
msgstr "save-restriction"

#. type: menuentry
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
msgid "The @code{save-restriction} special form."
msgstr "La forma especial @code{save-restriction}."

#. type: findex
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
#: emacs-lisp-intro.texi:6726 emacs-lisp-intro.texi:6727
#: emacs-lisp-intro.texi:6728
#, no-wrap
msgid "what-line"
msgstr "what-line"

#. type: menuentry
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
msgid "The number of the line that point is on."
msgstr "El n@'umero de la l@'{@dotless{i}}nea que apunta est@'a activa."

#. type: node
#: emacs-lisp-intro.texi:560 emacs-lisp-intro.texi:6572
#: emacs-lisp-intro.texi:6859
#, no-wrap
msgid "narrow Exercise"
msgstr "Ejercicio narrow"

#. type: chapter
#: emacs-lisp-intro.texi:562 emacs-lisp-intro.texi:6883
#, no-wrap
msgid "@code{car}, @code{cdr}, @code{cons}: Fundamental Functions"
msgstr "@code{car}, @code{cdr}, @code{cons}: Funciones fundamentales"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:6907 emacs-lisp-intro.texi:6908
#, no-wrap
msgid "Strange Names"
msgstr "Nombres extra@~nos"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "An historical aside: why the strange names?"
msgstr "Un lado hist@'orico: @questiondown{}por qu@'e los nombres extra@~nos?"

#. type: node
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:6926
#, no-wrap
msgid "car & cdr"
msgstr "car y cdr"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "Functions for extracting part of a list."
msgstr "Funciones para extraer parte de una lista."

#. type: item
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:573
#: emacs-lisp-intro.texi:6904 emacs-lisp-intro.texi:7048
#: emacs-lisp-intro.texi:7049 emacs-lisp-intro.texi:9418
#, no-wrap
msgid "cons"
msgstr "cons"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "Constructing a list."
msgstr "Construyendo una lista."

#. type: item
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:7217 emacs-lisp-intro.texi:7218
#: emacs-lisp-intro.texi:7219 emacs-lisp-intro.texi:8364
#: emacs-lisp-intro.texi:9436
#, no-wrap
msgid "nthcdr"
msgstr "nthcdr"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "Calling @code{cdr} repeatedly."
msgstr "Llamando @code{cdr} repetidamente."

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "nth::"
msgstr "nth::"

#. type: item
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:7393 emacs-lisp-intro.texi:7394
#: emacs-lisp-intro.texi:7395 emacs-lisp-intro.texi:9457
#, no-wrap
msgid "setcar"
msgstr "setcar"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "Changing the first element of a list."
msgstr "Cambiando el primer elemento de una lista."

#. type: itemx
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:7468 emacs-lisp-intro.texi:7469
#: emacs-lisp-intro.texi:7470 emacs-lisp-intro.texi:9458
#, no-wrap
msgid "setcdr"
msgstr "setcdr"

#. type: menuentry
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
msgid "Changing the rest of a list."
msgstr "Cambiando el resto de una lista."

#. type: node
#: emacs-lisp-intro.texi:571 emacs-lisp-intro.texi:6904
#: emacs-lisp-intro.texi:7527
#, no-wrap
msgid "cons Exercise"
msgstr "Ejercicio cons"

#. type: menuentry
#: emacs-lisp-intro.texi:576 emacs-lisp-intro.texi:7083
msgid "Build a list::"
msgstr "Construir una lista::"

#. type: findex
#: emacs-lisp-intro.texi:576 emacs-lisp-intro.texi:7083
#: emacs-lisp-intro.texi:7136 emacs-lisp-intro.texi:7138
#, no-wrap
msgid "length"
msgstr "length"

#. type: menuentry
#: emacs-lisp-intro.texi:576 emacs-lisp-intro.texi:7083
msgid "How to find the length of a list."
msgstr "C@'omo encontrar el tama@~no de una lista."

#. type: chapter
#: emacs-lisp-intro.texi:578 emacs-lisp-intro.texi:7536
#, no-wrap
msgid "Cutting and Storing Text"
msgstr "Cortando y almacenando texto"

#. type: node
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
#: emacs-lisp-intro.texi:7568
#, no-wrap
msgid "Storing Text"
msgstr "Almacenando Texto"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "Text is stored in a list."
msgstr "El texto est@'a almacenado en una lista."

#. type: findex
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:589
#: emacs-lisp-intro.texi:7565 emacs-lisp-intro.texi:7634
#: emacs-lisp-intro.texi:7635 emacs-lisp-intro.texi:7636
#, no-wrap
msgid "zap-to-char"
msgstr "zap-to-char"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "Cutting out text up to a character."
msgstr "Cortando texto a un car@'acter."

#. type: item
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:598
#: emacs-lisp-intro.texi:7565 emacs-lisp-intro.texi:7932
#: emacs-lisp-intro.texi:7933 emacs-lisp-intro.texi:7934
#: emacs-lisp-intro.texi:9526
#, no-wrap
msgid "kill-region"
msgstr "kill-region"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "Cutting text out of a region."
msgstr "Cortando texto de una regi@'on."

#. type: itemx
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:604
#: emacs-lisp-intro.texi:7565 emacs-lisp-intro.texi:8361
#: emacs-lisp-intro.texi:8362 emacs-lisp-intro.texi:8363
#: emacs-lisp-intro.texi:9528
#, no-wrap
msgid "copy-region-as-kill"
msgstr "copy-region-as-kill"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "A definition for copying text."
msgstr "Una definici@'on para copiar texto."

#. type: cindex
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
#: emacs-lisp-intro.texi:9101 emacs-lisp-intro.texi:9102
#: emacs-lisp-intro.texi:9105
#, no-wrap
msgid "Digression into C"
msgstr "Disgresi@'on dentro de C"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "Minor note on C programming language macros."
msgstr "Nota menor en macros del lenguaje de programaci@'on C."

#. type: findex
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
#: emacs-lisp-intro.texi:9248 emacs-lisp-intro.texi:9250
#, no-wrap
msgid "defvar"
msgstr "defvar"

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "How to give a variable an initial value."
msgstr "C@'omo dar a una variable un valor inicial."

#. type: menuentry
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
msgid "cons & search-fwd Review::"
msgstr "Revisi@'on de cons y search-fwd::"

#. type: node
#: emacs-lisp-intro.texi:587 emacs-lisp-intro.texi:7565
#: emacs-lisp-intro.texi:9544
#, no-wrap
msgid "search Exercises"
msgstr "Buscar ejercicios"

#. type: node
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7663
#, no-wrap
msgid "Complete zap-to-char"
msgstr "Completar zap-to-char"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "The complete implementation."
msgstr "La implementaci@'on completa."

#. type: node
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7723
#, no-wrap
msgid "zap-to-char interactive"
msgstr "zap-to-char interactivo"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "A three part interactive expression."
msgstr "Una expresi@'on interactiva de tres partes."

#. type: node
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7758
#, no-wrap
msgid "zap-to-char body"
msgstr "cuerpo zap-to-char"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "A short overview."
msgstr "Un resumen corto"

#. type: item
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7796 emacs-lisp-intro.texi:7798
#: emacs-lisp-intro.texi:9499
#, no-wrap
msgid "search-forward"
msgstr "search-forward"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "How to search for a string."
msgstr "C@'omo buscar una cadena."

#. type: item
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7871 emacs-lisp-intro.texi:7873
#: emacs-lisp-intro.texi:9481
#, no-wrap
msgid "progn"
msgstr "progn"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "The @code{progn} special form."
msgstr "La forma especial @code{progn}."

#. type: node
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
#: emacs-lisp-intro.texi:7911
#, no-wrap
msgid "Summing up zap-to-char"
msgstr "Resumiendo zap-to-char"

#. type: menuentry
#: emacs-lisp-intro.texi:596 emacs-lisp-intro.texi:7660
msgid "Using @code{point} and @code{search-forward}."
msgstr "Usando @code{point} y @code{search-forward}."

#. type: node
#: emacs-lisp-intro.texi:602 emacs-lisp-intro.texi:8014
#: emacs-lisp-intro.texi:8017
#, no-wrap
msgid "Complete kill-region"
msgstr "Completa kill-region"

#. type: menuentry
#: emacs-lisp-intro.texi:602 emacs-lisp-intro.texi:8014
msgid "The function definition."
msgstr "La definici@'on de funci@'on."

#. type: findex
#: emacs-lisp-intro.texi:602 emacs-lisp-intro.texi:8014
#: emacs-lisp-intro.texi:8204 emacs-lisp-intro.texi:8205
#: emacs-lisp-intro.texi:8206
#, no-wrap
msgid "condition-case"
msgstr "condition-case"

#. type: menuentry
#: emacs-lisp-intro.texi:602 emacs-lisp-intro.texi:8014
msgid "Dealing with a problem."
msgstr "Tratando con un problema."

#. type: cindex
#: emacs-lisp-intro.texi:602 emacs-lisp-intro.texi:8014
#: emacs-lisp-intro.texi:8290 emacs-lisp-intro.texi:8291
#: emacs-lisp-intro.texi:8293
#, no-wrap
msgid "Lisp macro"
msgstr "Macro Lisp"

#. type: node
#: emacs-lisp-intro.texi:607 emacs-lisp-intro.texi:8380
#: emacs-lisp-intro.texi:8383
#, no-wrap
msgid "Complete copy-region-as-kill"
msgstr "Completar copy-region-as-kill"

#. type: menuentry
#: emacs-lisp-intro.texi:607 emacs-lisp-intro.texi:8380
msgid "The complete function definition."
msgstr "La definici@'on completa de funci@'on."

#. type: node
#: emacs-lisp-intro.texi:607 emacs-lisp-intro.texi:8380
#: emacs-lisp-intro.texi:8461
#, no-wrap
msgid "copy-region-as-kill body"
msgstr "cuerpo copy-region-as-kill"

#. type: menuentry
#: emacs-lisp-intro.texi:607 emacs-lisp-intro.texi:8380
msgid "The body of @code{copy-region-as-kill}."
msgstr "El cuerpo de @code{copy-region-as-kill}."

#. type: subsection
#: emacs-lisp-intro.texi:609 emacs-lisp-intro.texi:8462
#, no-wrap
msgid "The Body of @code{copy-region-as-kill}"
msgstr "El cuerpo de @code{copy-region-as-kill}"

#. type: menuentry
#: emacs-lisp-intro.texi:613 emacs-lisp-intro.texi:8482
msgid "last-command & this-command::"
msgstr "last-command & this-command::"

#. type: menuentry
#: emacs-lisp-intro.texi:613 emacs-lisp-intro.texi:8482
msgid "kill-append function::"
msgstr "Funci@'on kill-append::"

#. type: node
#: emacs-lisp-intro.texi:613 emacs-lisp-intro.texi:8482
#: emacs-lisp-intro.texi:8672
#, no-wrap
msgid "kill-new function"
msgstr "Funci@'on kill-new"

#. type: section
#: emacs-lisp-intro.texi:615 emacs-lisp-intro.texi:9249
#, no-wrap
msgid "Initializing a Variable with @code{defvar}"
msgstr "Inicializando una variable con @code{defvar}"

#. type: menuentry
#: emacs-lisp-intro.texi:618 emacs-lisp-intro.texi:9295
msgid "See variable current value::"
msgstr "Mira el valor actual de la variable::"

#. type: node
#: emacs-lisp-intro.texi:618 emacs-lisp-intro.texi:9295
#: emacs-lisp-intro.texi:9349
#, no-wrap
msgid "defvar and asterisk"
msgstr "defvar y asterisk"

#. type: chapter
#: emacs-lisp-intro.texi:620 emacs-lisp-intro.texi:9563
#, no-wrap
msgid "How Lists are Implemented"
msgstr "C@'omo las listas se implementan"

#. type: menuentry
#: emacs-lisp-intro.texi:624 emacs-lisp-intro.texi:9584
msgid "Lists diagrammed::"
msgstr "Listas diagramadas::"

#. type: node
#: emacs-lisp-intro.texi:624 emacs-lisp-intro.texi:9584
#: emacs-lisp-intro.texi:9926
#, no-wrap
msgid "Symbols as Chest"
msgstr "S@'{@dotless{i}}mbolos como cajas"

#. type: menuentry
#: emacs-lisp-intro.texi:624 emacs-lisp-intro.texi:9584
msgid "Exploring a powerful metaphor."
msgstr "Explorando una met@'afora poderosa."

#. type: node
#: emacs-lisp-intro.texi:624 emacs-lisp-intro.texi:9584
#: emacs-lisp-intro.texi:10027
#, no-wrap
msgid "List Exercise"
msgstr "Ejercicio Lista"

#. type: chapter
#: emacs-lisp-intro.texi:626 emacs-lisp-intro.texi:10036
#, no-wrap
msgid "Yanking Text Back"
msgstr "Pegando texto"

#. type: menuentry
#: emacs-lisp-intro.texi:630 emacs-lisp-intro.texi:10064
msgid "Kill Ring Overview::"
msgstr "Resumen del anillo de la muerte::"

#. type: node
#: emacs-lisp-intro.texi:630 emacs-lisp-intro.texi:10064
#: emacs-lisp-intro.texi:10109
#, no-wrap
msgid "kill-ring-yank-pointer"
msgstr "kill-ring-yank-pointer"

#. type: menuentry
#: emacs-lisp-intro.texi:630 emacs-lisp-intro.texi:10064
msgid "The kill ring is a list."
msgstr "El anillo de la muerte es una lista."

#. type: node
#: emacs-lisp-intro.texi:630 emacs-lisp-intro.texi:10064
#: emacs-lisp-intro.texi:10248
#, no-wrap
msgid "yank nthcdr Exercises"
msgstr "pegar Ejercicio nthcdr"

#. type: menuentry
#: emacs-lisp-intro.texi:630 emacs-lisp-intro.texi:10064
msgid "The @code{kill-ring-yank-pointer} variable."
msgstr "La variable @code{kill-ring-yank-pointer}."

#. type: chapter
#: emacs-lisp-intro.texi:632 emacs-lisp-intro.texi:10266
#, no-wrap
msgid "Loops and Recursion"
msgstr "Bucles y recursi@'on"

#. type: item
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:639
#: emacs-lisp-intro.texi:10299 emacs-lisp-intro.texi:10301
#: emacs-lisp-intro.texi:10302 emacs-lisp-intro.texi:10304
#: emacs-lisp-intro.texi:13581
#, no-wrap
msgid "while"
msgstr "while"

#. type: menuentry
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:10299
msgid "Causing a stretch of code to repeat."
msgstr "Causando un cierto c@'odigo para repetir."

#. type: menuentry
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:10299
msgid "dolist dotimes::"
msgstr "Dolist y dotimes::"

#. type: cindex
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:665
#: emacs-lisp-intro.texi:10299 emacs-lisp-intro.texi:11246
#: emacs-lisp-intro.texi:11247 emacs-lisp-intro.texi:11248
#, no-wrap
msgid "Recursion"
msgstr "Recursi@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:10299
msgid "Causing a function to call itself."
msgstr "Causando que una funci@'on se llame a s@'{@dotless{i}} misma."

#. type: node
#: emacs-lisp-intro.texi:637 emacs-lisp-intro.texi:10299
#: emacs-lisp-intro.texi:12212
#, no-wrap
msgid "Looping exercise"
msgstr "Ejercicio de Bucle"

#. type: node
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
#: emacs-lisp-intro.texi:10340
#, no-wrap
msgid "Looping with while"
msgstr "Bucles while"

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "Repeat so long as test returns true."
msgstr "Repetir tantas veces como el test devuelva verdadero."

#. type: node
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
#: emacs-lisp-intro.texi:10373
#, no-wrap
msgid "Loop Example"
msgstr "Ejemplo de bucle"

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "A @code{while} loop that uses a list."
msgstr "Un bucle @code{while} que usa una lista."

#. type: findex
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
#: emacs-lisp-intro.texi:10477 emacs-lisp-intro.texi:10479
#, no-wrap
msgid "print-elements-of-list"
msgstr "print-elements-of-list"

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "Uses @code{while}, @code{car}, @code{cdr}."
msgstr "Usos @code{while}, @code{car}, @code{cdr}."

#. type: node
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
#: emacs-lisp-intro.texi:10556
#, no-wrap
msgid "Incrementing Loop"
msgstr "Incrementando el Bucle"

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "A loop with an incrementing counter."
msgstr "Un bucle con un contador de incremento."

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "Incrementing Loop Details::"
msgstr "Incrementando los detalles de los bucles::"

#. type: node
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
#: emacs-lisp-intro.texi:10876
#, no-wrap
msgid "Decrementing Loop"
msgstr "Bucle que se decrementa"

#. type: menuentry
#: emacs-lisp-intro.texi:646 emacs-lisp-intro.texi:10337
msgid "A loop with a decrementing counter."
msgstr "Un bucle con un decrementando contador."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:648 emacs-lisp-intro.texi:10568
#, no-wrap
msgid "Details of an Incrementing Loop"
msgstr "Detalles de un bucle que se incrementa"

#. type: node
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:10603
#: emacs-lisp-intro.texi:10605
#, no-wrap
msgid "Incrementing Example"
msgstr "Ejemplo de Incremento"

#. type: menuentry
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:10603
msgid "Counting pebbles in a triangle."
msgstr "Contando esquinas en un tri@'angulo."

#. type: node
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:10603
#: emacs-lisp-intro.texi:10672
#, no-wrap
msgid "Inc Example parts"
msgstr "Partes Inc de Ejemplo"

#. type: menuentry
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:658
#: emacs-lisp-intro.texi:10603 emacs-lisp-intro.texi:10910
msgid "The parts of the function definition."
msgstr "Las partes de la definici@'on de funci@'on."

#. type: node
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:10603
#: emacs-lisp-intro.texi:10766
#, no-wrap
msgid "Inc Example altogether"
msgstr "Ejemplo Inc junto"

#. type: menuentry
#: emacs-lisp-intro.texi:652 emacs-lisp-intro.texi:658
#: emacs-lisp-intro.texi:10603 emacs-lisp-intro.texi:10910
msgid "Putting the function definition together."
msgstr "Poniendo la definici@'on de funci@'on junta."

#. type: subsection
#: emacs-lisp-intro.texi:654 emacs-lisp-intro.texi:10877
#, no-wrap
msgid "Loop with a Decrementing Counter"
msgstr "Bucle que decrementa"

#. type: node
#: emacs-lisp-intro.texi:658 emacs-lisp-intro.texi:10910
#: emacs-lisp-intro.texi:10912
#, no-wrap
msgid "Decrementing Example"
msgstr "Ejemplo de Decremento"

#. type: menuentry
#: emacs-lisp-intro.texi:658 emacs-lisp-intro.texi:10910
msgid "More pebbles on the beach."
msgstr "M@'as piedras en la playa."

#. type: node
#: emacs-lisp-intro.texi:658 emacs-lisp-intro.texi:10910
#: emacs-lisp-intro.texi:10939
#, no-wrap
msgid "Dec Example parts"
msgstr "Partes de Ejemplo Dec"

#. type: node
#: emacs-lisp-intro.texi:658 emacs-lisp-intro.texi:10910
#: emacs-lisp-intro.texi:11001
#, no-wrap
msgid "Dec Example altogether"
msgstr "Ejemplo Dec junto"

#. type: section
#: emacs-lisp-intro.texi:660 emacs-lisp-intro.texi:11073
#, no-wrap
msgid "Save your time: @code{dolist} and @code{dotimes}"
msgstr "Ahorra tiempo: @code{dolist} y @code{dotimes}"

#. type: menuentry
#: emacs-lisp-intro.texi:663 emacs-lisp-intro.texi:11090
msgid "dolist::"
msgstr "dolist::"

#. type: findex
#: emacs-lisp-intro.texi:663 emacs-lisp-intro.texi:11090
#: emacs-lisp-intro.texi:11196 emacs-lisp-intro.texi:11198
#, no-wrap
msgid "dotimes"
msgstr "dotimes"

#. type: node
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
#: emacs-lisp-intro.texi:11272
#, no-wrap
msgid "Building Robots"
msgstr "Construyendo robots"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Same model, different serial number ..."
msgstr "Mismo modelo, diferente n@'umero serie ..."

#. type: cindex
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
#: emacs-lisp-intro.texi:11309 emacs-lisp-intro.texi:11312
#, no-wrap
msgid "Recursive Definition Parts"
msgstr "Partes de definici@'on recursiva"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Walk until you stop ..."
msgstr "Paseo hasta que tu pares ..."

#. type: node
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
#: emacs-lisp-intro.texi:11373
#, no-wrap
msgid "Recursion with list"
msgstr "Recursi@'on con lista"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Using a list as the test whether to recurse."
msgstr "Usando una lista con el test si para recurso."

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Recursive triangle function::"
msgstr "Funci@'on recursiva tri@'angulo::"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Recursion with cond::"
msgstr "Recursi@'on con cond::"

#. type: cindex
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:681
#: emacs-lisp-intro.texi:11270 emacs-lisp-intro.texi:11732
#: emacs-lisp-intro.texi:11733 emacs-lisp-intro.texi:11734
#, no-wrap
msgid "Recursive Patterns"
msgstr "Patrones recursivos"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Often used templates."
msgstr "Plantillas usadas con frecuencia."

#. type: node
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
#: emacs-lisp-intro.texi:11965
#, no-wrap
msgid "No Deferment"
msgstr "Sin Aplazar"

#. type: menuentry
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
msgid "Don't store up work ..."
msgstr "No almacenar trabajo ..."

#. type: cindex
#: emacs-lisp-intro.texi:674 emacs-lisp-intro.texi:11270
#: emacs-lisp-intro.texi:12048 emacs-lisp-intro.texi:12050
#, no-wrap
msgid "No deferment solution"
msgstr "No aplazar la soluci@'on"

#. type: subsection
#: emacs-lisp-intro.texi:676 emacs-lisp-intro.texi:11466
#, no-wrap
msgid "Recursion in Place of a Counter"
msgstr "Recursi@'on en lugar de un contador"

#. type: menuentry
#: emacs-lisp-intro.texi:679 emacs-lisp-intro.texi:11501
msgid "Recursive Example arg of 1 or 2::"
msgstr "Ejemplo recursivo y argumento con valor 1 o 2::"

#. type: node
#: emacs-lisp-intro.texi:679 emacs-lisp-intro.texi:11501
#: emacs-lisp-intro.texi:11566
#, no-wrap
msgid "Recursive Example arg of 3 or 4"
msgstr "Ejemplo Recursivo de 3 o 4 argumentos"

#. type: menuentry
#: emacs-lisp-intro.texi:685 emacs-lisp-intro.texi:11744
msgid "Every::"
msgstr "Cada::"

#. type: menuentry
#: emacs-lisp-intro.texi:685 emacs-lisp-intro.texi:11744
msgid "Accumulate::"
msgstr "Acumular::"

#. type: node
#: emacs-lisp-intro.texi:685 emacs-lisp-intro.texi:11744
#: emacs-lisp-intro.texi:11896
#, no-wrap
msgid "Keep"
msgstr "Guardar"

#. type: chapter
#: emacs-lisp-intro.texi:687 emacs-lisp-intro.texi:12260
#, no-wrap
msgid "Regular Expression Searches"
msgstr "B@'usquedas de expresiones regulares"

#. type: findex
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
#: emacs-lisp-intro.texi:12305 emacs-lisp-intro.texi:12307
#, no-wrap
msgid "sentence-end"
msgstr "sentence-end"

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "The regular expression for @code{sentence-end}."
msgstr "La expresi@'on regular para @code{sentence-end}."

#. type: item
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
#: emacs-lisp-intro.texi:12456 emacs-lisp-intro.texi:12458
#: emacs-lisp-intro.texi:13608
#, no-wrap
msgid "re-search-forward"
msgstr "re-search-forward"

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "Very similar to @code{search-forward}."
msgstr "Muy similar a @code{search-forward}."

#. type: findex
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:697
#: emacs-lisp-intro.texi:12303 emacs-lisp-intro.texi:12530
#: emacs-lisp-intro.texi:12531 emacs-lisp-intro.texi:12532
#, no-wrap
msgid "forward-sentence"
msgstr "forward-sentence"

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "A straightforward example of regexp search."
msgstr "Un ejemplo sencillo de b@'usqueda con expresiones regulares."

#. type: findex
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
#: emacs-lisp-intro.texi:12823 emacs-lisp-intro.texi:12825
#, no-wrap
msgid "forward-paragraph"
msgstr "forward-paragraph"

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "A somewhat complex example."
msgstr "Un ejemplo complejo de alguna cosa."

#. type: findex
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
#: emacs-lisp-intro.texi:13451 emacs-lisp-intro.texi:13453
#, no-wrap
msgid "etags"
msgstr "etags"

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "How to create your own @file{TAGS} table."
msgstr "C@'omo crear tu propia tabla @file{TAGS}."

#. type: menuentry
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
msgid "Regexp Review::"
msgstr "Revisar regexp::"

#. type: node
#: emacs-lisp-intro.texi:695 emacs-lisp-intro.texi:12303
#: emacs-lisp-intro.texi:13666
#, no-wrap
msgid "re-search Exercises"
msgstr "Ejercicios re-search"

#. type: menuentry
#: emacs-lisp-intro.texi:701 emacs-lisp-intro.texi:12545
msgid "Complete forward-sentence::"
msgstr "Completa forward-sentence::"

#. type: node
#: emacs-lisp-intro.texi:701 emacs-lisp-intro.texi:12545
#: emacs-lisp-intro.texi:12674
#, no-wrap
msgid "fwd-sentence while loops"
msgstr "Bucles while fwd-sentence"

#. type: menuentry
#: emacs-lisp-intro.texi:701 emacs-lisp-intro.texi:12545
msgid "Two @code{while} loops."
msgstr "Dos bucles @code{while}."

#. type: node
#: emacs-lisp-intro.texi:701 emacs-lisp-intro.texi:12545
#: emacs-lisp-intro.texi:12775
#, no-wrap
msgid "fwd-sentence re-search"
msgstr "Volver a buscar la frase en sentido directo"

#. type: menuentry
#: emacs-lisp-intro.texi:701 emacs-lisp-intro.texi:12545
msgid "A regular expression search."
msgstr "Una b@'usqueda de expresi@'on regular."

#. type: section
#: emacs-lisp-intro.texi:703 emacs-lisp-intro.texi:12824
#, no-wrap
msgid "@code{forward-paragraph}: a Goldmine of Functions"
msgstr "@code{forward-paragraph}: una mina de oro de funciones"

#. type: node
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
#: emacs-lisp-intro.texi:13007
#, no-wrap
msgid "forward-paragraph in brief"
msgstr "forward-paragraph en breve"

#. type: menuentry
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
msgid "Key parts of the function definition."
msgstr "Partes clave de la definici@'on de la funci@'on."

#. type: node
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
#: emacs-lisp-intro.texi:13046
#, no-wrap
msgid "fwd-para let"
msgstr "fwd-para let"

#. type: menuentry
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
msgid "The @code{let*} expression."
msgstr "La expresi@'on @code{let*}."

#. type: node
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
#: emacs-lisp-intro.texi:13178
#, no-wrap
msgid "fwd-para while"
msgstr "fwd-para while"

#. type: menuentry
#: emacs-lisp-intro.texi:707 emacs-lisp-intro.texi:13004
msgid "The forward motion @code{while} loop."
msgstr "El bucle @code{while} con modo hacia adelante."

#. type: chapter
#: emacs-lisp-intro.texi:709 emacs-lisp-intro.texi:13685
#, no-wrap
msgid "Counting: Repetition and Regexps"
msgstr "Contando: repetici@'on y regexps"

#. type: menuentry
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
msgid "Why Count Words::"
msgstr "Por qu@'e Contar Palabras::"

#. type: findex
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
#: emacs-lisp-intro.texi:13723 emacs-lisp-intro.texi:13725
#, no-wrap
msgid "@value{COUNT-WORDS}"
msgstr "@value{COUNT-WORDS}"

#. type: menuentry
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
msgid "Use a regexp, but find a problem."
msgstr "Usa un regexp, pero encuentra un problema."

#. type: findex
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
#: emacs-lisp-intro.texi:14177 emacs-lisp-intro.texi:14495
#, no-wrap
msgid "recursive-count-words"
msgstr "recursive-count-words"

#. type: menuentry
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
msgid "Start with case of no words in region."
msgstr "Empezar en caso de que no haya palabras en la regi@'on."

#. type: node
#: emacs-lisp-intro.texi:714 emacs-lisp-intro.texi:13699
#: emacs-lisp-intro.texi:14555
#, no-wrap
msgid "Counting Exercise"
msgstr "Ejercicio de Contar"

#. type: section
#: emacs-lisp-intro.texi:716 emacs-lisp-intro.texi:13724
#, no-wrap
msgid "The @code{@value{COUNT-WORDS}} Function"
msgstr "La funci@'on @code{@value{COUNT-WORDS}}"

#. type: node
#: emacs-lisp-intro.texi:719 emacs-lisp-intro.texi:13746
#: emacs-lisp-intro.texi:13749
#, no-wrap
msgid "Design @value{COUNT-WORDS}"
msgstr "Dise@~nar @value{COUNT-WORDS}"

#. type: menuentry
#: emacs-lisp-intro.texi:719 emacs-lisp-intro.texi:13746
msgid "The definition using a @code{while} loop."
msgstr "La definici@'on usando un bucle @code{while}."

#. type: node
#: emacs-lisp-intro.texi:719 emacs-lisp-intro.texi:13746
#: emacs-lisp-intro.texi:13925
#, no-wrap
msgid "Whitespace Bug"
msgstr "Error de espacio en blanco"

#. type: menuentry
#: emacs-lisp-intro.texi:719 emacs-lisp-intro.texi:13746
msgid "The Whitespace Bug in @code{@value{COUNT-WORDS}}."
msgstr "El error de espacio en blanco en @code{@value{COUNT-WORDS}}."

#. type: chapter
#: emacs-lisp-intro.texi:721 emacs-lisp-intro.texi:14563
#, no-wrap
msgid "Counting Words in a @code{defun}"
msgstr "Contando palabras en una @code{defun}"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Divide and Conquer::"
msgstr "Divide y vencer@'as::"

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:14633
#, no-wrap
msgid "Words and Symbols"
msgstr "Palabras y S@'{@dotless{i}}mbolos"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "What to count?"
msgstr "@questiondown{}Qu@'e contar?"

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:14687
#, no-wrap
msgid "Syntax"
msgstr "Sintaxis"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "What constitutes a word or symbol?"
msgstr "@questiondown{}Qu@'e constituye una palabra o s@'{@dotless{i}}mbolo?"

#. type: findex
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:14771 emacs-lisp-intro.texi:14887
#, no-wrap
msgid "count-words-in-defun"
msgstr "count-words-in-defun"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Very like @code{@value{COUNT-WORDS}}."
msgstr "Similar a @code{@value{COUNT-WORDS}}."

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:14965
#, no-wrap
msgid "Several defuns"
msgstr "Varias funciones"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Counting several defuns in a file."
msgstr "Contando varias funciones en un fichero."

#. type: cindex
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:15020 emacs-lisp-intro.texi:15021
#: emacs-lisp-intro.texi:15022
#, no-wrap
msgid "Find a File"
msgstr "Encontrar un fichero"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Do you want to look at a file?"
msgstr "@questiondown{}Quieres buscar en un fichero?"

#. type: findex
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:15103 emacs-lisp-intro.texi:15112
#, no-wrap
msgid "lengths-list-file"
msgstr "lengths-list-file"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "A list of the lengths of many definitions."
msgstr "Una lista de los tama@~nos de muchas definiciones."

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:15244
#, no-wrap
msgid "Several files"
msgstr "Varios ficheros"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Counting in definitions in different files."
msgstr "Contando en definiciones en diferentes ficheros."

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:15392
#, no-wrap
msgid "Several files recursively"
msgstr "Varios ficheros recursivamente"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Recursively counting in different files."
msgstr "Recursivamente contando en diferentes ficheros."

#. type: node
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
#: emacs-lisp-intro.texi:15475
#, no-wrap
msgid "Prepare the data"
msgstr "Preparar los datos"

#. type: menuentry
#: emacs-lisp-intro.texi:732 emacs-lisp-intro.texi:14593
msgid "Prepare the data for display in a graph."
msgstr "Preparar los datos para mostrarlos en un grafo."

#. type: section
#: emacs-lisp-intro.texi:734 emacs-lisp-intro.texi:15245
#, no-wrap
msgid "Count Words in @code{defuns} in Different Files"
msgstr "Contar palabras en @code{defuns} en diferentes ficheros"

#. type: findex
#: emacs-lisp-intro.texi:737 emacs-lisp-intro.texi:15258
#: emacs-lisp-intro.texi:15261 emacs-lisp-intro.texi:15297
#, no-wrap
msgid "lengths-list-many-files"
msgstr "lengths-list-many-files"

#. type: menuentry
#: emacs-lisp-intro.texi:737 emacs-lisp-intro.texi:15258
msgid "Return a list of the lengths of defuns."
msgstr "Devolver una lista de tama@~nos de funciones."

#. type: node
#: emacs-lisp-intro.texi:737 emacs-lisp-intro.texi:15258
#: emacs-lisp-intro.texi:15357
#, no-wrap
msgid "append"
msgstr "append"

#. type: menuentry
#: emacs-lisp-intro.texi:737 emacs-lisp-intro.texi:15258
msgid "Attach one list to another."
msgstr "Adjuntar una lista a otra."

#. type: section
#: emacs-lisp-intro.texi:739 emacs-lisp-intro.texi:15476
#, no-wrap
msgid "Prepare the Data for Display in a Graph"
msgstr "Preparar los datos para mostrarlos en un grafo"

#. type: menuentry
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
msgid "Data for Display in Detail::"
msgstr "Datos para mostrar en detalle::"

#. type: node
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
#: emacs-lisp-intro.texi:15517
#, no-wrap
msgid "Sorting"
msgstr "Ordenando"

#. type: menuentry
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
msgid "Sorting lists."
msgstr "Ordenando listas."

#. type: node
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
#: emacs-lisp-intro.texi:15596
#, no-wrap
msgid "Files List"
msgstr "Listar ficheros"

#. type: menuentry
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
msgid "Making a list of files."
msgstr "Creando una lista de ficheros."

#. type: subsection
#: emacs-lisp-intro.texi:744 emacs-lisp-intro.texi:15496
#: emacs-lisp-intro.texi:15857 emacs-lisp-intro.texi:15858
#, no-wrap
msgid "Counting function definitions"
msgstr "Contando definiciones de funci@'on"

#. type: menuentry
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
msgid "Columns of a graph::"
msgstr "Columnas de un grafo::"

#. type: findex
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
#: emacs-lisp-intro.texi:16566 emacs-lisp-intro.texi:16568
#, no-wrap
msgid "graph-body-print"
msgstr "graph-body-print"

#. type: menuentry
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
msgid "How to print the body of a graph."
msgstr "C@'omo imprimir el cuerpo de un grafo."

#. type: menuentry
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
msgid "recursive-graph-body-print::"
msgstr "recursive-graph-body-print::"

#. type: menuentry
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
msgid "Printed Axes::"
msgstr "Ejes Impresos::"

#. type: node
#: emacs-lisp-intro.texi:752 emacs-lisp-intro.texi:16191
#: emacs-lisp-intro.texi:16825
#, no-wrap
msgid "Line Graph Exercise"
msgstr "Ejercicio de L@'{@dotless{i}}nea de Grafo"

#. type: chapter
#: emacs-lisp-intro.texi:754 emacs-lisp-intro.texi:16831
#, no-wrap
msgid "Your @file{.emacs} File"
msgstr "Tu fichero @file{.emacs}"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Default Configuration::"
msgstr "Configuraci@'on por defecto::"

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:16909
#, no-wrap
msgid "Site-wide Init"
msgstr "Site-wide Init"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "You can write site-wide init files."
msgstr "Se puede escribir site-wide ficheros init."

#. type: findex
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:16955 emacs-lisp-intro.texi:16957
#, no-wrap
msgid "defcustom"
msgstr "defcustom"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Emacs will write code for you."
msgstr "Emacs escribir@'a c@'odigo para ti."

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17120
#, no-wrap
msgid "Beginning a .emacs File"
msgstr "Empezando un fichero .emacs"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "How to write a @code{.emacs file}."
msgstr "C@'omo escribir un @code{fichero .emacs}."

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17203
#, no-wrap
msgid "Text and Auto-fill"
msgstr "Texto y Autorelleno"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Automatically wrap lines."
msgstr "Corta l@'{@dotless{i}}neas autom@'aticamente."

#. type: section
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17325 emacs-lisp-intro.texi:17326
#, no-wrap
msgid "Mail Aliases"
msgstr "Alias de correo"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Use abbreviations for email addresses."
msgstr "Usar abreviaciones para direcciones de correo electr@'onico."

#. type: section
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17359 emacs-lisp-intro.texi:17360
#, no-wrap
msgid "Indent Tabs Mode"
msgstr "Indentar modo de tabulaciones"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Don't use tabs with @TeX{}"
msgstr "No usar tabulaciones con @TeX{}"

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17397
#, no-wrap
msgid "Keybindings"
msgstr "Atajos de teclado"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Create some personal keybindings."
msgstr "Crear algunos atajos de teclado personales."

#. type: cindex
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17510 emacs-lisp-intro.texi:17511
#: emacs-lisp-intro.texi:17512
#, no-wrap
msgid "Keymaps"
msgstr "Mapas de teclado"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "More about key binding."
msgstr "M@'as acerca de atajos de teclado."

#. type: section
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17578 emacs-lisp-intro.texi:17579
#, no-wrap
msgid "Loading Files"
msgstr "Cargando ficheros"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Load (i.e., evaluate) files automatically."
msgstr "Cargar (por ej. evaluar) ficheros autom@'aticamente."

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17670
#, no-wrap
msgid "Autoload"
msgstr "Autocarga"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Make functions available."
msgstr "Crear funciones disponibles."

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17739
#, no-wrap
msgid "Simple Extension"
msgstr "Extensi@'on simple"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Define a function; bind it to a key."
msgstr "Definir una funci@'on; enlazarla a una tecla."

#. type: section
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:17851 emacs-lisp-intro.texi:17852
#, no-wrap
msgid "X11 Colors"
msgstr "Colores X11"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Colors in X."
msgstr "Colores en X."

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "Miscellaneous::"
msgstr "Miscel@'anea::"

#. type: node
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
#: emacs-lisp-intro.texi:18121
#, no-wrap
msgid "Mode Line"
msgstr "Mode Line"

#. type: menuentry
#: emacs-lisp-intro.texi:770 emacs-lisp-intro.texi:16860
msgid "How to customize your mode line."
msgstr "C@'omo personalizar tu mode line."

#. type: findex
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
#: emacs-lisp-intro.texi:18304 emacs-lisp-intro.texi:18305
#: emacs-lisp-intro.texi:18306
#, no-wrap
msgid "debug"
msgstr "depurar"

#. type: menuentry
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
msgid "How to use the built-in debugger."
msgstr "C@'omo usar el depurador construido."

#. type: findex
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
#: emacs-lisp-intro.texi:18431 emacs-lisp-intro.texi:18432
#: emacs-lisp-intro.texi:18433
#, no-wrap
msgid "debug-on-entry"
msgstr "debug-on-entry"

#. type: menuentry
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
msgid "Start debugging when you call a function."
msgstr "Empezar depurando cuando se llama a una funci@'on."

#. type: findex
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
#: emacs-lisp-intro.texi:18570 emacs-lisp-intro.texi:18576
#, no-wrap
msgid "debug-on-quit"
msgstr "debug-on-quit"

#. type: menuentry
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
msgid "Start debugging when you quit with @kbd{C-g}."
msgstr "Empezar depurando cuando se sale con @kbd{C-g}."

#. type: findex
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
#: emacs-lisp-intro.texi:18602 emacs-lisp-intro.texi:18605
#, no-wrap
msgid "edebug"
msgstr "edebug"

#. type: menuentry
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
msgid "How to use Edebug, a source level debugger."
msgstr "C@'omo usar Edebug, un depurador a nivel de fuentes."

#. type: section
#: emacs-lisp-intro.texi:778 emacs-lisp-intro.texi:18302
#: emacs-lisp-intro.texi:18745 emacs-lisp-intro.texi:18746
#, no-wrap
msgid "Debugging Exercises"
msgstr "Ejercicios de depuraci@'on"

#. type: appendix
#: emacs-lisp-intro.texi:780 emacs-lisp-intro.texi:19008
#, no-wrap
msgid "Handling the Kill Ring"
msgstr "Manejando el anillo de la muerte"

#. type: menuentry
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
msgid "What the Kill Ring Does::"
msgstr "Qu@'e hace el anillo de la muerte::"

#. type: menuentry
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
msgid "current-kill::"
msgstr "current-kill::"

#. type: findex
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:10037
#: emacs-lisp-intro.texi:19027 emacs-lisp-intro.texi:19452
#: emacs-lisp-intro.texi:19453 emacs-lisp-intro.texi:19454
#, no-wrap
msgid "yank"
msgstr "pegar"

#. type: menuentry
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
msgid "Paste a copy of a clipped element."
msgstr "Pegar una copia de un elemento ya cortado."

#. type: findex
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
#: emacs-lisp-intro.texi:19537 emacs-lisp-intro.texi:19538
#: emacs-lisp-intro.texi:19539
#, no-wrap
msgid "yank-pop"
msgstr "yank-pop"

#. type: menuentry
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
msgid "Insert element pointed to."
msgstr "Insertar elemento apuntado."

#. type: node
#: emacs-lisp-intro.texi:786 emacs-lisp-intro.texi:19027
#: emacs-lisp-intro.texi:19607
#, no-wrap
msgid "ring file"
msgstr "fichero anillo"

#. type: appendixsec
#: emacs-lisp-intro.texi:788 emacs-lisp-intro.texi:19105
#, no-wrap
msgid "The @code{current-kill} Function"
msgstr "La funci@'on @code{current-kill}"

#. type: menuentry
#: emacs-lisp-intro.texi:791 emacs-lisp-intro.texi:19119
msgid "Code for current-kill::"
msgstr "C@'odigo para current-kill::"

#. type: node
#: emacs-lisp-intro.texi:791 emacs-lisp-intro.texi:19119
#: emacs-lisp-intro.texi:19183
#, no-wrap
msgid "Understanding current-kill"
msgstr "Comprendiendo current-kill"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:793 emacs-lisp-intro.texi:19184
#, no-wrap
msgid "@code{current-kill} in Outline"
msgstr "@code{current-kill} en outline"

#. type: menuentry
#: emacs-lisp-intro.texi:797 emacs-lisp-intro.texi:19207
msgid "Body of current-kill::"
msgstr "Cuerpo de current-kill::"

#. type: node
#: emacs-lisp-intro.texi:797 emacs-lisp-intro.texi:19207
#: emacs-lisp-intro.texi:19293
#, no-wrap
msgid "Digression concerning error"
msgstr "Disgresi@'on concerniente de error"

#. type: menuentry
#: emacs-lisp-intro.texi:797 emacs-lisp-intro.texi:19207
msgid "How to mislead humans, but not computers."
msgstr "C@'omo confundir humanos, pero no ordenadores."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:797 emacs-lisp-intro.texi:19207
#: emacs-lisp-intro.texi:19315 emacs-lisp-intro.texi:19316
#, no-wrap
msgid "Determining the Element"
msgstr "Determinando el elemento"

#. type: appendix
#: emacs-lisp-intro.texi:799 emacs-lisp-intro.texi:19617
#, no-wrap
msgid "A Graph with Labeled Axes"
msgstr "Un grafo con ejes etiquetados"

#. type: menuentry
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
msgid "Labeled Example::"
msgstr "Ejemplo etiquetado::"

#. type: node
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
#: emacs-lisp-intro.texi:19721
#, no-wrap
msgid "print-graph Varlist"
msgstr "print-graph Varlist"

#. type: menuentry
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
msgid "@code{let} expression in @code{print-graph}."
msgstr "Expresi@'on @code{let} en @code{print-graph}."

#. type: findex
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
#: emacs-lisp-intro.texi:19762 emacs-lisp-intro.texi:20147
#, no-wrap
msgid "print-Y-axis"
msgstr "print-Y-axis"

#. type: menuentry
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
msgid "Print a label for the vertical axis."
msgstr "Imprimir una etiqueta para los ejes verticales."

#. type: findex
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
#: emacs-lisp-intro.texi:20217 emacs-lisp-intro.texi:20479
#, no-wrap
msgid "print-X-axis"
msgstr "print-X-axis"

#. type: menuentry
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
msgid "Print a horizontal label."
msgstr "Imprimir una etiqueta horizontal."

#. type: node
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
#: emacs-lisp-intro.texi:20568
#, no-wrap
msgid "Print Whole Graph"
msgstr "Imprimir Grafo Entero"

#. type: menuentry
#: emacs-lisp-intro.texi:805 emacs-lisp-intro.texi:19631
msgid "The function to print a complete graph."
msgstr "La funci@'on para imprimir un grafo completo."

#. type: appendixsec
#: emacs-lisp-intro.texi:807 emacs-lisp-intro.texi:19763
#, no-wrap
msgid "The @code{print-Y-axis} Function"
msgstr "La funci@'on @code{print-Y-axis}"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "print-Y-axis in Detail::"
msgstr "print-Y-axis en Detalle::"

#. type: node
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
#: emacs-lisp-intro.texi:19817
#, no-wrap
msgid "Height of label"
msgstr "Altura de etiqueta"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "What height for the Y axis?"
msgstr "@questiondown{}Qu@'e altura para el eje Y?"

#. type: node
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
#: emacs-lisp-intro.texi:19854
#, no-wrap
msgid "Compute a Remainder"
msgstr "Calcular un resto"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "How to compute the remainder of a division."
msgstr "C@'omo calcular el resto de una divisi@'on."

#. type: node
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
#: emacs-lisp-intro.texi:19988
#, no-wrap
msgid "Y Axis Element"
msgstr "Elemento del Eje Y"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "Construct a line for the Y axis."
msgstr "Construir una l@'{@dotless{i}}nea para el eje Y."

#. type: findex
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
#: emacs-lisp-intro.texi:20094 emacs-lisp-intro.texi:20101
#, no-wrap
msgid "Y-axis-column"
msgstr "Y-axis-column"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "Generate a list of Y axis labels."
msgstr "Generar una lista de etiquetas del eje Y."

#. type: node
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
#: emacs-lisp-intro.texi:20141
#, no-wrap
msgid "print-Y-axis Penultimate"
msgstr "Pen@'ultimo print-Y-axis"

#. type: menuentry
#: emacs-lisp-intro.texi:814 emacs-lisp-intro.texi:19798
msgid "A not quite final version."
msgstr "Una versi@'on no muy final."

#. type: appendixsec
#: emacs-lisp-intro.texi:816 emacs-lisp-intro.texi:20218
#, no-wrap
msgid "The @code{print-X-axis} Function"
msgstr "La funci@'on @code{print-X-axis}"

#. type: node
#: emacs-lisp-intro.texi:819 emacs-lisp-intro.texi:20251
#: emacs-lisp-intro.texi:20254
#, no-wrap
msgid "Similarities differences"
msgstr "Diferencias similares"

#. type: menuentry
#: emacs-lisp-intro.texi:819 emacs-lisp-intro.texi:20251
msgid "Much like @code{print-Y-axis}, but not exactly."
msgstr "Mucho como @code{print-Y-axis}, pero no exactamente."

#. type: appendixsubsec
#: emacs-lisp-intro.texi:819 emacs-lisp-intro.texi:20251
#: emacs-lisp-intro.texi:20279 emacs-lisp-intro.texi:20280
#, no-wrap
msgid "X Axis Tic Marks"
msgstr "Eje X marca tic"

#. type: menuentry
#: emacs-lisp-intro.texi:819 emacs-lisp-intro.texi:20251
msgid "Create tic marks for the horizontal axis."
msgstr "Crear marcas de tic para los ejes horizontales."

#. type: appendixsec
#: emacs-lisp-intro.texi:821 emacs-lisp-intro.texi:20569
#, no-wrap
msgid "Printing the Whole Graph"
msgstr "Imprimiendo el grafo completo"

#. type: node
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:20608
#, no-wrap
msgid "The final version"
msgstr "La versi@'on final"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "A few changes."
msgstr "Unos pocos cambios"

#. type: node
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:20759
#, no-wrap
msgid "Test print-graph"
msgstr "Testear print-graph"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "Run a short test."
msgstr "Ejecutar un r@'apido test."

#. type: node
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:20849
#, no-wrap
msgid "Graphing words in defuns"
msgstr "Graficar palabras en funciones"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "Executing the final code."
msgstr "Ejecutando el c@'odigo final."

#. type: findex
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:20937 emacs-lisp-intro.texi:20940
#, no-wrap
msgid "lambda"
msgstr "lambda"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "How to write an anonymous function."
msgstr "C@'omo escribir una funci@'on an@'onima."

#. type: findex
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:21103 emacs-lisp-intro.texi:21105
#, no-wrap
msgid "mapcar"
msgstr "mapcar"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "Apply a function to elements of a list."
msgstr "Aplicar una funci@'on a elementos de una lista."

#. type: node
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:21187
#, no-wrap
msgid "Another Bug"
msgstr "Otro Error"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "Yet another bug @dots{} most insidious."
msgstr "Todav@'{@dotless{i}}a otro error @dots{} m@'as insidioso."

#. type: node
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
#: emacs-lisp-intro.texi:21884
#, no-wrap
msgid "Final printed graph"
msgstr "Grafo impreso final"

#. type: menuentry
#: emacs-lisp-intro.texi:829 emacs-lisp-intro.texi:20605
msgid "The graph itself!"
msgstr "@exclamdown{}El grafo en s@'{@dotless{i}}!"

#. type: Plain text
#: emacs-lisp-intro.texi:842
msgid ""
"Most of the GNU Emacs integrated environment is written in the programming "
"language called Emacs Lisp.  The code written in this programming language "
"is the software---the sets of instructions---that tell the computer what to "
"do when you give it commands.  Emacs is designed so that you can write new "
"code in Emacs Lisp and easily install it as an extension to the editor."
msgstr ""
"La mayor@'{@dotless{i}}a del entorno integrado GNU Emacs est@'a\n"
"escrito en el lenguaje de programaci@'on llamado Emacs Lisp. El\n"
"c@'odigo escrito en este lenguaje de programaci@'on es el\n"
"software---el conjunto de instrucciones---que cuenta al ordenador qu@'e\n"
"hacer cuando tu le das comandos. Emacs est@'a dise@~nado\n"
"de forma que se puede escribir nuevo c@'odigo en Emacs Lisp\n"
"y f@'acilmente instalarlo como una extensi@'on al editor."

#. type: Plain text
#: emacs-lisp-intro.texi:851
msgid ""
"(GNU Emacs is sometimes called an ``extensible editor'', but it does much "
"more than provide editing capabilities.  It is better to refer to Emacs as "
"an ``extensible computing environment''.  However, that phrase is quite a "
"mouthful.  It is easier to refer to Emacs simply as an editor.  Moreover, "
"everything you do in Emacs---find the Mayan date and phases of the moon, "
"simplify polynomials, debug code, manage files, read letters, write books---"
"all these activities are kinds of editing in the most general sense of the "
"word.)"
msgstr ""
"(GNU Emacs se define muchas veces como un ``editor extensible'', pero\n"
"hace mucho m@'as que proporcionar capacidad de edici@'on. Es mejor\n"
"referirse a Emacs como un ``entorno de computaci@'on extensible''. Sin\n"
"embargo, esta frase es un poco pretenciosa. Es m@'as f@'acil referirse\n"
"a Emacs simplemente como un editor. De hecho, cada cosa que se hace en\n"
"Emacs---encontrar la fecha Maya y fases de la luna, simplificar\n"
"polinomios, depurar c@'odigo, administrar ficheros, leer cartas,\n"
"escribir libros---todas estas actividades son maneras de editar en un\n"
"sentido amplio de la palabra.)"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:863
#, no-wrap
msgid "Why Study Emacs Lisp?"
msgstr "@questiondown{}Por qu@'e estudiar Emacs Lisp?"

#. type: Plain text
#: emacs-lisp-intro.texi:869
msgid ""
"Although Emacs Lisp is usually thought of in association only with Emacs, it "
"is a full computer programming language.  You can use Emacs Lisp as you "
"would any other programming language."
msgstr ""
"Aunque Emacs Lisp normalmente se asocia solo con Emacs, es un lenguaje\n"
"de programaci@'on completo. Se puede usar Emacs Lisp del mismo modo\n"
"que con cualquier otro lenguaje de programaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:875
msgid ""
"Perhaps you want to understand programming; perhaps you want to extend "
"Emacs; or perhaps you want to become a programmer.  This introduction to "
"Emacs Lisp is designed to get you started: to guide you in learning the "
"fundamentals of programming, and more importantly, to show you how you can "
"teach yourself to go further."
msgstr ""
"Quiz@'as se quiere comprender la programaci@'on; quiz@'as se quiere\n"
"extender Emacs; o quiz@'as se quiere llegar a ser un programador. Esta\n"
"introducci@'on a Emacs Lisp est@'a dise@~nada para ayudar a empezar en\n"
"todo esto: para guiarse en el aprendizaje de los fundamentos de\n"
"programaci@'on, y de manera m@'as importante, para ense@~nar como uno\n"
"mismo puede ir m@'as all@'a."

#. type: Plain text
#: emacs-lisp-intro.texi:889
msgid ""
"All through this document, you will see little sample programs you can run "
"inside of Emacs.  If you read this document in Info inside of GNU Emacs, you "
"can run the programs as they appear.  (This is easy to do and is explained "
"when the examples are presented.)  Alternatively, you can read this "
"introduction as a printed book while sitting beside a computer running "
"Emacs.  (This is what I like to do; I like printed books.)  If you don't "
"have a running Emacs beside you, you can still read this book, but in this "
"case, it is best to treat it as a novel or as a travel guide to a country "
"not yet visited: interesting, but not the same as being there."
msgstr ""
"A trav@'es de este libro, se ver@'an peque@~nos programas de ejemplo\n"
"que se pueden ejecutar dentro de Emacs. Si se lee este documento en\n"
"Info dentro de GNU Emacs, se pueden ejecutar los programas tal y como\n"
"aparecen. (Esto es f@'acil de hacer y se explica cuando los ejemplos\n"
"se presentan). Alternativamente, se puede leer esta introducci@'on\n"
"como un libro impreso mientras se est@'a sentando con un ordenador\n"
"ejecutando Emacs. (Esto es lo que me gusta hacer; me gustan los libros\n"
"impresos.) Si no se est@'a ejecutando Emacs, todav@'{@dotless{i}}a se\n"
"puede leer este libro, pero en este caso, lo mejor es tratarlo como\n"
"una novela, o como una gu@'{@dotless{i}}a de v@'{i}aje a un pa@'{i}s a@'{u}n\n"
"no visitado: interesante, pero no es lo mismo\n"
"que estar all@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:900
msgid ""
"Much of this introduction is dedicated to walkthroughs or guided tours of "
"code used in GNU Emacs.  These tours are designed for two purposes: first, "
"to give you familiarity with real, working code (code you use every day); "
"and, second, to give you familiarity with the way Emacs works.  It is "
"interesting to see how a working environment is implemented.  Also, I hope "
"that you will pick up the habit of browsing through source code.  You can "
"learn from it and mine it for ideas.  Having GNU Emacs is like having a "
"dragon's cave of treasures."
msgstr ""
"Gran parte de esta introducci@'on se dedica a paseos guiados de\n"
"c@'odigo usado en GNU Emacs. Estos paseos est@'an dise@~nados para dos\n"
"prop@'ositos: primero, familiarizarse con c@'odigo real que funciona\n"
"(c@'odigo que se usa cada d@'{@dotless{i}}a); y, segundo,\n"
"familiarizarse con c@'omo funciona Emacs. Es interesante ver c@'omo se\n"
"implementa un entorno completamente operativo. Tambi@'en, espero que\n"
"se adquiera el h@'abito de navegar a trav@'es del c@'odigo fuente. Se\n"
"puede aprender mucho comparando c@'odigo de otros con el propio,\n"
"ganando nuevas ideas. Tener GNU Emacs es como tener la cueva del\n"
"drag@'on de los tesoros."

#. type: Plain text
#: emacs-lisp-intro.texi:910
msgid ""
"In addition to learning about Emacs as an editor and Emacs Lisp as a "
"programming language, the examples and guided tours will give you an "
"opportunity to get acquainted with Emacs as a Lisp programming environment.  "
"GNU Emacs supports programming and provides tools that you will want to "
"become comfortable using, such as @kbd{M-.} (the key which invokes the "
"@code{find-tag} command).  You will also learn about buffers and other "
"objects that are part of the environment.  Learning about these features of "
"Emacs is like learning new routes around your home town."
msgstr ""
"Adem@'as de aprender acerca de Emacs como editor y Emacs Lisp como\n"
"lenguaje de programaci@'on, los ejemplos y visitas guiadas le \n"
"dar@'an una oportunidad para familiarizarse con Emacs como un\n"
"entorno de programaci@'on Lisp. GNU Emacs soporta programaci@'on y\n"
"provee herramientas que llegar@'an a usarse c@'omodamente, \n"
"como @kbd{M-.} (la clave que invoca el comando\n"
"@code{find-tag}). Tambi@'en aprendera sobre b@'uffers y otros\n"
"objetos que forman parte del entorno. Aprender estas funcionalidades de\n"
"Emacs es como aprender nuevas rutas alrededor de tu hogar."

#. type: Plain text
#: emacs-lisp-intro.texi:925
msgid ""
"Finally, I hope to convey some of the skills for using Emacs to learn "
"aspects of programming that you don't know.  You can often use Emacs to help "
"you understand what puzzles you or to find out how to do something new.  "
"This self-reliance is not only a pleasure, but an advantage."
msgstr ""
"Finalmente, espero poder transmitir algunas habilidades de Emacs\n"
"para aprender aspectos de programaci@'on que no se conocen. Con\n"
"frecuencia se puede usar Emacs para ayudar a comprender qu@'e puzzles\n"
"encontrar o como hacer alguna cosa nueva. Este auto-descubrimiento no es\n"
"solo un placer, tambi@'en es una ventaja."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:927
#, no-wrap
msgid "For Whom This is Written"
msgstr "Para quien est@'a esto escrito"

#. type: Plain text
#: emacs-lisp-intro.texi:933
msgid ""
"This text is written as an elementary introduction for people who are not "
"programmers.  If you are a programmer, you may not be satisfied with this "
"primer.  The reason is that you may have become expert at reading reference "
"manuals and be put off by the way this text is organized."
msgstr ""
"Este texto est@'a escrito como una introducci@'on elemental para\n"
"personas que no son programadoras. Quien ya programa, puede no estar\n"
"satisfecho con este libro. La raz@'on es que un programador puede\n"
"tener que convertirse en experto leyendo manuales de referencia y este\n"
"texto no est@'a organizado como un manual de referencia."

#. type: Plain text
#: emacs-lisp-intro.texi:935
msgid "An expert programmer who reviewed this text said to me:"
msgstr "Un programador experto que revis@'o este texto me dijo:"

#. type: i{#1}
#: emacs-lisp-intro.texi:939
msgid ""
"I prefer to learn from reference manuals.  I ``dive into'' each paragraph, "
"and ``come up for air'' between paragraphs."
msgstr ""
"Prefiero aprender desde manuales de referencia. Yo ``me sumerjo'' en\n"
"cada p@'arrafo y ``subo a por aire'' entre p@'arrafos."

#. type: i{#1}
#: emacs-lisp-intro.texi:946
msgid ""
"When I get to the end of a paragraph, I assume that that subject is done, "
"finished, that I know everything I need (with the possible exception of the "
"case when the next paragraph starts talking about it in more detail).  I "
"expect that a well written reference manual will not have a lot of "
"redundancy, and that it will have excellent pointers to the (one) place "
"where the information I want is."
msgstr ""
"Cuando llego al fin de un p@'arrafo, asumo que este asunto est@'a\n"
"hecho, finalizado, que conozco cada cosa que necesito (con la posible\n"
"excepci@'on del caso en el que el siguiente p@'arrafo empiece hablando\n"
"acerca de eso mismo en m@'as detalle). Yo espero que un manual de\n"
"referencia bien escrito no tendr@'a un mont@'on de redundancia, y\n"
"tendr@'a excelentes punteros a (un) lugar donde est@'a la\n"
"informaci@'on que quiero."

#. type: Plain text
#: emacs-lisp-intro.texi:949
msgid "This introduction is not written for this person!"
msgstr "@exclamdown{}Esta introducci@'on no est@'a escrita para esta persona!"

#. type: Plain text
#: emacs-lisp-intro.texi:953
msgid ""
"Firstly, I try to say everything at least three times: first, to introduce "
"it; second, to show it in context; and third, to show it in a different "
"context, or to review it."
msgstr ""
"Primero, intento decir cada cosa al menos tres veces: primero,\n"
"introducirlo; segundo, mostrarlo en contexto; y tercero, mostrarlo en\n"
"un contexto diferente, o revisarlo."

#. type: Plain text
#: emacs-lisp-intro.texi:960
msgid ""
"Secondly, I hardly ever put all the information about a subject in one "
"place, much less in one paragraph.  To my way of thinking, that imposes too "
"heavy a burden on the reader.  Instead I try to explain only what you need "
"to know at the time.  (Sometimes I include a little extra information so you "
"won't be surprised later when the additional information is formally "
"introduced.)"
msgstr ""
"Segundo, yo no siempre pongo toda la informaci@'on acerca de un asunto\n"
"en un mismo lugar, ni mucho menos en un p@'arrafo. Desde mi punto de\n"
"vista, se necesita una carga bastante fuerte en el lector. En vez de\n"
"eso intento explicar solo lo que se necesita saber en el\n"
"momento. (Algunas veces incluyo una peque@~na informaci@'on extra,\n"
"para que no haya sorpresas m@'as tarde cuando la informaci@'on\n"
"adicional se presente formalmente.)"

#. type: Plain text
#: emacs-lisp-intro.texi:966
msgid ""
"When you read this text, you are not expected to learn everything the first "
"time.  Frequently, you need only make, as it were, a `nodding acquaintance' "
"with some of the items mentioned.  My hope is that I have structured the "
"text and given you enough hints that you will be alert to what is important, "
"and concentrate on it."
msgstr ""
"Cuando uno lee este texto, no espera aprender todo la primera\n"
"vez. Frecuentemente, solo necesita hacer un `reconocimiento' con\n"
"alguno de los elementos mencionados. Mi esperanza es haber\n"
"estructurado el texto y dar suficientes indicios que dejar@'an alerta\n"
"de lo que es importante y concentrarse en ellos."

#. type: Plain text
#: emacs-lisp-intro.texi:971
msgid ""
"You will need to ``dive into'' some paragraphs; there is no other way to "
"read them.  But I have tried to keep down the number of such paragraphs.  "
"This book is intended as an approachable hill, rather than as a daunting "
"mountain."
msgstr ""
"Es necesario ``sumergirse'' en algunos p@'arrafos; no hay otro modo de\n"
"leerlos. Pero yo he intentado guardar el n@'umero de tales\n"
"p@'arrafos. Este libro pretende ser como una colina asequible, en vez\n"
"de una monta@~na abrumadora."

#. type: Plain text
#: emacs-lisp-intro.texi:974
msgid ""
"This introduction to @cite{Programming in Emacs Lisp} has a companion "
"document,"
msgstr ""
"Esta introducci@'on de @cite{Programaci@'on en Emacs Lisp} viene\n"
"acompa@~nada de un documento complementario."

#. type: ifnotinfo
#: emacs-lisp-intro.texi:976 emacs-lisp-intro.texi:18809
msgid "@cite{The GNU Emacs Lisp Reference Manual}."
msgstr "@cite{El Manual de Referencia de GNU Emacs}."

#. type: ifinfo
#: emacs-lisp-intro.texi:980 emacs-lisp-intro.texi:18813
msgid ""
"@ref{Top, , The GNU Emacs Lisp Reference Manual, elisp, The GNU Emacs Lisp "
"Reference Manual}."
msgstr ""
"@ref{Arriba, , El Manual de Referencia de GNU Emacs Lisp, El Manual de\n"
"Referencia de GNU Emacs Lisp}."

#. type: Plain text
#: emacs-lisp-intro.texi:987
msgid ""
"The reference manual has more detail than this introduction.  In the "
"reference manual, all the information about one topic is concentrated in one "
"place.  You should turn to it if you are like the programmer quoted above.  "
"And, of course, after you have read this @cite{Introduction}, you will find "
"the @cite{Reference Manual} useful when you are writing your own programs."
msgstr ""
"El manual de referencia tiene m@'as detalles que esta\n"
"introducci@'on. En el manual de referencia, toda la informaci@'on\n"
"sobre un asunto est@'a concentrada en un lugar. Se debe cambiar si es\n"
"como el programador citado arriba. Y, por supuesto, despu@'es de haber\n"
"leido esta @cite{Introducci@'on}, ser@'a muy @'util consultar el\n"
"@cite{Manual de Referencia} al escribir programas propios."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:988 emacs-lisp-intro.texi:989
#, no-wrap
msgid "Lisp History"
msgstr "Historia de Lisp"

#. type: cindex
#: emacs-lisp-intro.texi:990
#, no-wrap
msgid "Lisp history"
msgstr "Historia de Lisp"

#. type: Plain text
#: emacs-lisp-intro.texi:996
msgid ""
"Lisp was first developed in the late 1950s at the Massachusetts Institute of "
"Technology for research in artificial intelligence.  The great power of the "
"Lisp language makes it superior for other purposes as well, such as writing "
"editor commands and integrated environments."
msgstr ""
"Lisp fu@'e originariamente desarrollado en los 50 en el Instituto\n"
"Tecnol@'ogico de Massachusetts para investigar en inteligencia\n"
"artificial. El gran poder del lenguaje Lisp lo hace superior para\n"
"otros prop@'ositos tambi@'en, tal como escribir comandos de edici@'on y\n"
"entornos integrados."

#. type: cindex
#: emacs-lisp-intro.texi:997
#, no-wrap
msgid "Maclisp"
msgstr "Maclisp"

#. type: cindex
#: emacs-lisp-intro.texi:998
#, no-wrap
msgid "Common Lisp"
msgstr "Common Lisp"

#. type: Plain text
#: emacs-lisp-intro.texi:1004
msgid ""
"GNU Emacs Lisp is largely inspired by Maclisp, which was written at MIT in "
"the 1960s.  It is somewhat inspired by Common Lisp, which became a standard "
"in the 1980s.  However, Emacs Lisp is much simpler than Common Lisp.  (The "
"standard Emacs distribution contains an optional extensions file, @file{cl."
"el}, that adds many Common Lisp features to Emacs Lisp.)"
msgstr ""
"GNU Emacs Lisp est@'a fuertemente inspirado en Maclisp, que est@'a\n"
"escrito en el MIT en los sesenta. Est@'a en cierto modo inspirado en\n"
"Common Lisp, que llega a ser un est@'andar en los 80. Sin embargo,\n"
"Emacs Lisp es mucho m@'as simple que Common Lisp. (La distribuci@'on\n"
"est@'andar de Emacs contiene un fichero de extensiones opcional,\n"
"@file{cl.el}, que a@~nade muchas funcionalidades a Emacs Lisp.)"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:1006
#, no-wrap
msgid "A Note for Novices"
msgstr "Una nota para principiantes"

#. type: Plain text
#: emacs-lisp-intro.texi:1014
msgid ""
"If you don't know GNU Emacs, you can still read this document profitably.  "
"However, I recommend you learn Emacs, if only to learn to move around your "
"computer screen.  You can teach yourself how to use Emacs with the on-line "
"tutorial.  To use it, type @kbd{C-h t}.  (This means you press and release "
"the @key{CTRL} key and the @kbd{h} at the same time, and then press and "
"release @kbd{t}.)"
msgstr ""
"Aunque no se conozca GNU Emacs, este documento puede resultar\n"
"@'util. Sin embargo, es mejor aprender Emacs, al menos aprender a\n"
"moverse alrededor de la pantalla del ordenador. Uno puede aprender de\n"
"manera autodidacta c@'omo usar Emacs con el tutorial on-line. Para\n"
"usarlo, se debe escribir @kbd{C-h t}. (Esto significa que se presione\n"
"la tecla @key{CTRL} y la @kbd{h} al mismo tiempo, y despu@'es se\n"
"presiona @kbd{t})."

#. type: Plain text
#: emacs-lisp-intro.texi:1034
msgid ""
"Also, I often refer to one of Emacs's standard commands by listing the keys "
"which you press to invoke the command and then giving the name of the "
"command in parentheses, like this: @kbd{M-C-\\} (@code{indent-region}).  "
"What this means is that the @code{indent-region} command is customarily "
"invoked by typing @kbd{M-C-\\}.  (You can, if you wish, change the keys that "
"are typed to invoke the command; this is called @dfn{rebinding}.  "
"@xref{Keymaps, , Keymaps}.)  The abbreviation @kbd{M-C-\\} means that you "
"type your @key{META} key, @key{CTRL} key and @key{\\} key all at the same "
"time.  (On many modern keyboards the @key{META} key is labeled @key{ALT}.)  "
"Sometimes a combination like this is called a keychord, since it is similar "
"to the way you play a chord on a piano.  If your keyboard does not have a "
"@key{META} key, the @key{ESC} key prefix is used in place of it.  In this "
"case, @kbd{M-C-\\} means that you press and release your @key{ESC} key and "
"then type the @key{CTRL} key and the @key{\\} key at the same time.  But "
"usually @kbd{M-C-\\} means press the @key{CTRL} key along with the key that "
"is labeled @key{ALT} and, at the same time, press the @key{\\} key."
msgstr ""
"Con frecuencia, tambi@'en aludo a uno de los comandos de Emacs\n"
"est@'andar listando las teclas que se presionan para invocar el\n"
"comando y, luego dar el nombre del comando entre par@'entesis, \n"
"asi: @kbd{M-C-\\} (@code{indent-region}). Esto significa invocar el\n"
"comando @code{indent-region} presionando @kbd{M-C-\\}.(Si lo desea, se pueden\n"
"cambiar las teclas que son escritas para invocar el comando; esto se\n"
"llama @dfn{rebinding}. @xref{Mapas de teclado, , Mapas de Teclado}.)\n"
"La abreviaci@'on @kbd{M-C-\\} significa que se presiona la tecla\n"
"@key{META}, @key{CTRL}, y @key{\\} todo al mismo tiempo. (En muchos\n"
"teclados modernos la tecla @key{META} es etiquetada con @key{ALT}.)\n"
"Algunas veces una combinaci@'on como esta se llama @emph{keychord},\n"
"puesto que es similar a tocar un acorde en un piano. Si el teclado no\n"
"tiene una tecla @key{META}, en su lugar se usa la tecla @key{ESC}\n"
"como prefijo. En este caso @kbd{M-C-\\} significa que se presiona y libera @key{ESC}\n"
"y luego presiona la tecla @key{CTRL} y la tecla @key{\\} al mismo tiempo. Pero\n"
"normalmente @kbd{M-C-\\} significa presionar la tecla @key{CTRL} junto\n"
"a la tecla que est@'a etiquetada @key{ALT} y, al mismo tiempo, \n"
"presionar la tecla @key{\\}."

#. type: Plain text
#: emacs-lisp-intro.texi:1043
msgid ""
"In addition to typing a lone keychord, you can prefix what you type with "
"@kbd{C-u}, which is called the `universal argument'.  The @kbd{C-u} keychord "
"passes an argument to the subsequent command.  Thus, to indent a region of "
"plain text by 6 spaces, mark the region, and then type @w{@kbd{C-u 6 M-C-"
"\\}}.  (If you do not specify a number, Emacs either passes the number 4 to "
"the command or otherwise runs the command differently than it would "
"otherwise.)  @xref{Arguments, , Numeric Arguments, emacs, The GNU Emacs "
"Manual}."
msgstr ""
"Adem@'as de pulsar una sola combinaci@'on de teclas, se puede\n"
"prefijar lo que se escribe con @kbd{C-u}, que es llamado el `argumento\n"
"universal'. El atajo @kbd{C-u} pasa a ser un argumento para el comando\n"
"subsiguiente. De este modo, para indentar una regi@'on de texto plano\n"
"a 6 espacios, se marca la regi@'on, y entonces se presiona @w{@kbd{C-u\n"
"6 M-C-\\}}. (Si no se especifica un n@'umero, Emacs pasa el n@'umero 4\n"
"al comando o de otra manera ejecuta el comando de manera\n"
"diferente). @xref{Argumentos, , Argumentos Num@'ericos, emacs, El\n"
"Manual de GNU Emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:1047
msgid ""
"If you are reading this in Info using GNU Emacs, you can read through this "
"whole document just by pressing the space bar, @key{SPC}.  (To learn about "
"Info, type @kbd{C-h i} and then select Info.)"
msgstr ""
"Si se est@'a leyendo esto en Info usando GNU Emacs, se puede avanzar a\n"
"trav@'es de este documento completo solo presionando la barra de espacio,\n"
"@key{SPC}. (Para aprender acerca de Info, presiona @kbd{C-h i} y\n"
"luego selecciona Info.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1051
msgid ""
"A note on terminology: when I use the word Lisp alone, I often am referring "
"to the various dialects of Lisp in general, but when I speak of Emacs Lisp, "
"I am referring to GNU Emacs Lisp in particular."
msgstr ""
"Una nota en terminolog@'{@dotless{i}}a: cuando uso la palabra Lisp\n"
"sola, con frecuencia me estoy refiriendo a los dialectos de Lisp en\n"
"general, pero cuando hablo de Emacs Lisp, me estoy refiriendo a\n"
"GNU Emacs Lisp en particular."

#. type: Plain text
#: emacs-lisp-intro.texi:1061
msgid ""
"My thanks to all who helped me with this book.  My especial thanks to @r{Jim "
"Blandy}, @r{Noah Friedman}, @w{Jim Kingdon}, @r{Roland McGrath}, @w{Frank "
"Ritter}, @w{Randy Smith}, @w{Richard M.  Stallman}, and @w{Melissa "
"Weisshaus}.  My thanks also go to both @w{Philip Johnson} and @w{David "
"Stampe} for their patient encouragement.  My mistakes are my own."
msgstr ""
"Estoy agradecido a todas las personas que me ayudaron con este\n"
"libro. Especialmente agradecido a @r{Jim Blandy}, @r{Noah Friedman},\n"
"@w{Jim Kingdon}, @r{Roland McGrath}, @w{Frank Ritter}, @w{Randy\n"
"Smith}, @w{Richard M.  Stallman}, y @w{Melissa Weisshaus}. Gracias\n"
"tambi@'en a @w{Philip Johnson} y @w{David Stampe} por su @'animo\n"
"paciente. Mis errores son m@'{@dotless{i}}os."

#. type: flushright
#: emacs-lisp-intro.texi:1065
#, no-wrap
msgid ""
"Robert J. Chassell\n"
"@email{bob@@gnu.org}\n"
msgstr ""
"Robert J. Chassell\n"
"@email{bob@@gnu.org}\n"

#. type: tex
#: emacs-lisp-intro.texi:1081
#, no-wrap
msgid ""
"\\par\\vfill\\supereject\n"
"\\headings off\n"
"\\ifodd\\pageno\n"
"    \\par\\vfill\\supereject\n"
"\\else\n"
"    \\par\\vfill\\supereject\n"
"    \\page\\hbox{}\\page\n"
"    \\par\\vfill\\supereject\n"
"\\fi\n"
msgstr ""
"\\par\\vfill\\supereject\n"
"\\headings off\n"
"\\ifodd\\pageno\n"
"    \\par\\vfill\\supereject\n"
"\\else\n"
"    \\par\\vfill\\supereject\n"
"    \\page\\hbox{}\\page\n"
"    \\par\\vfill\\supereject\n"
"\\fi\n"

#. type: iftex
#: emacs-lisp-intro.texi:1096
msgid ""
"@evenheading @thispage @| @| @thischapter @oddheading @thissection @| @| "
"@thispage @global@pageno = 1"
msgstr ""
"@evenheading @thispage @| @| @thischapter\n"
"@oddheading @thissection @| @| @thispage\n"
"@global@pageno = 1"

#. type: Plain text
#: emacs-lisp-intro.texi:1112
msgid ""
"To the untutored eye, Lisp is a strange programming language.  In Lisp code "
"there are parentheses everywhere.  Some people even claim that the name "
"stands for `Lots of Isolated Silly Parentheses'.  But the claim is "
"unwarranted.  Lisp stands for LISt Processing, and the programming language "
"handles @emph{lists} (and lists of lists) by putting them between "
"parentheses.  The parentheses mark the boundaries of the list.  Sometimes a "
"list is preceded by a single apostrophe or quotation mark, @samp{'}"
"@footnote{The single apostrophe or quotation mark is an abbreviation for the "
"function @code{quote}; you need not think about functions now; functions are "
"defined in @ref{Making Errors, , Generate an Error Message}.} Lists are the "
"basis of Lisp."
msgstr ""
"Para el ojo inexperto, Lisp es un lenguaje de\n"
"programaci@'on extra@~no. En c@'odigo Lisp hay par@'entesis por todas\n"
"partes. Algunas personas incluso reclaman que el nombre signfica `Lots\n"
"of Isolated Silly Parentheses' (`Montones de Par@'entesis Aislados\n"
"Est@'upidos'). Pero la protesta no tiene fundamento. Lisp es para\n"
"procesamiento de listas, y el lenguaje de programaci@'on maneja\n"
"@emph{listas} (y listas de listas) poni@'endolas entre\n"
"par@'entesis. Los par@'entesis marcan los l@'{@dotless{i}}mites de la\n"
"lista. Algunas veces una lista va precedida por un ap@'ostrofe simple\n"
"o una marca de cita, @samp{'}@footnote{El ap@'ostrofo o comilla\n"
"es una abreviaci@'on para la funci@'on @code{quote};\n"
"no necesitas pensar acerca de funciones ahora; las funciones se\n"
"definen en @ref{Creando errores, , Generar un mensaje de error}.}\n"
"Las listas son el fundamento de Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:1135
msgid ""
"In Lisp, a list looks like this: @code{'(rose violet daisy buttercup)}.  "
"This list is preceded by a single apostrophe.  It could just as well be "
"written as follows, which looks more like the kind of list you are likely to "
"be familiar with:"
msgstr ""
"En Lisp, una lista como esta: @code{'(rosa violeta margarita\n"
"bot@'ondeoro)}. Esta lista es precedida por una comilla.\n"
"Bien, podr@'{@dotless{i}}a estar escrita de la siguente manera, que se parece\n"
"m@'as al tipo de lista con la que se est@'a familiarizado:"

#. type: group
#: emacs-lisp-intro.texi:1142
#, no-wrap
msgid ""
"'(rose\n"
"  violet\n"
"  daisy\n"
"  buttercup)\n"
msgstr ""
"'(rosa\n"
"  violeta\n"
"  margarita\n"
"  bot@'ondeoro)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1149
msgid ""
"The elements of this list are the names of the four different flowers, "
"separated from each other by whitespace and surrounded by parentheses, like "
"flowers in a field with a stone wall around them."
msgstr ""
"Los elementos de esta lista son los nombres de 4 flores diferentes,\n"
"separados por espacios en blanco y rodeados de par@'entesis, como\n"
"flores en un campo con un muro de piedras alrededor de ellas."

#. type: cindex
#: emacs-lisp-intro.texi:1149
#, no-wrap
msgid "Flowers in a field"
msgstr "Flores en un campo"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:1160
#, no-wrap
msgid "Numbers, Lists inside of Lists"
msgstr "N@'umeros, listas dentro de listas"

#. type: Plain text
#: emacs-lisp-intro.texi:1166
msgid ""
"Lists can also have numbers in them, as in this list: @code{(+ 2 2)}.  This "
"list has a plus-sign, @samp{+}, followed by two @samp{2}s, each separated by "
"whitespace."
msgstr ""
"Las listas pueden tambi@'en tener n@'umeros dentro, como en esta lista:\n"
"@code{(+ 2 2)}. Esta lista tiene un signo m@'as, @samp{+}, seguido por\n"
"dos @samp{2}, cada uno separado por espacios en blanco."

#. type: Plain text
#: emacs-lisp-intro.texi:1174
msgid ""
"In Lisp, both data and programs are represented the same way; that is, they "
"are both lists of words, numbers, or other lists, separated by whitespace "
"and surrounded by parentheses.  (Since a program looks like data, one "
"program may easily serve as data for another; this is a very powerful "
"feature of Lisp.)  (Incidentally, these two parenthetical remarks are "
"@emph{not} Lisp lists, because they contain @samp{;} and @samp{.} as "
"punctuation marks.)"
msgstr ""
"En Lisp, tanto datos como programas est@'an representados de la misma\n"
"manera; es decir, s@'on a la vez listas de palabras, n@'umeros, u otras listas,\n"
"separadas por espacios en blanco y rodeadas de par@'entesis. (Puesto\n"
"que un programa son datos, un programa puede f@'acilmente servir datos\n"
"a otros programas; esta es una funcionalidad muy poderosa de Lisp.)\n"
"(Incidentalmente, estas dos marcas de par@'entesis @emph{no} son\n"
"listas Lisp, porque contienen @samp{;} y @samp{.} como marcas\n"
"de puntuaci@'on.) "

#. type: Plain text
#: emacs-lisp-intro.texi:1177
msgid "Here is another list, this time with a list inside of it:"
msgstr "Aqu@'{@dotless{i}} hay otra lista, esta vez con una lista dentro:"

#. type: smallexample
#: emacs-lisp-intro.texi:1180
#, no-wrap
msgid "'(this list has (a list inside of it))\n"
msgstr "'(esta lista tiene (una lista dentro de ella))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1186
msgid ""
"The components of this list are the words @samp{this}, @samp{list}, "
"@samp{has}, and the list @samp{(a list inside of it)}.  The interior list is "
"made up of the words @samp{a}, @samp{list}, @samp{inside}, @samp{of}, "
"@samp{it}."
msgstr ""
"Los componentes de esta lista son las palabras @samp{esta},\n"
"@samp{lista}, @samp{tiene}, y la lista @samp{(una lista dentro de\n"
"ella)}. La lista interior se construye con las palabras @samp{una},\n"
"@samp{lista}, @samp{dentro}, @samp{de}, @samp{ella}."

#. type: Plain text
#: emacs-lisp-intro.texi:1199
msgid ""
"In Lisp, what we have been calling words are called @dfn{atoms}.  This term "
"comes from the historical meaning of the word atom, which means "
"`indivisible'.  As far as Lisp is concerned, the words we have been using in "
"the lists cannot be divided into any smaller parts and still mean the same "
"thing as part of a program; likewise with numbers and single character "
"symbols like @samp{+}.  On the other hand, unlike an ancient atom, a list "
"can be split into parts.  (@xref{car cdr & cons, , @code{car} @code{cdr} & "
"@code{cons} Fundamental Functions}.)"
msgstr ""
"En Lisp, lo que hemos estado llamando palabras son en realidad\n"
"@dfn{@'atomos}. Este t@'ermino viene del significado hist@'orico de la palabra\n"
"@'atomo, que significa `indivisible'. En lo que a Lisp concierne, las palabras\n"
"que hemos estado usando en las listas no pueden ser divididas en\n"
"peque@~nas partes, sin perder su significado dentro del programa; lo\n"
"mismo ocurre con n@'umeros y s@'{@dotless{i}}mbolos de un caracterer\n"
"como @samp{+}. Por otro lado, a diferencia de un @'atomo, una\n"
"lista puede ser dividida en peque@~nas partes. Ver @ref{Car cdr y\n"
"cons, , @code{car}, @code{cdr} y @code{cons}, Funciones\n"
"Fundamentales}."

#. type: Plain text
#: emacs-lisp-intro.texi:1202
msgid ""
"In a list, atoms are separated from each other by whitespace.  They can be "
"right next to a parenthesis."
msgstr ""
"En una lista, los @'atomos se separan unos de otros por espacios en\n"
"blanco. Pueden ir pegados a un par@'entesis."

#. type: cindex
#: emacs-lisp-intro.texi:1203
#, no-wrap
msgid "@samp{empty list} defined"
msgstr "@samp{lista vac@'{@dotless{i}}a} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:1210
msgid ""
"Technically speaking, a list in Lisp consists of parentheses surrounding "
"atoms separated by whitespace or surrounding other lists or surrounding both "
"atoms and other lists.  A list can have just one atom in it or have nothing "
"in it at all.  A list with nothing in it looks like this: @code{()}, and is "
"called the @dfn{empty list}.  Unlike anything else, an empty list is "
"considered both an atom and a list at the same time."
msgstr ""
"T@'ecnicamente hablando, una lista en Lisp consiste de par@'entesis\n"
"alrededor de @'atomos separados por espacios en blanco o alrededor de\n"
"otras lista o alrededor de ambos @'atomos u otras listas. Una lista\n"
"puede tener solo un @'atomo o no tener absolutamente nada en\n"
"ella.  Una lista con nada dentro se ve as@'{@dotless{i}}: @code{()}, y\n"
"se llama @dfn{lista vac@'{@dotless{i}}a}. A diferencia de cualquier\n"
"otra cosa, una lista vac@'{@dotless{i}}a es tanto un @'atomo, como una\n"
"lista al mismo tiempo."

#. type: cindex
#: emacs-lisp-intro.texi:1211
#, no-wrap
msgid "Symbolic expressions, introduced"
msgstr "Expresiones simb@'olicas, introducidas"

#. type: cindex
#: emacs-lisp-intro.texi:1212
#, no-wrap
msgid "@samp{expression} defined"
msgstr "@samp{expresi@'on} definida"

#. type: cindex
#: emacs-lisp-intro.texi:1213
#, no-wrap
msgid "@samp{form} defined"
msgstr "@samp{forma} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:1221
msgid ""
"The printed representation of both atoms and lists are called @dfn{symbolic "
"expressions} or, more concisely, @dfn{s-expressions}.  The word "
"@dfn{expression} by itself can refer to either the printed representation, "
"or to the atom or list as it is held internally in the computer.  Often, "
"people use the term @dfn{expression} indiscriminately.  (Also, in many "
"texts, the word @dfn{form} is used as a synonym for expression.)"
msgstr ""
"La representaci@'on impresa de @'atomos y listas se llama\n"
"@dfn{expresiones simb@'olicas} o, m@'as concisamente,\n"
"@dfn{s-expresiones}. La palabra @dfn{expresi@'on} por s@'{@dotless{i}}\n"
"misma puede referir o bien a la representaci@'on impresa, o al @'atomo\n"
"o a la lista como se maneja internamente en el ordenador. Con\n"
"frecuencia, las personas usan el t@'ermino @dfn{expresi@'on}\n"
"indiscriminadamente. (Tambi@'en, en muchos textos, la palabra\n"
"@dfn{forma} se usa como un sin@'onimo para la expresi@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1231
msgid ""
"Incidentally, the atoms that make up our universe were named such when they "
"were thought to be indivisible; but it has been found that physical atoms "
"are not indivisible.  Parts can split off an atom or it can fission into two "
"parts of roughly equal size.  Physical atoms were named prematurely, before "
"their truer nature was found.  In Lisp, certain kinds of atom, such as an "
"array, can be separated into parts; but the mechanism for doing this is "
"different from the mechanism for splitting a list.  As far as list "
"operations are concerned, the atoms of a list are unsplittable."
msgstr ""
"Por cierto, los @'atomos que componen nuestro universo fueron nombrados as@'i\n"
"cuando se pensaba que eran indivisibles; pero\n"
"pero se ha encontrado que los @'atomos fisicos no son\n"
"indivisibles. Las partes pueden dividir un @'atomo o puede fisionarse\n"
"en 2 partes de igual tama@~no. Los @'atomos f@'{@dotless{i}}sicos\n"
"se nombraron prematuramente, antes de que su verdadera naturaleza\n"
"fuese encontrada. En Lisp, ciertos tipos de @'atomos, como un array,\n"
"pueden ser separados en partes; pero el mecanismo de hacer esto es\n"
"diferente de el mecanismo para dividir una lista. En lo que se refiere\n"
"a operaciones de lista, los @'atomos de una lista\n"
"son indivisibles."

#. type: Plain text
#: emacs-lisp-intro.texi:1236
msgid ""
"As in English, the meanings of the component letters of a Lisp atom are "
"different from the meaning the letters make as a word.  For example, the "
"word for the South American sloth, the @samp{ai}, is completely different "
"from the two words, @samp{a}, and @samp{i}."
msgstr ""
"Como en español, el significado de las letras que componen un @'atomo Lisp\n"
"difiere del significado de las letras compuestas como una palabra.\n"
"Por ejemplo, la expresi@'on @samp{ay}, es\n"
"completamente diferente de las dos palabras @samp{a}, e @samp{y}."

#. type: Plain text
#: emacs-lisp-intro.texi:1248
msgid ""
"There are many kinds of atom in nature but only a few in Lisp: for example, "
"@dfn{numbers}, such as 37, 511, or 1729, and @dfn{symbols}, such as "
"@samp{+}, @samp{foo}, or @samp{forward-line}.  The words we have listed in "
"the examples above are all symbols.  In everyday Lisp conversation, the word "
"``atom'' is not often used, because programmers usually try to be more "
"specific about what kind of atom they are dealing with.  Lisp programming is "
"mostly about symbols (and sometimes numbers)  within lists.  (Incidentally, "
"the preceding three word parenthetical remark is a proper list in Lisp, "
"since it consists of atoms, which in this case are symbols, separated by "
"whitespace and enclosed by parentheses, without any non-Lisp punctuation.)"
msgstr ""
"Hay muchos tipos de @'atomos en la naturaleza, pero solo unos pocos en Lisp:\n"
"por ejemplo, @dfn{n@'umeros}, tales como 37, 511, o 1729, y \n"
"@dfn{s@'{@dotless{i}}mbolos}, tales como @samp{+}, @samp{foo}, o \n"
"@samp{forward-line}. Las palabras que hemos listado en los ejemplos\n"
"anteriores son todos s@'{@dotless{i}}mbolos. En una conversaci@'on cotidiana de\n"
"Lisp, la palabra ``@'atomo'' no se usa con frecuencia,\n"
"porque los programadores normalmente intentan ser m@'as\n"
"espec@'{@dotless{i}}ficos acerca de que tipo de @'atomo est@'an\n"
"tratando. La programaci@'on Lisp es sobre todo de\n"
"s@'{@dotless{i}}mbolos (y algunas veces n@'umeros) con\n"
"listas. (De ese modo, tres palabras rodeadas de par@'entesis son una\n"
"apropiada lista en Lisp, ya que consiste de @'atomos, que en\n"
"este caso son s@'{@dotless{i}}mbolos, separados por espacios en blanco\n"
"y cerrados por par@'entesis, sin ninguna puntuaci@'on no Lisp.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1252
msgid ""
"Text between double quotation marks---even sentences or paragraphs---is also "
"an atom.  Here is an example:"
msgstr ""
"Texto entre comillas---incluso frases o p@'arrafos---son\n"
"tambi@'en un @'atomo. Aqu@'{@dotless{i}} hay un ejemplo:"

#. type: cindex
#: emacs-lisp-intro.texi:1252
#, no-wrap
msgid "Text between double quotation marks"
msgstr "Texto entre comillas"

#. type: smallexample
#: emacs-lisp-intro.texi:1256
#, no-wrap
msgid "'(this list includes \"text between quotation marks.\")\n"
msgstr "'(esta lista incluye \"texto entre comillas.\")\n"

#. type: cindex
#: emacs-lisp-intro.texi:1258
#, no-wrap
msgid "@samp{string} defined"
msgstr "@samp{cadena} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:1266
msgid ""
"In Lisp, all of the quoted text including the punctuation mark and the blank "
"spaces is a single atom.  This kind of atom is called a @dfn{string} (for "
"`string of characters') and is the sort of thing that is used for messages "
"that a computer can print for a human to read.  Strings are a different kind "
"of atom than numbers or symbols and are used differently."
msgstr ""
"En Lisp, todo el texto citado incluyendo la marca de puntuaci@'on y\n"
"los espacios en blanco son un solo @'atomo. Este tipo de @'atomo es\n"
"llamado @dfn{string} (por `cadena de caracteres') y es el tipo de cosa\n"
"que es usada para mensajes que un ordenador puede imprimir para que un\n"
"humano lea. Las cadenas son un tipo de @'atomo diferente a los\n"
"n@'umeros, o s@'{@dotless{i}}mbolos y se usan de manera diferente."

#. type: cindex
#: emacs-lisp-intro.texi:1269
#, no-wrap
msgid "Whitespace in lists"
msgstr "Espacio en blanco en listas"

#. type: Plain text
#: emacs-lisp-intro.texi:1274
msgid ""
"The amount of whitespace in a list does not matter.  From the point of view "
"of the Lisp language,"
msgstr ""
"La cantidad de espacios en blanco en una lista no importa. Desde el\n"
"punto de vista del lenguaje Lisp,"

#. type: group
#: emacs-lisp-intro.texi:1279
#, no-wrap
msgid ""
"'(this list\n"
"   looks like this)\n"
msgstr ""
"'(esta lista\n"
"   parece esto)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1285
msgid "is exactly the same as this:"
msgstr "es exactamente lo mismo que esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:1288
#, no-wrap
msgid "'(this list looks like this)\n"
msgstr "'(esta lista parece esto)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1293
msgid ""
"Both examples show what to Lisp is the same list, the list made up of the "
"symbols @samp{this}, @samp{list}, @samp{looks}, @samp{like}, and @samp{this} "
"in that order."
msgstr ""
"Ambos ejemplos muestran que en Lisp es la misma lista, la lista hecha de\n"
"los s@'{@dotless{i}}mbolos @samp{esta}, @samp{lista}, @samp{parece},\n"
"y @samp{esto} en este orden."

#. type: Plain text
#: emacs-lisp-intro.texi:1298
msgid ""
"Extra whitespace and newlines are designed to make a list more readable by "
"humans.  When Lisp reads the expression, it gets rid of all the extra "
"whitespace (but it needs to have at least one space between atoms in order "
"to tell them apart.)"
msgstr ""
"Los espacios en blanco adicionales y los saltos de l@'inea est@'an dise@~nados\n"
"para crear una lista m@'as legible por humanos. Cuando Lisp lee la\n"
"expresi@'on, asimila los espacios en blanco extra (pero necesita tener\n"
"al menos un espacio entre @'atomos en orden para contarlos aparte.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1306
msgid ""
"Odd as it seems, the examples we have seen cover almost all of what Lisp "
"lists look like! Every other list in Lisp looks more or less like one of "
"these examples, except that the list may be longer and more complex.  In "
"brief, a list is between parentheses, a string is between quotation marks, a "
"symbol looks like a word, and a number looks like a number.  (For certain "
"situations, square brackets, dots and a few other special characters may be "
"used; however, we will go quite far without them.)"
msgstr ""
"Aunque parezca raro, los ejemplos que hemos visto cubren casi todo lo\n"
"aparece en las listas Lisp. Cualquier otra lista en Lisp se ve m@'as o menos igual a uno\n"
"de estos ejemplos, excepto que la lista puede ser m@'as larga y m@'as\n"
"compleja. En resumen, una lista est@'a entre par@'entesis, una cadena\n"
"est@'a entre comillas, un s@'{@dotless{i}}mbolo parece como una\n"
"palabra, y un n@'umero parece un n@'umero. (Para ciertas situaciones,\n"
"corchetes, puntos y otros caracteres especiales pueden ser usados; sin\n"
"embargo; iremos bastante lejos sin ellos.)"

#. type: subsection
#: emacs-lisp-intro.texi:1308
#, no-wrap
msgid "GNU Emacs Helps You Type Lists"
msgstr "GNU Emacs te ayuda a escribir listas"

#. type: cindex
#: emacs-lisp-intro.texi:1309
#, no-wrap
msgid "Help typing lists"
msgstr "Ayuda escribiendo listas"

#. type: cindex
#: emacs-lisp-intro.texi:1310
#, no-wrap
msgid "Formatting help"
msgstr "Formateando ayuda"

#. type: Plain text
#: emacs-lisp-intro.texi:1321
msgid ""
"When you type a Lisp expression in GNU Emacs using either Lisp Interaction "
"mode or Emacs Lisp mode, you have available to you several commands to "
"format the Lisp expression so it is easy to read.  For example, pressing the "
"@key{TAB} key automatically indents the line the cursor is on by the right "
"amount.  A command to properly indent the code in a region is customarily "
"bound to @kbd{M-C-\\}.  Indentation is designed so that you can see which "
"elements of a list belong to which list---elements of a sub-list are "
"indented more than the elements of the enclosing list."
msgstr ""
"Cuando se escribe una expresi@'on Lisp en GNU Emacs usando bien el\n"
"modo de Interacci@'on Lisp o el modo Emacs Lisp, est@'an disponibles\n"
"varios comandos para formatear la expresi@'on Lisp, de modo que sea\n"
"f@'acil de leer. Por ejemplo, presionando la tecla @key{TAB}\n"
"autom@'aticamente se indenta la l@'{@dotless{i}}nea donde se encuetra el cursor\n"
"a la cantidad correcta. Un comando para indentar\n"
"apropiadamente el c@'odigo en una regi@'on est@'a asociado a\n"
"@kbd{M-C-\\}. La indentaci@'on est@'a dise@~nada de modo que se pueda ver qué\n"
"elementos percecen a cada lista---los\n"
"elementos de una sublista est@'an m@'as indentados que los elementos\n"
"de una lista cerrada."

#. type: Plain text
#: emacs-lisp-intro.texi:1328
msgid ""
"In addition, when you type a closing parenthesis, Emacs momentarily jumps "
"the cursor back to the matching opening parenthesis, so you can see which "
"one it is.  This is very useful, since every list you type in Lisp must have "
"its closing parenthesis match its opening parenthesis.  (@xref{Major "
"Modes, , Major Modes, emacs, The GNU Emacs Manual}, for more information "
"about Emacs's modes.)"
msgstr ""
"Adem@'as, cuando se escribe un par@'entesis de cierre, Emacs\n"
"moment@'aneamente salta el cursor atr@'as para hacer el matching\n"
"(emparejamiento) con el par@'entesis de apertura, para ver cu@'al\n"
"es. Esto es muy @'util, ya que cada lista que se escribe en Lisp debe\n"
"tener sus par@'entesis emparejados con sus par@'entesis de\n"
"apertura. (Ver @ref{Modos Mayores, Modos Mayores, emacs, El Manual de\n"
"GNU Emacs}, para m@'as informaci@'on acerca de modos de Emacs.)"

#. type: cindex
#: emacs-lisp-intro.texi:1331
#, no-wrap
msgid "Run a program"
msgstr "Ejecuta un programa"

#. type: cindex
#: emacs-lisp-intro.texi:1332
#, no-wrap
msgid "Program, running one"
msgstr "Programa, ejecutando uno"

#. type: cindex
#: emacs-lisp-intro.texi:1334
#, no-wrap
msgid "@samp{evaluate} defined"
msgstr "se defini@'o @samp{evaluate}"

#. type: Plain text
#: emacs-lisp-intro.texi:1341
msgid ""
"A list in Lisp---any list---is a program ready to run.  If you run it (for "
"which the Lisp jargon is @dfn{evaluate}), the computer will do one of three "
"things: do nothing except return to you the list itself; send you an error "
"message; or, treat the first symbol in the list as a command to do "
"something.  (Usually, of course, it is the last of these three things that "
"you really want!)"
msgstr ""
"Una lista en Lisp ---cualquier lista--- es un programa listo para ser\n"
"ejecutado. Si lo ejecutas (lo que la jerga Lisp llama @dfn{evaluar}),\n"
"el ordenador har@'a una de tres cosas: nada excepto devolverte la\n"
"lista misma; enviar un mensaje de error; o, tomar el primer\n"
"s@'{@dotless{i}}mbolo en la lista como un comando para hacer alguna\n"
"cosa. (@exclamdown{}Normalmente, es lo @'ultimo de estas tres cosas de\n"
"lo que realmente se quiere!). "

#. type: Plain text
#: emacs-lisp-intro.texi:1352
msgid ""
"The single apostrophe, @code{'}, that I put in front of some of the example "
"lists in preceding sections is called a @dfn{quote}; when it precedes a "
"list, it tells Lisp to do nothing with the list, other than take it as it is "
"written.  But if there is no quote preceding a list, the first item of the "
"list is special: it is a command for the computer to obey.  (In Lisp, these "
"commands are called @emph{functions}.)  The list @code{(+ 2 2)} shown above "
"did not have a quote in front of it, so Lisp understands that the @code{+} "
"is an instruction to do something with the rest of the list: add the numbers "
"that follow."
msgstr ""
"El ap@'ostrofe, @code{'}, que se pone enfrente de alg@'unos ejemplos de\n"
"lista en secciones anteriores se llama @dfn{quote}; (citar);\n"
"cuando precede a una lista, se informa a Lisp no hacer nada con la lista,\n"
"mas que la tomarla tal como est@'a escrita. Pero si no hay una cita\n"
"precediendo la lista, el primer @'{@dotless{i}}tem de la lista es\n"
"especial: es un comando para que el ordenador obedezca. (En Lisp,\n"
"estos comandos son llamados @emph{funciones}.) A continuación se muestra la\n"
"lista no citada @code{(+ 2 2)}, por lo que Lisp comprende que\n"
"@code{+} es una instrucci@'on para hacer alguna cosa con\n"
"el resto de la lista: suma los n@'umeros que siguen."

#. type: Plain text
#: emacs-lisp-intro.texi:1357
msgid ""
"If you are reading this inside of GNU Emacs in Info, here is how you can "
"evaluate such a list: place your cursor immediately after the right hand "
"parenthesis of the following list and then type @kbd{C-x C-e}:"
msgstr ""
"Si est@'as leyendo esto dentro de GNU Emacs en Info,\n"
"aqu@'{@dotless{i}} est@'a como puedes evaluar una lista: coloca tu cursor\n"
"justo después del paréntesis derecho de la siguiente lista y presiona\n"
"@kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:1360 emacs-lisp-intro.texi:1903
#: emacs-lisp-intro.texi:1967
#, no-wrap
msgid "(+ 2 2)\n"
msgstr "(+ 2 2)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1369
msgid ""
"You will see the number @code{4} appear in the echo area.  (In the jargon, "
"what you have just done is ``evaluate the list.'' The echo area is the line "
"at the bottom of the screen that displays or ``echoes'' text.)  Now try the "
"same thing with a quoted list: place the cursor right after the following "
"list and type @kbd{C-x C-e}:"
msgstr ""
"Ver@'as que el n@'umero @code{4} aparece en el @'area echo. (En la jerga, lo\n"
"que acabas de hacer es ``evaluar la lista.'' El @'area echo es la\n"
"l@'{@dotless{i}}nea en la parte inferior de la pantalla que muestra o\n"
"hace ``echo'' del texto). Ahora intenta la misma cosa con una lista\n"
"citada: posiciona el cursor justo despu@'es de la siguiente\n"
"lista y presiona @kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:1372
#, no-wrap
msgid "'(this is a quoted list)\n"
msgstr "'(esto es una lista con comillas)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1376
msgid "You will see @code{(this is a quoted list)} appear in the echo area."
msgstr ""
"Se ver@'a aparecer @code{(esto es una lista con comillas)} en el @'area\n"
"echo."

#. type: cindex
#: emacs-lisp-intro.texi:1377
#, no-wrap
msgid "Lisp interpreter, explained"
msgstr "Int@'erprete Lisp, explicada"

#. type: cindex
#: emacs-lisp-intro.texi:1378
#, no-wrap
msgid "Interpreter, Lisp, explained"
msgstr "Int@'erprete, Lisp, explicado"

#. type: Plain text
#: emacs-lisp-intro.texi:1384
msgid ""
"In both cases, what you are doing is giving a command to the program inside "
"of GNU Emacs called the @dfn{Lisp interpreter}---giving the interpreter a "
"command to evaluate the expression.  The name of the Lisp interpreter comes "
"from the word for the task done by a human who comes up with the meaning of "
"an expression---who ``interprets'' it."
msgstr ""
"En ambos casos, lo que est@'as haciendo es dar un comando al programa\n"
"dentro de GNU Emacs llamado @dfn{int@'erprete Lisp} --- dando al\n"
"int@'erprete un comando para evaluar la expresi@'on. El nombre del\n"
"int@'erprete Lisp viene de la palabra para la tarea hecha por un\n"
"humano que viene con el significado de una expresi@'on --- quien lo\n"
"``interpreta''."

#. type: Plain text
#: emacs-lisp-intro.texi:1390
msgid ""
"You can also evaluate an atom that is not part of a list---one that is not "
"surrounded by parentheses; again, the Lisp interpreter translates from the "
"humanly readable expression to the language of the computer.  But before "
"discussing this (@pxref{Variables}), we will discuss what the Lisp "
"interpreter does when you make an error."
msgstr ""
"Tambi@'en se puede evaluar un @'atomo que no es parte de una lista ---\n"
"uno que no est@'a rodeado por par@'entesis; de nuevo, el int@'erprete\n"
"Lisp traduce desde la expresi@'on humanamente legible al lenguaje del\n"
"ordenador. Pero antes de discutir esto (ver @ref{Variables}), vamos a\n"
"discutir lo que el int@'erprete de Lisp hace cuando tu creas el\n"
"error."

#. type: section
#: emacs-lisp-intro.texi:1392
#, no-wrap
msgid "Generate an Error Message"
msgstr "Generar un mensaje de error"

#. type: cindex
#: emacs-lisp-intro.texi:1393
#, no-wrap
msgid "Generate an error message"
msgstr "Genera un mensaje de error"

#. type: cindex
#: emacs-lisp-intro.texi:1394
#, no-wrap
msgid "Error message generation"
msgstr "Generaci@'on de mensaje de Error"

#. type: Plain text
#: emacs-lisp-intro.texi:1404
msgid ""
"Partly so you won't worry if you do it accidentally, we will now give a "
"command to the Lisp interpreter that generates an error message.  This is a "
"harmless activity; and indeed, we will often try to generate error messages "
"intentionally.  Once you understand the jargon, error messages can be "
"informative.  Instead of being called ``error'' messages, they should be "
"called ``help'' messages.  They are like signposts to a traveler in a "
"strange country; deciphering them can be hard, but once understood, they can "
"point the way."
msgstr ""
"No se preocupe si genera un mensaje de error de manera accidental, ahora\n"
"daremos un comando al int@'erprete de Lisp que genara un mensaje de error.\n"
"Esta es una accion inofensiva; y de hecho, a menudo se intenta generar\n"
"mensajes de error de manera intencional. Una vez se comprende la\n"
"jerga, los mensajes de error pueden ser informativos. En vez de ser\n"
"llamados mensajes de ``error'', deber@'{@dotless{i}}an ser llamados\n"
"mensajes de ``ayuda''. Son como letreros para un viajero en un país extraño;\n"
"descifrarlos puede ser duro, pero una vez comprendidos, pueden señalar el camino."

#. type: Plain text
#: emacs-lisp-intro.texi:1407
msgid ""
"The error message is generated by a built-in GNU Emacs debugger.  We will "
"`enter the debugger'.  You get out of the debugger by typing @code{q}."
msgstr ""
"El mensaje de error es generado por un depurador de c@'odigo\n"
"incorporado dentro de GNU Emacs. As@'{@dotless{i}} se `entra al\n"
"depurador'. Se puede salir del depurador pulsando @code{q}."

#. type: Plain text
#: emacs-lisp-intro.texi:1413
msgid ""
"What we will do is evaluate a list that is not quoted and does not have a "
"meaningful command as its first element.  Here is a list almost exactly the "
"same as the one we just used, but without the single-quote in front of it.  "
"Position the cursor right after it and type @kbd{C-x C-e}:"
msgstr ""
"Lo que se hace es evaluar una lista que no est@'a citada y no tiene un\n"
"comando con significado como su primer elemento. Aqu@'{@dotless{i}}\n"
"hay una lista casi exactamente igual a la que acabamos de usar, pero sin\n"
"la cita al inicio. Coloque el cursor a la derecha donde esta finaliza y\n"
"presione @kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:1416
#, no-wrap
msgid "(this is an unquoted list)\n"
msgstr "(esto es una lista sin cita)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1433
msgid ""
"A @file{*Backtrace*} window will open up and you should see the following in "
"it:"
msgstr "Se abrir@'a una ventana @file{*Backtrace*} y se ver@'a lo siguiente:"

#. type: group
#: emacs-lisp-intro.texi:1444
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function this)\n"
"  (this is an unquoted list)\n"
"  eval((this is an unquoted list))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function esto)\n"
"  (esto es una lista sin cita)\n"
"  eval((esto es una lista sin cita) nil)\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp nil nil)\n"
"  command-execute(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1452
msgid ""
"Your cursor will be in this window (you may have to wait a few seconds "
"before it becomes visible).  To quit the debugger and make the debugger "
"window go away, type:"
msgstr ""
"Su cursor estar@'a en esta ventana (puede tener que esperar unos\n"
"pocos segundos antes de que sea visible). Para salir del\n"
"depurador y de su ventana, presione:"

#. type: smallexample
#: emacs-lisp-intro.texi:1455
#, no-wrap
msgid "q\n"
msgstr "q\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1461
msgid ""
"Please type @kbd{q} right now, so you become confident that you can get out "
"of the debugger.  Then, type @kbd{C-x C-e} again to re-enter it."
msgstr ""
"Por favor, ahora pulsa @kbd{q}, as@'{@dotless{i}} se comprueba que se\n"
"puede salir del depurador. A continuacion, presione \"@kbd{C-x C-e} una\n"
"vez m@'as para re-entrar."

#. type: cindex
#: emacs-lisp-intro.texi:1462 emacs-lisp-intro.texi:1491
#, no-wrap
msgid "@samp{function} defined"
msgstr "@samp{funci@'on} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:1464
msgid "Based on what we already know, we can almost read this error message."
msgstr "Sobre la base de lo que ya sabemos, casi podemos leer este mensaje de error."

#. type: Plain text
#: emacs-lisp-intro.texi:1471
msgid ""
"You read the @file{*Backtrace*} buffer from the bottom up; it tells you what "
"Emacs did.  When you typed @kbd{C-x C-e}, you made an interactive call to "
"the command @code{eval-last-sexp}.  @code{eval} is an abbreviation for "
"`evaluate' and @code{sexp} is an abbreviation for `symbolic expression'.  "
"The command means `evaluate last symbolic expression', which is the "
"expression just before your cursor."
msgstr ""
"Leer el b@'uffer @file{*Backtrace*} de abajo hacia arriba; informa lo que\n"
"Emacs ha hecho. Cuando se presiona @kbd{C-x C-e}, se hace una llamada\n"
"interactiva a el comando @code{eval-last-sexp}. @code{eval} es una\n"
"abreviatura para `evaluar' y @code{sexp} es una abreviatura para\n"
"`expresi@'on simb@'olica'. El comando significa `eval@'ua la\n"
"@'ultima expresi@'on simb@'olica', que es la expresi@'on justo antes\n"
"de tu cursor."

#. type: Plain text
#: emacs-lisp-intro.texi:1476
msgid ""
"Each line above tells you what the Lisp interpreter evaluated next.  The "
"most recent action is at the top.  The buffer is called the "
"@file{*Backtrace*} buffer because it enables you to track Emacs backwards."
msgstr ""
"Cada l@'{@dotless{i}}nea anterior a esta cuenta lo que el int@'erprete de\n"
"Lisp evaluo despu@'es. La acci@'on m@'as reciente est@'a en la parte superior. El\n"
"b@'uffer es llamado @file{*Backtrace*} ya que permite realizar un seguimiento\n"
"de Emacs hacia atr@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:1479
msgid "At the top of the @file{*Backtrace*} buffer, you see the line:"
msgstr ""
"En la parte superior del b@'uffer @file{*Backtrace*}, ver@'a la l@'{@dotless{i}}nea:"

#. type: smallexample
#: emacs-lisp-intro.texi:1482
#, no-wrap
msgid "Debugger entered--Lisp error: (void-function this)\n"
msgstr "Debugger entered--Lisp error: (void-function esto)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1488
msgid ""
"The Lisp interpreter tried to evaluate the first atom of the list, the word "
"@samp{this}.  It is this action that generated the error message @samp{void-"
"function this}."
msgstr ""
"El int@'erprete Lisp intent@'o evaluar el primer @'atomo de la lista,\n"
"la palabra @samp{esto}. Esta es la acci@'on que gener@'o el mensaje de error\n"
"@samp{void-function esto}."

#. type: Plain text
#: emacs-lisp-intro.texi:1490
msgid "The message contains the words @samp{void-function} and @samp{this}."
msgstr "El mensaje contiene las palabras @samp{void-function} y @samp{esto}."

#. type: Plain text
#: emacs-lisp-intro.texi:1496
msgid ""
"The word @samp{function} was mentioned once before.  It is a very important "
"word.  For our purposes, we can define it by saying that a @dfn{function} is "
"a set of instructions to the computer that tell the computer to do something."
msgstr ""
"La palabra @samp{function} fu@'e mencionada antes. Es una palabra muy\n"
"importante. Para nuestros prop@'ositos, podemos definirla diciendo\n"
"que una @dfn{funci@'on} (@emph{function}) es un conjunto de\n"
"instrucciones para decirle al ordenador que haga alguna cosa."

#. type: Plain text
#: emacs-lisp-intro.texi:1500
msgid ""
"Now we can begin to understand the error message: @samp{void-function "
"this}.  The function (that is, the word @samp{this}) does not have a "
"definition of any set of instructions for the computer to carry out."
msgstr ""
"Ahora podemos empezar a comprender el mensaje de error:\n"
"@samp{void-function this}. La funci@'on (que es, la palabra\n"
"@samp{this}) no tiene la definici@'on de ningun conjunto de\n"
"instrucciones que el ordenador pueda realizar."

#. type: Plain text
#: emacs-lisp-intro.texi:1505
msgid ""
"The slightly odd word, @samp{void-function}, is designed to cover the way "
"Emacs Lisp is implemented, which is that when a symbol does not have a "
"function definition attached to it, the place that should contain the "
"instructions is `void'."
msgstr ""
"La palabra ligeramente extra@~na, @samp{void-function}, est@'a dise@~nada para\n"
"cubrir la forma en que Emacs Lisp lo implementa, que es cuando un s@'imbolo\n"
"no tiene una definici@'on de funci@'on atribuido, el sitio que contiene la\n"
"instrucci@'on esta `vac@'io' (@samp{void})."

#. type: Plain text
#: emacs-lisp-intro.texi:1510
msgid ""
"On the other hand, since we were able to add 2 plus 2 successfully, by "
"evaluating @code{(+ 2 2)}, we can infer that the symbol @code{+} must have a "
"set of instructions for the computer to obey and those instructions must be "
"to add the numbers that follow the @code{+}."
msgstr ""
"Por otro lado, ya que fuimos capaces de a@~nadir 2 m@'as 2 de\n"
"manera exitosa, evaluando @code{(+ 2 2)}, se puede inferir que el\n"
"s@'{@dotless{i}}mbolo @code{+} debe tener un conjunto de instrucciones\n"
"que el ordenador ejecuta y estas instrucciones deben sumar\n"
"los n@'umeros despues del @code{+}."

#. type: Plain text
#: emacs-lisp-intro.texi:1517
msgid ""
"It is possible to prevent Emacs entering the debugger in cases like this.  "
"We do not explain how to do that here, but we will mention what the result "
"looks like, because you may encounter a similar situation if there is a bug "
"in some Emacs code that you are using.  In such cases, you will see only one "
"line of error message; it will appear in the echo area and look like this:"
msgstr ""
"Es posible evitar que Emacs entre en el depurador en casos como\n"
"este. No se explicar@'a c@'omo hacer esto aqu@'{@dotless{i}}, pero se\n"
"mencionar@'a un resultado asi, porque se puede encontrar una\n"
"situaci@'on similar si hay un error en alg@'un c@'odigo de Emacs que\n"
"este usando. En tales casos, ver@'a solo una l@'{@dotless{i}}nea del\n"
"mensaje de error; aparecer en el @'area echo con el siguente aspecto"

#. type: smallexample
#: emacs-lisp-intro.texi:1520
#, no-wrap
msgid "Symbol's function definition is void:@: this\n"
msgstr "Symbol's function definition is void:@: esto\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1529
msgid ""
"The message goes away as soon as you type a key, even just to move the "
"cursor."
msgstr ""
"El mensaje aparece tan pronto se presiono una tecla, aunque sólo sea para\n"
"mover el cursor."

#. type: Plain text
#: emacs-lisp-intro.texi:1536
msgid ""
"We know the meaning of the word @samp{Symbol}.  It refers to the first atom "
"of the list, the word @samp{this}.  The word @samp{function} refers to the "
"instructions that tell the computer what to do.  (Technically, the symbol "
"tells the computer where to find the instructions, but this is a "
"complication we can ignore for the moment.)"
msgstr ""
"Conocemos el significado de la palabra\n"
"@samp{S@'{@dotless{i}}mbolo}. Se refiere al primer @'atomo de la\n"
"lista, la palabra @samp{este}. La palabra @samp{funci@'on} se refiere\n"
"a las instrucciones que dicen al ordenador que\n"
"hacer. (T@'ecnicamente, el s@'{@dotless{i}}mbolo indica al ordenador\n"
"donde encontrar las instrucciones, pero esta es una complicaci@'on que\n"
"podemos ignorar por el momento.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1540
msgid ""
"The error message can be understood: @samp{Symbol's function definition is "
"void:@: this}.  The symbol (that is, the word @samp{this}) lacks "
"instructions for the computer to carry out."
msgstr ""
"El mensaje de error puede ser comprendido: @samp{La definici@'on del\n"
"s@'{@dotless{i}}mbolo est@'a vac@'{@dotless{i}}a: este}. El\n"
"s@'{@dotless{i}}mbolo (que es, la palabra @samp{este}) carece de\n"
"instrucciones que el ordenador realize."

#. type: section
#: emacs-lisp-intro.texi:1542
#, no-wrap
msgid "Symbol Names and Function Definitions"
msgstr "Nombres de s@'{@dotless{i}}mbolos y definiciones de funciones"

#. type: cindex
#: emacs-lisp-intro.texi:1543
#, no-wrap
msgid "Symbol names"
msgstr "Nombres de S@'{@dotless{i}}mbolos"

#. type: Plain text
#: emacs-lisp-intro.texi:1555
msgid ""
"We can articulate another characteristic of Lisp based on what we have "
"discussed so far---an important characteristic: a symbol, like @code{+}, is "
"not itself the set of instructions for the computer to carry out.  Instead, "
"the symbol is used, perhaps temporarily, as a way of locating the definition "
"or set of instructions.  What we see is the name through which the "
"instructions can be found.  Names of people work the same way.  I can be "
"referred to as @samp{Bob}; however, I am not the letters @samp{B}, @samp{o}, "
"@samp{b} but am, or was, the consciousness consistently associated with a "
"particular life-form.  The name is not me, but it can be used to refer to me."
msgstr ""
"Se puede articular otra caracter@'{@dotless{i}}stica de Lisp basada en\n"
"lo que se discuti@'o hace tiempo---una caracter@'{@dotless{i}}stica\n"
"importante: un s@'{@dotless{i}}mbolo, como @code{+}, no es en\n"
"s@'{@dotless{i}} mismo el conjunto de instrucciones que el ordenador\n"
"realiza. En su lugar, el s@'{@dotless{i}}mbolo es usado,\n"
"quiz@'as temporalmente, como una manera de localizar la definici@'on o\n"
"conjunto de instrucciones. Lo que vemos es el nombre\n"
"con el cual se pueden encontrar las instrucciones. Los nombres de las personas\n"
"funcionan de la misma manera. Por ejemplo, puede referirse a mi\n"
"como @samp{Bob}; sin embargo, no soy las letras @samp{B}, @samp{o}, @samp{b} pero soy, o\n"
"o fu@'{@dotless{i}}, conscientemente asociado con una forma de vida particular. El\n"
"nombre no soy yo, pero puede ser usado para referirme."

#. type: Plain text
#: emacs-lisp-intro.texi:1561
msgid ""
"In Lisp, one set of instructions can be attached to several names.  For "
"example, the computer instructions for adding numbers can be linked to the "
"symbol @code{plus} as well as to the symbol @code{+} (and are in some "
"dialects of Lisp).  Among humans, I can be referred to as @samp{Robert} as "
"well as @samp{Bob} and by other words as well."
msgstr ""
"En Lisp, un conjunto de instrucciones puede ligarse a varios\n"
"nombres. Por ejemplo, las instrucciones de ordenador para a@~nadir\n"
"n@'umeros pueden ser enlazados al s@'{@dotless{i}}mbolo @code{m@'as}\n"
"tan bien como el s@'{@dotless{i}}mbolo @code{+} (y se encuantran en algunos\n"
"dialectos de Lisp). Entre humanos, puede referirse a @samp{Robert} tan\n"
"bien como @samp{Bob} y en otras palabras tambi@'en."

#. type: Plain text
#: emacs-lisp-intro.texi:1568
msgid ""
"On the other hand, a symbol can have only one function definition attached "
"to it at a time.  Otherwise, the computer would be confused as to which "
"definition to use.  If this were the case among people, only one person in "
"the world could be named @samp{Bob}.  However, the function definition to "
"which the name refers can be changed readily.  (@xref{Install, , Install a "
"Function Definition}.)"
msgstr ""
"Por otra parte, un s@'{@dotless{i}}mbolo puede estar ligado solo con una funci@'on\n"
"a la vez. De lo contrario, el ordenador\n"
"estar@'{@dotless{i}}a confundido acerca de qu@'e definici@'on usar. Si\n"
"este fuera el caso, solo una persona en el mundo podr@'{@dotless{i}}a\n"
"llamarse @samp{Bob}. Sin embargo, la definici@'on de funci@'on a la\n"
"que el nombre hace referencia puede cambiarse f@'acilmente.\n"
"(Ver @ref{Instalar, , Instalar una Definici@'on de Funci@'on}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1574
msgid ""
"Since Emacs Lisp is large, it is customary to name symbols in a way that "
"identifies the part of Emacs to which the function belongs.  Thus, all the "
"names for functions that deal with Texinfo start with @samp{texinfo-} and "
"those for functions that deal with reading mail start with @samp{rmail-}."
msgstr ""
"Ya que Emacs Lisp es extenso, se acostumbra nombrar los\n"
"s@'{@dotless{i}}mbolos de un modo que pueda establecerse a que parte de Emacs\n"
"pertenece la funci@'on. En consecuencia, todos los nombres de\n"
"funciones relacionadas con Texinfo empiezan con @samp{texinfo-} y aquellas\n"
"relaciondas con la lectura de correo empiezan con\n"
"@samp{rmail-}."

#. type: cindex
#: emacs-lisp-intro.texi:1577
#, no-wrap
msgid "Lisp interpreter, what it does"
msgstr "Int@'erprete Lisp, qu@'e hace"

#. type: cindex
#: emacs-lisp-intro.texi:1578
#, no-wrap
msgid "Interpreter, what it does"
msgstr "Int@'erprete, qu@'e hace"

#. type: Plain text
#: emacs-lisp-intro.texi:1588
msgid ""
"Based on what we have seen, we can now start to figure out what the Lisp "
"interpreter does when we command it to evaluate a list.  First, it looks to "
"see whether there is a quote before the list; if there is, the interpreter "
"just gives us the list.  On the other hand, if there is no quote, the "
"interpreter looks at the first element in the list and sees whether it has a "
"function definition.  If it does, the interpreter carries out the "
"instructions in the function definition.  Otherwise, the interpreter prints "
"an error message."
msgstr ""
"Basado en lo que se ha visto, ahora podemos empezar a entender lo que\n"
"el int@'eprete Lisp hace cuando mandamos a evaluar una\n"
"lista. Primero, examina si hay un s@'{@dotless{i}}mbolo cita\n"
"antes de la lista; si lo hay, el int@'erprete nos da la lista. Por otro\n"
"lado, si no hay cita, el int@'eprete mira si el primer elemento en la\n"
"lista tiene una definici@'on de funci@'on. Si no, el\n"
"int@'erprete imprime un mensaje de error."

#. type: Plain text
#: emacs-lisp-intro.texi:1594
msgid ""
"This is how Lisp works.  Simple.  There are added complications which we "
"will get to in a minute, but these are the fundamentals.  Of course, to "
"write Lisp programs, you need to know how to write function definitions and "
"attach them to names, and how to do this without confusing either yourself "
"or the computer."
msgstr ""
"As@'{@dotless{i}} es como Lisp trabaja. Simple. Hay complicaciones\n"
"a@~nadidas que veremos en un minuto, pero estos son\n"
"los fundamentos. Claro est@'a, para escribir programas Lisp, se necesita\n"
"conocer como escribir definiciones de funci@'on y vincularlas a\n"
"nombres, y como hacer esto sin confundirnos a nosotros mismos o al ordenador."

#. type: Plain text
#: emacs-lisp-intro.texi:1610
msgid ""
"Now, for the first complication.  In addition to lists, the Lisp interpreter "
"can evaluate a symbol that is not quoted and does not have parentheses "
"around it.  The Lisp interpreter will attempt to determine the symbol's "
"value as a @dfn{variable}.  This situation is described in the section on "
"variables.  (@xref{Variables}.)"
msgstr ""
"Ahora, una primera complicaci@'on. Adem@'as de las listas, el\n"
"int@'erprete Lisp puede evaluar un s@'{@dotless{i}}mbolo no\n"
"citado que no tiene par@'entesis\n"
"en torno a el. El int@'erprete Lisp intentar@'a determinar el valor del\n"
"s@'{@dotless{i}}mbolo como una @dfn{variable}. Esta situaci@'on es\n"
"descrita en el apartado de las variablesla. (Ver @ref{Variables}.)"

#. type: cindex
#: emacs-lisp-intro.texi:1611
#, no-wrap
msgid "Special form"
msgstr "Forma Especial"

#. type: Plain text
#: emacs-lisp-intro.texi:1617
msgid ""
"The second complication occurs because some functions are unusual and do not "
"work in the usual manner.  Those that don't are called @dfn{special forms}.  "
"They are used for special jobs, like defining a function, and there are not "
"many of them.  In the next few chapters, you will be introduced to several "
"of the more important special forms."
msgstr ""
"La segunda complicaci@'on ocurre debido a que algunas funciones son\n"
"inusuales y no funcionan de la manera habitual. Estas son llamadas\n"
"@dfn{formas especiales}. Son usadas para trabajos especiales, como\n"
"definir una funci@'on, y no son muchas de ellas. En los siguientes\n"
"cap@'{@dotless{i}}tulos, se introducir@'an varias de las\n"
"formas especiales m@'as importantes."

#. type: Plain text
#: emacs-lisp-intro.texi:1628
msgid ""
"The third and final complication is this: if the function that the Lisp "
"interpreter is looking at is not a special form, and if it is part of a "
"list, the Lisp interpreter looks to see whether the list has a list inside "
"of it.  If there is an inner list, the Lisp interpreter first figures out "
"what it should do with the inside list, and then it works on the outside "
"list.  If there is yet another list embedded inside the inner list, it works "
"on that one first, and so on.  It always works on the innermost list first.  "
"The interpreter works on the innermost list first, to evaluate the result of "
"that list.  The result may be used by the enclosing expression."
msgstr ""
"La tercera y final complicaci@'on es la siguiente: si la funci@'on que\n"
"el int@'erprete Lisp est@'a buscando no es una forma especial, y si\n"
"es parte de una lista, el int@'erprete Lisp mira si la lista\n"
"tiene una lista dentro de ella. Si hay una lista dentro, el int@'erprete Lisp\n"
"primero descubre qu@'e hacer con la lista interior, y luego trabaja en la\n"
"lista exterior. Si a@'un hay otra lista embebida\n"
"dentro de la lista interna, trabaja en esta primero, y\n"
"as@'{@dotless{i}}. Siempre se trabaja en la lista m@'as interna primero. El\n"
"int@'erprete trabaja en la lista más interana primero, para evaluar el\n"
"resultado de esta lista. El resultado puede ser usado por la\n"
"expresi@'on entre par@'entesis."

#. type: Plain text
#: emacs-lisp-intro.texi:1631
msgid ""
"Otherwise, the interpreter works left to right, from one expression to the "
"next."
msgstr ""
"Por lo dem@'as, el int@'erprete trabaja de izquierda a derecha, desde\n"
"una expresi@'on a la siguiente."

#. type: cindex
#: emacs-lisp-intro.texi:1634
#, no-wrap
msgid "Byte compiling"
msgstr "Compilando Byte"

#. type: Plain text
#: emacs-lisp-intro.texi:1641
msgid ""
"One other aspect of interpreting: the Lisp interpreter is able to interpret "
"two kinds of entity: humanly readable code, on which we will focus "
"exclusively, and specially processed code, called @dfn{byte compiled} code, "
"which is not humanly readable.  Byte compiled code runs faster than humanly "
"readable code."
msgstr ""
"Otro aspecto de interpretaci@'on: el int@'erprete Lisp es capaz de\n"
"interpretar dos tipos de entidad: c@'odigo humanamente legible, en el\n"
"que nos centraremos exclusivamente, y c@'odigo especialmente procesado,\n"
"llamado @dfn{byte compilado}, que no es humanamente legible. El\n"
"c@'odigo m@'aquina compilado se ejecuta m@'as r@'apido que el c@'odigo\n"
"humanamente legible."

#. type: Plain text
#: emacs-lisp-intro.texi:1648
msgid ""
"You can transform humanly readable code into byte compiled code by running "
"one of the compile commands such as @code{byte-compile-file}.  Byte compiled "
"code is usually stored in a file that ends with a @file{.elc} extension "
"rather than a @file{.el} extension.  You will see both kinds of file in the "
"@file{emacs/lisp} directory; the files to read are those with @file{.el} "
"extensions."
msgstr ""
"Tu puedes transformar c@'odigo legible por humanos en c@'odigo compilado\n"
"ejecutando uno de los comandos de compilacion como\n"
"@code{byte-compile-file}. El c@'odigo compilado es normalmente\n"
"almacenado en un fichero que finaliza con una extensi@'on @file{.elc}\n"
"en vez de una extensi@'on @file{.el}. Ver@'as ambos tipos de ficheros\n"
"en el directorio @file{emacs/lisp}; los ficheros para leer estos \n"
"tienen la extensi@'on @file{.el}."

#. type: Plain text
#: emacs-lisp-intro.texi:1654
msgid ""
"As a practical matter, for most things you might do to customize or extend "
"Emacs, you do not need to byte compile; and I will not discuss the topic "
"here.  @xref{Byte Compilation, , Byte Compilation, elisp, The GNU Emacs Lisp "
"Reference Manual}, for a full description of byte compilation."
msgstr ""
"Como una cuesti@'on pr@'actica, para hacer la mayor@'{@dotless{i}}a de las\n"
"cosas como personalizar o extender Emacs, no\n"
"necesitas compilar byte; y no comentare el asunto\n"
"aqu@'{@dotless{i}}. Ver @ref{Compilaci@'on de Byte, , Compilaci@'on de\n"
"Byte, elisp, El Manual de Referencia de GNU Emacs}, para una completa\n"
"descripci@'on sobre compilar c@'odigo."

#. type: Plain text
#: emacs-lisp-intro.texi:1665
msgid ""
"When the Lisp interpreter works on an expression, the term for the activity "
"is called @dfn{evaluation}.  We say that the interpreter `evaluates the "
"expression'.  I've used this term several times before.  The word comes from "
"its use in everyday language, `to ascertain the value or amount of; to "
"appraise', according to @cite{Webster's New Collegiate Dictionary}."
msgstr ""
"Cuando el int@'erprete Lisp trabaja en una expresi@'on, el t@'ermino\n"
"para la actividad es llamada @dfn{evaluaci@'on}. Decimos que el\n"
"int@'erprete `eval@'ua la expresi@'on'. Yo he usado este t@'ermino\n"
"varias veces antes. La palabra proviene de su uso en el lenguaje\n"
"cotidiano, `para determinar el valor o la cantidad de; para\n"
"estimar' de acuerdo a @cite{Webster's New Collegiate Dictionary}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:1673
#, no-wrap
msgid "How the Lisp Interpreter Acts"
msgstr "C@'omo el int@'erprete act@'ua"

#. type: cindex
#: emacs-lisp-intro.texi:1676
#, no-wrap
msgid "@samp{returned value} explained"
msgstr "@samp{valor devuelto} explicado"

#. type: Plain text
#: emacs-lisp-intro.texi:1685
msgid ""
"After evaluating an expression, the Lisp interpreter will most likely "
"@dfn{return} the value that the computer produces by carrying out the "
"instructions it found in the function definition, or perhaps it will give up "
"on that function and produce an error message.  (The interpreter may also "
"find itself tossed, so to speak, to a different function or it may attempt "
"to repeat continually what it is doing for ever and ever in what is called "
"an `infinite loop'.  These actions are less common; and we can ignore "
"them.)  Most frequently, the interpreter returns a value."
msgstr ""
"Despu@'es de evaluar una expresi@'on, el int@'erprete Lisp normalmente\n"
"@dfn{devuelve} el valor que el ordenador produce al llevar a cabo\n"
"las instrucciones encontradas en la definici@'on de la funci@'on, o\n"
"quiz@'as dar@'a esta funci@'on y producir@'a un mensaje de error. (El\n"
"int@'erprete puede tambi@'en quedarse colgado, por as@'{@dotless{i}}\n"
"decirlo, a una funci@'on diferente o puede intentar repetir\n"
"continuamente lo que est@'a haciendo y para siempre en lo que\n"
"se llama un `bucle infinito'. Estas acciones son menos\n"
"comunes; y pueden ignorarse). M@'as frecuentemente, el int@'erprete\n"
"devuelve un valor."

#. type: cindex
#: emacs-lisp-intro.texi:1686
#, no-wrap
msgid "@samp{side effect} defined"
msgstr "@samp{efecto lateral} definido"

#. type: Plain text
#: emacs-lisp-intro.texi:1693
msgid ""
"At the same time the interpreter returns a value, it may do something else "
"as well, such as move a cursor or copy a file; this other kind of action is "
"called a @dfn{side effect}.  Actions that we humans think are important, "
"such as printing results, are often ``side effects'' to the Lisp "
"interpreter.  The jargon can sound peculiar, but it turns out that it is "
"fairly easy to learn to use side effects."
msgstr ""
"Al mismo tiempo el int@'erprete devuelve un valor, puede hacer\n"
"cualquier cosa m@'as tambi@'en, tal como mover un cursor o copiar un\n"
"fichero; este otro tipo de acci@'on es llamado @dfn{efecto\n"
"secundario}. Acciones que los humanos creen que son importantes tales\n"
"como imprimir resultados, con frecuencia son, ``efectos secundarios'' del\n"
"int@'erprete Lisp. La jerga puede sonar peculiar, pero resulta que es\n"
"bastante f@'acil aprender a utilazar los efectos secundarios."

#. type: Plain text
#: emacs-lisp-intro.texi:1697
msgid ""
"In summary, evaluating a symbolic expression most commonly causes the Lisp "
"interpreter to return a value and perhaps carry out a side effect; or else "
"produce an error."
msgstr ""
"En resumen, evaluar una expresi@'on simb@'olica normalmente\n"
"causa que el int@'erprete devuelva un valor y tal vez llevar a cabo un efecto\n"
"secundario; o al menos produce un error."

#. type: cindex
#: emacs-lisp-intro.texi:1700
#, no-wrap
msgid "Inner list evaluation"
msgstr "Evaluaci@'on de listas internas"

#. type: cindex
#: emacs-lisp-intro.texi:1701
#, no-wrap
msgid "Evaluating inner lists"
msgstr "Evaluando listas internas"

#. type: Plain text
#: emacs-lisp-intro.texi:1708
msgid ""
"If evaluation applies to a list that is inside another list, the outer list "
"may use the value returned by the first evaluation as information when the "
"outer list is evaluated.  This explains why inner expressions are evaluated "
"first: the values they return are used by the outer expressions."
msgstr ""
"Si la evaluaci@'on se aplica a una lista que est@'a dentro de una\n"
"lista, la lista externa puede usar el valor devuelto por la primera\n"
"evaluaci@'on como informaci@'on cuando la lista externa es\n"
"evaluada. Esto explica por qu@'e las expresiones internas son evaluadas\n"
"primero: los valores devueltos son usados por las expresiones\n"
"externas."

#. type: Plain text
#: emacs-lisp-intro.texi:1712
msgid ""
"We can investigate this process by evaluating another addition example.  "
"Place your cursor after the following expression and type @kbd{C-x C-e}:"
msgstr ""
"Nosotros podemos investigar este proceso evaluando otro ejemplo\n"
"adicional. Coloca tu cursor despu@'es de la siguiente expresi@'on y\n"
"presiona @kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:1715 emacs-lisp-intro.texi:1741
#, no-wrap
msgid "(+ 2 (+ 3 3))\n"
msgstr "(+ 2 (+ 3 3))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1719
msgid "The number 8 will appear in the echo area."
msgstr "El n@'umero 8 aparecer@'a en el @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:1725
msgid ""
"What happens is that the Lisp interpreter first evaluates the inner "
"expression, @code{(+ 3 3)}, for which the value 6 is returned; then it "
"evaluates the outer expression as if it were written @code{(+ 2 6)}, which "
"returns the value 8.  Since there are no more enclosing expressions to "
"evaluate, the interpreter prints that value in the echo area."
msgstr ""
"Lo que ocurre es que el int@'erprete Lisp primero eval@'ua la\n"
"expresi@'on interna, @code{(+ 3 3)}, para que el valor 6 se devuelva;\n"
"a continuaci@'on eval@'ua la expresi@'on externa como si fuera escrita\n"
"@code{(+ 2 6)}, que devuelve el valor 8. Puesto que no hay m@'as\n"
"expresiones entre parentesis a evaluar el int@'erprete imprime este valor\n"
"en el @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:1731
msgid ""
"Now it is easy to understand the name of the command invoked by the "
"keystrokes @kbd{C-x C-e}: the name is @code{eval-last-sexp}.  The letters "
"@code{sexp} are an abbreviation for `symbolic expression', and @code{eval} "
"is an abbreviation for `evaluate'.  The command means `evaluate last "
"symbolic expression'."
msgstr ""
"Ahora es f@'acil comprender el nombre del comando invocado por\n"
"el atajo @kbd{C-x C-e}: el nombre es @code{eval-last-sexp}. Las letras\n"
"@code{sexp} son una abreviaci@'on para `expresi@'on simb@'olica', y\n"
"@code{eval} es una abreviaci@'on para `evaluar'. El comando significa\n"
"`evaluar la @'ultima expresi@'on simb@'olica'."

#. type: Plain text
#: emacs-lisp-intro.texi:1735
msgid ""
"As an experiment, you can try evaluating the expression by putting the "
"cursor at the beginning of the next line immediately following the "
"expression, or inside the expression."
msgstr ""
"Como un experimento, puedes intentar evaluar la expresi@'on\n"
"poniendo el cursor al principio de la siguiente l@'{@dotless{i}}nea\n"
"inmediatamente despu@'es de la expresi@'on, o dentro de la expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1738
msgid "Here is another copy of the expression:"
msgstr "Aqu@'{@dotless{i}} hay otra copia de la expresi@'on:"

#. type: Plain text
#: emacs-lisp-intro.texi:1751
msgid ""
"If you place the cursor at the beginning of the blank line that immediately "
"follows the expression and type @kbd{C-x C-e}, you will still get the value "
"8 printed in the echo area.  Now try putting the cursor inside the "
"expression.  If you put it right after the next to last parenthesis (so it "
"appears to sit on top of the last parenthesis), you will get a 6 printed in "
"the echo area! This is because the command evaluates the expression @code{(+ "
"3 3)}."
msgstr ""
"Si se posiciona el cursor al principio de la l@'{@dotless{i}}nea en\n"
"blanco que sigue inmediatamente a la expresi@'on y presionas @kbd{C-x\n"
"C-e}, todav@'{@dotless{i}}a se obtendr@'a el valor 8 impreso en el\n"
"@'area echo. Ahora intenta poner el cursor dentro de la\n"
"expresi@'on. Si lo coloca justo despu@'es del penultimo\n"
"par@'entesis (dara la impresi@'on de situarse sobre el\n"
"@'ultimo par@'entesis), @exclamdown{}obtendr@'a un 6 impreso en\n"
"el @'area echo!  Esto es porque el comando eval@'ua la expresi@'on\n"
"@code{(+ 3 3)}."

#. type: Plain text
#: emacs-lisp-intro.texi:1760
msgid ""
"Now put the cursor immediately after a number.  Type @kbd{C-x C-e} and you "
"will get the number itself.  In Lisp, if you evaluate a number, you get the "
"number itself---this is how numbers differ from symbols.  If you evaluate a "
"list starting with a symbol like @code{+}, you will get a value returned "
"that is the result of the computer carrying out the instructions in the "
"function definition attached to that name.  If a symbol by itself is "
"evaluated, something different happens, as we will see in the next section."
msgstr ""
"Ahora coloque el cursor inmediatamente despu@'es de un\n"
"n@'umero. Presiona @kbd{C-x C-e} y obtendr@'a el n@'umero en\n"
"s@'{@dotless{i}}. En Lisp, si eval@'uas un n@'umero, obtienes el\n"
"n@'umero en s@'{@dotless{i}}---as@'i es c@'omo los n@'umeros difieren\n"
"de los s@'{@dotless{i}}mbolos. Si se eval@'ua una lista que inicia con\n"
"un s@'{@dotless{i}}mbolo como @code{+}, tendr@'as un valor devuelto\n"
"que es el resultado del ordenador tras ejecutar las instrucciones que aparecen\n"
"en la definici@'on de la funci@'on adjunta a este nombre. Si un\n"
"s@'{@dotless{i}}mbolo por s@'{@dotless{i}} mismo es evaluado, algo\n"
"diferente sucede, como veremos en la siguiente secci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1773
msgid ""
"In Emacs Lisp, a symbol can have a value attached to it just as it can have "
"a function definition attached to it.  The two are different.  The function "
"definition is a set of instructions that a computer will obey.  A value, on "
"the other hand, is something, such as number or a name, that can vary (which "
"is why such a symbol is called a variable).  The value of a symbol can be "
"any expression in Lisp, such as a symbol, number, list, or string.  A symbol "
"that has a value is often called a @dfn{variable}."
msgstr ""
"En Emacs Lisp, un s@'{@dotless{i}}mbolo puede estar ligado a un valor\n"
"como a una definici@'on de funci@'on. Las dos son\n"
"diferentes. La definici@'on de funci@'on es un conjunto de\n"
"instrucciones que el ordenador ejecuta. Un valor, por otro lado, es\n"
"algo, como un n@'umero o un nombre, que puede variar (es por ello, que\n"
"tal s@'{@dotless{i}}mbolo es llamado variable). El valor\n"
"de un s@'{@dotless{i}}mbolo puede ser cualquier expresi@'on en Lisp, por\n"
"ejemplo un s@'{@dotless{i}}mbolo, n@'umero, lista, o cadena. Un\n"
"s@'{@dotless{i}}mbolo que tiene un valor es con frecuencia llamado una\n"
"@dfn{variable}."

#. type: Plain text
#: emacs-lisp-intro.texi:1780
msgid ""
"A symbol can have both a function definition and a value attached to it at "
"the same time.  Or it can have just one or the other.  The two are "
"separate.  This is somewhat similar to the way the name Cambridge can refer "
"to the city in Massachusetts and have some information attached to the name "
"as well, such as ``great programming center''."
msgstr ""
"Un s@'{@dotless{i}}mbolo puede tener ambos, una definici@'on de\n"
"funci@'on y un valor adjunto al mismo tiempo. O puede tener solo uno u\n"
"otro. Los dos son independientes. Esto es algo similar a la forma en que el\n"
"nombre Cambridge puede referirse a la ciudad en Massachusetts y tener\n"
"alguna informaci@'on ligada al nombre, por ejemplo, un ``gran\n"
"centro de programaci@'on''."

#. type: Plain text
#: emacs-lisp-intro.texi:1792
msgid ""
"Another way to think about this is to imagine a symbol as being a chest of "
"drawers.  The function definition is put in one drawer, the value in "
"another, and so on.  What is put in the drawer holding the value can be "
"changed without affecting the contents of the drawer holding the function "
"definition, and vice-verse."
msgstr ""
"Otra forma de pensar en esto es imaginar un s@'imbolo como un mueble con\n"
"cajones. La definici@'on de funci@'on se pone en un caj@'on, el valor en otro, y\n"
"asi sucesivamente. Lo que se pone en el cajón que contiene el valor puede\n"
"ser cambiado sin afectar los contenidos del caj@'on que almacena la\n"
"definici@'on de funci@'on, y viceversa."

#. type: node
#: emacs-lisp-intro.texi:1801
#, no-wrap
msgid "fill-column Example"
msgstr "Ejemplo de rellenar columna"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:1802
#, no-wrap
msgid "@code{fill-column}, an Example Variable"
msgstr "@code{fill-column}, un ejemplo de variable"

#. type: findex
#: emacs-lisp-intro.texi:1805
#, no-wrap
msgid "fill-column, @r{an example variable}"
msgstr "fill-column, @r{una variable de ejemplo}"

#. type: cindex
#: emacs-lisp-intro.texi:1806
#, no-wrap
msgid "Example variable, @code{fill-column}"
msgstr "Variable de Ejemplo, @code{fill-column}"

#. type: cindex
#: emacs-lisp-intro.texi:1807
#, no-wrap
msgid "Variable, example of, @code{fill-column}"
msgstr "Variable, ejemplo de, @code{fill-column}"

#. type: Plain text
#: emacs-lisp-intro.texi:1814
msgid ""
"The variable @code{fill-column} illustrates a symbol with a value attached "
"to it: in every GNU Emacs buffer, this symbol is set to some value, usually "
"72 or 70, but sometimes to some other value.  To find the value of this "
"symbol, evaluate it by itself.  If you are reading this in Info inside of "
"GNU Emacs, you can do this by putting the cursor after the symbol and typing "
"@kbd{C-x C-e}:"
msgstr ""
"La variable @code{fill-column} ilustra un s@'{@dotless{i}}mbolo con un\n"
"valor adjunto: en cada buffer de GNU Emacs, este s@'{@dotless{i}}mbolo\n"
"se establece a alg@'un valor, normalmente 72 o 70, pero algunas veces\n"
"a alg@'un otro valor. Para encontrar el valor de este\n"
"s@'{@dotless{i}}mbolo, eval@'ualo por s@'{@dotless{i}} mismo. Si est@'a\n"
"leyendo esto en Info dentro de GNU Emacs, puedes hacer esto\n"
"poniendo el cursor despu@'es del s@'{@dotless{i}}mbolo y pulsar\n"
"@kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:1817
#, no-wrap
msgid "fill-column\n"
msgstr "fill-column\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1828
msgid ""
"After I typed @kbd{C-x C-e}, Emacs printed the number 72 in my echo area.  "
"This is the value for which @code{fill-column} is set for me as I write "
"this.  It may be different for you in your Info buffer.  Notice that the "
"value returned as a variable is printed in exactly the same way as the value "
"returned by a function carrying out its instructions.  From the point of "
"view of the Lisp interpreter, a value returned is a value returned.  What "
"kind of expression it came from ceases to matter once the value is known."
msgstr ""
"Despu@'es de presionar @kbd{C-x C-e}, Emacs imprimi@'o el\n"
"n@'umero 72 en mi @'area echo. Este es el valor que he establecido para\n"
"@code{fill-column} mientras escribo esto. Puede\n"
"ser diferente para ti en tu b@'uffer Info. Observe que el valor devuelto\n"
"como una variable es impreso exactamente de la misma forma que el\n"
"valor devuelto por una funci@'on tras ejecutar sus instrucciones. Desde\n"
"el punto de vista del int@'erprete Lisp, un valor devuelto es un valor devuelto. Que\n"
"tipo de expresi@'on sea, deja de importar una vez que el valor\n"
"se conoce."

#. type: Plain text
#: emacs-lisp-intro.texi:1833
msgid ""
"A symbol can have any value attached to it or, to use the jargon, we can "
"@dfn{bind} the variable to a value: to a number, such as 72; to a string, "
"@code{\"such as this\"}; to a list, such as @code{(spruce pine oak)}; we can "
"even bind a variable to a function definition."
msgstr ""
"Un s@'{@dotless{i}}mbolo puede tener cualquier valor ligado a él o,\n"
"siendo tecnicos, se puede @dfn{bind} (asociar) la variable a un valor: a\n"
"un n@'umero, por ejemplo 72; a una cadena, @code{\\\"como esta\\\"}; a\n"
"una lista, como @code{(abeto pino roble)}; podemos incluso asociar\n"
"una variable a una definici@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1837
msgid ""
"A symbol can be bound to a value in several ways.  @xref{set & setq, , "
"Setting the Value of a Variable}, for information about one way to do this."
msgstr ""
"Un s@'{@dotless{i}}mbolo puede vincularse a un valor de varias\n"
"maneras. Ver @ref{set y setq, , Configurando el valor de una variable},\n"
"para obtener informaci@'on sobre una manera de hacer esto."

#. type: subsection
#: emacs-lisp-intro.texi:1839
#, no-wrap
msgid "Error Message for a Symbol Without a Function"
msgstr "Mensaje de error de un s@'{@dotless{i}}mbolo sin una funci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:1840
#, no-wrap
msgid "Symbol without function error"
msgstr "S@'{@dotless{i}}mbolo sin funci@'on de error"

#. type: cindex
#: emacs-lisp-intro.texi:1841
#, no-wrap
msgid "Error for symbol without function"
msgstr "Error para s@'{@dotless{i}}mbolo sin funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:1846
msgid ""
"When we evaluated @code{fill-column} to find its value as a variable, we did "
"not place parentheses around the word.  This is because we did not intend to "
"use it as a function name."
msgstr ""
"Cuando se eval@'ua @code{fill-column} para encontrar el valor de una\n"
"variable, no se ponen par@'entesis alrededor de la palabra. Esto es\n"
"porque no pretendemos usarlos como un nombre de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1851
msgid ""
"If @code{fill-column} were the first or only element of a list, the Lisp "
"interpreter would attempt to find the function definition attached to it.  "
"But @code{fill-column} has no function definition.  Try evaluating this:"
msgstr ""
"Si @code{fill-column} fuese el primer o @'unico elemento de una lista,\n"
"el int@'erprete de Lisp intentar@'{@dotless{i}}a encontrar la\n"
"definici@'on de funci@'on adjunta. Pero @code{fill-column} no tiene\n"
"una definici@'on de funci@'on. Prueba evaluando esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:1854
#, no-wrap
msgid "(fill-column)\n"
msgstr "(fill-column)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1859
msgid "You will create a @file{*Backtrace*} buffer that says:"
msgstr "Se crear@'a un buffer @file{*Backtrace*} que dice:"

#. type: group
#: emacs-lisp-intro.texi:1870
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function fill-column)\n"
"  (fill-column)\n"
"  eval((fill-column))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function fill-column)\n"
"  (fill-column)\n"
"  eval((fill-column))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1876
msgid ""
"(Remember, to quit the debugger and make the debugger window go away, type "
"@kbd{q} in the @file{*Backtrace*} buffer.)"
msgstr ""
"(Recuerda, para salir del depurador y hacer que la ventana del depurador\n"
"desaparezca, presiona @kbd{q} en el buffer @file{*Backtrace*}.)"

#. type: smallexample
#: emacs-lisp-intro.texi:1883
#, no-wrap
msgid "Symbol's function definition is void:@: fill-column\n"
msgstr "La definici@'on de s@'{@dotless{i}}mbolos de funci@'on:@: fill-column\n"

#. type: subsection
#: emacs-lisp-intro.texi:1891
#, no-wrap
msgid "Error Message for a Symbol Without a Value"
msgstr "Mensaje de error de un s@'{@dotless{i}}mbolo sin un valor"

#. type: cindex
#: emacs-lisp-intro.texi:1892
#, no-wrap
msgid "Symbol without value error"
msgstr "S@'{@dotless{i}}mbolo sin valor de error"

#. type: cindex
#: emacs-lisp-intro.texi:1893
#, no-wrap
msgid "Error for symbol without value"
msgstr "Error para s@'{@dotless{i}}mbolo sin valor"

#. type: Plain text
#: emacs-lisp-intro.texi:1900
msgid ""
"If you attempt to evaluate a symbol that does not have a value bound to it, "
"you will receive an error message.  You can see this by experimenting with "
"our 2 plus 2 addition.  In the following expression, put your cursor right "
"after the @code{+}, before the first number 2, type @kbd{C-x C-e}:"
msgstr ""
"Si se intenta evaluar un s@'{@dotless{i}}mbolo que no tiene un valor\n"
"asociado, recibir@'a un mensaje de error. Esto se puede ver\n"
"experimentando con nuestra suma 2 m@'as 2. En la siguiente\n"
"expresi@'on, pon el cursor correcto despu@'es del @code{+}, antes del\n"
"primer n@'umero 2, presiona @kbd{C-x C-e}:"

#. type: Plain text
#: emacs-lisp-intro.texi:1909
msgid "In GNU Emacs 22, you will create a @file{*Backtrace*} buffer that says:"
msgstr "En GNU Emacs 24, se crear@'a un buffer @file{*Backtrace*} que dice:"

#. type: group
#: emacs-lisp-intro.texi:1919
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-variable +)\n"
"  eval(+)\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-variable +)\n"
"  eval(+)\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:1925
msgid ""
"(Again, you can quit the debugger by typing @kbd{q} in the "
"@file{*Backtrace*} buffer.)"
msgstr ""
"(De nuevo, se puede salir del depurador pulsando @kbd{q} en el\n"
"b@'uffer @file{*Backtrace*}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:1931
msgid ""
"This backtrace is different from the very first error message we saw, which "
"said, @samp{Debugger entered--Lisp error: (void-function this)}.  In this "
"case, the function does not have a value as a variable; while in the other "
"error message, the function (the word `this') did not have a definition."
msgstr ""
"Esta traza es diferente del primer mensaje de error que\n"
"vimos, que dijimos, @samp{Debugger entered--Lisp error: (void-function\n"
"esto)}. En este caso, la funci@'on no\n"
"tiene una valor como una variable; mientras en el otro mensaje de\n"
"error, la funci@'on (la palabra `esto') no tuvo una definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1939
msgid ""
"In this experiment with the @code{+}, what we did was cause the Lisp "
"interpreter to evaluate the @code{+} and look for the value of the variable "
"instead of the function definition.  We did this by placing the cursor right "
"after the symbol rather than after the parenthesis of the enclosing list as "
"we did before.  As a consequence, the Lisp interpreter evaluated the "
"preceding s-expression, which in this case was @code{+} by itself."
msgstr ""
"En este experimento con el @code{+}, lo que se hizo fu@'e causar\n"
"que el int@'erprete Lisp eval@'ue el @code{+} y busque el valor de la\n"
"variable en vez de la definici@'on de la funci@'on. Hicimos\n"
"esto colocando el cursor justo despu@'es del s@'{@dotless{i}}mbolo en\n"
"lugar de ponerlo al final de los par@'entesis que cierran la lista como hicimos\n"
"antes. Como consecuencia, el int@'erprete Lisp evalu@'o la\n"
"s-expresi@'on anterior, que en este caso fu@'e el @code{+} en\n"
"s@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:1943
msgid ""
"Since @code{+} does not have a value bound to it, just the function "
"definition, the error message reported that the symbol's value as a variable "
"was void."
msgstr ""
"Ya que @code{+} no tiene un valor asociado, solo la definici@'on de\n"
"funci@'on, el mensaje de error informa que el valor del\n"
"s@'{@dotless{i}}mbolo como una variable estaba vac@'{@dotless{i}}o."

#. type: example
#: emacs-lisp-intro.texi:1950
#, no-wrap
msgid "Symbol's value as variable is void:@: +\n"
msgstr ""
"El valor de s@'{@dotless{i}}mbolo como variable est@'a\n"
"vac@'{@dotless{i}}o:@: +\n"

#. type: cindex
#: emacs-lisp-intro.texi:1959
#, no-wrap
msgid "Passing information to functions"
msgstr "Pasando informaci@'on para funciones"

#. type: Plain text
#: emacs-lisp-intro.texi:1964
msgid ""
"To see how information is passed to functions, let's look again at our old "
"standby, the addition of two plus two.  In Lisp, this is written as follows:"
msgstr ""
"Para ver c@'omo la informaci@'on se pasa a las funciones, veamos\n"
"de nuevo a nuestro viejo recurso, la adici@'on de dos m@'as dos. En\n"
"Lisp, esto se escribe como sigue:"

#. type: Plain text
#: emacs-lisp-intro.texi:1972
msgid ""
"If you evaluate this expression, the number 4 will appear in your echo "
"area.  What the Lisp interpreter does is add the numbers that follow the "
"@code{+}."
msgstr ""
"Si se eval@'ua esta expresi@'on, el n@'umero 4 aparecer@'a en tu @'area\n"
"echo. Lo que el int@'erprete de Lisp hace es sumar los n@'umeros despues\n"
"del @code{+}."

#. type: cindex
#: emacs-lisp-intro.texi:1973
#, no-wrap
msgid "@samp{argument} defined"
msgstr "@samp{argumento} definido"

#. type: Plain text
#: emacs-lisp-intro.texi:1977
msgid ""
"The numbers added by @code{+} are called the @dfn{arguments} of the function "
"@code{+}.  These numbers are the information that is given to or "
"@dfn{passed} to the function."
msgstr ""
"Los n@'umeros sumados por @code{+} son llamados @dfn{argumentos} de\n"
"la funci@'on @code{+}. Estos n@'umeros son la informaci@'on que se\n"
"da o @dfn{pasa} a la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:1997
msgid ""
"The word `argument' comes from the way it is used in mathematics and does "
"not refer to a disputation between two people; instead it refers to the "
"information presented to the function, in this case, to the @code{+}.  In "
"Lisp, the arguments to a function are the atoms or lists that follow the "
"function.  The values returned by the evaluation of these atoms or lists are "
"passed to the function.  Different functions require different numbers of "
"arguments; some functions require none at all.@footnote{It is curious to "
"track the path by which the word `argument' came to have two different "
"meanings, one in mathematics and the other in everyday English.  According "
"to the @cite{Oxford English Dictionary}, the word derives from the Latin for "
"@samp{to make clear, prove}; thus it came to mean, by one thread of "
"derivation, `the evidence offered as proof', which is to say, `the "
"information offered', which led to its meaning in Lisp.  But in the other "
"thread of derivation, it came to mean `to assert in a manner against which "
"others may make counter assertions', which led to the meaning of the word as "
"a disputation.  (Note here that the English word has two different "
"definitions attached to it at the same time.  By contrast, in Emacs Lisp, a "
"symbol cannot have two different function definitions at the same time.)}"
msgstr ""
"La palabra `argumento' viene del @'ambito de las matem@'aticas y no se\n"
"refiere a una disputa entre 2 personas, sino que se refiere a la\n"
"informaci@'on presentada a la funci@'on, en este caso, al @code{+}. En\n"
"Lisp, los argumentos de una funci@'on son los @'atomos o listas que\n"
"siguen a la funci@'on. Los valores devueltos por la evaluaci@'on de\n"
"estos @'atomos o listas son pasados a la funci@'on. Funciones\n"
"diferentes requieren diferentes n@'umeros de argumentos; algunas\n"
"funciones no requieren ninguno en absoluto.@footnote{Es curioso trazar la\n"
"ruta por la cual la palabra `argumento' llego a tener dos\n"
"significados distintos, uno en matem@'aticas y el otro en el ingl@'es\n"
"cotidiano. De acuerdo al @cite{Oxford English\n"
"Dictionary}, la palabra deriva del Lat@'{@dotless{i}}n para\n"
"@samp{dejar claro, probar}, por lo tanto, paso a significar, por un hilo de\n"
"derivaci@'on, `la evidencia ofrecida como prueba', es decir `la informaci@'on\n"
"que se ofrece', que conduce a su significado en Lisp.\n"
"Pero en el otro hilo de derivaci@'on, paso a significar `afirmar de una\n"
"manera lo que otros pueden afirmar en contra', lo que llevó a la disputa del\n"
"significado de la palabra. (N@'otese aqu@'{@dotless{i}} que la\n"
"palabra Ingl@'esa tiene dos definiciones diferentes adjuntas al mismo\n"
"tiempo. En contraste, en Emacs Lisp, un s@'{@dotless{i}}mbolo no puede\n"
"tener dos definiciones de funci@'on diferentes al mismo tiempo.)}"

#. type: subsection
#: emacs-lisp-intro.texi:2010
#, no-wrap
msgid "Arguments' Data Types"
msgstr "Tipos de argumentos de datos"

#. type: cindex
#: emacs-lisp-intro.texi:2012
#, no-wrap
msgid "Types of data"
msgstr "Tipos de datos"

#. type: cindex
#: emacs-lisp-intro.texi:2013
#, no-wrap
msgid "Arguments' data types"
msgstr "Tipos de dato de los argumentos"

#. type: Plain text
#: emacs-lisp-intro.texi:2019
msgid ""
"The type of data that should be passed to a function depends on what kind of "
"information it uses.  The arguments to a function such as @code{+} must have "
"values that are numbers, since @code{+} adds numbers.  Other functions use "
"different kinds of data for their arguments."
msgstr ""
"Los tipos de datos que deber@'{@dotless{i}}an ser pasados a una\n"
"funci@'on dependen de que tipo de informaci@'on usan. Los argumentos de\n"
"una funci@'on como @code{+} deben tener valores que son\n"
"n@'umeros, puesto que @code{+} a@~nade n@'umeros. Otras funciones usan\n"
"diferentes tipos de datos para sus argumentos."

#. type: findex
#: emacs-lisp-intro.texi:2021
#, no-wrap
msgid "concat"
msgstr "concatenar"

#. type: Plain text
#: emacs-lisp-intro.texi:2027
msgid ""
"For example, the @code{concat} function links together or unites two or more "
"strings of text to produce a string.  The arguments are strings.  "
"Concatenating the two character strings @code{abc}, @code{def} produces the "
"single string @code{abcdef}.  This can be seen by evaluating the following:"
msgstr ""
"Por ejemplo, la funci@'on @code{concat} concatena o une dos o m@'as\n"
"cadenas de texto para producir una cadena. Los argumentos son\n"
"cadenas. La concatenaci@'on de los dos caracteres de cadenas\n"
"@code{abc}, @code{def} produce una cadena @code{abcdef}. Esto\n"
"puede ser visto evaluando lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:2030
#, no-wrap
msgid "(concat \"abc\" \"def\")\n"
msgstr "(concat \"abc\" \"def\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2034
msgid "The value produced by evaluating this expression is @code{\"abcdef\"}."
msgstr "El valor producido para evaluar esta expresi@'on es @code{\"abcdef\"}."

#. type: Plain text
#: emacs-lisp-intro.texi:2042
msgid ""
"A function such as @code{substring} uses both a string and numbers as "
"arguments.  The function returns a part of the string, a substring of the "
"first argument.  This function takes three arguments.  Its first argument is "
"the string of characters, the second and third arguments are numbers that "
"indicate the beginning and end of the substring.  The numbers are a count of "
"the number of characters (including spaces and punctuation) from the "
"beginning of the string."
msgstr ""
"Una funci@'on tal como @code{substring} usa como argumento tanto una\n"
"cadena como n@'umeros. La funci@'on devuelve una parte de la cadena,\n"
"una subcadena del primer argumento. Esta funci@'on toma tres\n"
"argumentos. Su primer argumento es la cadena de caracteres, el segundo\n"
"y tercer argumento son n@'umeros que indican el principio y el fin de la\n"
"subcadena. Los n@'umeros son un conteo del n@'umero de caracteres\n"
"(incluyendo espacios y puntuaciones) desde el principio de la cadena."

#. type: Plain text
#: emacs-lisp-intro.texi:2045
msgid "For example, if you evaluate the following:"
msgstr "Por ejemplo, si eval@'ua lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:2048
#, no-wrap
msgid "(substring \"The quick brown fox jumped.\" 16 19)\n"
msgstr "(substring \"El r@'apido zorro marr@'on salt@'o.\" 10 15)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2053
msgid ""
"you will see @code{\"fox\"} appear in the echo area.  The arguments are the "
"string and the two numbers."
msgstr ""
"se ver@'a @code{\"zorro\"} en el @'area echo. Los argumentos son la cadena\n"
"y los dos n@'umeros."

#. type: Plain text
#: emacs-lisp-intro.texi:2062
msgid ""
"Note that the string passed to @code{substring} is a single atom even though "
"it is made up of several words separated by spaces.  Lisp counts everything "
"between the two quotation marks as part of the string, including the "
"spaces.  You can think of the @code{substring} function as a kind of `atom "
"smasher' since it takes an otherwise indivisible atom and extracts a part.  "
"However, @code{substring} is only able to extract a substring from an "
"argument that is a string, not from another type of atom such as a number or "
"symbol."
msgstr ""
"N@'otese que la cadena pasada a @code{substring} es un solo @'atomo\n"
"apesar de estar compuesto de varias palabras separadas por\n"
"espacios. Lisp considera que cualquier cosa entre dos marcas de cita es parte\n"
"de la cadena, incluyendo los espacios. Se puede pensar la funci@'on\n"
"@code{substring} como un tipo de `acelerador de particulas' ya que toma\n"
"un @'atomo indivisible y extrae una parte. Sin embargo,\n"
"@code{substring} solo es capaz de extraer una subcadena desde un\n"
"argumento que es una cadena, no otro tipo de @'atomo tal como un\n"
"n@'umero o s@'{@dotless{i}}mbolo."

#. type: subsection
#: emacs-lisp-intro.texi:2064
#, no-wrap
msgid "An Argument as the Value of a Variable or List"
msgstr "Un argumento como el valor de una variable o lista"

#. type: Plain text
#: emacs-lisp-intro.texi:2069
msgid ""
"An argument can be a symbol that returns a value when it is evaluated.  For "
"example, when the symbol @code{fill-column} by itself is evaluated, it "
"returns a number.  This number can be used in an addition."
msgstr ""
"Un argumento puede ser un s@'{@dotless{i}}mbolo que devuelva un valor\n"
"cuando es evaluado. Por ejemplo, evaluar el s@'{@dotless{i}}mbolo\n"
"@code{fill-column} en si, devuelve un\n"
"n@'umero. Este n@'umero puede ser usado en una adici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:2073
msgid ""
"Position the cursor after the following expression and type @kbd{C-x C-e}:"
msgstr ""
"Posicionar el cursor despu@'es de la siguiente expresi@'on y presiona\n"
"@kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:2076
#, no-wrap
msgid "(+ 2 fill-column)\n"
msgstr "(+ 2 fill-column)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2082
msgid ""
"The value will be a number two more than what you get by evaluating "
"@code{fill-column} alone.  For me, this is 74, because my value of "
"@code{fill-column} is 72."
msgstr ""
"El valor ser@'a dos m@'as el n@'umero que se obtiene al evaluar solamente\n"
"@code{fill-column}. En m@'{@dotless{i}} caso, este es 74, porque mi\n"
"valor de @code{fill-column} es 72."

#. type: Plain text
#: emacs-lisp-intro.texi:2089
msgid ""
"As we have just seen, an argument can be a symbol that returns a value when "
"evaluated.  In addition, an argument can be a list that returns a value when "
"it is evaluated.  For example, in the following expression, the arguments to "
"the function @code{concat} are the strings @w{@code{\"The \"}} and "
"@w{@code{\" red foxes.\"}} and the list @code{(number-to-string (+ 2 fill-"
"column))}."
msgstr ""
"Como acabamos de ver, un argumento puede ser un s@'{@dotless{i}}mbolo que \n"
"devuelve un valor cuando se eval@'ua. Adem@'as, un argumento puede \n"
"ser una lista que devuelve un valor cuando es evaluada. Por ejemplo, \n"
"en la siguiente expresi@'on, los argumentos de la funci@'on\n"
"@code{concat} son las cadenas @w{@code{\"Los\"}} y @w{@code{\" zorros\n"
"rojos.\"}} y la lista @code{(number-to-string (+ 2 fill-column))}."

#. type: smallexample
#: emacs-lisp-intro.texi:2093
#, no-wrap
msgid "(concat \"The \" (number-to-string (+ 2 fill-column)) \" red foxes.\")\n"
msgstr "(concat \"Los \" (number-to-string (+ 2 fill-column)) \" zorros rojos.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2103
msgid ""
"If you evaluate this expression---and if, as with my Emacs, @code{fill-"
"column} evaluates to 72---@code{\"The 74 red foxes.\"} will appear in the "
"echo area.  (Note that you must put spaces after the word @samp{The} and "
"before the word @samp{red} so they will appear in the final string.  The "
"function @code{number-to-string} converts the integer that the addition "
"function returns to a string.  @code{number-to-string} is also known as "
"@code{int-to-string}.)"
msgstr ""
"Si se eval@'ua esta expresi@'on---y si, como con mi Emacs,\n"
"@code{fill-column} se eval@'ua a 72---aparecer@'a @code{\"Los 74\n"
"zorros rojos.\"} en el @'area echo. (N@'otese que se debe poner espacio\n"
"despu@'es de la palabra @samp{Los} y antes de la palabra @samp{rojos}\n"
"y as@'{@dotless{i}} es como aparecer@'a en la cadena final. La\n"
"funci@'on @code{number-to-string} convierte el entero que devuelve la\n"
"funci@'on de adici@'on a una cadena. @code{number-to-string}\n"
"tambi@'en se conoce como @code{int-to-string}.)"

#. type: cindex
#: emacs-lisp-intro.texi:2106
#, no-wrap
msgid "Variable number of arguments"
msgstr "N@'umero variable de argumentos"

#. type: cindex
#: emacs-lisp-intro.texi:2107
#, no-wrap
msgid "Arguments, variable number of"
msgstr "Argumentos, n@'umero variable de"

#. type: Plain text
#: emacs-lisp-intro.texi:2114
msgid ""
"Some functions, such as @code{concat}, @code{+} or @code{*}, take any number "
"of arguments.  (The @code{*} is the symbol for multiplication.)  This can be "
"seen by evaluating each of the following expressions in the usual way.  What "
"you will see in the echo area is printed in this text after "
"@samp{@result{}}, which you may read as `evaluates to'."
msgstr ""
"Algunas funciones, como @code{concat}, @code{+}, o @code{*},\n"
"toman cualquier n@'umero de argumentos. (El @code{*} es el\n"
"s@'{@dotless{i}}mbolo para multiplicar.) Esto puede ser visto\n"
"evaluando cada una de las siguientes expresiones de la forma\n"
"habitual. Lo que ver@'as en el @'area echo se imprime en este texto\n"
"despu@'es de @samp{@result{}}, que se puede leer como `evaluar a'."

#. type: Plain text
#: emacs-lisp-intro.texi:2117
msgid "In the first set, the functions have no arguments:"
msgstr "En el primer conjunto, las funciones no tienen argumentos:"

#. type: group
#: emacs-lisp-intro.texi:2121
#, no-wrap
msgid ""
"(+)       @result{} 0\n"
"\n"
msgstr ""
"(+)       @result{} 0\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:2123
#, no-wrap
msgid "(*)       @result{} 1\n"
msgstr "(*)       @result{} 1\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2128
msgid "In this set, the functions have one argument each:"
msgstr "En este conjunto, las funciones tienen un argumento cada una:"

#. type: group
#: emacs-lisp-intro.texi:2132
#, no-wrap
msgid ""
"(+ 3)     @result{} 3\n"
"\n"
msgstr ""
"(+ 3)     @result{} 3\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:2134
#, no-wrap
msgid "(* 3)     @result{} 3\n"
msgstr "(* 3)     @result{} 3\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2139
msgid "In this set, the functions have three arguments each:"
msgstr "En este conjunto, las funciones tienen tres argumentos cada una:"

#. type: group
#: emacs-lisp-intro.texi:2143
#, no-wrap
msgid ""
"(+ 3 4 5) @result{} 12\n"
"\n"
msgstr ""
"(+ 3 4 5) @result{} 12\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:2145
#, no-wrap
msgid "(* 3 4 5) @result{} 60\n"
msgstr "(* 3 4 5) @result{} 60\n"

#. type: subsection
#: emacs-lisp-intro.texi:2149
#, no-wrap
msgid "Using the Wrong Type Object as an Argument"
msgstr "Usando el tipo incorrecto de objeto como un argumento"

#. type: cindex
#: emacs-lisp-intro.texi:2150
#, no-wrap
msgid "Wrong type of argument"
msgstr "Tipo incorrecto de argumento"

#. type: cindex
#: emacs-lisp-intro.texi:2151
#, no-wrap
msgid "Argument, wrong type of"
msgstr "Argumento, tipo incorrecto de"

#. type: Plain text
#: emacs-lisp-intro.texi:2159
msgid ""
"When a function is passed an argument of the wrong type, the Lisp "
"interpreter produces an error message.  For example, the @code{+} function "
"expects the values of its arguments to be numbers.  As an experiment we can "
"pass it the quoted symbol @code{hello} instead of a number.  Position the "
"cursor after the following expression and type @kbd{C-x C-e}:"
msgstr ""
"Cuando a una funci@'on se le pasa un argumento del tipo incorrecto, el\n"
"interpr@'ete Lisp produce un mensaje de error. Por ejemplo, la\n"
"funci@'on @code{+} espera que los valores de sus argumentos sean\n"
"n@'umeros. Como un experimento podemos pasar el\n"
"s@'{@dotless{i}}mbolo citado @code{hola} en vez de un\n"
"n@'umero. Coloca el cursor despu@'es de la siguiente expresi@'on y\n"
"presiona @kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:2162
#, no-wrap
msgid "(+ 2 'hello)\n"
msgstr "(+ 2 'hola)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2170
msgid ""
"When you do this you will generate an error message.  What has happened is "
"that @code{+} has tried to add the 2 to the value returned by @code{'hello}, "
"but the value returned by @code{'hello} is the symbol @code{hello}, not a "
"number.  Only numbers can be added.  So @code{+} could not carry out its "
"addition."
msgstr ""
"Al hacer esto se generar@'a un mensaje de error. Lo qu@'e ha\n"
"ocurrido es que @code{+} ha intentado a@~nadir el 2 al valor\n"
"devuelto por @code{'hola}, pero el valor devuelto por @code{'hola}\n"
"es el s@'{@dotless{i}}mbolo @code{hola}, no un n@'umero. Solo los\n"
"n@'umeros pueden ser a@~nadidos. Por tanto @code{+}\n"
"no pudo llevar a cabo su adici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:2173
msgid "You will create and enter a @file{*Backtrace*} buffer that says:"
msgstr "Se crear@'a e introducir@'a un b@'uffer @file{*Backtrace*} que dice:"

#. type: group
#: emacs-lisp-intro.texi:2186
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error:\n"
"         (wrong-type-argument number-or-marker-p hello)\n"
"  +(2 hello)\n"
"  eval((+ 2 (quote hello)))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p hola)\n"
"  +(2 hola)\n"
"  eval((+ 2 (quote hola)))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2193
msgid ""
"As usual, the error message tries to be helpful and makes sense after you "
"learn how to read it.@footnote{@code{(quote hello)} is an expansion of the "
"abbreviation @code{'hello}.}"
msgstr ""
"Como de costumbre, el mensaje de error intenta ser @'util y tiene sentido\n"
"despu@'es de aprender c@'omo leerlo.@footnote{@code{(quote\n"
"hola)} es una expansi@'on de la abreviatura @code{'hola}.}"

#. type: Plain text
#: emacs-lisp-intro.texi:2198
msgid ""
"The first part of the error message is straightforward; it says @samp{wrong "
"type argument}.  Next comes the mysterious jargon word @w{@samp{number-or-"
"marker-p}}.  This word is trying to tell you what kind of argument the "
"@code{+} expected."
msgstr ""
"La primera parte del mensaje de error es sencilla; dice @samp{wrong\n"
"type argument} (tipo de argumento incorrecto). A continuación viene la\n"
"misteriosa palabra tecnica @w{@samp{number-or-marker-p}}. Esta\n"
"palabra est@'a intentando decirte qu@'e tipo de argumento espera @code{+}."

#. type: Plain text
#: emacs-lisp-intro.texi:2211
msgid ""
"The symbol @code{number-or-marker-p} says that the Lisp interpreter is "
"trying to determine whether the information presented it (the value of the "
"argument) is a number or a marker (a special object representing a buffer "
"position).  What it does is test to see whether the @code{+} is being given "
"numbers to add.  It also tests to see whether the argument is something "
"called a marker, which is a specific feature of Emacs Lisp.  (In Emacs, "
"locations in a buffer are recorded as markers.  When the mark is set with "
"the @kbd{C-@@} or @kbd{C-@key{SPC}} command, its position is kept as a "
"marker.  The mark can be considered a number---the number of characters the "
"location is from the beginning of the buffer.)  In Emacs Lisp, @code{+} can "
"be used to add the numeric value of marker positions as numbers."
msgstr ""
"El s@'{@dotless{i}}mbolo @code{number-or-marker-p} dice que el\n"
"int@'erprete Lisp est@'a intentando determinar si la informaci@'on\n"
"presentada (el valor del argumento) es un n@'umero o una marca (un\n"
"objeto especial que representa una posici@'on de buffer). Lo que hace\n"
"es probar si se le estan dando numeros a sumar a @code{+}.\n"
"Tambi@'en chequea si el argumento es algo llamado\n"
"un marcador, que es una caracteristica espec@'{@dotless{i}}fica de\n"
"Emacs Lisp. (En Emacs, las ubicaciones en un b@'uffer se registran\n"
"como marcadores. Cuando se establece la marca con el comando\n"
"@kbd{C-@@} o @kbd{C-@key{SPC}}, su posici@'on se guarda como un\n"
"marcador. La marca puede ser considerada como un n@'umero---el n@'umero de\n"
"caracteres es la localizaci@'on desde el principio del b@'uffer.)\n"
"En Emacs Lisp, @code{+} se puede utilizar para a@~nadir el valor\n"
"num@'erico de los marcadores como n@'umeros."

#. type: Plain text
#: emacs-lisp-intro.texi:2222
msgid ""
"The @samp{p} of @code{number-or-marker-p} is the embodiment of a practice "
"started in the early days of Lisp programming.  The @samp{p} stands for "
"`predicate'.  In the jargon used by the early Lisp researchers, a predicate "
"refers to a function to determine whether some property is true or false.  "
"So the @samp{p} tells us that @code{number-or-marker-p} is the name of a "
"function that determines whether it is true or false that the argument "
"supplied is a number or a marker.  Other Lisp symbols that end in @samp{p} "
"include @code{zerop}, a function that tests whether its argument has the "
"value of zero, and @code{listp}, a function that tests whether its argument "
"is a list."
msgstr ""
"La @samp{p} de @code{number-or-marker-p} es la encarnaci@'on de una\n"
"pr@'actica iniciada en los primeros d@'{@dotless{i}}as de la\n"
"programaci@'on Lisp. La @samp{p} significa `predicado'. En la jerga\n"
"usada por los primeros investigadores de Lisp, un predicado se refiere\n"
"a una funci@'on para determinar si alguna propiedad es verdadera o\n"
"falsa. As@'{@dotless{i}} la @samp{p} nos dice que\n"
"@code{number-or-marker-p} es el nombre de una funci@'on que determina\n"
"si el argumento dado es un n@'umero o una marca. Otros\n"
"s@'{@dotless{i}}mbolos Lisp que finalizan en @samp{p} incluyen\n"
"@code{zerop}, una funci@'on que chequea si su argumento tienen el\n"
"valor de cero, y @code{listp}, una funci@'on que prueba si su\n"
"argumento es una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:2228
msgid ""
"Finally, the last part of the error message is the symbol @code{hello}.  "
"This is the value of the argument that was passed to @code{+}.  If the "
"addition had been passed the correct type of object, the value passed would "
"have been a number, such as 37, rather than a symbol like @code{hello}.  But "
"then you would not have got the error message."
msgstr ""
"Finalmente, la @'ultima parte del mensaje de error es el\n"
"s@'{@dotless{i}}mbolo @code{hola}. Este es el valor del argumento\n"
"dado a @code{+}. Si a la adici@'on se le hubiese pasado el\n"
"tipo correcto de objeto, el valor habr@'{@dotless{i}}a sido un\n"
"n@'umero, como 37, en lugar de un s@'{@dotless{i}}mbolo como\n"
"@code{hola}. Pero entonces no habr@'{@dotless{i}}as obtenido el\n"
"mensaje de error."

#. type: smallexample
#: emacs-lisp-intro.texi:2236
#, no-wrap
msgid "Wrong type argument:@: number-or-marker-p, hello\n"
msgstr "Mal tipo de argumento:@: number-or-marker-p, hello\n"

#. type: subsection
#: emacs-lisp-intro.texi:2243
#, no-wrap
msgid "The @code{message} Function"
msgstr "La funci@'on @code{message}"

#. type: Plain text
#: emacs-lisp-intro.texi:2249
msgid ""
"Like @code{+}, the @code{message} function takes a variable number of "
"arguments.  It is used to send messages to the user and is so useful that we "
"will describe it here."
msgstr ""
"Al igual que @code{+}, la funci@'on @code{message} toma un n@'umero variable\n"
"de argumentos. Se utiliza para enviar mensajes al usuario y es\n"
"tan @'util que vamos a describirla."

#. type: Plain text
#: emacs-lisp-intro.texi:2253
msgid ""
"A message is printed in the echo area.  For example, you can print a message "
"in your echo area by evaluating the following list:"
msgstr ""
"Se impre un mensaje en el @'area echo. Por ejemplo, puede\n"
"imprimir un mensaje en su @'area echo evaluando la siguiente lista:"

#. type: smallexample
#: emacs-lisp-intro.texi:2256
#, no-wrap
msgid "(message \"This message appears in the echo area!\")\n"
msgstr "(message \"@exclamdown{}Este mensaje aparece en el @'area echo!\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2266
msgid ""
"The whole string between double quotation marks is a single argument and is "
"printed @i{in toto}.  (Note that in this example, the message itself will "
"appear in the echo area within double quotes; that is because you see the "
"value returned by the @code{message} function.  In most uses of "
"@code{message} in programs that you write, the text will be printed in the "
"echo area as a side-effect, without the quotes.  @xref{multiply-by-seven in "
"detail, , @code{multiply-by-seven} in detail}, for an example of this.)"
msgstr ""
"Toda la cadena entre comillas dobles es un unico argumento y se\n"
"imprime @i{en su totalidad}. (N@'otese que en este ejemplo, el mensaje en\n"
"s@'{@dotless{i}} aparece en el @'area echo entre comillas\n"
"dobles; esto se debe a que ves el valor devuelto por la funci@'on\n"
"@code{message}. En la mayor@'{@dotless{i}}a de programas que escribiras,\n"
"el texto ser@'a impreso en\n"
"el @'area echo como un efecto secundario de @code{message}, sin las\n"
"comillas. Ver @ref{multiply-by-seven en detalle, ,\n"
"@code{multiply-by-seven} en detalle}, para un ejemplo de esto.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2272
msgid ""
"However, if there is a @samp{%s} in the quoted string of characters, the "
"@code{message} function does not print the @samp{%s} as such, but looks to "
"the argument that follows the string.  It evaluates the second argument and "
"prints the value at the location in the string where the @samp{%s} is."
msgstr ""
"Sin embargo, si hay un @samp{%s} en la cadena de caracteres citada, la\n"
"funci@'on @code{message} no imprime el @samp{%s} como tal, pero mira\n"
"el siguente argumento a continuaci@'on de la cadena. Se eval@'ua el segundo argumento e\n"
"imprime el valor en la ubicaci@'on de la cadena donde est@'a el @samp{%s} ."

#. type: Plain text
#: emacs-lisp-intro.texi:2276
msgid ""
"You can see this by positioning the cursor after the following expression "
"and typing @kbd{C-x C-e}:"
msgstr ""
"Puede ver esto colocando el cursor despu@'es de la siguiente\n"
"expresi@'on y presionar @kbd{C-x C-e}:"

#. type: smallexample
#: emacs-lisp-intro.texi:2279
#, no-wrap
msgid "(message \"The name of this buffer is: %s.\" (buffer-name))\n"
msgstr "(message \"El nombre de este b@'uffer es: %s.\" (buffer-name))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2286
msgid ""
"In Info, @code{\"The name of this buffer is: *info*.\"} will appear in the "
"echo area.  The function @code{buffer-name} returns the name of the buffer "
"as a string, which the @code{message} function inserts in place of @code{%s}."
msgstr ""
"En Info, @code{\"El nombre de este b@'uffer es: *info*.\"} aparecer@'a\n"
"en el @'area echo. La funci@'on @code{buffer-name} devuelve el nombre\n"
"del b@'uffer como una cadena, que la funci@'on @code{message} inserta\n"
"en lugar de @code{%s}."

#. type: Plain text
#: emacs-lisp-intro.texi:2290
msgid ""
"To print a value as an integer, use @samp{%d} in the same way as @samp{%s}.  "
"For example, to print a message in the echo area that states the value of "
"the @code{fill-column}, evaluate the following:"
msgstr ""
"Para imprimir un valor como un entero, utiliza @samp{%d} de la misma forma\n"
"que @samp{%s}. Por ejemplo, para imprimir un mensaje en el\n"
"@'area echo que indique el valor de @code{fill-column}, eval@'ua lo\n"
"siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:2293
#, no-wrap
msgid "(message \"The value of fill-column is %d.\" fill-column)\n"
msgstr "(message \"El valor de fill-column es %d.\" fill-column)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2301
msgid ""
"On my system, when I evaluate this list, @code{\"The value of fill-column is "
"72.\"} appears in my echo area@footnote{Actually, you can use @code{%s} to "
"print a number.  It is non-specific.  @code{%d} prints only the part of a "
"number left of a decimal point, and not anything that is not a number.}."
msgstr ""
"En mi sistema, cuando eval@'uo esta lista, @code{\"El valor de\n"
"fill-column es 72\"} aparece en mi @'area echo@footnote{Actualmente,\n"
"puede usar @code{%s} para imprimir un n@'umero. Es no\n"
"espec@'{@dotless{i}}fico. @code{%d} imprime solo la parte de un\n"
"n@'umero a la izquierda del punto decimal, y no cualquier cosa que\n"
"no es un n@'umero.}"

#. type: Plain text
#: emacs-lisp-intro.texi:2306
msgid ""
"If there is more than one @samp{%s} in the quoted string, the value of the "
"first argument following the quoted string is printed at the location of the "
"first @samp{%s} and the value of the second argument is printed at the "
"location of the second @samp{%s}, and so on."
msgstr ""
"Si hay m@'as de un @samp{%s} en la cadena citada, el valor del primer\n"
"argumento despu@'es de la cadena citada se imprime en la posici@'on del\n"
"primer @samp{%s} y el valor del segundo argunmento se imprime en la\n"
"posici@'on del segundo @samp{%s}, y as@'{@dotless{i}} sucesivamente."

#. type: Plain text
#: emacs-lisp-intro.texi:2309
msgid "For example, if you evaluate the following,"
msgstr "Por ejemplo, si se eval@'ua lo siguiente,"

#. type: group
#: emacs-lisp-intro.texi:2314
#, no-wrap
msgid ""
"(message \"There are %d %s in the office!\"\n"
"         (- fill-column 14) \"pink elephants\")\n"
msgstr ""
"(message \"@exclamdown{}Hay %d %s en la oficina!\"\n"
"         (- fill-column 14) \"elefantes rosas\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2320
msgid ""
"a rather whimsical message will appear in your echo area.  On my system it "
"says, @code{\"There are 58 pink elephants in the office!\"}."
msgstr ""
"un mensaje caracter@'{@dotless{i}}stico aparecer@'a en el @'area\n"
"echo. En mi sistema dice @code{\"@exclamdown{}Hay 58 elefantes rosas en\n"
"la oficina!\"}"

#. type: Plain text
#: emacs-lisp-intro.texi:2326
msgid ""
"The expression @code{(- fill-column 14)} is evaluated and the resulting "
"number is inserted in place of the @samp{%d}; and the string in double "
"quotes, @code{\"pink elephants\"}, is treated as a single argument and "
"inserted in place of the @samp{%s}.  (That is to say, a string between "
"double quotes evaluates to itself, like a number.)"
msgstr ""
"Se evalua la expresi@'on @code{(- fill-column 14)} y el n@'umero\n"
"resultante se inserta en lugar del @samp{%d}; y la cadena entre\n"
"comillas dobles, @code{\"elefantes rosas\"}, se trata como un\n"
"solo argumento y se inserta en lugar del @samp{%s}. (Esto es decir,\n"
"una cadena entre comillas dobles se eval@'ua as@'{@dotless{i}} misma,\n"
"como un n@'umero.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2331
msgid ""
"Finally, here is a somewhat complex example that not only illustrates the "
"computation of a number, but also shows how you can use an expression within "
"an expression to generate the text that is substituted for @samp{%s}:"
msgstr ""
"Finalmente, aqu@'{@dotless{i}} est@'a un ejemplo algo complejo que no\n"
"solo ilustra el c@'alculo de un n@'umero, tambi@'en muestra\n"
"como se puede usar una expresi@'on dentro de una expresi@'on para generar el texto que\n"
"sustituira el @samp{%s}:"

#. type: group
#: emacs-lisp-intro.texi:2340
#, no-wrap
msgid ""
"(message \"He saw %d %s\"\n"
"         (- fill-column 32)\n"
"         (concat \"red \"\n"
"                 (substring\n"
"                  \"The quick brown foxes jumped.\" 16 21)\n"
"                 \" leaping.\"))\n"
msgstr ""
"(message \"@'El vi@'o %d %s\"\n"
"         (- fill-column 36)\n"
"         (concat (substring\n"
"                  \"Los r@'apidos zorros marrones saltaron.\" 12 18)\n"
"                  \" rojos trotando.\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2349
msgid ""
"In this example, @code{message} has three arguments: the string, @code{\"He "
"saw %d %s\"}, the expression, @code{(- fill-column 32)}, and the expression "
"beginning with the function @code{concat}.  The value resulting from the "
"evaluation of @code{(- fill-column 32)} is inserted in place of the "
"@samp{%d}; and the value returned by the expression beginning with "
"@code{concat} is inserted in place of the @samp{%s}."
msgstr ""
"En este ejemplo, @code{message} tiene tres argumentos: la cadena,\n"
"@code{\"@'El vi@'o %d %s\"}, la expresi@'on, @code{(- fill-column 32)}, y la expresi@'on a partir de\n"
"la funci@'on @code{concat}. El valor resultante desde la evaluaci@'on\n"
"de @code{(- fill-column 32)} se inserta en lugar del @samp{%d}; y\n"
"el valor devuelto por la expresi@'on que inicia con @code{concat} se\n"
"inserta en lugar del @samp{%s}."

#. type: Plain text
#: emacs-lisp-intro.texi:2353
msgid ""
"When your fill column is 70 and you evaluate the expression, the message "
"@code{\"He saw 38 red foxes leaping.\"} appears in your echo area."
msgstr ""
"Cuando @code{fill-column} es 70 y se eval@'ua la expresi@'on, aparecera el\n"
"mensaje @code{\"@'El vi@'o 41 zorros rojos trotando.\"} en tu\n"
"@'area echo."

#. type: cindex
#: emacs-lisp-intro.texi:2356
#, no-wrap
msgid "Variable, setting value"
msgstr "Variable, asignando valor"

#. type: cindex
#: emacs-lisp-intro.texi:2357
#, no-wrap
msgid "Setting value of variable"
msgstr "Asignando valor de variable"

#. type: cindex
#: emacs-lisp-intro.texi:2359
#, no-wrap
msgid "@samp{bind} defined"
msgstr "@samp{bind} se defini@'o"

#. type: Plain text
#: emacs-lisp-intro.texi:2364
msgid ""
"There are several ways by which a variable can be given a value.  One of the "
"ways is to use either the function @code{set} or the function @code{setq}.  "
"Another way is to use @code{let} (@pxref{let}).  (The jargon for this "
"process is to @dfn{bind} a variable to a value.)"
msgstr ""
"Hay varias formas de asignar un valor a una variable. Una de\n"
"ellas es usar la funci@'on @code{set} o la funci@'on\n"
"@code{setq}. Otra forma es usar @code{let} (@pxref{let}). (La jerga\n"
"para este proceso es @dfn{bind} (ligar) una variable a un valor.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2367
msgid ""
"The following sections not only describe how @code{set} and @code{setq} work "
"but also illustrate how arguments are passed."
msgstr ""
"Las siguientes secciones no solo describen c@'omo operan @code{set} y\n"
"@code{setq}, tambi@'en ilustran como se pasan los argumentos."

#. type: subsection
#: emacs-lisp-intro.texi:2375
#, no-wrap
msgid "Using @code{set}"
msgstr "Usando @code{set}"

#. type: itemx
#: emacs-lisp-intro.texi:2376 emacs-lisp-intro.texi:4575
#, no-wrap
msgid "set"
msgstr "set"

#. type: Plain text
#: emacs-lisp-intro.texi:2381
msgid ""
"To set the value of the symbol @code{flowers} to the list @code{'(rose "
"violet daisy buttercup)}, evaluate the following expression by positioning "
"the cursor after the expression and typing @kbd{C-x C-e}."
msgstr ""
"Para establecer el valor del s@'{@dotless{i}}mbolo @code{flores} a la\n"
"lista @code{'(rosa violeta margarita bot@'ondeoro)}, eval@'ua la\n"
"siguiente expresi@'on colocando el cursor despu@'es de la\n"
"expresi@'on y presiona @kbd{C-x C-e}."

#. type: smallexample
#: emacs-lisp-intro.texi:2384
#, no-wrap
msgid "(set 'flowers '(rose violet daisy buttercup))\n"
msgstr "(set 'flores '(rosa violeta margarita bot@'ondeoro))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2396
msgid ""
"The list @code{(rose violet daisy buttercup)} will appear in the echo area.  "
"This is what is @emph{returned} by the @code{set} function.  As a side "
"effect, the symbol @code{flowers} is bound to the list; that is, the symbol "
"@code{flowers}, which can be viewed as a variable, is given the list as its "
"value.  (This process, by the way, illustrates how a side effect to the Lisp "
"interpreter, setting the value, can be the primary effect that we humans are "
"interested in.  This is because every Lisp function must return a value if "
"it does not get an error, but it will only have a side effect if it is "
"designed to have one.)"
msgstr ""
"La lista @code{(rosa violeta margarita bot@'ondeoro)} aparecer@'a en el\n"
"@'area echo. Esto es @emph{devuelto} por la funci@'on\n"
"@code{set}. Como efecto secundario, el s@'{@dotless{i}}mbolo\n"
"@code{flores} est@'a ligado a la lista; es decir, el\n"
"s@'{@dotless{i}}mbolo @code{flores}, puede ser visto como una\n"
"variable, que entrega la lista como su valor. (Este proceso, \n"
"ilustra un efecto lateral al int@'erprete Lisp: asignando el valor, \n"
"que puede ser el efecto primario en el que los humanos\n"
"estamos interesados. Esto se debe a que cada funci@'on Lisp debe devolver\n"
"un valor si no se obtiene un error, pero solo tendr@'a un efecto\n"
"secundario si est@'a dise@~nado para tener uno.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2400
msgid ""
"After evaluating the @code{set} expression, you can evaluate the symbol "
"@code{flowers} and it will return the value you just set.  Here is the "
"symbol.  Place your cursor after it and type @kbd{C-x C-e}."
msgstr ""
"Despu@'es de evaluar la expresi@'on @code{set}, se puede evaluar el\n"
"s@'{@dotless{i}}mbolo @code{flores} y devolver@'a el valor\n"
"asignado. Aqu@'{@dotless{i}} est@'a el s@'{@dotless{i}}mbolo. Coloca\n"
"el cursor al final de este y presiona @kbd{C-x C-e}."

#. type: smallexample
#: emacs-lisp-intro.texi:2403
#, no-wrap
msgid "flowers\n"
msgstr "flores\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2408
msgid ""
"When you evaluate @code{flowers}, the list @code{(rose violet daisy "
"buttercup)} appears in the echo area."
msgstr ""
"Cuando se eval@'ua @code{flores}, la lista @code{(rosa violeta margarita\n"
"bot@'ondeoro)} aparece en el @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:2412
msgid ""
"Incidentally, if you evaluate @code{'flowers}, the variable with a quote in "
"front of it, what you will see in the echo area is the symbol itself, "
"@code{flowers}.  Here is the quoted symbol, so you can try this:"
msgstr ""
"Por cierto, si se eval@'ua @code{'flores}, la variable con una\n"
"comilla en frente, lo que ver@'a en el @'area echo es el\n"
"s@'{@dotless{i}}mbolo en s@'{@dotless{i}} mismo: @code{flores}. \n"
"Aqu@'{@dotless{i}} est@'a el s@'{@dotless{i}}mbolo citado, \n"
"para que pueda probar esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:2415
#, no-wrap
msgid "'flowers\n"
msgstr "'flores\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2429
msgid ""
"Note also, that when you use @code{set}, you need to quote both arguments to "
"@code{set}, unless you want them evaluated.  Since we do not want either "
"argument evaluated, neither the variable @code{flowers} nor the list "
"@code{(rose violet daisy buttercup)}, both are quoted.  (When you use "
"@code{set} without quoting its first argument, the first argument is "
"evaluated before anything else is done.  If you did this and @code{flowers} "
"did not have a value already, you would get an error message that the "
"@samp{Symbol's value as variable is void}; on the other hand, if "
"@code{flowers} did return a value after it was evaluated, the @code{set} "
"would attempt to set the value that was returned.  There are situations "
"where this is the right thing for the function to do; but such situations "
"are rare.)"
msgstr ""
"N@'otese tambi@'en, que cuando se usa @code{set}, se necesitan citar\n"
"ambos argumentos de @code{set}, a menos que los quiera evaluar. Puesto\n"
"que nosotros no queremos evaluar, ni la variable\n"
"@code{flores}, ni la lista @code{(rosa violeta margarita\n"
"bot@'ondeoro)}, ambos se citan. (Cuando se usa @code{set} sin citar su primer\n"
"argumento, el primer argumento se eval@'ua antes de realizar cualquier otra\n"
"cosa. Si hizo esto y @code{flores} no ten@'{@dotless{i}}a\n"
"ya un valor, se tendr@'{@dotless{i}}a un mensaje de error con el\n"
"@samp{Valor de s@'{@dotless{i}}mbolo como variable\n"
"vac@'{@dotless{i}}o}; por otro lado, si @code{flores} regreso un\n"
"valor despu@'es de ser evaluado, @code{set}\n"
"intentar@'{@dotless{i}}a establecer el valor que fue\n"
"devuelto. Hay situaciones donde esto el justo lo que la funci@'on\n"
"a de hacer, pero tales situaciones son poco frecuentes.)"

#. type: subsection
#: emacs-lisp-intro.texi:2431
#, no-wrap
msgid "Using @code{setq}"
msgstr "Usando @code{setq}"

#. type: item
#: emacs-lisp-intro.texi:2432 emacs-lisp-intro.texi:4574
#, no-wrap
msgid "setq"
msgstr "setq"

#. type: Plain text
#: emacs-lisp-intro.texi:2441
msgid ""
"As a practical matter, you almost always quote the first argument to "
"@code{set}.  The combination of @code{set} and a quoted first argument is so "
"common that it has its own name: the special form @code{setq}.  This special "
"form is just like @code{set} except that the first argument is quoted "
"automatically, so you don't need to type the quote mark yourself.  Also, as "
"an added convenience, @code{setq} permits you to set several different "
"variables to different values, all in one expression."
msgstr ""
"Como una cuesti@'on pr@'actica, casi siempre se cita el primer argumento de\n"
"@code{set}. La combinaci@'on de @code{set} y un primer argumento citado\n"
"es tan com@'un que tiene nombre propio: la forma especial\n"
"@code{setq}. Esta forma especial es igual a @code{set} excepto que\n"
"el primer argumento se cita autom@'aticamente, por lo que no necesita\n"
"escribir la marca de cita. Tambi@'en, como\n"
"una conveniencia a@~nadida, @code{setq} permite asignar varias\n"
"variables diferentes a diferentes valores, todo en una expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:2445
msgid ""
"To set the value of the variable @code{carnivores} to the list @code{'(lion "
"tiger leopard)} using @code{setq}, the following expression is used:"
msgstr ""
"Para establecer el valor de la variable @code{carn@'{@dotless{i}}voros} a\n"
"la lista @code{'(leon tigre leopardo)} usando @code{setq}, se utiliza la siguiente\n"
"expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:2448
#, no-wrap
msgid "(setq carnivores '(lion tiger leopard))\n"
msgstr "(setq carnivoros '(leon tigre leopardo))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2454
msgid ""
"This is exactly the same as using @code{set} except the first argument is "
"automatically quoted by @code{setq}.  (The @samp{q} in @code{setq} means "
"@code{quote}.)"
msgstr ""
"Esto es exactamente lo mismo que usar @code{set} excepto que el primer\n"
"argumento se cita autom@'aticamente por @code{setq}. (La @samp{q} en\n"
"@code{setq} significa @code{quote}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2457
msgid "With @code{set}, the expression would look like this:"
msgstr "Con @code{set}, la expresi@'on que se ver@'{@dotless{i}}a es:"

#. type: smallexample
#: emacs-lisp-intro.texi:2460
#, no-wrap
msgid "(set 'carnivores '(lion tiger leopard))\n"
msgstr "(set 'carnivoros '(leon tigre leopardo))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2468
msgid ""
"Also, @code{setq} can be used to assign different values to different "
"variables.  The first argument is bound to the value of the second argument, "
"the third argument is bound to the value of the fourth argument, and so on.  "
"For example, you could use the following to assign a list of trees to the "
"symbol @code{trees} and a list of herbivores to the symbol @code{herbivores}:"
msgstr ""
"Adem@'as, @code{setq} se puede utilizar para asignar diferentes valores\n"
"a diferentes variables. El primer argumento se une a al valor\n"
"del segundo argumento, el tercer argumento se une a al valor del\n"
"cuarto argumento, y as@'{@dotless{i}} sucesivamente. Por ejemplo, se\n"
"podr@'{@dotless{i}}a usar lo siguiente para asignar una lista de\n"
"@'arboles al s@'{@dotless{i}}mbolo @code{arboles} y una lista\n"
"de herb@'{@dotless{i}}voros al s@'{@dotless{i}}mbolo @code{herbivoros}:"

#. type: group
#: emacs-lisp-intro.texi:2473
#, no-wrap
msgid ""
"(setq trees '(pine fir oak maple)\n"
"      herbivores '(gazelle antelope zebra))\n"
msgstr ""
"(setq arboles '(pino abeto roble arce)\n"
"      herbivoros '(gacela antilope cebra))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2480
msgid ""
"(The expression could just as well have been on one line, but it might not "
"have fit on a page; and humans find it easier to read nicely formatted "
"lists.)"
msgstr ""
"(La expresi@'on podr@'{@dotless{i}}a tambi@'en haber estado en una\n"
"sola l@'{@dotless{i}}nea, pero podr@'{@dotless{i}}a no caber en\n"
"una p@'agina; y a los humanos les resulta m@'as f@'acil leer listas\n"
"con un formato agradable.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2489
msgid ""
"Although I have been using the term `assign', there is another way of "
"thinking about the workings of @code{set} and @code{setq}; and that is to "
"say that @code{set} and @code{setq} make the symbol @emph{point} to the "
"list.  This latter way of thinking is very common and in forthcoming "
"chapters we shall come upon at least one symbol that has `pointer' as part "
"of its name.  The name is chosen because the symbol has a value, "
"specifically a list, attached to it; or, expressed another way, the symbol "
"is set to ``point'' to the list."
msgstr ""
"Aunque he estado usando el t@'ermino `asignar', hay otra forma de\n"
"pensar respecto a el funcionamiento de @code{set} y @code{setq}; y consiste en\n"
"decir que @code{set} y @code{setq} crean un s@'{@dotless{i}}mbolo\n"
"que @emph{apunta} a la lista. Esta ultima forma de pensar es muy\n"
"com@'un y en los cap@'{@dotless{i}}tulos siguientes deberiamos encontrar al\n"
"menos un s@'{@dotless{i}}mbolo con un `puntero' como parte de su nombre. El\n"
"nombre es elegido porque el s@'{@dotless{i}}mbolo tiene un valor,\n"
"espec@'{@dotless{i}}ficamente una lista, unida a el; o, expresado de otra\n"
"manera, el s@'{@dotless{i}}mbolo se ajusta para ``apuntar'' a la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:2502
msgid ""
"Here is an example that shows how to use @code{setq} in a counter.  You "
"might use this to count how many times a part of your program repeats "
"itself.  First set a variable to zero; then add one to the number each time "
"the program repeats itself.  To do this, you need a variable that serves as "
"a counter, and two expressions: an initial @code{setq} expression that sets "
"the counter variable to zero; and a second @code{setq} expression that "
"increments the counter each time it is evaluated."
msgstr ""
"He aqu@'{@dotless{i}} un ejemplo que muestra c@'omo usar @code{setq}\n"
"en un contador. Se podr@'{@dotless{i}}a usar esto para contar cuantas\n"
"veces una parte de un programa se\n"
"repite. En primer lugar asigna una variable a cero; a continuaci@'on suma uno al\n"
"n@'umero cada vez que el programa se\n"
"repita. Para ello, se necesita una variable que sirve como un\n"
"contador, y dos expresiones: una expresi@'on @code{setq} inicial que asigna la\n"
"variable contador a cero; y una segunda expresi@'on @code{setq} que\n"
"incrementa el contador cada vez se evalua."

#. type: group
#: emacs-lisp-intro.texi:2506
#, no-wrap
msgid ""
"(setq counter 0)                ; @r{Let's call this the initializer.}\n"
"\n"
msgstr "(setq contador 0)                ; @r{Llamemos a esto el inicializador.}\n\n"

#. type: group
#: emacs-lisp-intro.texi:2508
#, no-wrap
msgid ""
"(setq counter (+ counter 1))    ; @r{This is the incrementer.}\n"
"\n"
msgstr "(setq contador (+ contador 1))   ; @r{Este es el incremento.}\n\n"

#. type: group
#: emacs-lisp-intro.texi:2510
#, no-wrap
msgid "counter                         ; @r{This is the counter.}\n"
msgstr "contador                         ; @r{Esste es el contador.}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2516
msgid ""
"(The text following the @samp{;} are comments.  @xref{Change a defun, , "
"Change a Function Definition}.)"
msgstr ""
"(El texto que sigue al @samp{;} son los comentarios. Ver @xref{Cambiar un\n"
"defun, , Cambiar una definici@'on de funci@'on}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2525
msgid ""
"If you evaluate the first of these expressions, the initializer, @code{(setq "
"counter 0)}, and then evaluate the third expression, @code{counter}, the "
"number @code{0} will appear in the echo area.  If you then evaluate the "
"second expression, the incrementer, @code{(setq counter (+ counter 1))}, the "
"counter will get the value 1.  So if you again evaluate @code{counter}, the "
"number @code{1} will appear in the echo area.  Each time you evaluate the "
"second expression, the value of the counter will be incremented."
msgstr ""
"Si eval@'uas la primera de estas expresiones, el inicializador,\n"
"@code{(setq contador 0)}, y luego eval@'uas la tercera expresi@'on,\n"
"@code{contador}, el n@'umero @code{0} aparecer@'a en el @'area echo. Si\n"
"a continuaci@'on se eval@'ua la segunda expresi@'on, el incremento,\n"
"@code{(setq contador (+ contador 1))}, el contador tendr@'a el valor\n"
"1. As@'{@dotless{i}} que si eval@'uas de nuevo @code{contador}, el n@'umero\n"
"@code{1} aparecer@'a en el @'area echo. Cada vez que se eval@'ua la\n"
"segunda expresi@'on, el valor del contador ser@'a incrementado."

#. type: Plain text
#: emacs-lisp-intro.texi:2535
msgid ""
"When you evaluate the incrementer, @code{(setq counter (+ counter 1))}, the "
"Lisp interpreter first evaluates the innermost list; this is the addition.  "
"In order to evaluate this list, it must evaluate the variable @code{counter} "
"and the number @code{1}.  When it evaluates the variable @code{counter}, it "
"receives its current value.  It passes this value and the number @code{1} to "
"the @code{+} which adds them together.  The sum is then returned as the "
"value of the inner list and passed to the @code{setq} which sets the "
"variable @code{counter} to this new value.  Thus, the value of the variable, "
"@code{counter}, is changed."
msgstr ""
"Al eval@'uar el incremento, @code{(setq contador (+ contador\n"
"1))}, el int@'erprete Lisp primero eval@'ua la lista interna; esta es\n"
"la adici@'on. Con el fin de evaluar esta lista, se debe evaluar la\n"
"variable @code{contador} y el n@'umero @code{1}. Cuando eval@'ua la\n"
"variable @code{contador}, se recibe su valor actual. Se pasa este valor y\n"
"el n@'umero @code{1} a @code{+} que los a@~nade. La suma\n"
"es devuelta como el valor de la list interior y pasa a @code{setq} que\n"
"asigna la variable @code{contador} a este nuevo valor. Por lo tanto, el\n"
"valor de la variable @code{contador}, cambia."

#. type: Plain text
#: emacs-lisp-intro.texi:2542
msgid ""
"Learning Lisp is like climbing a hill in which the first part is the "
"steepest.  You have now climbed the most difficult part; what remains "
"becomes easier as you progress onwards."
msgstr ""
"Aprender Lisp es como subir una colina en la que la primera parte\n"
"es la m@'as empinada. Ahora has subido la parte m@'as\n"
"dif@'{@dotless{i}}cil; lo que queda se vuelve m@'as f@'acil a medida que avanzas hacia adelante."

#. type: Plain text
#: emacs-lisp-intro.texi:2545
msgid "In summary,"
msgstr "En resumen,"

#. type: itemize
#: emacs-lisp-intro.texi:2550
msgid ""
"Lisp programs are made up of expressions, which are lists or single atoms."
msgstr ""
"Los programas Lisp se componen de expresiones, que son listas o @'atomos\n"
"individuales."

#. type: itemize
#: emacs-lisp-intro.texi:2554
msgid ""
"Lists are made up of zero or more atoms or inner lists, separated by "
"whitespace and surrounded by parentheses.  A list can be empty."
msgstr ""
"La listas se componen de cero o m@'as @'atomos o listas internas,\n"
"separadas por espacios en blanco y rodeadas por par@'entesis. Una lista\n"
"puede estar vac@'{@dotless{i}}a."

#. type: itemize
#: emacs-lisp-intro.texi:2559
msgid ""
"Atoms are multi-character symbols, like @code{forward-paragraph}, single "
"character symbols like @code{+}, strings of characters between double "
"quotation marks, or numbers."
msgstr ""
"Los @'atomos son s@'{@dotless{i}}mbolos multi-car@'acter, como\n"
"@code{forward-paragraph}, s@'{@dotless{i}}mbolos de un solo caracterer\n"
"como @code{+}, cadenas de caracteres entre comillas dobles,\n"
"o n@'umeros."

#. type: itemize
#: emacs-lisp-intro.texi:2562
msgid "A number evaluates to itself."
msgstr "Un n@'umero se eval@'ua a s@'{@dotless{i}} mismo."

#. type: itemize
#: emacs-lisp-intro.texi:2565
msgid "A string between double quotes also evaluates to itself."
msgstr ""
"Una cadena entre comillas dobles tambi@'en se eval@'ua a\n"
"s@'{@dotless{i}} mismo."

#. type: itemize
#: emacs-lisp-intro.texi:2568
msgid "When you evaluate a symbol by itself, its value is returned."
msgstr ""
"Cuando se eval@'ua un s@'{@dotless{i}}mbolo a s@'{@dotless{i}} mismo,\n"
"su valor se devuelve."

#. type: itemize
#: emacs-lisp-intro.texi:2573
msgid ""
"When you evaluate a list, the Lisp interpreter looks at the first symbol in "
"the list and then at the function definition bound to that symbol.  Then the "
"instructions in the function definition are carried out."
msgstr ""
"Cuando se eval@'ua una lista, el int@'erprete Lisp mira el primer\n"
"s@'{@dotless{i}}mbolo en la lista y luego la definici@'on de funci@'on\n"
"asociada a este s@'{@dotless{i}}mbolo. A continuaci@'on, las\n"
"instrucciones en la definici@'on de funci@'on se llevan a cabo."

#. type: itemize
#: emacs-lisp-intro.texi:2576
msgid "A single quotation mark,"
msgstr "Una marca de cita,"

#. type: code{#1}
#: emacs-lisp-intro.texi:2578 emacs-lisp-intro.texi:2581
msgid "'"
msgstr "'"

#. type: itemize
#: emacs-lisp-intro.texi:2585
msgid ""
", tells the Lisp interpreter that it should return the following expression "
"as written, and not evaluate it as it would if the quote were not there."
msgstr ""
", le indica al int@'erprete Lisp que devuelva la\n"
"siguiente expresi@'on como esta escrita, y no la eval@'ua como lo haria si la cita\n"
"no estuviera alli. "

#. type: itemize
#: emacs-lisp-intro.texi:2590
msgid ""
"Arguments are the information passed to a function.  The arguments to a "
"function are computed by evaluating the rest of the elements of the list of "
"which the function is the first element."
msgstr ""
"Los argumentos son la informaci@'on que se pasa a una funci@'on. Los\n"
"argumentos a una funci@'on son computados evaluando el resto de los\n"
"elementos de la lista de la que la funci@'on es el primer elemento."

#. type: itemize
#: emacs-lisp-intro.texi:2596
msgid ""
"A function always returns a value when it is evaluated (unless it gets an "
"error); in addition, it may also carry out some action called a ``side "
"effect''.  In many cases, a function's primary purpose is to create a side "
"effect."
msgstr ""
"Una funci@'on siempre devuelve un valor cuando se eval@'ua (a menos\n"
"que obtenga un error); adem@'as, tambi@'en se puede llevar a cabo algun tipo de acci@'on\n"
"llamado ``efecto secundario''. En muchos casos, el prop@'osito principal\n"
"de una funci@'on es crear un efecto secundario."

#. type: section
#: emacs-lisp-intro.texi:2599 emacs-lisp-intro.texi:4627
#: emacs-lisp-intro.texi:5519
#, no-wrap
msgid "Exercises"
msgstr "Ejercicios"

#. type: Plain text
#: emacs-lisp-intro.texi:2602
msgid "A few simple exercises:"
msgstr "Unos ejercicios sencillos:"

#. type: itemize
#: emacs-lisp-intro.texi:2607
msgid ""
"Generate an error message by evaluating an appropriate symbol that is not "
"within parentheses."
msgstr ""
"Generar un mensaje de error evaluando un s@'{@dotless{i}}mbolo\n"
"apropiado que no est@'a entre par@'entesis."

#. type: itemize
#: emacs-lisp-intro.texi:2611
msgid ""
"Generate an error message by evaluating an appropriate symbol that is "
"between parentheses."
msgstr ""
"Generar un mensaje de error evaluando un s@'{@dotless{i}}mbolo\n"
"apropiado que est@'a entre par@'entesis."

#. type: itemize
#: emacs-lisp-intro.texi:2614
msgid "Create a counter that increments by two rather than one."
msgstr "Crear un contador que se incrementa en dos en lugar de uno."

#. type: itemize
#: emacs-lisp-intro.texi:2618
msgid ""
"Write an expression that prints a message in the echo area when evaluated."
msgstr ""
"Escribe una expresi@'on que imprima un mensaje en el @'area eco cuando es "
"evaluada."

#. type: cindex
#: emacs-lisp-intro.texi:2622
#, no-wrap
msgid "Practicing evaluation"
msgstr "Practicando evaluaci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:2623
#, no-wrap
msgid "Evaluation practice"
msgstr "Evaluaci@'on pr@'actica"

#. type: Plain text
#: emacs-lisp-intro.texi:2633
msgid ""
"Before learning how to write a function definition in Emacs Lisp, it is "
"useful to spend a little time evaluating various expressions that have "
"already been written.  These expressions will be lists with the functions as "
"their first (and often only) element.  Since some of the functions "
"associated with buffers are both simple and interesting, we will start with "
"those.  In this section, we will evaluate a few of these.  In another "
"section, we will study the code of several other buffer-related functions, "
"to see how they were written."
msgstr ""
"Antes de aprender como escribir una definici@'on de funci@'on en Emacs\n"
"Lisp, es @'util gastar un poco de tiempo evaluando varias expresiones\n"
"que ya han sido escritas. Estas expresiones ser@'an listas con\n"
"funciones como su primer (y con frecuencia @'unico) elemento. Dado que\n"
"algunas de las funciones asociadas con b@'uffers son a la vez simples e\n"
"interesantes, vamos a iniciar con estas. En esta secci@'on,\n"
"vamos a evaluar algunas de este tipo. En otra secci@'on, estudiaremos el\n"
"c@'odigo de varias otras funciones relacionadas con b@'uffers, para\n"
"ver la forma c@'omo fueron escritas."

#. type: Plain text
#: emacs-lisp-intro.texi:2654
msgid ""
"@i{Whenever you give an editing command} to Emacs Lisp, such as the command "
"to move the cursor or to scroll the screen, @i{you are evaluating an "
"expression,} the first element of which is a function.  @i{This is how Emacs "
"works.}"
msgstr ""
"@i{Siempre que proporciona un comando de edici@'on} a Emacs Lisp,\n"
"como el comando para mover el cursor o para desplazarse por la pantalla,\n"
"@i{se est@'a evaluando una expresi@'on,} de la cual el primer elemento es\n"
"una funci@'on. @i{As@'{@dotless{i}} es c@'omo funciona Emacs}."

#. type: cindex
#: emacs-lisp-intro.texi:2655
#, no-wrap
msgid "@samp{interactive function} defined"
msgstr "@samp{funci@'on interactiva} definida"

#. type: cindex
#: emacs-lisp-intro.texi:2656
#, no-wrap
msgid "@samp{command} defined"
msgstr "@samp{comando} definido"

#. type: Plain text
#: emacs-lisp-intro.texi:2665
msgid ""
"When you type keys, you cause the Lisp interpreter to evaluate an expression "
"and that is how you get your results.  Even typing plain text involves "
"evaluating an Emacs Lisp function, in this case, one that uses @code{self-"
"insert-command}, which simply inserts the character you typed.  The "
"functions you evaluate by typing keystrokes are called @dfn{interactive} "
"functions, or @dfn{commands}; how you make a function interactive will be "
"illustrated in the chapter on how to write function definitions.  "
"@xref{Interactive, , Making a Function Interactive}."
msgstr ""
"Al presionar las teclas, se causa que el int@'erprete Lisp eval@'ue\n"
"una expresi@'on que devuelve resultados. Incluso escribir texto\n"
"plano implica eval@'uar una funci@'on Emacs Lisp, en este caso,\n"
"se utiliza @code{self-insert-command}, que simplemente inserta el\n"
"caracter escrito. Las funciones que se eval@'uan presionando\n"
"atajos de teclado se llaman funciones @dfn{interactive}, o\n"
"@dfn{comandos}; como crear una funci@'on interactive ser@'a ilustrado\n"
"en el cap@'{@dotless{i}}tulo sobre c@'omo escribir definiciones de\n"
"funciones. Ver @ref{Interactive, , Creando una Funci@'on\n"
"Interactive}."

#. type: Plain text
#: emacs-lisp-intro.texi:2671
msgid ""
"In addition to typing keyboard commands, we have seen a second way to "
"evaluate an expression: by positioning the cursor after a list and typing "
"@kbd{C-x C-e}.  This is what we will do in the rest of this section.  There "
"are other ways to evaluate an expression as well; these will be described as "
"we come to them."
msgstr ""
"Adem@'as de presionar comandos de teclado, hemos visto una segunda\n"
"manera de evaluar una expresi@'on: colocar el cursor despu@'es de\n"
"una lista y presionar @kbd{C-x C-e}. Esto es lo que se har@'a\n"
"en el resto de esta secci@'on. Hay otras maneras de evaluar una\n"
"expresi@'on; que ser@'an descritas cuando llegemos a ellas."

#. type: Plain text
#: emacs-lisp-intro.texi:2676
msgid ""
"Besides being used for practicing evaluation, the functions shown in the "
"next few sections are important in their own right.  A study of these "
"functions makes clear the distinction between buffers and files, how to "
"switch to a buffer, and how to determine a location within it."
msgstr ""
"Ademas de utilizarse para practicar la evaluaci@'on, las funciones mostradas en\n"
"las siguientes secciones son importantes por derecho\n"
"propio. Un estudio de estas funciones deja claro la distinci@'on\n"
"entre b@'uffers y ficheros, c@'omo cambiar a un b@'uffer, y como\n"
"determinar una ubicaci@'on dentro de ella."

#. type: item
#: emacs-lisp-intro.texi:2679 emacs-lisp-intro.texi:4583
#, no-wrap
msgid "buffer-name"
msgstr "buffer-name"

#. type: item
#: emacs-lisp-intro.texi:2680 emacs-lisp-intro.texi:4586
#, no-wrap
msgid "buffer-file-name"
msgstr "buffer-file-name"

#. type: Plain text
#: emacs-lisp-intro.texi:2690
msgid ""
"The two functions, @code{buffer-name} and @code{buffer-file-name}, show the "
"difference between a file and a buffer.  When you evaluate the following "
"expression, @code{(buffer-name)}, the name of the buffer appears in the echo "
"area.  When you evaluate @code{(buffer-file-name)}, the name of the file to "
"which the buffer refers appears in the echo area.  Usually, the name "
"returned by @code{(buffer-name)} is the same as the name of the file to "
"which it refers, and the name returned by @code{(buffer-file-name)} is the "
"full path-name of the file."
msgstr ""
"Las dos funciones, @code{buffer-name} y @code{buffer-file-name},\n"
"muestran la diferencia entre un fichero y un b@'uffer. Cuando\n"
"se eval@'ua la siguiente expresi@'on, @code{(buffer-name)}, el nombre\n"
"del buffer aparece en el area eco. Al evaluar @code{(buffer-file-name)}, el nombre\n"
"del fichero al que se relaciona el b@'uffer aparece en el @'area\n"
"echo. Normalmente, el nombre devuelto por @code{(buffer-name)} es el\n"
"mismo que el nombre del fichero al que hace referencia, y el nombre\n"
"devuelto por @code{(buffer-file-name)} es la ruta completa del fichero."

#. type: Plain text
#: emacs-lisp-intro.texi:2700
msgid ""
"A file and a buffer are two different entities.  A file is information "
"recorded permanently in the computer (unless you delete it).  A buffer, on "
"the other hand, is information inside of Emacs that will vanish at the end "
"of the editing session (or when you kill the buffer).  Usually, a buffer "
"contains information that you have copied from a file; we say the buffer is "
"@dfn{visiting} that file.  This copy is what you work on and modify.  "
"Changes to the buffer do not change the file, until you save the buffer.  "
"When you save the buffer, the buffer is copied to the file and is thus saved "
"permanently."
msgstr ""
"Un fichero y un b@'uffer son dos entidades diferentes. Un fichero es\n"
"informaci@'on grabada de manera permanente en el ordenador (a menos\n"
"que se borre). Un b@'uffer, por otro lado, es informaci@'on dentro\n"
"de Emacs que desaparecer@'a al final de la sesi@'on de edici@'on (o\n"
"cuando se mate el b@'uffer). Normalmente, un b@'uffer contiene\n"
"informaci@'on que se ha copiado desde un fichero; decimos que\n"
"el b@'uffer est@'a @dfn{visitando} este fichero. Esta copia es la que se\n"
"trabaja y modifica. Los cambios al b@'uffer no cambian el fichero, hasta\n"
"ser guardados. Al guardar el b@'uffer, el b@'uffer se copia en el\n"
"fichero y por lo tanto se guarda de forma permanente."

#. type: Plain text
#: emacs-lisp-intro.texi:2705
msgid ""
"If you are reading this in Info inside of GNU Emacs, you can evaluate each "
"of the following expressions by positioning the cursor after it and typing "
"@kbd{C-x C-e}."
msgstr ""
"Si est@'a leyendo esto en Info dentro de GNU Emacs, puede evaluar\n"
"cada una de las siguientes expresiones colocando el cursor\n"
"despu@'es de estas y pulsando @kbd{C-x C-e}."

#. type: group
#: emacs-lisp-intro.texi:2709
#, no-wrap
msgid ""
"(buffer-name)\n"
"\n"
msgstr ""
"(buffer-name)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:2711
#, no-wrap
msgid "(buffer-file-name)\n"
msgstr "(buffer-file-name)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2718
msgid ""
"When I do this in Info, the value returned by evaluating @code{(buffer-"
"name)} is @file{\"*info*\"}, and the value returned by evaluating "
"@code{(buffer-file-name)} is @file{nil}."
msgstr ""
"Cuando hago esto en Info, el valor devuelto para la evaluaci@'on de\n"
"@code{(buffer-name)} es @file{\"*info*\"}, y el valor devuelto por\n"
"evaluar @code{(buffer-file-name)} es @file{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:2724
msgid ""
"On the other hand, while I am writing this document, the value returned by "
"evaluating @code{(buffer-name)} is @file{\"introduction.texinfo\"}, and the "
"value returned by evaluating @code{(buffer-file-name)} is @file{\"/gnu/work/"
"intro/introduction.texinfo\"}."
msgstr ""
"Por otro lado, mientras escribo este documento, el valor\n"
"devuelto por la evaluaci@'on de @code{(buffer-name)} es\n"
"@file{\"introduction.texinfo\"}, y el valor devuelto por la evaluaci@'on de\n"
"@code{(buffer-file-name)} es @file{\"/gnu/work/intro/introduction.texinfo\"}."

#. type: cindex
#: emacs-lisp-intro.texi:2725
#, no-wrap
msgid "@code{nil}, history of word"
msgstr "@code{nil}, historia de palabra"

#. type: Plain text
#: emacs-lisp-intro.texi:2733
msgid ""
"The former is the name of the buffer and the latter is the name of the "
"file.  In Info, the buffer name is @file{\"*info*\"}.  Info does not point "
"to any file, so the result of evaluating @code{(buffer-file-name)} is "
"@file{nil}.  The symbol @code{nil} is from the Latin word for `nothing'; in "
"this case, it means that the buffer is not associated with any file.  (In "
"Lisp, @code{nil} is also used to mean `false' and is a synonym for the empty "
"list, @code{()}.)"
msgstr ""
"El primero es el nombre del b@'uffer y el segundo es el nombre del\n"
"fichero. En Info, el nombre del b@'uffer es @file{\"*info*\"}. Info no\n"
"apunta a ning@'un fichero, por lo que el resultado de evaluar\n"
"@code{(buffer-file-name)}] es @file{nil}. El s@'{@dotless{i}}mbolo\n"
"@code{nil} proviene del Latin, significa `nada'; en este caso,\n"
"significa que el b@'uffer no est@'a asociado con ningun\n"
"fichero. (En Lisp, @code{nil} tambi@'en se usa con el significado de\n"
"`falso' y es sin@'omino para lista vac@'{@dotless{i}}a, @code{()}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2737
msgid ""
"When I am writing, the name of my buffer is @file{\"introduction.texinfo"
"\"}.  The name of the file to which it points is @file{\"/gnu/work/intro/"
"introduction.texinfo\"}."
msgstr ""
"Cuando estoy escribiendo, el nombre de mi b@'uffer es\n"
"@file{\"introduction.texinfo\"}. El nombre del fichero al que\n"
"se apunta es @file{\"/gnu/work/intro/introduction.texinfo\"}."

#. type: Plain text
#: emacs-lisp-intro.texi:2742
msgid ""
"(In the expressions, the parentheses tell the Lisp interpreter to treat "
"@w{@code{buffer-name}} and @w{@code{buffer-file-name}} as functions; without "
"the parentheses, the interpreter would attempt to evaluate the symbols as "
"variables.  @xref{Variables}.)"
msgstr ""
"(En las expresiones, los par@'entesis hacen que el int@'erprete Lisp\n"
"trate a @w{@code{buffer-name}} y @w{@code{buffer-file-name}} como\n"
"funciones; sin los par@'entesis, el int@'erprete\n"
"intentar@'{@dotless{i}}a evaluar los s@'{@dotless{i}}mbolos como\n"
"variables. Ver @ref{Variables}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:2750
msgid ""
"In spite of the distinction between files and buffers, you will often find "
"that people refer to a file when they mean a buffer and vice-verse.  Indeed, "
"most people say, ``I am editing a file,'' rather than saying, ``I am editing "
"a buffer which I will soon save to a file.'' It is almost always clear from "
"context what people mean.  When dealing with computer programs, however, it "
"is important to keep the distinction in mind, since the computer is not as "
"smart as a person."
msgstr ""
"A pesar de la distinci@'on entre ficheros y b@'uffers, con frecuencia\n"
"encontrara que hay personas que se refieren a un fichero cuando quieren\n"
"un b@'uffer y vice-versa. En realidad, la mayor@'{@dotless{i}}a de la\n"
"gente dice, ``Estoy editando un fichero,'' en lugar de decir,\n"
"``Estoy editando un b@'uffer que pronto voy a guardar en un fichero.''\n"
"Esto casi siempre queda claro a partir del contexto de lo que las personas quieren\n"
"decir. No obstante, al tratar con programas de ordenador, es\n"
"importante tener la distinci@'on en mente, ya que el ordenador no es\n"
"tan inteligente como una persona."

#. type: cindex
#: emacs-lisp-intro.texi:2751
#, no-wrap
msgid "Buffer, history of word"
msgstr "Buffer, historia de palabra"

#. type: Plain text
#: emacs-lisp-intro.texi:2765
msgid ""
"The word `buffer', by the way, comes from the meaning of the word as a "
"cushion that deadens the force of a collision.  In early computers, a buffer "
"cushioned the interaction between files and the computer's central "
"processing unit.  The drums or tapes that held a file and the central "
"processing unit were pieces of equipment that were very different from each "
"other, working at their own speeds, in spurts.  The buffer made it possible "
"for them to work together effectively.  Eventually, the buffer grew from "
"being an intermediary, a temporary holding place, to being the place where "
"work is done.  This transformation is rather like that of a small seaport "
"that grew into a great city: once it was merely the place where cargo was "
"warehoused temporarily before being loaded onto ships; then it became a "
"business and cultural center in its own right."
msgstr ""
"Por cierto, la palabra `b@'uffer', viene del significado de la\n"
"palabra como un coj@'in que amortigua la fuerza de una colisi@'on. En los\n"
"primeros ordenadores, un b@'uffer amortiguaba la interacci@'on entre\n"
"los ficheros y la unidad central de procesamiento de la cumputadora. Los tambores o cintas\n"
"que contenian un fichero y la unidad de procesamiento eran\n"
"piezas de equipamiento muy diferentes entre si,\n"
"trabajando a sus propias velocidades, por rachas. El b@'uffer hizo posible que\n"
"ambos trabajaran juntos de manera efectiva. Con el tiempo, el b@'uffer\n"
"pasó de ser un intermediario, a un lugar de almacenamiento temporal, donde se\n"
"realiza el trabajo. Esta transformaci@'on se parace bastante a la de\n"
"un peque@~no puerto que se convierte en una gran ciudad:\n"
"una vez fu@'e el lugar donde la carga era depositada temporalmente\n"
"antes de ser cargada en los barcos; despues se convirtio en un centro comercial\n"
"y cultural por derecho propio."

#. type: Plain text
#: emacs-lisp-intro.texi:2769
msgid ""
"Not all buffers are associated with files.  For example, a @file{*scratch*} "
"buffer does not visit any file.  Similarly, a @file{*Help*} buffer is not "
"associated with any file."
msgstr ""
"No todos los b@'uffers est@'an asociados con ficheros. Por ejemplo, el\n"
"b@'uffer @file{*scratch*} no visita ningun fichero. Del mismo modo, un b@'uffer\n"
"@file{*Help*} no est@'a asociado a ningun fichero."

#. type: Plain text
#: emacs-lisp-intro.texi:2776
msgid ""
"In the old days, when you lacked a @file{~/.emacs} file and started an Emacs "
"session by typing the command @code{emacs} alone, without naming any files, "
"Emacs started with the @file{*scratch*} buffer visible.  Nowadays, you will "
"see a splash screen.  You can follow one of the commands suggested on the "
"splash screen, visit a file, or press the spacebar to reach the "
"@file{*scratch*} buffer."
msgstr ""
"Anta@~no, cuando se carecia de un fichero @file{~/.emacs}\n"
"y se iniciava una sesi@'on Emacs escribiendo unicamente el comando @code{emacs},\n"
"sin nombrar ningun fichero, Emacs iniciaba con el b@'uffer\n"
"@file{*scratch*} visible. Hoy en d@'{@dotless{i}}a, vera una\n"
"pantalla de vienvenida. Se puede seguir uno de los comandos sugeridos en\n"
"dicha pantalla, visitar un fichero, o presionar la barra espaciadora\n"
"para llegar al b@'uffer @file{*scratch*}."

#. type: Plain text
#: emacs-lisp-intro.texi:2785
msgid ""
"If you switch to the @file{*scratch*} buffer, type @code{(buffer-name)}, "
"position the cursor after it, and then type @kbd{C-x C-e} to evaluate the "
"expression.  The name @code{\"*scratch*\"} will be returned and will appear "
"in the echo area.  @code{\"*scratch*\"} is the name of the buffer.  When you "
"type @code{(buffer-file-name)} in the @file{*scratch*} buffer and evaluate "
"that, @code{nil} will appear in the echo area, just as it does when you "
"evaluate @code{(buffer-file-name)} in Info."
msgstr ""
"Si cambia al b@'uffer @file{*scratch*}, escriba\n"
"@code{(buffer-name)}, coloque el cursor al final de la expresi@'on, y presione\n"
"@kbd{C-x C-e} para evaluar la expresi@'on. El nombre\n"
"@code{*scratch*} ser@'a devuelto y aparecer@'a en el @'area\n"
"echo. @code{*scratch*} es el nombre del b@'uffer. Al escribir y eval@'uar\n"
"@code{(buffer-file-name)} en el b@'uffer @file{*scratch*},\n"
"@code{nil} aparecer@'a en el @'area echo, igual que cuando\n"
"eval@'ua @code{(buffer-file-name)} en Info."

#. type: Plain text
#: emacs-lisp-intro.texi:2791
msgid ""
"Incidentally, if you are in the @file{*scratch*} buffer and want the value "
"returned by an expression to appear in the @file{*scratch*} buffer itself "
"rather than in the echo area, type @kbd{C-u C-x C-e} instead of @kbd{C-x C-"
"e}.  This causes the value returned to appear after the expression.  The "
"buffer will look like this:"
msgstr ""
"Por cierto, si se encuentra en el b@'uffer @file{*scratch*} y\n"
"quiere que el valor devuelto por una expresi@'on aparesca en el\n"
"b@'uffer en s@'{@dotless{i}} y no en el @'area echo, presione @kbd{C-u C-x\n"
"C-e} en lugar de @kbd{C-x C-e}. Esto causa que el valor devuelto\n"
"aparezca despu@'es de la expresi@'on. El b@'uffer se ver@'a\n"
"as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:2794
#, no-wrap
msgid "(buffer-name)\"*scratch*\"\n"
msgstr "(buffer-name)\"*scratch*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2801
msgid ""
"You cannot do this in Info since Info is read-only and it will not allow you "
"to change the contents of the buffer.  But you can do this in any buffer you "
"can edit; and when you write code or documentation (such as this book), this "
"feature is very useful."
msgstr ""
"No se puede hacer esto en Info ya que Info es de solo lectura y no\n"
"se permitir@'a cambiar el contenido del b@'uffer. Pero puedes\n"
"hacer esto en cualquier b@'uffer que se puede editar; y cuando  se escribe\n"
"c@'odigo o documentaci@'on (como este libro), esta funcionalidad\n"
"es muy @'util."

#. type: item
#: emacs-lisp-intro.texi:2804 emacs-lisp-intro.texi:4590
#, no-wrap
msgid "current-buffer"
msgstr "current-buffer"

#. type: item
#: emacs-lisp-intro.texi:2805 emacs-lisp-intro.texi:4594
#, no-wrap
msgid "other-buffer"
msgstr "other-buffer"

#. type: cindex
#: emacs-lisp-intro.texi:2806
#, no-wrap
msgid "Getting a buffer"
msgstr "Teniendo un b@'uffer"

#. type: Plain text
#: emacs-lisp-intro.texi:2812
msgid ""
"The @code{buffer-name} function returns the @emph{name} of the buffer; to "
"get the buffer @emph{itself}, a different function is needed: the "
"@code{current-buffer} function.  If you use this function in code, what you "
"get is the buffer itself."
msgstr ""
"La funci@'on @code{buffer-name} devuelve el @emph{nombre} del b@'uffer;\n"
"para obtener el b@'uffer @emph{en s@'{@dotless{i}}}, una funci@'on\n"
"diferente es necesaria: la funci@'on @code{current-buffer}. Si usa\n"
"esta funci@'on en el c@'odigo, lo que se obtiene es el b@'uffer en\n"
"s@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:2823
msgid ""
"A name and the object or entity to which the name refers are different from "
"each other.  You are not your name.  You are a person to whom others refer "
"by name.  If you ask to speak to George and someone hands you a card with "
"the letters @samp{G}, @samp{e}, @samp{o}, @samp{r}, @samp{g}, and @samp{e} "
"written on it, you might be amused, but you would not be satisfied.  You do "
"not want to speak to the name, but to the person to whom the name refers.  A "
"buffer is similar: the name of the scratch buffer is @file{*scratch*}, but "
"the name is not the buffer.  To get a buffer itself, you need to use a "
"function such as @code{current-buffer}."
msgstr ""
"Un nombre y el objeto o entidad a la que se refiere el nombre son\n"
"cosas diferentes entre si. Tu no eres tu nombre, eres una persona a la que se\n"
"refieren los demas por tu nombre. Si pides hablar con Jorge\n"
"y alguien te entrega una tarjeta con las letras @samp{J}, @samp{o},\n"
"@samp{r}, @samp{g}, y @samp{e} escritas, podr@'{@dotless{i}}as divertirte,\n"
"pero no estar@'{@dotless{i}}as satisfecho. No quieres\n"
"hablar con el nombre, sino con la persona a la que el\n"
"nombre se refiere. Un b@'uffer es similar: el nombre del b@'uffer\n"
"scratch es @file{*scratch*}, pero el nombre no es el b@'uffer. Para\n"
"obtener un b@'uffer en s@'{@dotless{i}}, se necesita usar una\n"
"funci@'on como @code{current-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:2831
msgid ""
"However, there is a slight complication: if you evaluate @code{current-"
"buffer} in an expression on its own, as we will do here, what you see is a "
"printed representation of the name of the buffer without the contents of the "
"buffer.  Emacs works this way for two reasons: the buffer may be thousands "
"of lines long---too long to be conveniently displayed; and, another buffer "
"may have the same contents but a different name, and it is important to "
"distinguish between them."
msgstr ""
"Sin embargo, hay una ligera complicaci@'on: si eval@'uas\n"
"@code{current-buffer} en una expresi@'on por s@'{@dotless{i}} sola,\n"
"como haremos aqu@'{@dotless{i}}, lo que ves es una representaci@'on\n"
"impresa del nombre del b@'uffer sin los contenidos del b@'uffer. Emacs\n"
"funciona de esta forma por dos razones: el b@'uffer puede contener\n"
"miles de l@'{@dotless{i}}neas---demasiado largo para ser\n"
"mostrado convenientemente; y, otro b@'uffer puede tener los mismos\n"
"contenidos pero un nombre diferente, y es importante distinguir entre ellos."

#. type: Plain text
#: emacs-lisp-intro.texi:2834
msgid "Here is an expression containing the function:"
msgstr "Aqu@'{@dotless{i}} hay una expresi@'on conteniendo la funci@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:2837
#, no-wrap
msgid "(current-buffer)\n"
msgstr "(current-buffer)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2844
msgid ""
"If you evaluate this expression in Info in Emacs in the usual way, "
"@file{#<buffer *info*>} will appear in the echo area.  The special format "
"indicates that the buffer itself is being returned, rather than just its "
"name."
msgstr ""
"Si eval@'ua esta expresi@'on en Info de la manera habitual,\n"
"@file{#<buffer *info*>} aparecer@'a en el @'area echo. El formato\n"
"especial indica que el b@'uffer en s@'{@dotless{i}} est@'a\n"
"siendo devuelto, en lugar de solo su nombre."

#. type: Plain text
#: emacs-lisp-intro.texi:2848
msgid ""
"Incidentally, while you can type a number or symbol into a program, you "
"cannot do that with the printed representation of a buffer: the only way to "
"get a buffer itself is with a function such as @code{current-buffer}."
msgstr ""
"Por cierto, si bien puedes escribir un n@'umero o s@'{@dotless{i}}mbolo\n"
"en un programa, no se puede hacer esto con la representaci@'on impresa\n"
"del b@'uffer: la @'unica manera de obtener un b@'uffer\n"
"en s@'{@dotless{i}} mismo es con una funci@'on tal como @code{current-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:2854
msgid ""
"A related function is @code{other-buffer}.  This returns the most recently "
"selected buffer other than the one you are in currently, not a printed "
"representation of its name.  If you have recently switched back and forth "
"from the @file{*scratch*} buffer, @code{other-buffer} will return that "
"buffer."
msgstr ""
"Un funci@'on relacionada es @code{other-buffer}. Esta devuelve el\n"
"@'ultimo buffer seleccionado distino al que te encuentras\n"
"actualmente, no una representaci@'on impresa de su\n"
"nombre. Si recientemente has ido y vuelto del b@'uffer @file{*scratch*},\n"
"@code{other-buffer} devolver@'a este b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:2857
msgid "You can see this by evaluating the expression:"
msgstr "Se puede ver esto evaluando la expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:2860
#, no-wrap
msgid "(other-buffer)\n"
msgstr "(other-buffer)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2869
msgid ""
"You should see @file{#<buffer *scratch*>} appear in the echo area, or the "
"name of whatever other buffer you switched back from most "
"recently@footnote{Actually, by default, if the buffer from which you just "
"switched is visible to you in another window, @code{other-buffer} will "
"choose the most recent buffer that you cannot see; this is a subtlety that I "
"often forget.}."
msgstr ""
"Ver@'as que @file{#<buffer *scratch*>} aparece en el @'area echo, o el\n"
"nombre de cualquier otro b@'uffer cambiado anteriormente a partir del m@'as\n"
"reciente@footnote{En realidad, por defecto, si el b@'uffer desde\n"
"el que has cambiado es visible por t@'{@dotless{i}} en otra\n"
"ventana, @code{other-buffer} elegir@'a el b@'uffer m@'as reciente que\n"
"no puedes ver; esto es una sutileza que a menudo olvido.}"

#. type: item
#: emacs-lisp-intro.texi:2872 emacs-lisp-intro.texi:4599
#, no-wrap
msgid "switch-to-buffer"
msgstr "switch-to-buffer"

#. type: item
#: emacs-lisp-intro.texi:2873 emacs-lisp-intro.texi:4603
#: emacs-lisp-intro.texi:5505
#, no-wrap
msgid "set-buffer"
msgstr "set-buffer"

#. type: cindex
#: emacs-lisp-intro.texi:2874
#, no-wrap
msgid "Switching to a buffer"
msgstr "Cambiando a un b@'uffer"

#. type: Plain text
#: emacs-lisp-intro.texi:2880
msgid ""
"The @code{other-buffer} function actually provides a buffer when it is used "
"as an argument to a function that requires one.  We can see this by using "
"@code{other-buffer} and @code{switch-to-buffer} to switch to a different "
"buffer."
msgstr ""
"La funci@'on @code{other-buffer} realmente proporciona un b@'uffer\n"
"cuando se utiliza como argumento de una funci@'on que requiera\n"
"uno. Podemos ver esto usando @code{other-buffer} y\n"
"@code{switch-to-buffer} para cambiar a un b@'uffer diferente."

#. type: Plain text
#: emacs-lisp-intro.texi:2896
msgid ""
"But first, a brief introduction to the @code{switch-to-buffer} function.  "
"When you switched back and forth from Info to the @file{*scratch*} buffer to "
"evaluate @code{(buffer-name)}, you most likely typed @kbd{C-x b} and then "
"typed @file{*scratch*}@footnote{Or rather, to save typing, you probably only "
"typed @kbd{RET} if the default buffer was @file{*scratch*}, or if it was "
"different, then you typed just part of the name, such as @code{*sc}, pressed "
"your @kbd{TAB} key to cause it to expand to the full name, and then typed "
"@kbd{RET}.} when prompted in the minibuffer for the name of the buffer to "
"which you wanted to switch.  The keystrokes, @kbd{C-x b}, cause the Lisp "
"interpreter to evaluate the interactive function @code{switch-to-buffer}.  "
"As we said before, this is how Emacs works: different keystrokes call or run "
"different functions.  For example, @kbd{C-f} calls @code{forward-char}, "
"@kbd{M-e} calls @code{forward-sentence}, and so on."
msgstr ""
"Pero primero, una breve introducci@'on a la funci@'on\n"
"@code{switch-to-buffer}. Cuando cambia de ida y vuelta de\n"
"Info al b@'uffer @file{*scratch*} para evaluar @code{(buffer-name)}, normalmente se\n"
"presiona @kbd{C-x b} y se pasa @file{*scratch*}@footnote{O\n"
"mejor, para evitar escribir, probablemente solo necesite pulsar @kbd{RET}\n"
"si @file{*scratch*} es el buffer por defecto, de ser diferente, solo\n"
"escriba parte del nombre, por ejemplo @code{*sc}, luego\n"
"presione la tecla @kbd{TAB} para hacer que se expanda el nombre completo, y\n"
"finalmente pulsa @kbd{RET}} en el minibuffer cuando se le solicita el nombre\n"
"del b@'uffer al que se quiere cambiar. El atajo, @kbd{C-x\n"
"b}, hace que el int@'erprete Lisp eval@'ue la funci@'on interactiva\n"
"@code{switch-to-buffer}. Como hemos dicho anteriormente,\n"
"as@'{@dotless{i}} es como funciona Emacs: diferentes atajos de teclado\n"
"llaman o ejecutan diferentes funciones. Por ejemplo, @kbd{C-f} llama a\n"
"@code{forward-char}, @kbd{M-e} llama a @code{forward-sentence},\n"
"etc'etera."

#. type: Plain text
#: emacs-lisp-intro.texi:2900
msgid ""
"By writing @code{switch-to-buffer} in an expression, and giving it a buffer "
"to switch to, we can switch buffers just the way @kbd{C-x b} does:"
msgstr ""
"Escribiendo @code{switch-to-buffer} en una expresi@'on, y d@'andole un\n"
"b@'uffer para cambiar, se puede cambiar de b@'uffers tal y como hace @kbd{C-x b}."

#. type: smallexample
#: emacs-lisp-intro.texi:2903
#, no-wrap
msgid "(switch-to-buffer (other-buffer))\n"
msgstr "(switch-to-buffer (other-buffer))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2933
msgid ""
"The symbol @code{switch-to-buffer} is the first element of the list, so the "
"Lisp interpreter will treat it as a function and carry out the instructions "
"that are attached to it.  But before doing that, the interpreter will note "
"that @code{other-buffer} is inside parentheses and work on that symbol "
"first.  @code{other-buffer} is the first (and in this case, the only) "
"element of this list, so the Lisp interpreter calls or runs the function.  "
"It returns another buffer.  Next, the interpreter runs @code{switch-to-"
"buffer}, passing to it, as an argument, the other buffer, which is what "
"Emacs will switch to.  If you are reading this in Info, try this now.  "
"Evaluate the expression.  (To get back, type @kbd{C-x b "
"@key{RET}}.)@footnote{Remember, this expression will move you to your most "
"recent other buffer that you cannot see.  If you really want to go to your "
"most recently selected buffer, even if you can still see it, you need to "
"evaluate the following more complex expression: @smallexample (switch-to-"
"buffer (other-buffer (current-buffer) t))  @end smallexample In this case, "
"the first argument to @code{other-buffer} tells it which buffer to skip---"
"the current one---and the second argument tells @code{other-buffer} it is OK "
"to switch to a visible buffer.  In regular use, @code{switch-to-buffer} "
"takes you to an invisible window since you would most likely use @kbd{C-x o} "
"(@code{other-window})  to go to another visible buffer.}"
msgstr ""
"El s@'{@dotless{i}}mbolo @code{switch-to-buffer} es el primer elemento\n"
"de la lista, por lo que el int@'erprete Lisp lo tratar@'a como\n"
"una funci@'on y llevara a cavo las instrucciones adjuntas al mismo. Pero antes de\n"
"hacer esto, el int@'erprete observara que @code{other-buffer} est@'a\n"
"dentro de par@'entesis y trabaja en este s@'{@dotless{i}}mbolo\n"
"primero. @code{other-buffer} es el primer (y en este caso, el\n"
"@'unico) elemento de esta lista, por lo que el int@'erprete\n"
"Lisp llama o ejecuta la funci@'on. Esto devuelve un buffer distinto al\n"
"actual. A continuaci@'on, el int@'erprete ejecuta @code{switch-to-buffer},\n"
"pasando, como argumento, el b@'uffer devuelto, que es al que Emacs\n"
"cambia. Si est@'as leyendo esto en Info, prueba esto ahora. Eval@'ua\n"
"la expresi@'on. (Para volver, presiona @kbd{C-x b\n"
"@key{RET}}.)@footnote{Recuerda, esta expresi@'on te desplaza al\n"
"b@'uffer m@'as reciente que no puedas ver. Si\n"
"realmente quieres ir al ultimo b@'uffers seleccionado, incluso si\n"
"es visible, es necesario evaluar la siguiente expresi@'on m@'as\n"
"compleja: \n"
"@smallexample \n"
"(switch-to-buffer (other-buffer (current-buffer) t))\n"
"@end smallexample \n"
"En este caso, el primer argumento de @code{other-buffer} le dice a que\n"
"b@'uffer saltar ---el actual--- y el segundo argumento le indica a\n"
"@code{other-buffer} que esta BIEN cambiar a un b@'uffer visible. La utilidad\n"
"de @code{switch-to-buffer} es llevarte a una ventana invisible ya que probablemente\n"
"usar@'{@dotless{i}}as @kbd{C-x o} (@code{other-window}) para ir a otro\n"
"b@'uffer visible}."

#. type: Plain text
#: emacs-lisp-intro.texi:2942
msgid ""
"In the programming examples in later sections of this document, you will see "
"the function @code{set-buffer} more often than @code{switch-to-buffer}.  "
"This is because of a difference between computer programs and humans: humans "
"have eyes and expect to see the buffer on which they are working on their "
"computer terminals.  This is so obvious, it almost goes without saying.  "
"However, programs do not have eyes.  When a computer program works on a "
"buffer, that buffer does not need to be visible on the screen."
msgstr ""
"En los ejemplos de las secciones siguentes, veras con m@'as frecuencia  la\n"
"funci@'on @code{set-buffer} que @code{switch-to-buffer}. Esto es porque a diferencia\n"
"de los programas de ordenador: los humanos tienen ojos y\n"
"esperan ver el b@'uffer en el que est@'an trabajando en la\n"
"terminal de su ordenador. Esto es tan obvio, que casi no hace falta\n"
"decirlo. Sin embargo, los programas no tienen ojos. Cuando un\n"
"programa de ordenador trabaja en un b@'uffer, el b@'uffer no\n"
"necesita ser visible en la pantalla."

#. type: Plain text
#: emacs-lisp-intro.texi:2950
msgid ""
"@code{switch-to-buffer} is designed for humans and does two different "
"things: it switches the buffer to which Emacs's attention is directed; and "
"it switches the buffer displayed in the window to the new buffer.  @code{set-"
"buffer}, on the other hand, does only one thing: it switches the attention "
"of the computer program to a different buffer.  The buffer on the screen "
"remains unchanged (of course, normally nothing happens there until the "
"command finishes running)."
msgstr ""
"@code{switch-to-buffer} est@'a dise@~nado para los seres humanos y hace dos\n"
"cosas diferentes: cambia el b@'uffer a el que Emacs dirige la atenci@'on;\n"
"y cambia el b@'uffer mostrada en la ventana al\n"
"nuevo b@'uffer. @code{set-buffer}, por otro lado, solo hace una cosa:\n"
"cambia la atenci@'on del programa del ordenador a un b@'uffer diferente. El\n"
"b@'uffer en la pantalla permanece sin cambios (por supuesto, normalmente\n"
"no ocurre nada hasta que el comando termina de ejecutarse)."

#. type: cindex
#: emacs-lisp-intro.texi:2951
#, no-wrap
msgid "@samp{call} defined"
msgstr "@samp{llamada} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:2958
msgid ""
"Also, we have just introduced another jargon term, the word @dfn{call}.  "
"When you evaluate a list in which the first symbol is a function, you are "
"calling that function.  The use of the term comes from the notion of the "
"function as an entity that can do something for you if you `call' it---just "
"as a plumber is an entity who can fix a leak if you call him or her."
msgstr ""
"Tambi@'en, acabamos introduciendo otro t@'ermino tecnico, la\n"
"palabra @dfn{llamada}. Cuando eval@'uas una lista en la que el\n"
"primer s@'{@dotless{i}}mbolo es una funci@'on, est@'as llamando\n"
"a esta funci@'on. El uso del t@'ermino viene de la noci@'on de la\n"
"funci@'on como una entidad que puede hacer algo por ti cuando\n"
"la `llamas' --- al igual que un fontanero es una entidad que\n"
"puede arreglar una fuga si le llamas."

#. type: section
#: emacs-lisp-intro.texi:2960
#, no-wrap
msgid "Buffer Size and the Location of Point"
msgstr "Tama@~no de b@'uffer y la ubicaci@'on del punto"

#. type: cindex
#: emacs-lisp-intro.texi:2961
#, no-wrap
msgid "Size of buffer"
msgstr "Tama@~no del b@'uffer"

#. type: cindex
#: emacs-lisp-intro.texi:2962
#, no-wrap
msgid "Buffer size"
msgstr "Tama@~no del B@'uffer"

#. type: cindex
#: emacs-lisp-intro.texi:2963
#, no-wrap
msgid "Point location"
msgstr "Localizaci@'on del Punto"

#. type: cindex
#: emacs-lisp-intro.texi:2964
#, no-wrap
msgid "Location of point"
msgstr "Localizaci@'on del punto"

#. type: Plain text
#: emacs-lisp-intro.texi:2970
msgid ""
"Finally, let's look at several rather simple functions, @code{buffer-size}, "
"@code{point}, @code{point-min}, and @code{point-max}.  These give "
"information about the size of a buffer and the location of point within it."
msgstr ""
"Por último, vamos a ver varias funciones bastante simples,\n"
"@code{buffer-size}, @code{point}, @code{point-min}, y\n"
"@code{point-max}. Estas entregan informaci@'on sobre el tama@~no de un\n"
"b@'uffer y la ubicaci@'on del punto dentro de este."

#. type: Plain text
#: emacs-lisp-intro.texi:2974
msgid ""
"The function @code{buffer-size} tells you the size of the current buffer; "
"that is, the function returns a count of the number of characters in the "
"buffer."
msgstr ""
"La funci@'on @code{buffer-size} te dice el tama@~no del b@'uffer\n"
"actual; es decir, la funci@'on devuelve un conteo del n@'umero de caracteres en\n"
"el buffer."

#. type: smallexample
#: emacs-lisp-intro.texi:2977
#, no-wrap
msgid "(buffer-size)\n"
msgstr "(buffer-size)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:2982
msgid ""
"You can evaluate this in the usual way, by positioning the cursor after the "
"expression and typing @kbd{C-x C-e}."
msgstr ""
"Puedes evaluar esto de la forma habitual, coloca el cursor\n"
"despu@'es de la expresi@'on y presiona @kbd{C-x C-e}."

#. type: cindex
#: emacs-lisp-intro.texi:2983
#, no-wrap
msgid "@samp{point} defined"
msgstr "definici@'on de @samp{punto}"

#. type: Plain text
#: emacs-lisp-intro.texi:2988
msgid ""
"In Emacs, the current position of the cursor is called @dfn{point}.  The "
"expression @code{(point)} returns a number that tells you where the cursor "
"is located as a count of the number of characters from the beginning of the "
"buffer up to point."
msgstr ""
"En Emacs, la posici@'on actual del cursor es llamada @dfn{punto}. La\n"
"expresi@'on @code{(point)} devuelve un n@'umero que informa donde est@'a\n"
"situado el cursor como un conteo del n@'umero de caracteres desde el\n"
"principio del b@'uffer hasta el punto."

#. type: Plain text
#: emacs-lisp-intro.texi:2992
msgid ""
"You can see the character count for point in this buffer by evaluating the "
"following expression in the usual way:"
msgstr ""
"Puedes ver el conteo de caracteres del punto para este b@'uffer\n"
"evaluando la siguiente expresi@'on de la forma habitual:"

#. type: smallexample
#: emacs-lisp-intro.texi:2995 emacs-lisp-intro.texi:3008
#, no-wrap
msgid "(point)\n"
msgstr "(point)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3001
msgid ""
"As I write this, the value of @code{point} is 65724.  The @code{point} "
"function is frequently used in some of the examples later in this book."
msgstr ""
"Mientras escribo esto, el valor de @code{point} es 65724. La funci@'on\n"
"@code{point} se utiliza con frecuencia en algunos de los ejemplos\n"
"mas adelante en este libro."

#. type: Plain text
#: emacs-lisp-intro.texi:3005
msgid ""
"The value of point depends, of course, on its location within the buffer.  "
"If you evaluate point in this spot, the number will be larger:"
msgstr ""
"El valor del punto depende, por supuesto, de su posici@'on dentro del\n"
"b@'uffer. Si se eval@'ua el punto en este lugar, el n@'umero ser@'a\n"
"mayor:"

#. type: Plain text
#: emacs-lisp-intro.texi:3015
msgid ""
"For me, the value of point in this location is 66043, which means that there "
"are 319 characters (including spaces) between the two expressions.  "
"(Doubtless, you will see different numbers, since I will have edited this "
"since I first evaluated point.)"
msgstr ""
"Para m@'{@dotless{i}}, el valor del punto en esta posici@'on es 66043,\n"
"lo que significa que hay 319 caracteres (incluyendo espacios) entre\n"
"las dos expresiones. (Sin duda, se ver@'an diferentes n@'umeros, puesto\n"
"que se ha editado esto desde que se evalu@'o (point).)"

#. type: cindex
#: emacs-lisp-intro.texi:3016
#, no-wrap
msgid "@samp{narrowing} defined"
msgstr "@samp{narrowing} definido"

#. type: Plain text
#: emacs-lisp-intro.texi:3025
msgid ""
"The function @code{point-min} is somewhat similar to @code{point}, but it "
"returns the value of the minimum permissible value of point in the current "
"buffer.  This is the number 1 unless @dfn{narrowing} is in effect.  "
"(Narrowing is a mechanism whereby you can restrict yourself, or a program, "
"to operations on just a part of a buffer.  @xref{Narrowing & Widening, , "
"Narrowing and Widening}.)  Likewise, the function @code{point-max} returns "
"the value of the maximum permissible value of point in the current buffer."
msgstr ""
"La funci@'on @code{point-min} es similar a @code{point}, pero\n"
"devuelve el valor m@'{@dotless{i}}nimo permisible del punto en el\n"
"b@'uffer actual. Este es el n@'umero 1 a menos que @dfn{narrowing}\n"
"est@'e en efecto. (Narrowing, @emph{Encogiendo} es un mecanismo mediante el cual\n"
"puedes restringirte a ti mismo, o un programa, a operar\n"
"solo en un parte de un b@'uffer. @ref{Encogiendo y extendiendo}.)\n"
"Del mismo modo, la funci@'on @code{point-max} devuelve el valor del\n"
"valor m@'aximo permisible del punto en el b@'uffer actual."

#. type: section
#: emacs-lisp-intro.texi:3027 emacs-lisp-intro.texi:7528
#: emacs-lisp-intro.texi:10028 emacs-lisp-intro.texi:16826
#, no-wrap
msgid "Exercise"
msgstr "Ejercicio"

#. type: Plain text
#: emacs-lisp-intro.texi:3031
msgid ""
"Find a file with which you are working and move towards its middle.  Find "
"its buffer name, file name, length, and your position in the file."
msgstr ""
"Busca un fichero en el que trabajar y avanza hasta la\n"
"mitad. Encuentra el nombre de b@'uffer, el nombre del fichero,\n"
"su tama@~no, y la posici@'on en el fichero."

#. type: cindex
#: emacs-lisp-intro.texi:3034
#, no-wrap
msgid "Definition writing"
msgstr "Escribiendo la Definici@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3035
#, no-wrap
msgid "Function definition writing"
msgstr "Escribiendo la Definici@'on de Funci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3036
#, no-wrap
msgid "Writing a function definition"
msgstr "Escribiendo una definici@'on funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:3045
msgid ""
"When the Lisp interpreter evaluates a list, it looks to see whether the "
"first symbol on the list has a function definition attached to it; or, put "
"another way, whether the symbol points to a function definition.  If it "
"does, the computer carries out the instructions in the definition.  A symbol "
"that has a function definition is called, simply, a function (although, "
"properly speaking, the definition is the function and the symbol refers to "
"it.)"
msgstr ""
"Cuando el int@'erprete eval@'ua una lista, mira si el primer\n"
"s@'{@dotless{i}}mbolo en la lista tiene una definici@'on adjunta; o, dicho de otro\n"
"modo, si el s@'{@dotless{i}}mbolo apunta a una definici@'on de\n"
"funci@'on. Si lo hace, el ordenador lleva a cabo las instrucciones que aparecen en la\n"
"definici@'on. Un s@'{@dotless{i}}mbolo que tiene una definici@'on de\n"
"funci@'on se llamada, simplemente, una funci@'on (aunque hablando con\n"
"propiedad, la definici@'on es la funci@'on y el s@'{@dotless{i}}mbolo\n"
"se refiere a ella.)"

#. type: node
#: emacs-lisp-intro.texi:3063
#, no-wrap
msgid "Primitive Functions"
msgstr "Funciones primitivas"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:3064
#, no-wrap
msgid "An Aside about Primitive Functions"
msgstr "Una v@'{@dotless{i}}a acerca de funciones primitivas"

#. type: cindex
#: emacs-lisp-intro.texi:3066
#, no-wrap
msgid "Primitive functions"
msgstr "Funciones primitivas"

#. type: cindex
#: emacs-lisp-intro.texi:3067
#, no-wrap
msgid "Functions, primitive"
msgstr "Funciones, primitiva"

#. type: cindex
#: emacs-lisp-intro.texi:3069
#, no-wrap
msgid "C language primitives"
msgstr "Primitivas en lenguaje C"

#. type: cindex
#: emacs-lisp-intro.texi:3070
#, no-wrap
msgid "Primitives written in C"
msgstr "Primitivas escritas en C"

#. type: Plain text
#: emacs-lisp-intro.texi:3080
msgid ""
"All functions are defined in terms of other functions, except for a few "
"@dfn{primitive} functions that are written in the C programming language.  "
"When you write functions' definitions, you will write them in Emacs Lisp and "
"use other functions as your building blocks.  Some of the functions you will "
"use will themselves be written in Emacs Lisp (perhaps by you) and some will "
"be primitives written in C@.  The primitive functions are used exactly like "
"those written in Emacs Lisp and behave like them.  They are written in C so "
"we can easily run GNU Emacs on any computer that has sufficient power and "
"can run C."
msgstr ""
"Todas las funciones se definen en t@'erminos de otras\n"
"funciones, a excepcion de algunas @dfn{primitivas} que estan\n"
"escritas en el lenguaje de programaci@'on C. Cuando escribas\n"
"definiciones de funciones, deben escribirse en Emacs Lisp y utilizar otras\n"
"funciones como bloques de construcci@'on. Algunas de las funciones\n"
"a utilizar estaran a su vez escritas en Emacs Lisp\n"
"(quiz@'as por t@'{@dotless{i}}) y algunas ser@'an primitivas escritas\n"
"en C. Las funciones primitivas se usan exactamente igual que las escritas en Emacs Lisp y se\n"
"comportan de igual forma. Est@'an escritas en C para que podamos ejecutar f@'acilmente\n"
"GNU Emacs en cualquier ordenador\n"
"que tenga la potencia suficiente y pueda ejecutar C."

#. type: Plain text
#: emacs-lisp-intro.texi:3087
msgid ""
"Let me re-emphasize this: when you write code in Emacs Lisp, you do not "
"distinguish between the use of functions written in C and the use of "
"functions written in Emacs Lisp.  The difference is irrelevant.  I mention "
"the distinction only because it is interesting to know.  Indeed, unless you "
"investigate, you won't know whether an already-written function is written "
"in Emacs Lisp or C."
msgstr ""
"Perm@'{@dotless{i}}teme volver a enfatizar esto: cuando se escribe c@'odigo en\n"
"Emacs Lisp, no se distinge entre el uso de funciones escritas en C y el\n"
"uso de funciones escritas en Emacs Lisp. La diferencia es\n"
"irrevelante. Mencionon@'e la distinci@'on solo porque es interesante\n"
"conocerla. De hecho, a menos de que investigues, no sabras si una\n"
"funci@'on previamente escrita esta en Emacs Lisp o en C."

#. type: section
#: emacs-lisp-intro.texi:3089
#, no-wrap
msgid "The @code{defun} Special Form"
msgstr "La forma especial @code{defun}"

#. type: cindex
#: emacs-lisp-intro.texi:3091
#, no-wrap
msgid "Special form of @code{defun}"
msgstr "Forma Especial de @code{defun}"

#. type: cindex
#: emacs-lisp-intro.texi:3093
#, no-wrap
msgid "@samp{function definition} defined"
msgstr "@samp{definici@'on funci@'on} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:3101
msgid ""
"In Lisp, a symbol such as @code{mark-whole-buffer} has code attached to it "
"that tells the computer what to do when the function is called.  This code "
"is called the @dfn{function definition} and is created by evaluating a Lisp "
"expression that starts with the symbol @code{defun} (which is an "
"abbreviation for @emph{define function}).  Because @code{defun} does not "
"evaluate its arguments in the usual way, it is called a @dfn{special form}."
msgstr ""
"En Lisp, un s@'{@dotless{i}}mbolo como @code{mark-whole-buffer}\n"
"tiene c@'odigo unido a el que le dice al ordenador que hacer cuando se invoca la\n"
"funci@'on. Este c@'odigo se denomina la @dfn{definici@'on de\n"
"funci@'on} y se crea mediante la evaluaci@'on de una expresi@'on Lisp que comienza con\n"
"el s@'{@dotless{i}}mbolo @code{defun} (que es una abreviatura para\n"
"@emph{define function} (definir funci@'on)). Porque @code{defun} no eval@'ua sus\n"
"argumentos en la forma habitual, eso se llama @dfn{forma especial}."

#. type: Plain text
#: emacs-lisp-intro.texi:3110
msgid ""
"In subsequent sections, we will look at function definitions from the Emacs "
"source code, such as @code{mark-whole-buffer}.  In this section, we will "
"describe a simple function definition so you can see how it looks.  This "
"function definition uses arithmetic because it makes for a simple example.  "
"Some people dislike examples using arithmetic; however, if you are such a "
"person, do not despair.  Hardly any of the code we will study in the "
"remainder of this introduction involves arithmetic or mathematics.  The "
"examples mostly involve text in one way or another."
msgstr ""
"En las siguientes secciones, miraremos en definiciones de funci@'on\n"
"partiendo del c@'odigo fuente de Emacs, por ejemplo\n"
"@code{mark-whole-buffer}. En esta secci@'on, describiremos una\n"
"definici@'on de funci@'on sencilla, para que puedas ver su\n"
"aspecto. Esta definici@'on de funci@'on usa aritm@'etica porque es un\n"
"ejemplo simple. A algunas personas les disgutan los ejemplos usando\n"
"aritm@'etica; sin embargo, si usted es tal persona, no se desespere. Casi\n"
"ningun c@'odigo a estudiar en el resto de esta\n"
"introducci@'on implica aritm@'etica o matem@'aticas. Los\n"
"ejemplos de manera mayoritaria involucran texto en una forma u otra."

#. type: Plain text
#: emacs-lisp-intro.texi:3113
msgid ""
"A function definition has up to five parts following the word @code{defun}:"
msgstr ""
"Una definici@'on de funci@'on tiene un m@'aximo de cinco partes despues de la palabra "
"@code{defun}:"

#. type: enumerate
#: emacs-lisp-intro.texi:3118
msgid ""
"The name of the symbol to which the function definition should be attached."
msgstr ""
"El nombre del s@'{@dotless{i}}mbolo al que la definici@'on de\n"
"funci@'on debe vincularse."

#. type: enumerate
#: emacs-lisp-intro.texi:3123
msgid ""
"A list of the arguments that will be passed to the function.  If no "
"arguments will be passed to the function, this is an empty list, @code{()}."
msgstr ""
"Una lista de los argumentos que ser@'an pasados a la funci@'on. Si no\n"
"hay argumentos que pasar, tendremos una lista vac@'{@dotless{i}}a, @code{()}."

#. type: enumerate
#: emacs-lisp-intro.texi:3127
msgid ""
"Documentation describing the function.  (Technically optional, but strongly "
"recommended.)"
msgstr ""
"Documentaci@'on describiendo la funci@'on. (T@'ecnicamente opcional,\n"
"pero fuertemente recomendada.)"

#. type: enumerate
#: emacs-lisp-intro.texi:3132
msgid ""
"Optionally, an expression to make the function interactive so you can use it "
"by typing @kbd{M-x} and then the name of the function; or by typing an "
"appropriate key or keychord."
msgstr ""
"Opcionalmente, una expresi@'on para hacer que la funci@'on interactive\n"
"pueda usarse presionando @kbd{M-x} seguido del\n"
"nombre de la funci@'on; o pulsando una tecla o atajo de teclado."

#. type: cindex
#: emacs-lisp-intro.texi:3133
#, no-wrap
msgid "@samp{body} defined"
msgstr "@samp{cuerpo} definido"

#. type: enumerate
#: emacs-lisp-intro.texi:3137
msgid ""
"The code that instructs the computer what to do: the @dfn{body} of the "
"function definition."
msgstr ""
"El c@'odigo que indica a el ordenador qu@'e hacer: el @dfn{cuerpo} de\n"
"la definici@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3141
msgid ""
"It is helpful to think of the five parts of a function definition as being "
"organized in a template, with slots for each part:"
msgstr ""
"Es @'util pensar en las cinco partes de una definici@'on de funci@'on\n"
"siendo organizadas como una plantilla, con slots para cada parte:"

#. type: group
#: emacs-lisp-intro.texi:3148
#, no-wrap
msgid ""
"(defun @var{function-name} (@var{arguments}@dots{})\n"
"  \"@var{optional-documentation}@dots{}\"\n"
"  (interactive @var{argument-passing-info})     ; @r{optional}\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun @var{nombre-de-funci@'on} (@var{argumentos}@dots{})\n"
"  \"@var{documentacion-opcional}@dots{}\"\n"
"  (interactive @var{argument-passing-info})     ; @r{opcional}\n"
"  @var{cuerpo}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3154
msgid ""
"As an example, here is the code for a function that multiplies its argument "
"by 7.  (This example is not interactive.  @xref{Interactive, , Making a "
"Function Interactive}, for that information.)"
msgstr ""
"A modo de ejemplo, aqu@'{@dotless{i}} est@'a el c@'odigo de una\n"
"funci@'on que multiplica su argumento por 7. (Este ejemplo no es\n"
"interactivo. Ver @ref{Interactive, , Creando una Funci@'on Interactive},\n"
"para esta informaci@'on.)"

#. type: group
#: emacs-lisp-intro.texi:3160 emacs-lisp-intro.texi:3281
#: emacs-lisp-intro.texi:14654
#, no-wrap
msgid ""
"(defun multiply-by-seven (number)\n"
"  \"Multiply NUMBER by seven.\"\n"
"  (* 7 number))\n"
msgstr ""
"(defun multiplicar-por-siete (numero)\n"
"  \"Multiplica NUMERO por siete.\"\n"
"  (* 7 numero))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3165
msgid ""
"This definition begins with a parenthesis and the symbol @code{defun}, "
"followed by the name of the function."
msgstr ""
"Esta definici@'on comienza con un par@'entesis y el\n"
"s@'{@dotless{i}}mbolo @code{defun} seguido por el nombre de la\n"
"funci@'on."

#. type: cindex
#: emacs-lisp-intro.texi:3166
#, no-wrap
msgid "@samp{argument list} defined"
msgstr "@samp{lista de argumentos} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:3173
msgid ""
"The name of the function is followed by a list that contains the arguments "
"that will be passed to the function.  This list is called the @dfn{argument "
"list}.  In this example, the list has only one element, the symbol, "
"@code{number}.  When the function is used, the symbol will be bound to the "
"value that is used as the argument to the function."
msgstr ""
"El nombre de la funci@'on es seguido por una lista que contiene\n"
"los argumentos que ser@'an pasados a la funci@'on. Esta lista se\n"
"llama @dfn{lista de argumentos}. En este ejemplo, la lista\n"
"solo tiene un elemento, el s@'{@dotless{i}}mbolo @code{numero}. Cuando\n"
"se utiliza la funci@'on, el s@'{@dotless{i}}mbolo ser@'a asociado al\n"
"valor que se utiliza como argumento de la funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:3184
msgid ""
"Instead of choosing the word @code{number} for the name of the argument, I "
"could have picked any other name.  For example, I could have chosen the word "
"@code{multiplicand}.  I picked the word `number' because it tells what kind "
"of value is intended for this slot; but I could just as well have chosen the "
"word `multiplicand' to indicate the role that the value placed in this slot "
"will play in the workings of the function.  I could have called it "
"@code{foogle}, but that would have been a bad choice because it would not "
"tell humans what it means.  The choice of name is up to the programmer and "
"should be chosen to make the meaning of the function clear."
msgstr ""
"En lugar de elegir la palabra @code{numero} para el nombre del\n"
"argumento, podr@'{@dotless{i}}a haber escogido cualquier otro\n"
"nombre. Por ejemplo, la palabra\n"
"@code{multiplicando}. Escogi la palabra `numero' porque indica\n"
"qu@'e tipo de valor se pretende para este espacio; pero\n"
"podr@'{@dotless{i}}a haber elegido `multiplicando' para indicar el rol\n"
"que jugara el valor en el funcionamiento de la\n"
"funci@'on. Podr@'{@dotless{i}}a haberlo llamado @code{foogle}, pero\n"
"habr@'{@dotless{i}}a sido una mala elecci@'on porque no\n"
"comunicaria qu@'e significa. La elecci@'on del nombre es\n"
"responsabilidad del programador y debe elegirse para hacer que el\n"
"significado de la funci@'on sea claro."

#. type: Plain text
#: emacs-lisp-intro.texi:3197
msgid ""
"Indeed, you can choose any name you wish for a symbol in an argument list, "
"even the name of a symbol used in some other function: the name you use in "
"an argument list is private to that particular definition.  In that "
"definition, the name refers to a different entity than any use of the same "
"name outside the function definition.  Suppose you have a nick-name `Shorty' "
"in your family; when your family members refer to `Shorty', they mean you.  "
"But outside your family, in a movie, for example, the name `Shorty' refers "
"to someone else.  Because a name in an argument list is private to the "
"function definition, you can change the value of such a symbol inside the "
"body of a function without changing its value outside the function.  The "
"effect is similar to that produced by a @code{let} expression.  "
"(@xref{let, , @code{let}}.)"
msgstr ""
"De hecho, se puede elegir cualquier nombre que se desee para un\n"
"s@'{@dotless{i}}mbolo en una lista de argumentos, incluso el nombre\n"
"del s@'{@dotless{i}}mbolo usado en alguna otra funci@'on: el nombre a\n"
"usar en una lista de argumentos es privado para esta definici@'on\n"
"particular. En esta definici@'on, el nombre hace referencia a una entidad\n"
"diferente a cualquiera que utilice el mismo nombre fuera de la\n"
"definici@'on de funci@'on. Sup@'on que tu familia te apoda `Enano';\n"
"cuando tus familiares digan `Enano',\n"
"queren hacer referencia a ti. Pero fuera de tu familia, en una\n"
"pel@'{@dotless{i}}cula, por ejemplo, el nombre `Enano' se refiere a\n"
"alguien m@'as. Debido a que el nombre en una lista de argumentos es privado\n"
"para la definici@'on de la funci@'on, se puede cambiar el valor de un\n"
"s@'{@dotless{i}}mbolo dentro del cuerpo de una funci@'on sin cambiar\n"
"su valor fuera de la funci@'on. El efecto es similar al producido\n"
"por la expresi@'on @code{let}. (Ver secci@'on @ref{let,\n"
"@code{let}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:3224
msgid ""
"The argument list is followed by the documentation string that describes the "
"function.  This is what you see when you type @w{@kbd{C-h f}} and the name "
"of a function.  Incidentally, when you write a documentation string like "
"this, you should make the first line a complete sentence since some "
"commands, such as @code{apropos}, print only the first line of a multi-line "
"documentation string.  Also, you should not indent the second line of a "
"documentation string, if you have one, because that looks odd when you use "
"@kbd{C-h f} (@code{describe-function}).  The documentation string is "
"optional, but it is so useful, it should be included in almost every "
"function you write."
msgstr ""
"La lista de argumentos es seguida por la cadena de documentaci@'on que\n"
"describe la funci@'on. Esto es lo que ves cuando presionas\n"
"@w{@kbd{C-h f}} y escribes el nombre de una funci@'on. Por cierto, cuando\n"
"escribas una cadena de documentaci@'on como esta, debes confeccionar la\n"
"primer l@'{@dotless{i}}nea como una sentencia completa ya que algunos comandos,\n"
"como @code{apropos}, imprimen solo la primer l@'{@dotless{i}}nea\n"
"de una cadena de documentaci@'on de varias l@'{@dotless{i}}neas. Ademas, no\n"
"debes indentar la segunda l@'{@dotless{i}}nea de la\n"
"cadena de documentaci@'on, si tienes una, porque se ve extraño al utilizar @kbd{C-h f}\n"
"(@code{describe-function}). La cadena de documentaci@'on es opcional, pero es\n"
"tan @'util, que deber@'{@dotless{i}}as incluirla en casi cualquier\n"
"funci@'on que escribas."

#. type: findex
#: emacs-lisp-intro.texi:3225
#, no-wrap
msgid "* @r{(multiplication)}"
msgstr "* @r{(multiplicaci@'on)}"

#. type: Plain text
#: emacs-lisp-intro.texi:3232
msgid ""
"The third line of the example consists of the body of the function "
"definition.  (Most functions' definitions, of course, are longer than "
"this.)  In this function, the body is the list, @code{(* 7 number)}, which "
"says to multiply the value of @var{number} by 7.  (In Emacs Lisp, @code{*} "
"is the function for multiplication, just as @code{+} is the function for "
"addition.)"
msgstr ""
"La tercera l@'{@dotless{i}}nea del ejemplo consiste en el cuerpo de la\n"
"definici@'on de funci@'on. (La mayor@'{@dotless{i}}a de las\n"
"definiciones de funci@'on, claro esta, son m@'as extensas que esta.) En\n"
"esta funci@'on, el cuerpo es la lista, @code{(* 7 numero)}, que indica\n"
"multiplicar el valor de @var{numero} por 7. (En Emacs Lisp, @code{*}\n"
"es la funci@'on para la multiplicaci@'on, al igual que @code{+} es la\n"
"funci@'on de la adici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3237
msgid ""
"When you use the @code{multiply-by-seven} function, the argument "
"@code{number} evaluates to the actual number you want used.  Here is an "
"example that shows how @code{multiply-by-seven} is used; but don't try to "
"evaluate this yet!"
msgstr ""
"Cuando se utiliza la funci@'on @code{multiplicar-por-siente}, el argumento\n"
"@code{numero} se eval@'ua al numero que desees\n"
"usar. He aqu@'{@dotless{i}} un ejemplo que muestra como\n"
"utilizar @code{multiplicar-por-siente}; pero @exclamdown{}no intentes\n"
"evaluar esto primero!."

#. type: smallexample
#: emacs-lisp-intro.texi:3240 emacs-lisp-intro.texi:3309
#, no-wrap
msgid "(multiply-by-seven 3)\n"
msgstr "(multiplicar-por-siente 3)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3251
msgid ""
"The symbol @code{number}, specified in the function definition in the next "
"section, is given or ``bound to'' the value 3 in the actual use of the "
"function.  Note that although @code{number} was inside parentheses in the "
"function definition, the argument passed to the @code{multiply-by-seven} "
"function is not in parentheses.  The parentheses are written in the function "
"definition so the computer can figure out where the argument list ends and "
"the rest of the function definition begins."
msgstr ""
"El s@'{@dotless{i}}mbolo @code{numero}, especificado en la\n"
"definici@'on de funci@'on en la siguiente secci@'on, se da o\n"
"``une a'' el valor 3 en el actual uso de la funci@'on. Note que\n"
"aunque @code{numero} estaba dentro de par@'entesis en la\n"
"definici@'on de funci@'on, el argumento pasado a la funci@'on\n"
"@code{multiplicar-por-siente} no est@'a entre par@'entesis. Los\n"
"par@'entesis se escriben en la definici@'on de funci@'on\n"
"para que el ordenador pueda averiguar donde termina la lista de\n"
"argumentos e inicia el resto de la definici@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3259
msgid ""
"If you evaluate this example, you are likely to get an error message.  (Go "
"ahead, try it!)  This is because we have written the function definition, "
"but not yet told the computer about the definition---we have not yet "
"installed (or `loaded') the function definition in Emacs.  Installing a "
"function is the process that tells the Lisp interpreter the definition of "
"the function.  Installation is described in the next section."
msgstr ""
"Si eval@'uas este ejemplo, es probable que obtengas un mensaje de\n"
"error. (@exclamdown{}adelante, intentalo!) Esto se debe a que hemos\n"
"escrito la definici@'on de funci@'on pero a@'un no se a comunicado\n"
"al ordenador la definici@'on --- no hemos\n"
"instalado (o `cargado') la definici@'on de funci@'on en\n"
"Emacs. Instalar una funci@'on es el proceso comunicar al\n"
"int@'erprete Lisp la definici@'on de la funci@'on. La instalaci@'on se\n"
"describe en la siguiente secci@'on."

#. type: cindex
#: emacs-lisp-intro.texi:3263
#, no-wrap
msgid "Definition installation"
msgstr "Definici@'on de la instalaci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3264
#, no-wrap
msgid "Function definition installation"
msgstr "Definici@'on de la Instalaci@'on de Funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:3275
msgid ""
"If you are reading this inside of Info in Emacs, you can try out the "
"@code{multiply-by-seven} function by first evaluating the function "
"definition and then evaluating @code{(multiply-by-seven 3)}.  A copy of the "
"function definition follows.  Place the cursor after the last parenthesis of "
"the function definition and type @kbd{C-x C-e}.  When you do this, "
"@code{multiply-by-seven} will appear in the echo area.  (What this means is "
"that when a function definition is evaluated, the value it returns is the "
"name of the defined function.)  At the same time, this action installs the "
"function definition."
msgstr ""
"Si est@'as leyendo esto dentro de Info en Emacs, puedes probar la\n"
"funci@'on @code{multiply-by-seven} evaluando en primer ]ugar la definici@'on\n"
"de funci@'on y luego evaluar @code{(multiplicar-por-siente 3)}. Hay una\n"
"copia de la definici@'on a continuaci@'on. Coloca el cursor despu@'es del\n"
"@'ultimo par@'entesis de la definici@'on de funci@'on y presiona\n"
"@kbd{C-x C-e}. Al hacer esto, @code{multiplicar-por-siente}\n"
"aparecer@'a en el @'area echo. (Lo que significa es que cuando una\n"
"definici@'on de funci@'on se evalua, el valor devuelto es el nombre\n"
"de la funci@'on definida.) Al mismo tiempo, esta acci@'on instala la\n"
"definici@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3291
msgid ""
"By evaluating this @code{defun}, you have just installed @code{multiply-by-"
"seven} in Emacs.  The function is now just as much a part of Emacs as "
"@code{forward-word} or any other editing function you use.  (@code{multiply-"
"by-seven} will stay installed until you quit Emacs.  To reload code "
"automatically whenever you start Emacs, see @ref{Permanent Installation, , "
"Installing Code Permanently}.)"
msgstr ""
"Al evaluar este @code{defun}, estas instanlado @code{multiply-by-seven}\n"
"en Emacs. La funci@'on es ahora solo una parte de Emacs como\n"
"@code{forward-word} o cualquier otra funci@'on de edici@'on que\n"
"utilices. (@code{multiplicar-por-siente} seguira instalado hasta que salgas de\n"
"Emacs. Para volver a cargar el c@'odigo autom@'aticamente cada vez que\n"
"Emacs inicie, ver @ref{Instalaci@'on Permanente, , Instalar C@'odigo\n"
"Permanentemente}.)"

#. type: node
#: emacs-lisp-intro.texi:3298
#, no-wrap
msgid "Effect of installation"
msgstr "Efecto de instalaci@'on"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:3299
#, no-wrap
msgid "The effect of installation"
msgstr "El efecto de instalaci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:3306
msgid ""
"You can see the effect of installing @code{multiply-by-seven} by evaluating "
"the following sample.  Place the cursor after the following expression and "
"type @kbd{C-x C-e}.  The number 21 will appear in the echo area."
msgstr ""
"Puedes ver el efecto de instalar @code{multiplicar-por-siente} evaluando\n"
"el siguiente ejemplo. Coloca el cursor despu@'es de la siguiente\n"
"expresi@'on y presiona @kbd{C-x C-e}. El n@'umero 21 aparacer@'a en el\n"
"@'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:3315
msgid ""
"If you wish, you can read the documentation for the function by typing "
"@kbd{C-h f} (@code{describe-function}) and then the name of the function, "
"@code{multiply-by-seven}.  When you do this, a @file{*Help*} window will "
"appear on your screen that says:"
msgstr ""
"Si lo deseas, puedes leer la documentaci@'on de la funci@'on\n"
"presiona @kbd{C-h f} (@code{describe-function}) y luego escribe el\n"
"nombre de la funci@'on, @code{multiplicar-por-siente}. Al hacer esto,\n"
"una ventana @file{*Help*} aparecer@'a en tu pantalla diciendo:"

#. type: group
#: emacs-lisp-intro.texi:3320
#, no-wrap
msgid ""
"multiply-by-seven is a Lisp function.\n"
"(multiply-by-seven NUMBER)\n"
"\n"
msgstr ""
"multiplicar-por-siente is a Lisp function.\n"
"(multiplicar-por-siente NUMERO)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:3322
#, no-wrap
msgid "Multiply NUMBER by seven.\n"
msgstr "Multiplica NUMERO por siete.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3327
msgid "(To return to a single window on your screen, type @kbd{C-x 1}.)"
msgstr ""
"(Para volver a una sola ventana en la pantalla, presiona @kbd{C-x 1}.)"

#. type: subsection
#: emacs-lisp-intro.texi:3329
#, no-wrap
msgid "Change a Function Definition"
msgstr "Cambiar una definici@'on de funci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3330
#, no-wrap
msgid "Changing a function definition"
msgstr "Cambiando una definici@'on de funci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3331
#, no-wrap
msgid "Function definition, how to change"
msgstr "Definici@'on de Funci@'on, como cambiar"

#. type: cindex
#: emacs-lisp-intro.texi:3332
#, no-wrap
msgid "Definition, how to change"
msgstr "Definici@'on, c@'omo cambiar"

#. type: Plain text
#: emacs-lisp-intro.texi:3338
msgid ""
"If you want to change the code in @code{multiply-by-seven}, just rewrite "
"it.  To install the new version in place of the old one, evaluate the "
"function definition again.  This is how you modify code in Emacs.  It is "
"very simple."
msgstr ""
"Si deseas modificar al c@'odigo de @code{multiplicar-por-siente}, simplemente\n"
"reescr@'{@dotless{i}}belo. Para instalar la nueva versi@'on en lugar\n"
"de la vieja, eval@'ua la nueva definici@'on de la funci@'on.\n"
"Esta, es la forma de modificar el c@'odigo en\n"
"Emacs. Es muy simple,"

#. type: Plain text
#: emacs-lisp-intro.texi:3346
msgid ""
"As an example, you can change the @code{multiply-by-seven} function to add "
"the number to itself seven times instead of multiplying the number by "
"seven.  It produces the same answer, but by a different path.  At the same "
"time, we will add a comment to the code; a comment is text that the Lisp "
"interpreter ignores, but that a human reader may find useful or "
"enlightening.  The comment is that this is the ``second version''."
msgstr ""
"A modo de ejemplo, puedes cambiar la funci@'on @code{multiplicar-por-siente}\n"
"para sumar el n@'umero a s@'{@dotless{i}} mismo siete veces en lugar de\n"
"multiplicar el n@'umero por siete. Esto produce el mismo resultado,\n"
"pero por una ruta diferente. Al mismo tiempo, a@~nadiremos un\n"
"comentario al codigo; un comentario es texto que el int@'erprete Lisp ignora,\n"
"pero un lector humano puede encontrar @'util o esclarecedor. El\n"
"comentario es que esto es la ``segunda versi@'on''."

#. type: group
#: emacs-lisp-intro.texi:3352
#, no-wrap
msgid ""
"(defun multiply-by-seven (number)       ; @r{Second version.}\n"
"  \"Multiply NUMBER by seven.\"\n"
"  (+ number number number number number number number))\n"
msgstr ""
"(defun multiplicar-por-siente (numero)       ; @r{Segunda versi@'on.}\n"
"  \"Multiplica NUMERO por siete.\"\n"
"  (+ numero numero numero numero numero numero numero))\n"

#. type: cindex
#: emacs-lisp-intro.texi:3355
#, no-wrap
msgid "Comments in Lisp code"
msgstr "Comentarios en C@'odigo Lisp"

#. type: Plain text
#: emacs-lisp-intro.texi:3360
msgid ""
"The comment follows a semicolon, @samp{;}.  In Lisp, everything on a line "
"that follows a semicolon is a comment.  The end of the line is the end of "
"the comment.  To stretch a comment over two or more lines, begin each line "
"with a semicolon."
msgstr ""
"El comentario sigue a un punto y coma, @samp{;}. En Lisp culquier cosa\n"
"en una l@'{@dotless{i}}nea despues de un punto y coma es un\n"
"comentario. El fin de la l@'{@dotless{i}}nea es el fin del\n"
"comentario. Para extender un comentario por dos o m@'as\n"
"l@'{@dotless{i}}neas, inicia cada l@'{@dotless{i}}nea con un punto y\n"
"coma."

#. type: Plain text
#: emacs-lisp-intro.texi:3364
msgid ""
"@xref{Beginning a .emacs File, , Beginning a @file{.emacs} File}, and "
"@ref{Comments, , Comments, elisp, The GNU Emacs Lisp Reference Manual}, for "
"more about comments."
msgstr ""
"@xref{Beginning a .emacs File, , Empezando un Fichero\n"
"@file{.emacs}}, y @ref{Comments, , Comentarios, elisp, El Manual de\n"
"Referencia de GNU Emacs Lisp}, para m@'as informacion sobre los comentarios."

#. type: Plain text
#: emacs-lisp-intro.texi:3368
msgid ""
"You can install this version of the @code{multiply-by-seven} function by "
"evaluating it in the same way you evaluated the first function: place the "
"cursor after the last parenthesis and type @kbd{C-x C-e}."
msgstr ""
"Se puede instalar esta versi@'on de la funci@'on\n"
"@code{multiply-by-seven} evaluando esta de la misma forma en que se\n"
"evalu@'o la primer funci@'on: coloca el cursor despu@'es del\n"
"@'ultimo par@'entesis y presiona @kbd{C-x C-e}."

#. type: Plain text
#: emacs-lisp-intro.texi:3372
msgid ""
"In summary, this is how you write code in Emacs Lisp: you write a function; "
"install it; test it; and then make fixes or enhancements and install it "
"again."
msgstr ""
"En resumen, esta es la forma en que puedes escribir c@'odigo en Emacs Lisp:\n"
"escribes una funci@'on; la instalas; la pruebas; luego haces\n"
"correciones y mejoras e inst@'alalas de nuevo."

#. type: cindex
#: emacs-lisp-intro.texi:3375
#, no-wrap
msgid "Interactive functions"
msgstr "Funciones Interactivas"

#. type: item
#: emacs-lisp-intro.texi:3376 emacs-lisp-intro.texi:4426
#, no-wrap
msgid "interactive"
msgstr "interactive"

#. type: Plain text
#: emacs-lisp-intro.texi:3384
msgid ""
"You make a function interactive by placing a list that begins with the "
"special form @code{interactive} immediately after the documentation.  A user "
"can invoke an interactive function by typing @kbd{M-x} and then the name of "
"the function; or by typing the keys to which it is bound, for example, by "
"typing @kbd{C-n} for @code{next-line} or @kbd{C-x h} for @code{mark-whole-"
"buffer}."
msgstr ""
"Haces a una funci@'on interactiva colocando una lista que inicia con\n"
"la clase especial @code{interactive} inmediatamente despu@'es de la\n"
"documentaci@'on. Un usuario puede invocar una funci@'on interactiva\n"
"con @kbd{M-x} seguido del nombre de la funci@'on; o\n"
"con un atajo de teclado ligado a esta, por ejemplo,\n"
"pulsa @kbd{C-n} para @code{next-line} o @kbd{C-x h} para\n"
"@code{mark-whole-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:3391
msgid ""
"Interestingly, when you call an interactive function interactively, the "
"value returned is not automatically displayed in the echo area.  This is "
"because you often call an interactive function for its side effects, such as "
"moving forward by a word or line, and not for the value returned.  If the "
"returned value were displayed in the echo area each time you typed a key, it "
"would be very distracting."
msgstr ""
"Curiosamente, cuando se llama a una funci@'on interactiva\n"
"interactivamente, el valor devuelto no se muestra autom@'aticamente\n"
"en el @'area echo. Esto se bede a que a menudo se llama a\n"
"una funci@'on interactiva para sus efectos secundarios, tales como\n"
"avanzar hacia adelante por palabra o l@'{@dotless{i}}nea, y no\n"
"para el valor devuelto. Si el valor devuelto fuera mostrado en el\n"
"@'area echo cada vez que presionas una tecla,\n"
"distraer@'{@dotless{i}}a mucho"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:3399
#, no-wrap
msgid "An Interactive @code{multiply-by-seven}, An Overview"
msgstr "Un @code{multiply-by-seven} interactivo, Un resumen"

#. type: Plain text
#: emacs-lisp-intro.texi:3405
msgid ""
"Both the use of the special form @code{interactive} and one way to display a "
"value in the echo area can be illustrated by creating an interactive version "
"of @code{multiply-by-seven}."
msgstr ""
"Tanto el uso de la forma especial @code{interactive} y una forma de\n"
"mostrar un valor en el @'area echo pueden ilustrarse creando una\n"
"versi@'on interactiva de @code{multiplicar-por-siente}."

#. type: Plain text
#: emacs-lisp-intro.texi:3408
msgid "Here is the code:"
msgstr "Aqu@'{@dotless{i}} est@'a el c@'odigo:"

#. type: group
#: emacs-lisp-intro.texi:3415 emacs-lisp-intro.texi:3467
#, no-wrap
msgid ""
"(defun multiply-by-seven (number)       ; @r{Interactive version.}\n"
"  \"Multiply NUMBER by seven.\"\n"
"  (interactive \"p\")\n"
"  (message \"The result is %d\" (* 7 number)))\n"
msgstr ""
"(defun multiplicar-por-siente (numero)       ; @r{Versi@'on Interactiva.}\n"
"  \"Multiplica NUMERO por siete.\"\n"
"  (interactive \"p\")\n"
"  (message \"El resultado es %d\" (* 7 numero)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3425
msgid ""
"You can install this code by placing your cursor after it and typing @kbd{C-"
"x C-e}.  The name of the function will appear in your echo area.  Then, you "
"can use this code by typing @kbd{C-u} and a number and then typing @kbd{M-x "
"multiply-by-seven} and pressing @key{RET}.  The phrase @samp{The result is "
"@dots{}} followed by the product will appear in the echo area."
msgstr ""
"Para instalar este c@'odigo colaca el cursor despu@'es del ultimo parentesis y\n"
"presiona @kbd{C-x C-e}. El nombre de la funci@'on aparecer@'a en el\n"
"@'area echo. Despues, puedes utilizar este c@'odigo al presionar\n"
"@kbd{C-u} seguido de un n@'umero, lugo @kbd{M-x\n"
"multiplicar-por-siente} y finalmente @key{RET}. La frase @samp{El\n"
"resultado es @dots{}} seguida por el producto aparecer@'a en el @'area\n"
"echo"

#. type: Plain text
#: emacs-lisp-intro.texi:3428
msgid ""
"Speaking more generally, you invoke a function like this in either of two "
"ways:"
msgstr ""
"Hablando en terminos mas generales, puedes invocar una funci@'on como\n"
"@'esta de dos maneras:"

#. type: enumerate
#: emacs-lisp-intro.texi:3434
msgid ""
"By typing a prefix argument that contains the number to be passed, and then "
"typing @kbd{M-x} and the name of the function, as with @kbd{C-u 3 M-x "
"forward-sentence}; or,"
msgstr ""
"Al escribir un argumento prefijo que contiene el n@'umero a pasar, y\n"
"a continuaci@'on presionar @kbd{M-x} y escribir el nombre de la funci@'on, como ocurre con\n"
"@kbd{C-u 3 M-x forward-sentence}; o,"

#. type: enumerate
#: emacs-lisp-intro.texi:3438
msgid ""
"By typing whatever key or keychord the function is bound to, as with @kbd{C-"
"u 3 M-e}."
msgstr ""
"Al escribir cualquier tecla o atajo de teclado ligado a la funcion a tratar,\n"
"como ocurre con @kbd{C-u 3 M-e}."

#. type: Plain text
#: emacs-lisp-intro.texi:3444
msgid ""
"Both the examples just mentioned work identically to move point forward "
"three sentences.  (Since @code{multiply-by-seven} is not bound to a key, it "
"could not be used as an example of key binding.)"
msgstr ""
"Ambos ejemplos operan de forma identica moviendo el punto\n"
"hacia adelantes tres frases. (Si @code{multiply-by-seven} no\n"
"estuviese ligado a una tecla, no podr@'{@dotless{i}}a ser usado\n"
"como ejemplo de enlace a tecla."

#. type: Plain text
#: emacs-lisp-intro.texi:3447
msgid ""
"(@xref{Keybindings, , Some Keybindings}, to learn how to bind a command to a "
"key.)"
msgstr ""
"(@xref{Atajos de teclado, , Algunos Atajos de Teclas}, para aprender\n"
"como vincular un comando a una tecla.)"

#. type: Plain text
#: emacs-lisp-intro.texi:3452
msgid ""
"A prefix argument is passed to an interactive function by typing the "
"@key{META} key followed by a number, for example, @kbd{M-3 M-e}, or by "
"typing @kbd{C-u} and then a number, for example, @kbd{C-u 3 M-e} (if you "
"type @kbd{C-u} without a number, it defaults to 4)."
msgstr ""
"Un argumento prefijo se pasa a una funci@'on interactiva\n"
"pulsando la tecla @key{META} seguida por un n@'umero, por ejemplo,\n"
"@kbd{M-3 M-e}, o con @kbd{C-u} y luego un n@'umero, por\n"
"ejemplo, @kbd{C-u 3 M-e} (si presionas @kbd{C-u} sin ningun n@'umero, el valor por\n"
"defecto es 4)."

#. type: subsection
#: emacs-lisp-intro.texi:3454
#, no-wrap
msgid "An Interactive @code{multiply-by-seven}"
msgstr "@code{multiplicar-por-siente} interactivo"

#. type: Plain text
#: emacs-lisp-intro.texi:3460
msgid ""
"Let's look at the use of the special form @code{interactive} and then at the "
"function @code{message} in the interactive version of @code{multiply-by-"
"seven}.  You will recall that the function definition looks like this:"
msgstr ""
"Veamos la clase especial @code{interactive} y\n"
"despues la funci@'on @code{message} en la versi@'on interactiva de\n"
"@code{multiplicar-por-siente}. Recordaras que la definici@'on de\n"
"funci@'on tiene el siguente aspecto:"

#. type: Plain text
#: emacs-lisp-intro.texi:3473
msgid ""
"In this function, the expression, @code{(interactive \"p\")}, is a list of "
"two elements.  The @code{\"p\"} tells Emacs to pass the prefix argument to "
"the function and use its value for the argument of the function."
msgstr ""
"En esta funci@'on, la expresi@'on, @code{(interactive \"p\")}, es una\n"
"lista de dos elementos. La @code{\"p\"} le indica a Emacs que debe pasar el\n"
"argumento prefijo a la funci@'on y utilizar este valor para el argumento de\n"
"la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3477
msgid ""
"The argument will be a number.  This means that the symbol @code{number} "
"will be bound to a number in the line:"
msgstr ""
"El argumento debe ser un n@'umero. Esto significa que el\n"
"s@'{@dotless{i}}mbolo @code{numero} estara asociado a un\n"
"n@'umero en la l@'{@dotless{i}}nea:"

#. type: smallexample
#: emacs-lisp-intro.texi:3480
#, no-wrap
msgid "(message \"The result is %d\" (* 7 number))\n"
msgstr "(message \"El resultado es %d\" (* 7 numero))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3486
msgid ""
"For example, if your prefix argument is 5, the Lisp interpreter will "
"evaluate the line as if it were:"
msgstr ""
"Por ejemplo, si tu argumento prefijo es 5, el int@'erprete Lisp\n"
"evaluar@'a la l@'{@dotless{i}}nea como si fuera:"

#. type: smallexample
#: emacs-lisp-intro.texi:3489
#, no-wrap
msgid "(message \"The result is %d\" (* 7 5))\n"
msgstr "(message \"El resultado es %d\" (* 7 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3497
msgid ""
"(If you are reading this in GNU Emacs, you can evaluate this expression "
"yourself.)  First, the interpreter will evaluate the inner list, which is "
"@code{(* 7 5)}.  This returns a value of 35.  Next, it will evaluate the "
"outer list, passing the values of the second and subsequent elements of the "
"list to the function @code{message}."
msgstr ""
"(Si est@'as leyendo esto en GNU Emacs, puedes evaluar esta\n"
"expresi@'on por ti mismo.) Primera, el int@'erprete\n"
"evaluar@'a la lista interna, que es @code{(* 7 5)}. Esto devuelve un\n"
"valor de 35. A continuaci@'on, se evaluar@'a la lista externa, pasando los\n"
"valores del segundo y posteriores elementos de la lista a la\n"
"funci@'on @code{message}."

#. type: Plain text
#: emacs-lisp-intro.texi:3507
msgid ""
"As we have seen, @code{message} is an Emacs Lisp function especially "
"designed for sending a one line message to a user.  (@xref{message, , The "
"@code{message} function}.)  In summary, the @code{message} function prints "
"its first argument in the echo area as is, except for occurrences of "
"@samp{%d} or @samp{%s} (and various other %-sequences which we have not "
"mentioned).  When it sees a control sequence, the function looks to the "
"second or subsequent arguments and prints the value of the argument in the "
"location in the string where the control sequence is located."
msgstr ""
"Como hemos visto, @code{message} es una funci@'on Emacs Lisp\n"
"especialmente dise@~nada para enviar un\n"
"mensaje de una l@'{@dotless{i}}nea al usuario. (@xref{message, , La funci@'on @code{message}})\n"
"En resumen, la funci@'on @code{message} imprime su primer argumento en\n"
"el @'area echo tal cual, exceptuando las apariciones de @samp{%d}, o\n"
"@samp{%s} (y varias otras secuencias de control que no hemos\n"
"mencionado). Cuando aparece una secuencia de control, la funci@'on observa\n"
"al segundo o posteriores argumentos e imprime el valor del argumento\n"
"en la ubicaci@'on donde se encuentra la secuencia de control."

#. type: Plain text
#: emacs-lisp-intro.texi:3513
msgid ""
"In the interactive @code{multiply-by-seven} function, the control string is "
"@samp{%d}, which requires a number, and the value returned by evaluating "
"@code{(* 7 5)} is the number 35.  Consequently, the number 35 is printed in "
"place of the @samp{%d} and the message is @samp{The result is 35}."
msgstr ""
"En la funci@'on interactiva @code{multiplicar-por-siente}, la cadena de\n"
"control es @samp{%d}, que requiere un n@'umero, y el valor devuelto\n"
"por la evaluaci@'on de @code{(* 7 5)} es el n@'umero 35. Por consiguiente, el\n"
"n@'umero 35 se imprime en lugar de @samp{%d} y el mensaje es @samp{El\n"
"resultado es 35}."

#. type: Plain text
#: emacs-lisp-intro.texi:3521
msgid ""
"(Note that when you call the function @code{multiply-by-seven}, the message "
"is printed without quotes, but when you call @code{message}, the text is "
"printed in double quotes.  This is because the value returned by "
"@code{message} is what appears in the echo area when you evaluate an "
"expression whose first element is @code{message}; but when embedded in a "
"function, @code{message} prints the text as a side effect without quotes.)"
msgstr ""
"(N@'otese que cuando llamas a la funci@'on @code{multiplicar-por-siente},\n"
"el mensaje se imprime sin comillas, pero cuando llamas a\n"
"@code{message}, el texto se impreme entre comillas. Esto se debe\n"
"a que el valor devuelto por @code{message} aparece en el @'area echo\n"
"cuando eval@'uas una expresi@'on cuyo primer elemento es\n"
"@code{message}; pero si se integra en una funci@'on,\n"
"@code{message} imprime el texto como un efecto secundario sin comillas.)"

#. type: section
#: emacs-lisp-intro.texi:3523
#, no-wrap
msgid "Different Options for @code{interactive}"
msgstr "Diferentes opciones para @code{interactive}"

#. type: cindex
#: emacs-lisp-intro.texi:3524
#, no-wrap
msgid "Options for @code{interactive}"
msgstr "Opciones para @code{interactive}"

#. type: cindex
#: emacs-lisp-intro.texi:3525
#, no-wrap
msgid "Interactive options"
msgstr "Opciones Interactive"

#. type: Plain text
#: emacs-lisp-intro.texi:3536
msgid ""
"In the example, @code{multiply-by-seven} used @code{\"p\"} as the argument "
"to @code{interactive}.  This argument told Emacs to interpret your typing "
"either @kbd{C-u} followed by a number or @key{META} followed by a number as "
"a command to pass that number to the function as its argument.  Emacs has "
"more than twenty characters predefined for use with @code{interactive}.  In "
"almost every case, one of these options will enable you to pass the right "
"information interactively to a function.  (@xref{Interactive Codes, , Code "
"Characters for @code{interactive}, elisp, The GNU Emacs Lisp Reference "
"Manual}.)"
msgstr ""
"En el ejemplo, @code{multiplicar-por-siente} usa @code{\"p\"} como el\n"
"argumento para @code{interactive}. Este argumento indica a Emacs que\n"
"interprete cualquier cosa que escriba despues de @kbd{C-u} o\n"
"del comando @key{META} como un n@'umero que sera el argumento a pasar\n"
"a la funci@'on. Emacs tiene m@'as de veinte\n"
"caracteres predefinidos para usar con @code{interactive}. En casi todos los\n"
"casos, una de estas opciones te permitira pasar la\n"
"informaci@'on adecuada interactivamente a una\n"
"funci@'on. (@xref{Interactive Codes, , Car@'acteres C@'odigo para\n"
"@code{interactive}, elisp, El Manual de Referencia GNU Emacs Lisp})."

#. type: Plain text
#: emacs-lisp-intro.texi:3540
msgid ""
"Consider the function @code{zap-to-char}.  Its interactive expression is"
msgstr ""
"Considera la funci@'on @code{zap-to-char}. Su expresi@'on interactiva es"

#. type: smallexample
#: emacs-lisp-intro.texi:3543 emacs-lisp-intro.texi:7732
#, no-wrap
msgid "(interactive \"p\\ncZap to char: \")\n"
msgstr "(interactive \"p\\ncZap to char: \")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3555
msgid ""
"The first part of the argument to @code{interactive} is @samp{p}, with which "
"you are already familiar.  This argument tells Emacs to interpret a "
"`prefix', as a number to be passed to the function.  You can specify a "
"prefix either by typing @kbd{C-u} followed by a number or by typing "
"@key{META} followed by a number.  The prefix is the number of specified "
"characters.  Thus, if your prefix is three and the specified character is "
"@samp{x}, then you will delete all the text up to and including the third "
"next @samp{x}.  If you do not set a prefix, then you delete all the text up "
"to and including the specified character, but no more."
msgstr ""
"La primer parte del argumento de @code{interactive} es @samp{p},\n"
"con el que ya est@'as familiarizado. Este argumento le indica a Emacs\n"
"intepretar un `prefijo', como un n@'umero que se pasa a la\n"
"funci@'on. Puedes especificar un prefijo plesionando @kbd{C-u}\n"
"seguido por un n@'umero o igualmente con @key{META} seguido por un\n"
"n@'umero. El prefijo es un n@'umero de caracteres especifico. De\n"
"este modo, si el prefijo es tres y el caracter\n"
"establecido es @samp{x}, entonces se borrar@'a todo el\n"
"texto incluido el tercer @samp{x} siguiente. Si no se establece un\n"
"prefijo, entonces borras todo el texto incluido el cuarto car@'acter\n"
"establecido, pero no m@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:3557
msgid ""
"The @samp{c} tells the function the name of the character to which to delete."
msgstr ""
"La @samp{c} indica a la funci@'on el nombre del car@'acter que va a eliminar."

#. type: Plain text
#: emacs-lisp-intro.texi:3567
msgid ""
"More formally, a function with two or more arguments can have information "
"passed to each argument by adding parts to the string that follows "
"@code{interactive}.  When you do this, the information is passed to each "
"argument in the same order it is specified in the @code{interactive} list.  "
"In the string, each part is separated from the next part by a @samp{\\n}, "
"which is a newline.  For example, you can follow @samp{p} with a @samp{\\n} "
"and an @samp{cZap to char:@: }.  This causes Emacs to pass the value of the "
"prefix argument (if there is one) and the character."
msgstr ""
"M@'as formalmente, una funci@'on con dos o m@'as argumentos puede\n"
"tener informaci@'on que pasa a cada argumento a@~nadiendo partes en la\n"
"cadena viene despues de @code{interactive}. Cuando haces esto, la\n"
"informaci@'on se pasa a cada argumento en el mismo orden que se especifica\n"
"en la lista @code{interactive}. En la cadena, cada\n"
"parte est@'a separada de la siguiente parte por un @samp{\\n}, que\n"
"significa nueva l@'{@dotless{i}}nea. Por ejemplo, a\n"
"@samp{p} puede continuar un @samp{\\n} y un @samp{cZap to char:@:}. Esto hace que\n"
"Emacs pase el valor del argumento prefijo (si lo hay) y el\n"
"car@'acter."

#. type: Plain text
#: emacs-lisp-intro.texi:3571
msgid ""
"In this case, the function definition looks like the following, where "
"@code{arg} and @code{char} are the symbols to which @code{interactive} binds "
"the prefix argument and the specified character:"
msgstr ""
"En este caso, la definici@'on de funci@'on se parace a la siguiente,\n"
"donde @code{arg} y @code{char} son los s@'{@dotless{i}}mbolos que\n"
"@code{interactive} vincula el argumento prefijo y el caracter especificado:"

#. type: group
#: emacs-lisp-intro.texi:3578
#, no-wrap
msgid ""
"(defun @var{name-of-function} (arg char)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"p\\ncZap to char: \")\n"
"  @var{body-of-function}@dots{})\n"
msgstr ""
"(defun @var{nombre-de-funcion} (arg char)\n"
"  \"@var{documentacion}@dots{}\"\n"
"  (interactive \"p\\ncZap to char: \")\n"
"  @var{cuerpo-de-funcion}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3585
msgid ""
"(The space after the colon in the prompt makes it look better when you are "
"prompted.  @xref{copy-to-buffer, , The Definition of @code{copy-to-buffer}}, "
"for an example.)"
msgstr ""
"(El espacio despu@'es del punto y coma en pantalla hace que se vea\n"
"mejor. @xref{copy-to-buffer, , La Definici@'on de\n"
"@code{copy-to-buffer}}, para un ejemplo.)"

#. type: Plain text
#: emacs-lisp-intro.texi:3590
msgid ""
"When a function does not take arguments, @code{interactive} does not require "
"any.  Such a function contains the simple expression @code{(interactive)}.  "
"The @code{mark-whole-buffer} function is like this."
msgstr ""
"Cuando una funci@'on no toma argumentos, @code{interactive} no\n"
"requiere ninguno. Una funci@'on asi contiene unicamente la expresi@'on\n"
"@code{(interactive)}. La funci@'on @code{mark-whole-buffer} es asi."

#. type: Plain text
#: emacs-lisp-intro.texi:3594
msgid ""
"Alternatively, if the special letter-codes are not right for your "
"application, you can pass your own arguments to @code{interactive} as a list."
msgstr ""
"Alternativamente, si los c@'odigos de letras especiales no son adecuados para tu\n"
"aplicaci@'on, puedes pasar tus propios argumentos a\n"
"@code{interactive} como una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:3599
msgid ""
"@xref{append-to-buffer, , The Definition of @code{append-to-buffer}}, for an "
"example.  @xref{Using Interactive, , Using @code{Interactive}, elisp, The "
"GNU Emacs Lisp Reference Manual}, for a more complete explanation about this "
"technique."
msgstr ""
"@xref{append-to-buffer, , La Definici@'on de @code{append-to-buffer}},\n"
"para un ejemplo. @xref{Using Interactive, , Usando\n"
"@code{interactive}, elisp, El Manual de GNU Emacs Lisp}, para una\n"
"explicaci@'on m@'as completa acerca de esta t@'ecnica."

#. type: section
#: emacs-lisp-intro.texi:3601
#, no-wrap
msgid "Install Code Permanently"
msgstr "Instalar c@'odigo permanentemente"

#. type: cindex
#: emacs-lisp-intro.texi:3602
#, no-wrap
msgid "Install code permanently"
msgstr "Instalar c@'odigo permanentemente"

#. type: cindex
#: emacs-lisp-intro.texi:3603
#, no-wrap
msgid "Permanent code installation"
msgstr "C@'odigo Permanente de Instalaci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:3604
#, no-wrap
msgid "Code installation"
msgstr "C@'odigo de instalaci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:3610
msgid ""
"When you install a function definition by evaluating it, it will stay "
"installed until you quit Emacs.  The next time you start a new session of "
"Emacs, the function will not be installed unless you evaluate the function "
"definition again."
msgstr ""
"Cuando instalas una definici@'on de funci@'on evaluada por ti,\n"
"permanecera instalada hasta que salgas de Emacs. La\n"
"proxima vez que inicies una nueva sesi@'on de Emacs, la\n"
"funci@'on no ser@'a instalada a menos que eval@'ues de nuevo la definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3614
msgid ""
"At some point, you may want to have code installed automatically whenever "
"you start a new session of Emacs.  There are several ways of doing this:"
msgstr ""
"En alg@'un punto, podrias necesitar que el c@'odigo se instale\n"
"autom@'aticamente cada vez que inicies una nueva sesi@'on de\n"
"Emacs. Hay varias formas de hacer esto:"

#. type: itemize
#: emacs-lisp-intro.texi:3622
msgid ""
"If you have code that is just for yourself, you can put the code for the "
"function definition in your @file{.emacs} initialization file.  When you "
"start Emacs, your @file{.emacs} file is automatically evaluated and all the "
"function definitions within it are installed.  @xref{Emacs Initialization, , "
"Your @file{.emacs} File}."
msgstr ""
"Si tienes c@'odigo solo para tu uso, puedes poner el\n"
"c@'odigo de la definici@'on de funci@'on en el fichero de\n"
"inicializaci@'on @file{.emacs}. Cuando se inicia Emacs, el fichero\n"
"@file{.emacs} se eval@'ua autom@'atica y se instalan todas sus definiciones de\n"
"funci@'on. @xref{Inicializaci@'on de Emacs,\n"
", Tu Fichero @file{.emacs}}."

#. type: itemize
#: emacs-lisp-intro.texi:3629
msgid ""
"Alternatively, you can put the function definitions that you want installed "
"in one or more files of their own and use the @code{load} function to cause "
"Emacs to evaluate and thereby install each of the functions in the files.  "
"@xref{Loading Files, , Loading Files}."
msgstr ""
"Como Alternativa, puedes poner las definiciones de funci@'on\n"
"en uno o m@'as ficheros y usar la funci@'on\n"
"@code{load} para hacer que Emacs evalue y con ello instale cada una de las funciones en\n"
"los ficheros. @xref{Cargando ficheros, , Cargando ficheros}."

#. type: itemize
#: emacs-lisp-intro.texi:3636
msgid ""
"Thirdly, if you have code that your whole site will use, it is usual to put "
"it in a file called @file{site-init.el} that is loaded when Emacs is built.  "
"This makes the code available to everyone who uses your machine.  (See the "
"@file{INSTALL} file that is part of the Emacs distribution.)"
msgstr ""
"En tercer lugar, si tienes c@'odigo que todo tu sitio va a utilizar, es normal\n"
"ponerlo en un fichero llamado @file{site-init.el} que se carga\n"
"cuando se construye Emacs. Esto hace que el c@'odigo este disponible a\n"
"cualquiera que use tu m@'aquina. (Mira el fichero @file{INSTALL} que\n"
"forma parte de la distribuci@'on Emacs.)"

#. type: Plain text
#: emacs-lisp-intro.texi:3647
msgid ""
"Finally, if you have code that everyone who uses Emacs may want, you can "
"post it on a computer network or send a copy to the Free Software "
"Foundation.  (When you do this, please license the code and its "
"documentation under a license that permits other people to run, copy, study, "
"modify, and redistribute the code and which protects you from having your "
"work taken from you.)  If you send a copy of your code to the Free Software "
"Foundation, and properly protect yourself and others, it may be included in "
"the next release of Emacs.  In large part, this is how Emacs has grown over "
"the past years, by donations."
msgstr ""
"Finalmente, si tienes c@'odigo que cualquier usuario de Emacs puede\n"
"querer, puedes publicarlo en una red de ordenadores o enviar una copia a\n"
"la Free Software Foundation. (Al hacer esto, por favor, licencia\n"
"el c@'odigo y su documentaci@'on bajo una licencia que permita a otras\n"
"personas ejecutar, copiar, estudiar, modificar, y redistribuir el\n"
"c@'odigo y te proteja de quien tome tu trabajo.) Si envias\n"
"una copia de tu c@'odigo a la Free Software Foundation, y lo proteges\n"
"apropiadamente de t@'{@dotless{i}} mismo y otros, puede ser\n"
"incluido en la siguiente version de Emacs. En gran parte, esta\n"
"es la forma como ha crecido Emacs a trav@'es de los\n"
"a@~nos, por donaciones."

#. type: Plain text
#: emacs-lisp-intro.texi:3654
msgid ""
"The @code{let} expression is a special form in Lisp that you will need to "
"use in most function definitions."
msgstr ""
"La expresi@'on @code{let} es una forma especial en Lisp que\n"
"tendras que utilizar en la mayor@'{@dotless{i}}a de las\n"
"definiciones de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3658
msgid ""
"@code{let} is used to attach or bind a symbol to a value in such a way that "
"the Lisp interpreter will not confuse the variable with a variable of the "
"same name that is not part of the function."
msgstr ""
"@code{let} se utiliza para unir o enlazar un s@'{@dotless{i}}mbolo\n"
"a un valor de tal manera que el int@'erprete no confunda la\n"
"variable con otra variable del mismo nombre que no forma parte de la\n"
"funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:3665
msgid ""
"To understand why the @code{let} special form is necessary, consider the "
"situation in which you own a home that you generally refer to as `the "
"house', as in the sentence, ``The house needs painting.'' If you are "
"visiting a friend and your host refers to `the house', he is likely to be "
"referring to @emph{his} house, not yours, that is, to a different house."
msgstr ""
"Para comprender por qu@'e la forma especial @code{let} es necesaria,\n"
"considera la situaci@'on donde eres dueño de una casa que generalmente vinculas con\n"
"`la casa', como en la frase, ``La casa necesita\n"
"pintura.'' Si visitas a un amigo y tu anfitri@'on hace\n"
"referencia a `la casa', es probable que se refiera a\n"
"@emph{su} casa, no a la tuya, es decir, es una casa distinta."

#. type: Plain text
#: emacs-lisp-intro.texi:3672
msgid ""
"If your friend is referring to his house and you think he is referring to "
"your house, you may be in for some confusion.  The same thing could happen "
"in Lisp if a variable that is used inside of one function has the same name "
"as a variable that is used inside of another function, and the two are not "
"intended to refer to the same value.  The @code{let} special form prevents "
"this kind of confusion."
msgstr ""
"Si tu amigo se refiere a su casa y tu crees que @'el se\n"
"est@'a refiri@'endo a tu casa, puedes tener cierta\n"
"confusi@'on. Lo mismo podria ocurrir en Lisp si una\n"
"variable que se utiliza dentro de una funci@'on tiene el mismo que una\n"
"variable usada dentro de otra funci@'on, y las dos no tienen la\n"
"intenci@'on de referirse al mismo valor. La forma especial @code{let}\n"
"previene este tipo de confusi@'on."

#. type: node
#: emacs-lisp-intro.texi:3681
#, no-wrap
msgid "Prevent confusion"
msgstr "Prevenir confusi@'on"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:3682
#, no-wrap
msgid "@code{let} Prevents Confusion"
msgstr "@code{let} evita confusiones"

#. type: cindex
#: emacs-lisp-intro.texi:3685
#, no-wrap
msgid "@samp{local variable} defined"
msgstr "@samp{variable local} definida"

#. type: cindex
#: emacs-lisp-intro.texi:3686
#, no-wrap
msgid "@samp{variable, local}, defined"
msgstr "@samp{variable, local}, definida"

#. type: Plain text
#: emacs-lisp-intro.texi:3693
msgid ""
"The @code{let} special form prevents confusion.  @code{let} creates a name "
"for a @dfn{local variable} that overshadows any use of the same name outside "
"the @code{let} expression.  This is like understanding that whenever your "
"host refers to `the house', he means his house, not yours.  (Symbols used in "
"argument lists work the same way.  @xref{defun, , The @code{defun} Special "
"Form}.)"
msgstr ""
"La forma especial @code{let} evita confusiones. @code{let} crea\n"
"un nombre para una @dfn{variable local} que eclipsa cualquier uso\n"
"del mismo nombre fuera de la expresi@'on @code{let}. Esto es como\n"
"entender que siempre que tu anfitri@'on se refiera a `la casa',\n"
"significa su casa, no la tuya. (Los s@'{@dotless{i}}mbolos usados en\n"
"las listas de argumentos funcionan de la misma manera. @xref{defun, , La\n"
"Forma Especial @code{defun}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:3698
msgid ""
"Local variables created by a @code{let} expression retain their value "
"@emph{only} within the @code{let} expression itself (and within expressions "
"called within the @code{let} expression); the local variables have no effect "
"outside the @code{let} expression."
msgstr ""
"Las variable locales por una expresi@'on @code{let} conservan\n"
"su valor @emph{solo} dentro de la expresi@'on @code{let}\n"
"misma (y dentro de expresiones llamadas dentro de la expresi@'on\n"
"@code{let}); las variables locales no tiene efecto fuera de la\n"
"expresi@'on @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:3706
msgid ""
"Another way to think about @code{let} is that it is like a @code{setq} that "
"is temporary and local.  The values set by @code{let} are automatically "
"undone when the @code{let} is finished.  The setting only affects "
"expressions that are inside the bounds of the @code{let} expression.  In "
"computer science jargon, we would say ``the binding of a symbol is visible "
"only in functions called in the @code{let} form; in Emacs Lisp, scoping is "
"dynamic, not lexical.''"
msgstr ""
"Otra forma de pensar respecto a @code{let} es que es como un\n"
"@code{setq} que es temporal y local. Los valores establecidos por\n"
"@code{let} son autom@'aticamente deshechos cuando termina el @code{let}.\n"
"La configuraci@'on solo afecta a las expresiones que se encuentran\n"
"dentro de los limites de la expresi@'on @code{let}. En jerga\n"
"informatica, dir@'{@dotless{i}}amos ``la\n"
"union de un simbolo es visible solo en las\n"
"funciones llamadas en la forma @code{let}; en Emacs Lisp, el alcance\n"
"es din@'amico, no l@'exico.''"

#. type: Plain text
#: emacs-lisp-intro.texi:3718
msgid ""
"@code{let} can create more than one variable at once.  Also, @code{let} "
"gives each variable it creates an initial value, either a value specified by "
"you, or @code{nil}.  (In the jargon, this is called `binding the variable to "
"the value'.)  After @code{let} has created and bound the variables, it "
"executes the code in the body of the @code{let}, and returns the value of "
"the last expression in the body, as the value of the whole @code{let} "
"expression.  (`Execute' is a jargon term that means to evaluate a list; it "
"comes from the use of the word meaning `to give practical effect "
"to' (@cite{Oxford English Dictionary}).  Since you evaluate an expression to "
"perform an action, `execute' has evolved as a synonym to `evaluate'.)"
msgstr ""
"@code{let} puede crear m@'as de una variable a la vez. Ademas,\n"
"@code{let} da a cada variable que crea un valor inicial, ya sea un valor\n"
"especificado por t@'{@dotless{i}}, o @code{nil}. (En la jerga, eso se\n"
"llama `unir la variable al valor'.) Despu@'es que @code{let} ha creado\n"
"y unido las variables, ejecuta el c@'odigo en el cuerpo del\n"
"@code{let} y devuelve el valor de la @'ultima expresi@'on en el\n"
"cuerpo, como el valor de toda la expresi@'on @code{let}.\n"
"(`Ejecutar' es un t@'ermino tecnico que significa evaluar\n"
"una lista: proviene del significando de la palabra `llevar a la\n"
"pr@'actica' (@cite{Diccionario de Ingl@'es de Oxford}). Dado que\n"
"eval@'uas una expresi@'on para realizar una acci@'on, `ejecutar' ha\n"
"evolucionado como un sin@'onimo para `evaluar'.)"

#. type: node
#: emacs-lisp-intro.texi:3719
#, no-wrap
msgid "Parts of let Expression"
msgstr "Partes de la expresi@'on let"

#. type: subsection
#: emacs-lisp-intro.texi:3720
#, no-wrap
msgid "The Parts of a @code{let} Expression"
msgstr "Las partes de una expresi@'on @code{let}"

#. type: cindex
#: emacs-lisp-intro.texi:3721
#, no-wrap
msgid "@code{let} expression, parts of"
msgstr "expresi@'on @code{let}, partes de"

#. type: cindex
#: emacs-lisp-intro.texi:3722
#, no-wrap
msgid "Parts of @code{let} expression"
msgstr "Partes de la expresi@'on @code{let}"

#. type: cindex
#: emacs-lisp-intro.texi:3724
#, no-wrap
msgid "@samp{varlist} defined"
msgstr "@samp{varlist} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:3731
msgid ""
"A @code{let} expression is a list of three parts.  The first part is the "
"symbol @code{let}.  The second part is a list, called a @dfn{varlist}, each "
"element of which is either a symbol by itself or a two-element list, the "
"first element of which is a symbol.  The third part of the @code{let} "
"expression is the body of the @code{let}.  The body usually consists of one "
"or more lists."
msgstr ""
"Una expresi@'on @code{let} es una lista de tres partes. La primer\n"
"parte es el s@'{@dotless{i}}mbolo @code{let}. La segunda parte es una\n"
"lista, denominada @dfn{varlist} (lista de variables), cada uno de cuyos elementos es un\n"
"s@'{@dotless{i}}mbolo por s@'{@dotless{i}} mismo o una lista de dos\n"
"elementos, el primer elemento es un s@'{@dotless{i}}mbolo. La\n"
"tercera parte de la expresi@'on @code{let} es el cuerpo del\n"
"@code{let}. El cuerpo normalmente consiste de una o m@'as listas."

#. type: Plain text
#: emacs-lisp-intro.texi:3734
msgid "A template for a @code{let} expression looks like this:"
msgstr "Una plantilla para una expresi@'on @code{let} se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:3737
#, no-wrap
msgid "(let @var{varlist} @var{body}@dots{})\n"
msgstr "(let @var{varlist} @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3745
msgid ""
"The symbols in the varlist are the variables that are given initial values "
"by the @code{let} special form.  Symbols by themselves are given the initial "
"value of @code{nil}; and each symbol that is the first element of a two-"
"element list is bound to the value that is returned when the Lisp "
"interpreter evaluates the second element."
msgstr ""
"Los s@'{@dotless{i}}mbolos en la varlist son las variables que dan\n"
"los valores iniciales para la forma especial @code{let}. Los\n"
"s@'{@dotless{i}}mbolos por s@'{@dotless{i}} solos reciven el\n"
"valor inicial de @code{nil}; y cada s@'{@dotless{i}}mbolo que es el\n"
"primer elemento de una lista de dos elementos es unido al valor\n"
"que el devuelto cuando el int@'erprete Lisp eval@'ua el segundo elemento."

#. type: Plain text
#: emacs-lisp-intro.texi:3750
msgid ""
"Thus, a varlist might look like this: @code{(thread (needles 3))}.  In this "
"case, in a @code{let} expression, Emacs binds the symbol @code{thread} to an "
"initial value of @code{nil}, and binds the symbol @code{needles} to an "
"initial value of 3."
msgstr ""
"De este modo, una varlist como:\n"
"@code{(thread (needles 3))}. En este caso, dentro una expresi@'on\n"
"@code{let}, Emacs une el s@'{@dotless{i}}mbolo @code{thread} a un\n"
"valor inicial de @code{nil}, y une el s@'{@dotless{i}}mbolo\n"
"@code{needles} a un valor inicial de 3."

#. type: Plain text
#: emacs-lisp-intro.texi:3754
msgid ""
"When you write a @code{let} expression, what you do is put the appropriate "
"expressions in the slots of the @code{let} expression template."
msgstr ""
"Cuando escribes una expresi@'on @code{let}, lo que haces es poner las\n"
"expresiones apropiadas en los huecos de la plantilla de expresi@'on\n"
"@code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:3757
msgid ""
"If the varlist is composed of two-element lists, as is often the case, the "
"template for the @code{let} expression looks like this:"
msgstr ""
"Si la varlist est@'a compuesta de listas de 2 elementos,\n"
"como suele ser el caso, la plantilla de la expresi@'on\n"
"@code{let} es la siguiente:"

#. type: group
#: emacs-lisp-intro.texi:3764
#, no-wrap
msgid ""
"(let ((@var{variable} @var{value})\n"
"      (@var{variable} @var{value})\n"
"      @dots{})\n"
"  @var{body}@dots{})\n"
msgstr ""
"(let ((@var{variable} @var{valor})\n"
"      (@var{variable} @var{valor})\n"
"      @dots{})\n"
"  @var{cuerpo}@dots{})\n"

#. type: node
#: emacs-lisp-intro.texi:3767
#, no-wrap
msgid "Sample let Expression"
msgstr "Ejemplo de expresi@'on let"

#. type: subsection
#: emacs-lisp-intro.texi:3768
#, no-wrap
msgid "Sample @code{let} Expression"
msgstr "Ejemplo de Expresi@'on @code{let}"

#. type: cindex
#: emacs-lisp-intro.texi:3769
#, no-wrap
msgid "Sample @code{let} expression"
msgstr "Ejemplo de Expresi@'on @code{let}"

#. type: cindex
#: emacs-lisp-intro.texi:3770
#, no-wrap
msgid "@code{let} expression sample"
msgstr "expresi@'on simple @code{let}"

#. type: Plain text
#: emacs-lisp-intro.texi:3775
msgid ""
"The following expression creates and gives initial values to the two "
"variables @code{zebra} and @code{tiger}.  The body of the @code{let} "
"expression is a list which calls the @code{message} function."
msgstr ""
"La siguiente expresi@'on crea y da valores iniciales a las\n"
"dos variables @code{cebra} y @code{tigre}. El cuerpo de la expresi@'on\n"
"@code{let} es una lista que llama a la funci@'on @code{message}."

#. type: group
#: emacs-lisp-intro.texi:3782
#, no-wrap
msgid ""
"(let ((zebra 'stripes)\n"
"      (tiger 'fierce))\n"
"  (message \"One kind of animal has %s and another is %s.\"\n"
"           zebra tiger))\n"
msgstr ""
"(let ((cebra 'rayas)\n"
"      (tigre 'fiero))\n"
"  (message \"Un tipo de animal tiene %s y otro es %s.\"\n"
"           cebra tigre))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3786
msgid "Here, the varlist is @code{((zebra 'stripes) (tiger 'fierce))}."
msgstr ""
"Aqu@'{@dotless{i}}, la varlist es @code{((cebra 'rayas) (tigre\n"
"'fiero))}."

#. type: Plain text
#: emacs-lisp-intro.texi:3801
msgid ""
"The two variables are @code{zebra} and @code{tiger}.  Each variable is the "
"first element of a two-element list and each value is the second element of "
"its two-element list.  In the varlist, Emacs binds the variable @code{zebra} "
"to the value @code{stripes}@footnote{According to Jared Diamond in "
"@cite{Guns, Germs, and Steel}, ``@dots{} zebras become impossibly dangerous "
"as they grow older'' but the claim here is that they do not become fierce "
"like a tiger.  (1997, W. W. Norton and Co., ISBN 0-393-03894-2, page 171)}, "
"and binds the variable @code{tiger} to the value @code{fierce}.  In this "
"example, both values are symbols preceded by a quote.  The values could just "
"as well have been another list or a string.  The body of the @code{let} "
"follows after the list holding the variables.  In this example, the body is "
"a list that uses the @code{message} function to print a string in the echo "
"area."
msgstr ""
"Las dos variables son @code{cebra} y @code{tigre}. Cada variable es el\n"
"primer elemento de una lista de dos elementos y cada valor es el\n"
"segundo elemento de su lista de dos elementos. En la varlist, Emacs\n"
"une la variable @code{cebra} al valor @code{rayas}@footnote{De\n"
"acuerdo con Jared Diamond en @cite{Guns, Germs, and Steel}, ``@dots{} las\n"
"cebras se vuelven increiblemente peligrosas a medida que envejecen'' pero la\n"
"demanda aqu@'{@dotless{i}} es que no llegan a ser fieras como un\n"
"tigre. (1997, W. W. Norton and Co., ISBN 0-393-03894-2, pagina 171)}, y\n"
"une la variable @code{tigre} al valor @code{fiero}. En este\n"
"ejemplo, ambos valores son s@'{@dotless{i}}mbolos precedidos por una\n"
"cita. Los valores podr@'{@dotless{i}}an muy bien haber sido otra\n"
"lista o una cadena. El cuerpo de @code{let} sigue despu@'es de la lista\n"
"que contiene las variables. En este ejemplo, el cuerpo es una lista que\n"
"usa la funci@'on @code{message} para imprimir una cadena en el @'area\n"
"echo."

#. type: Plain text
#: emacs-lisp-intro.texi:3806
msgid ""
"You may evaluate the example in the usual fashion, by placing the cursor "
"after the last parenthesis and typing @kbd{C-x C-e}.  When you do this, the "
"following will appear in the echo area:"
msgstr ""
"Puedes evaluar el ejemplo de la forma habitual, coloca el cursor\n"
"despu@'es del @'ultimo par@'entesis y presiona @kbd{C-x\n"
"C-e}. Al hacer esto, aparecer@'a lo siguiente en el @'area echo:"

#. type: smallexample
#: emacs-lisp-intro.texi:3809
#, no-wrap
msgid "\"One kind of animal has stripes and another is fierce.\"\n"
msgstr "\"Un tipo de animal tiene rayas y otro es fiero.\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3816
msgid ""
"As we have seen before, the @code{message} function prints its first "
"argument, except for @samp{%s}.  In this example, the value of the variable "
"@code{zebra} is printed at the location of the first @samp{%s} and the value "
"of the variable @code{tiger} is printed at the location of the second "
"@samp{%s}."
msgstr ""
"Como hemos visto antes, la funci@'on @code{message} imprime su primer\n"
"argumento, excepto por @samp{%s}. En este ejemplo, el valor de la\n"
"variable @code{cebra} se imprime en la posici@'on del primer @samp{%s}\n"
"y el valor de la variable @code{tigre} se imprime en la posici@'on del\n"
"segundo @samp{%s}."

#. type: subsection
#: emacs-lisp-intro.texi:3818
#, no-wrap
msgid "Uninitialized Variables in a @code{let} Statement"
msgstr "Variables sin inicializar en un sentencia @code{let}"

#. type: cindex
#: emacs-lisp-intro.texi:3819
#, no-wrap
msgid "Uninitialized @code{let} variables"
msgstr "Variables @code{let} no inicializadas"

#. type: cindex
#: emacs-lisp-intro.texi:3820
#, no-wrap
msgid "@code{let} variables uninitialized"
msgstr "Variables @code{let} no inicializadas"

#. type: Plain text
#: emacs-lisp-intro.texi:3825
msgid ""
"If you do not bind the variables in a @code{let} statement to specific "
"initial values, they will automatically be bound to an initial value of "
"@code{nil}, as in the following expression:"
msgstr ""
"Si no se une a las variables en una sentencia @code{let} con valores\n"
"iniciales espec@'{@dotless{i}}ficos, autom@'aticamente seran unidos\n"
"a un valor inicial de @code{nil}, como en la siguiente expresi@'on:"

#. type: group
#: emacs-lisp-intro.texi:3835
#, no-wrap
msgid ""
"(let ((birch 3)\n"
"      pine\n"
"      fir\n"
"      (oak 'some))\n"
"  (message\n"
"   \"Here are %d variables with %s, %s, and %s value.\"\n"
"   birch pine fir oak))\n"
msgstr ""
"(let ((abedul 3)\n"
"      pino\n"
"      abeto\n"
"      (roble 'algunos))\n"
"  (message\n"
"   \"Aqu@'{@dotless{i}} est@'an %d variables con %s, %s, y el valor %s.\"\n"
"   abedul pino abeto roble))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3840
msgid "Here, the varlist is @code{((birch 3) pine fir (oak 'some))}."
msgstr "Aqu@'{@dotless{i}}, la varlist es @code{((abedul 3) pino abeto (roble 'algunos))}."

#. type: Plain text
#: emacs-lisp-intro.texi:3844
msgid ""
"If you evaluate this expression in the usual way, the following will appear "
"in your echo area:"
msgstr ""
"Si eval@'uas esta expresi@'on de la forma habitual, aparecer@'a lo\n"
"siguiente en el @'area echo:"

#. type: smallexample
#: emacs-lisp-intro.texi:3847
#, no-wrap
msgid "\"Here are 3 variables with nil, nil, and some value.\"\n"
msgstr ""
"\"Aqu@'i est@'an 3 variables con nil, nil, y el valor algunos.\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3853
msgid ""
"In this example, Emacs binds the symbol @code{birch} to the number 3, binds "
"the symbols @code{pine} and @code{fir} to @code{nil}, and binds the symbol "
"@code{oak} to the value @code{some}."
msgstr ""
"En este ejemplo, Emacs une el s@'{@dotless{i}}mbolo @code{abedul}\n"
"al n@'umero 3, une los s@'{@dotless{i}}mbolos\n"
"@code{pino} y @code{abeto} a @code{nil}, y une el\n"
"s@'{@dotless{i}}mbolo @code{roble} al valor @code{algunos}."

#. type: Plain text
#: emacs-lisp-intro.texi:3864
msgid ""
"Note that in the first part of the @code{let}, the variables @code{pine} and "
"@code{fir} stand alone as atoms that are not surrounded by parentheses; this "
"is because they are being bound to @code{nil}, the empty list.  But "
"@code{oak} is bound to @code{some} and so is a part of the list @code{(oak "
"'some)}.  Similarly, @code{birch} is bound to the number 3 and so is in a "
"list with that number.  (Since a number evaluates to itself, the number does "
"not need to be quoted.  Also, the number is printed in the message using a "
"@samp{%d} rather than a @samp{%s}.)  The four variables as a group are put "
"into a list to delimit them from the body of the @code{let}."
msgstr ""
"Observe que en la primera parte de @code{let}, las variables @code{pino}\n"
"y @code{abeto} son unicamente @'atomos que no est@'an rodeados por\n"
"par@'entesis; esto se debe a que est@'an siendo unidos a @code{nil},\n"
"la lista vac@'{@dotless{i}}a. Pero @code{roble} se une a\n"
"@code{algunos} por ello es parte de la lista @code{(roble\n"
"'algunos)}. De manera similar, @code{abedul} se une al n@'umero 3 en\n"
"una lista con este n@'umero. (Ya que un\n"
"n@'umero se eval@'ua a s@'{@dotless{i}} mismo, el n@'umero no\n"
"necesita ser citado. Ademas, el n@'umero se imprime en el mensaje\n"
"usando un @samp{%d} en lugar de un @samp{%s}.) Las cuatro variables como un\n"
"grupo son puestas dentro de una lista para delimitarla de el\n"
"cuerpo de @code{let}."

#. type: cindex
#: emacs-lisp-intro.texi:3868
#, no-wrap
msgid "Conditional with @code{if}"
msgstr "Condicional con @code{if}"

#. type: Plain text
#: emacs-lisp-intro.texi:3876
msgid ""
"A third special form, in addition to @code{defun} and @code{let}, is the "
"conditional @code{if}.  This form is used to instruct the computer to make "
"decisions.  You can write function definitions without using @code{if}, but "
"it is used often enough, and is important enough, to be included here.  It "
"is used, for example, in the code for the function @code{beginning-of-"
"buffer}."
msgstr ""
"Adem@'as de @code{let} y @code{defun}, esta la forma especial\n"
"condicional @code{if}. Esta forma se utiliza para indicar al\n"
"computador que tome decisiones. Puedes escribir definiciones de\n"
"funci@'on sin necesidad de utilizar @code{if}, pero se usa con bastante\n"
"frecuencia, y es lo suficientemente importante como para incluirse\n"
"aqu@'{@dotless{i}}. Se utiliza, por ejemplo, en el c@'odigo para la\n"
"funci@'on @code{beginning-of-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:3881
msgid ""
"The basic idea behind an @code{if}, is that ``@emph{if} a test is true, "
"@emph{then} an expression is evaluated.'' If the test is not true, the "
"expression is not evaluated.  For example, you might make a decision such "
"as, ``if it is warm and sunny, then go to the beach!''"
msgstr ""
"La idea b@'asica detras de @code{if}, es que ``@emph{if} (si) una prueba es verdad\n"
"@emph{then} (entonces) se evalua la expresi@'on.'' Si la prueba no es verdad, la\n"
"expresi@'on no se evalua. Por ejemplo, podr@'{@dotless{i}}a\n"
"tomar una decisi@'on como, ``@exclamdown{}si es c@'alido y\n"
"soleado, entonces ir a la playa!''"

#. type: node
#: emacs-lisp-intro.texi:3888
#, no-wrap
msgid "if in more detail"
msgstr "if en m@'as detalle"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:3889
#, no-wrap
msgid "@code{if} in more detail"
msgstr "@code{if} en m@'as detalle"

#. type: cindex
#: emacs-lisp-intro.texi:3892
#, no-wrap
msgid "@samp{if-part} defined"
msgstr "@samp{parte-si} definida"

#. type: cindex
#: emacs-lisp-intro.texi:3893
#, no-wrap
msgid "@samp{then-part} defined"
msgstr "@samp{parte-entonces} definida"

#. type: Plain text
#: emacs-lisp-intro.texi:3899
msgid ""
"An @code{if} expression written in Lisp does not use the word `then'; the "
"test and the action are the second and third elements of the list whose "
"first element is @code{if}.  Nonetheless, the test part of an @code{if} "
"expression is often called the @dfn{if-part} and the second argument is "
"often called the @dfn{then-part}."
msgstr ""
"Al escribir una expresi@'on @code{if} en Lisp no se utiliza la\n"
"palabra `then'; la prueba y la acci@'on son el segundo y tercer\n"
"elementos de la lista cuyo primer elemento es @code{if}.\n"
"No obstante, la parte de la prueba en una expresi@'on\n"
"@code{if} a menudo se llamada @dfn{if-part}\n"
"(@emph{parte-si}) y el segundo argumento a menudo se llamada\n"
"@dfn{then-part} (@emph{parte-entonces})."

#. type: Plain text
#: emacs-lisp-intro.texi:3905
msgid ""
"Also, when an @code{if} expression is written, the true-or-false-test is "
"usually written on the same line as the symbol @code{if}, but the action to "
"carry out if the test is true, the ``then-part'', is written on the second "
"and subsequent lines.  This makes the @code{if} expression easier to read."
msgstr ""
"Adembas, cuando se escribe una expresi@'on @code{if}, la\n"
"prueba-verdadero-o-falso normalmente se escribe en la misma\n"
"l@'{@dotless{i}}nea que el s@'{@dotless{i}}mbolo @code{if}, pero la\n"
"acci@'on a llevar a cabo si la prueba es verdadera, ``then-part''\n"
"(@emph{parte-entonces}), se escribe en la segunda y siguientes\n"
"l@'{@dotless{i}}neas. Esto hace que la expresi@'on @code{if}\n"
"sea mas f@'acil de leer."

#. type: group
#: emacs-lisp-intro.texi:3910
#, no-wrap
msgid ""
"(if @var{true-or-false-test}\n"
"    @var{action-to-carry-out-if-test-is-true})\n"
msgstr ""
"(if @var{prueba-verdadero-o-falso}\n"
"    @var{accion-a-realizar-si-el-test-es-cierto})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3916
msgid ""
"The true-or-false-test will be an expression that is evaluated by the Lisp "
"interpreter."
msgstr ""
"La prueba-verdadero-o-falso es una expresi@'on que evalua el\n"
"int@'erprete Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:3920
msgid ""
"Here is an example that you can evaluate in the usual manner.  The test is "
"whether the number 5 is greater than the number 4.  Since it is, the message "
"@samp{5 is greater than 4!} will be printed."
msgstr ""
"Aqu@'{@dotless{i}} hay un ejemplo que puedes evaluar.\n"
"La prueba consiste en si el n@'umero 5 es mayor que el n@'umero 4. Ya que es as@'i,\n"
"se imprime el mensaje @samp{@exclamdown{}5 es mayor que 4!}."

#. type: group
#: emacs-lisp-intro.texi:3925
#, no-wrap
msgid ""
"(if (> 5 4)                             ; @r{if-part}\n"
"    (message \"5 is greater than 4!\"))   ; @r{then-part}\n"
msgstr ""
"(if (> 5 4)                           ; @r{parte-si}\n"
"    (message \"@exclamdown{}5 es mayor que 4!\"))   ; @r{parte-entonces}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3931
msgid ""
"(The function @code{>} tests whether its first argument is greater than its "
"second argument and returns true if it is.)"
msgstr ""
"(La funci@'on @code{>} comprueba si su primer argumento es mayor que su\n"
"segundo argumento y devuelve verdadero si lo es.)"

#. type: findex
#: emacs-lisp-intro.texi:3931
#, no-wrap
msgid "> (greater than)"
msgstr "> (mayor que)"

#. type: Plain text
#: emacs-lisp-intro.texi:3938
msgid ""
"Of course, in actual use, the test in an @code{if} expression will not be "
"fixed for all time as it is by the expression @code{(> 5 4)}.  Instead, at "
"least one of the variables used in the test will be bound to a value that is "
"not known ahead of time.  (If the value were known ahead of time, we would "
"not need to run the test!)"
msgstr ""
"Por supuesto, en un caso real, la prueba en una expresi@'on @code{if} no\n"
"ser@'a siempre la misma, como en la expresi@'on\n"
"@code{(> 5 4)}. En su lugar, al menos una de las variables utilizadas en la\n"
"prueba estara unida a un valor de antemano desconocido.\n"
"(Si el valor se conoce de antemano, @exclamdown{}no\n"
"necesitamos realizar la prueba!)"

#. type: Plain text
#: emacs-lisp-intro.texi:3944
msgid ""
"For example, the value may be bound to an argument of a function "
"definition.  In the following function definition, the character of the "
"animal is a value that is passed to the function.  If the value bound to "
"@code{characteristic} is @code{fierce}, then the message, @samp{It's a "
"tiger!} will be printed; otherwise, @code{nil} will be returned."
msgstr ""
"Por ejemplo, el valor puede estar unido a un argumento de una\n"
"definici@'on de funci@'on. En la siguiente definici@'on de funci@'on,\n"
"el tipo de animal es un valor que se pasa a la funci@'on. Si\n"
"el valor unido a @code{caracteristica} es\n"
"@code{fiero}, entonces se imprime el mensaje, @samp{@exclamdown{}Es un tigre!};\n"
"de otro modo, se devolvera @code{nil}."

#. type: group
#: emacs-lisp-intro.texi:3953
#, no-wrap
msgid ""
"(defun type-of-animal (characteristic)\n"
"  \"Print message in echo area depending on CHARACTERISTIC.\n"
"If the CHARACTERISTIC is the symbol `fierce',\n"
"then warn of a tiger.\"\n"
"  (if (equal characteristic 'fierce)\n"
"      (message \"It's a tiger!\")))\n"
msgstr ""
"(defun tipo-de-animal (caracteristica)\n"
"  \"Imprime el mensaje en el @'area echo dependiendo de CARACTERISTICA.\n"
"Si la CARACTERISTICA es el s@'{@dotless{i}}mbolo `fiero',\n"
"entonces advierte que es un tigre.\"\n"
"  (if (equal caracteristica 'fiera)\n"
"      (message \"@exclamdown{}Es un tigre!\")))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3961
msgid ""
"If you are reading this inside of GNU Emacs, you can evaluate the function "
"definition in the usual way to install it in Emacs, and then you can "
"evaluate the following two expressions to see the results:"
msgstr ""
"Si est@'as leyendo esto dentro de GNU Emacs, puedes evaluar la\n"
"definici@'on de funci@'on de la forma habitual para instalarlo en Emacs, y\n"
"luego puedes evaluar las dos expresiones siguientes para ver los resultados:"

#. type: group
#: emacs-lisp-intro.texi:3965 emacs-lisp-intro.texi:4134
#, no-wrap
msgid ""
"(type-of-animal 'fierce)\n"
"\n"
msgstr "(tipo-de-animal 'fiero)\n"

#. type: group
#: emacs-lisp-intro.texi:3967 emacs-lisp-intro.texi:4136
#, no-wrap
msgid ""
"(type-of-animal 'zebra)\n"
"\n"
msgstr "(tipo-de-animal 'cebra)\n\n"

#. type: Plain text
#: emacs-lisp-intro.texi:3977
msgid ""
"When you evaluate @code{(type-of-animal 'fierce)}, you will see the "
"following message printed in the echo area: @code{\"It's a tiger!\"}; and "
"when you evaluate @code{(type-of-animal 'zebra)} you will see @code{nil} "
"printed in the echo area."
msgstr ""
"Al evaluar @code{(tipo-de-animal 'fiero)}, veras el siguiente\n"
"mensaje impreso en el @'area echo: @code{\"@exclamdown{}Es un tigre!\"};\n"
"y cuando se eval@'ua @code{(tipo-de-animal 'cebra)} ver@'as @code{nil}\n"
"impreso en el @'area echo."

#. type: subsection
#: emacs-lisp-intro.texi:3979
#, no-wrap
msgid "The @code{type-of-animal} Function in Detail"
msgstr "La funci@'on @code{tipo-de-animal} en detalle"

#. type: Plain text
#: emacs-lisp-intro.texi:3982
msgid "Let's look at the @code{type-of-animal} function in detail."
msgstr "Veamos la funci@'on @code{tipo-de-animal} en detalle."

#. type: Plain text
#: emacs-lisp-intro.texi:3986
msgid ""
"The function definition for @code{type-of-animal} was written by filling the "
"slots of two templates, one for a function definition as a whole, and a "
"second for an @code{if} expression."
msgstr ""
"La definici@'on de funci@'on @code{tipo-de-animal} se escribio\n"
"llenando los espacios de dos plantillas, la primera para la definici@'on\n"
"de funci@'on como un todo, y la seguanda para una expresi@'on @code{if}."

#. type: Plain text
#: emacs-lisp-intro.texi:3989
msgid "The template for every function that is not interactive is:"
msgstr "La plantilla para cada funci@'on no interactiva es:"

#. type: group
#: emacs-lisp-intro.texi:3995
#, no-wrap
msgid ""
"(defun @var{name-of-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun @var{nombre-de-funcion} (@var{lista-de-argumentos})\n"
"  \"@var{documentacion}@dots{}\"\n"
"  @var{cuerpo}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4000
msgid "The parts of the function that match this template look like this:"
msgstr "Las partes de la funci@'on que encajan con esta plantilla se ven asi:"

#. type: group
#: emacs-lisp-intro.texi:4008
#, no-wrap
msgid ""
"(defun type-of-animal (characteristic)\n"
"  \"Print message in echo area depending on CHARACTERISTIC.\n"
"If the CHARACTERISTIC is the symbol `fierce',\n"
"then warn of a tiger.\"\n"
"  @var{body: the} @code{if} @var{expression})\n"
msgstr ""
"(defun tipo-de-animal (caracteristica)\n"
"  \"Imprime el mensaje en el @'area echo dependiendo de CARACTERISTICA.\n"
"Si la CARACTERISTICA es el s@'{@dotless{i}}mbolo `fiero',\n"
"entonces advierte que es un tigre.\"\n"
"  @var{cuerpo: la expresi@'on} @code{if})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4017
msgid ""
"The name of function is @code{type-of-animal}; it is passed the value of one "
"argument.  The argument list is followed by a multi-line documentation "
"string.  The documentation string is included in the example because it is a "
"good habit to write documentation string for every function definition.  The "
"body of the function definition consists of the @code{if} expression."
msgstr ""
"El nombre de funci@'on es @code{tipo-de-animal}; se pasa al valor de\n"
"un argumento. A la lista de argumentos se sigue una cadena de\n"
"documentaci@'on multi-l@'{@dotless{i}}nea. La cadena de\n"
"documentaci@'on se incluye en el ejemplo porque es un buen h@'abito\n"
"escribir la cadena de documentaci@'on para cada definici@'on de funci@'on. El\n"
"cuerpo de la definici@'on de funci@'on consiste en la expresi@'on\n"
"@code{if}. "

#. type: Plain text
#: emacs-lisp-intro.texi:4020
msgid "The template for an @code{if} expression looks like this:"
msgstr "La plantilla para una expresi@'on @code{if} se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:4025
#, no-wrap
msgid ""
"(if @var{true-or-false-test}\n"
"    @var{action-to-carry-out-if-the-test-returns-true})\n"
msgstr ""
"(if @var{prueba-verdadero-o-falso}\n"
"    @var{accion-a-realizar-si-la-prueba-devuelve-verdadero})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4031
msgid ""
"In the @code{type-of-animal} function, the code for the @code{if} looks like "
"this:"
msgstr ""
"En la funci@'on @code{tipo-de-animal}, el c@'odigo para @code{if}\n"
"se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:4036
#, no-wrap
msgid ""
"(if (equal characteristic 'fierce)\n"
"    (message \"It's a tiger!\")))\n"
msgstr ""
"(if (equal caracteristica 'fiero)\n"
"    (message \"@exclamdown{}Es un tigre!\")))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4041
msgid "Here, the true-or-false-test is the expression:"
msgstr "Aqu@'{@dotless{i}}, est@'a la expresi@'on prueba-verdadero-o-falso"

#. type: smallexample
#: emacs-lisp-intro.texi:4044
#, no-wrap
msgid "(equal characteristic 'fierce)\n"
msgstr "(equal caracteristica 'fiero)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4052
msgid ""
"In Lisp, @code{equal} is a function that determines whether its first "
"argument is equal to its second argument.  The second argument is the quoted "
"symbol @code{'fierce} and the first argument is the value of the symbol "
"@code{characteristic}---in other words, the argument passed to this function."
msgstr ""
"En Lisp, @code{equal} es una funci@'on que determina si su primer\n"
"argumento es igual a su segundo argumento. El segundo argumento es\n"
"el s@'{@dotless{i}}mbolo citado @code{'fiero} y el primer argumento es\n"
"el valor del s@'{@dotless{i}}mbolo @code{caracteristico}\n"
"--- en otras palabras, el argumento pasado a esta funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:4059
msgid ""
"In the first exercise of @code{type-of-animal}, the argument @code{fierce} "
"is passed to @code{type-of-animal}.  Since @code{fierce} is equal to "
"@code{fierce}, the expression, @code{(equal characteristic 'fierce)}, "
"returns a value of true.  When this happens, the @code{if} evaluates the "
"second argument or then-part of the @code{if}: @code{(message \"It's tiger!"
"\")}."
msgstr ""
"En la primer prueba de @code{tipo-de-animal}, el argumento\n"
"@code{fiero} se pasa a @code{tipo-de-animal}. Ya que @code{fiero}\n"
"es igual a @code{fiero}, la expresi@'on, @code{(equal caracteristica\n"
"'fiero)}, devuelve el valor verdadero. Cuando esto sucede,\n"
"@code{if} eval@'ua el segundo argumento o la parte-entonces\n"
"del @code{if}: @code{(message \"@exclamdown{}Es un tigre!\")}."

#. type: Plain text
#: emacs-lisp-intro.texi:4064
msgid ""
"On the other hand, in the second exercise of @code{type-of-animal}, the "
"argument @code{zebra} is passed to @code{type-of-animal}.  @code{zebra} is "
"not equal to @code{fierce}, so the then-part is not evaluated and @code{nil} "
"is returned by the @code{if} expression."
msgstr ""
"Por otro lado, en la segunda prueba de @code{tipo-de-animal}, se\n"
"pasa el argumento @code{cebra} a @code{tipo-de-animal}. @code{cebra}\n"
"no es igual a @code{fiero}, por lo que la parte-entonces no\n"
"se evalua y se devuelve @code{nil} por la expresi@'on\n"
"@code{if} (@emph{si})."

#. type: section
#: emacs-lisp-intro.texi:4066
#, no-wrap
msgid "If--then--else Expressions"
msgstr "Expresiones if--then--else"

#. type: cindex
#: emacs-lisp-intro.texi:4067
#, no-wrap
msgid "Else"
msgstr "Else"

#. type: Plain text
#: emacs-lisp-intro.texi:4076
msgid ""
"An @code{if} expression may have an optional third argument, called the "
"@dfn{else-part}, for the case when the true-or-false-test returns false.  "
"When this happens, the second argument or then-part of the overall @code{if} "
"expression is @emph{not} evaluated, but the third or else-part @emph{is} "
"evaluated.  You might think of this as the cloudy day alternative for the "
"decision ``if it is warm and sunny, then go to the beach, else read a "
"book!''."
msgstr ""
"Una expresi@'on @code{if} puede tener un tercer argumento\n"
"opcional, llamado la @dfn{parte-de_otro_modo}, en caso de que\n"
"la prueba-verdadero-o-falso devuelva falso. Cuando esto sucede, el segundo\n"
"argumento o then-part de la expresi@'on @code{if}\n"
"global, @emph{no} se eval@'ua, pero el tercer argumento o la parte-de_otro_modo\n"
"@emph{se} eval@'ua. Podr@'{@dotless{i}}a pensar en esto como la\n"
"alternativa del d@'{@dotless{i}}a nublado para la decisi@'on ``si es\n"
"c@'alido y soleado, entonces ir a la playa, de otro modo @exclamdown{}leer un\n"
"libro!''"

#. type: Plain text
#: emacs-lisp-intro.texi:4081
msgid ""
"The word ``else'' is not written in the Lisp code; the else-part of an "
"@code{if} expression comes after the then-part.  In the written Lisp, the "
"else-part is usually written to start on a line of its own and is indented "
"less than the then-part:"
msgstr ""
"La palabra ``else'' (``de otro modo'') no se escribe en el c@'odigo\n"
"Lisp; la parte-de_otro_modo de una expresi@'on @code{if}\n"
"viene despu@'es de la parte-entonces. En Lisp,\n"
"la parte-de_otro_modo suele escribirse al inicio\n"
"de una nueva l@'{@dotless{i}}nea y se indenta menos\n"
"que la parte-entonces:"

#. type: group
#: emacs-lisp-intro.texi:4087
#, no-wrap
msgid ""
"(if @var{true-or-false-test}\n"
"    @var{action-to-carry-out-if-the-test-returns-true}\n"
"  @var{action-to-carry-out-if-the-test-returns-false})\n"
msgstr ""
"(if @var{prueba-verdadero-o-falso}\n"
"    @var{accion-a-realizar-si-la-prueva-devuelve-verdadero}\n"
"  @var{accion-a-realizar-si-la-prueba-devuelve-falso})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4092
msgid ""
"For example, the following @code{if} expression prints the message @samp{4 "
"is not greater than 5!} when you evaluate it in the usual way:"
msgstr ""
"Por ejemplo, la siguiente expresi@'on @code{if} imprime el mensaje\n"
"@samp{@exclamdown{}4 no es mayor que 5!} al evaluarse en la forma\n"
"habitual:"

#. type: group
#: emacs-lisp-intro.texi:4098
#, no-wrap
msgid ""
"(if (> 4 5)                               ; @r{if-part}\n"
"    (message \"4 falsely greater than 5!\") ; @r{then-part}\n"
"  (message \"4 is not greater than 5!\"))   ; @r{else-part}\n"
msgstr ""
"(if (> 4 5)                                   ; @r{parte-si}\n"
"    (message \"@exclamdown{}4 falsamente es mayor que 5!\") ; @r{parte-entonces}\n"
"  (message \"@exclamdown{}4 no es mayor que 5!\"))          ; @r{parte-resto}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4106
msgid ""
"Note that the different levels of indentation make it easy to distinguish "
"the then-part from the else-part.  (GNU Emacs has several commands that "
"automatically indent @code{if} expressions correctly.  @xref{Typing Lists, , "
"GNU Emacs Helps You Type Lists}.)"
msgstr ""
"N@'otese que los diferentes niveles de indentaci@'on hacen f@'acil\n"
"distinguir la parte then desde la parte resto. (GNU Emacs tiene varios\n"
"comandos que autom@'aticamente indenta expresiones correctamente\n"
"@code{if} @emph{si}. @xref{Escribiendo listas, , GNU Emacs te ayuda a\n"
"escribir listas}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:4110
msgid ""
"We can extend the @code{type-of-animal} function to include an else-part by "
"simply incorporating an additional part to the @code{if} expression."
msgstr ""
"Podemos extender la funci@'on @code{tipo-de-animal} para incluir una\n"
"parte else para simplemente incorporar una parte adicional para la\n"
"expresi@'on @code{if} @emph{si}."

#. type: Plain text
#: emacs-lisp-intro.texi:4116
msgid ""
"You can see the consequences of doing this if you evaluate the following "
"version of the @code{type-of-animal} function definition to install it and "
"then evaluate the two subsequent expressions to pass different arguments to "
"the function."
msgstr ""
"Se puede ver las consecuencias de hacer esto si se eval@'ua la\n"
"siguiente versi@'on de la definici@'on de funci@'on\n"
"@code{type-of-animal} (@emph{tipo-de-animal}) para instalarlo y\n"
"entonces evaluar las dos expresiones subsiguientes para pasar\n"
"diferentes argumentos para la funci@'on. "

#. type: group
#: emacs-lisp-intro.texi:4127
#, no-wrap
msgid ""
"(defun type-of-animal (characteristic)  ; @r{Second version.}\n"
"  \"Print message in echo area depending on CHARACTERISTIC.\n"
"If the CHARACTERISTIC is the symbol `fierce',\n"
"then warn of a tiger;\n"
"else say it's not fierce.\"\n"
"  (if (equal characteristic 'fierce)\n"
"      (message \"It's a tiger!\")\n"
"    (message \"It's not fierce!\")))\n"
msgstr ""
"(defun tipo-de-animal (caracteristica)  ; @r{Segunda versi@'on.}\n"
"  \"Imprime el mensaje en el @'area echo dependiendo de CARACTERISTICA.\n"
"Si la CARACTERISTICA es el s@'{@dotless{i}}mbolo `fiera',\n"
"entonces avisa de un tigre; sino di que no es una fiera.\"\n"
"  (if (equal caracteristica 'fiera)\n"
"      (message \"@exclamdown{}Es un tigre!\")\n"
"    (message \"@exclamdown{}No es una fiera!\")))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4146
msgid ""
"When you evaluate @code{(type-of-animal 'fierce)}, you will see the "
"following message printed in the echo area: @code{\"It's a tiger!\"}; but "
"when you evaluate @code{(type-of-animal 'zebra)}, you will see @code{\"It's "
"not fierce!\"}."
msgstr ""
"Cuando se eval@'ua @code{(tipo-de-animal 'fiera)}, se ver@'a el\n"
"siguiente mensaje impreso en el @'area echo: @code{\"@exclamdown{}Eso\n"
"es un tigre!\"}; pero cuando se eval@'ua @code{(tipo-de-animal\n"
"'cebra)}, se ver@'a @code{\"@exclamdown{}No es una fiera!\"}."

#. type: Plain text
#: emacs-lisp-intro.texi:4152
msgid ""
"(Of course, if the @var{characteristic} were @code{ferocious}, the message "
"@code{\"It's not fierce!\"} would be printed; and it would be misleading! "
"When you write code, you need to take into account the possibility that some "
"such argument will be tested by the @code{if} and write your program "
"accordingly.)"
msgstr ""
"(De acuerdo, si la @var{caracter@'{@dotless{i}}stica} fuera\n"
"@code{feroz}, el mensaje @code{\"@exclamdown{}No es una fiera!\"}\n"
"ser@'{@dotless{i}}a impreso; @exclamdown{}y ser@'{@dotless{i}}a\n"
"err@'oneo!  Cuando se escribe c@'odigo, se necesita tener en cuenta la\n"
"posibilidad que algunos argumentos ser@'a probado por @code{if}\n"
"@emph{si} y escribir tu programa de acuerdo."

#. type: cindex
#: emacs-lisp-intro.texi:4155
#, no-wrap
msgid "Truth and falsehood in Emacs Lisp"
msgstr "Verdad y mentira en Emacs Lisp"

#. type: cindex
#: emacs-lisp-intro.texi:4156
#, no-wrap
msgid "Falsehood and truth in Emacs Lisp"
msgstr "Falsedad y verdad en Emacs Lisp"

#. type: findex
#: emacs-lisp-intro.texi:4157
#, no-wrap
msgid "nil"
msgstr "nil"

#. type: Plain text
#: emacs-lisp-intro.texi:4164
msgid ""
"There is an important aspect to the truth test in an @code{if} expression.  "
"So far, we have spoken of `true' and `false' as values of predicates as if "
"they were new kinds of Emacs Lisp objects.  In fact, `false' is just our old "
"friend @code{nil}.  Anything else---anything at all---is `true'."
msgstr ""
"Hay un aspecto importante para el test de verdad en una expresi@'on\n"
"@code{if} (@emph{si}). As@'{@dotless{i}}, hemos hablado de `verdad' y\n"
"`mentira' como valores de predicados como si fueran nuevos tipos de\n"
"objetos Emacs Lisp. En efecto, `falso' es solo nuestro viejo amigo\n"
"@code{nil}. Cualquier otra es `verdadero'."

#. type: Plain text
#: emacs-lisp-intro.texi:4171
msgid ""
"The expression that tests for truth is interpreted as @dfn{true} if the "
"result of evaluating it is a value that is not @code{nil}.  In other words, "
"the result of the test is considered true if the value returned is a number "
"such as 47, a string such as @code{\"hello\"}, or a symbol (other than "
"@code{nil}) such as @code{flowers}, or a list (so long as it is not empty), "
"or even a buffer!"
msgstr ""
"La expresi@'on chequea si verdad se interpreta como (@dfn{true})\n"
"@emph{verdadero} si el resultado de evaluarlo es un valor que no es\n"
"@code{nil}. En otras palabras, el resultado del test se considera\n"
"cierto si el valor devuelto es un n@'umero como 47, una cadena tal\n"
"como @code{\"hola\"}, o un s@'{@dotless{i}}mbolo (otro como @code{nil})\n"
"tal como @code{flores}, o una lista (tan larga como eso no est@'a\n"
"vac@'{@dotless{i}}a) @exclamdown{}o incluso un b@'uffer!"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:4178
#, no-wrap
msgid "An explanation of @code{nil}"
msgstr "Una explicaci@'on de @code{nil}"

#. type: Plain text
#: emacs-lisp-intro.texi:4182
msgid ""
"Before illustrating a test for truth, we need an explanation of @code{nil}."
msgstr ""
"Antes de ilustrar un test para verdad, se necesita una explicaci@'on\n"
"de @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:4189
msgid ""
"In Emacs Lisp, the symbol @code{nil} has two meanings.  First, it means the "
"empty list.  Second, it means false and is the value returned when a true-or-"
"false-test tests false.  @code{nil} can be written as an empty list, "
"@code{()}, or as @code{nil}.  As far as the Lisp interpreter is concerned, "
"@code{()} and @code{nil} are the same.  Humans, however, tend to use "
"@code{nil} for false and @code{()} for the empty list."
msgstr ""
"En Emacs Lisp, el s@'{@dotless{i}}mbolo @code{nil} tiene dos\n"
"significados. Primero, est@'a el significado de la lista\n"
"vac@'{@dotless{i}}a. Segundo, est@'a el valor de falso y es el valor\n"
"devuelto cuando el test test-verdadero-o-falso salga\n"
"falso. @code{nil}. Tan lejos como el int@'erprete Lisp es concebido,\n"
"@code{()} y @code{nil} son el mismo. Los humanos, sin embargo, tienden\n"
"a usar @code{nil} para falso y @code{()} para la lista\n"
"vac@'{@dotless{i}}a."

#. type: Plain text
#: emacs-lisp-intro.texi:4198
msgid ""
"In Emacs Lisp, any value that is not @code{nil}---is not the empty list---is "
"considered true.  This means that if an evaluation returns something that is "
"not an empty list, an @code{if} expression will test true.  For example, if "
"a number is put in the slot for the test, it will be evaluated and will "
"return itself, since that is what numbers do when evaluated.  In this "
"conditional, the @code{if} expression will test true.  The expression tests "
"false only when @code{nil}, an empty list, is returned by evaluating the "
"expression."
msgstr ""
"En Emacs Lisp, cualquier valor que no es @code{nil} --- no es una\n"
"lista vac@'{@dotless{i}}a --- es considerado verdad. Esto significa\n"
"que si una evaluaci@'on devuelve alguna cosa que no es una lista\n"
"vac@'{@dotless{i}}a, una expresi@'on @code{if} devuelve verdad. Por\n"
"ejemplo, si un n@'umero es puesto en el slot para el test, ser@'a\n"
"evaluado y devolver@'a por s@'{@dotless{i}} mismo, desde lo que hacen\n"
"los n@'umeros cuando se eval@'uan. En este condicional, la expresi@'on\n"
"@code{if} devuelve verdad. La expresi@'on se chequea como falso solo\n"
"cuando @code{nil}, una lista vac@'{@dotless{i}}a, es devuelta\n"
"evaluando la expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:4200
msgid ""
"You can see this by evaluating the two expressions in the following examples."
msgstr ""
"Se puede ver esto evaluando las dos expresiones en los siguientes ejemplos."

#. type: Plain text
#: emacs-lisp-intro.texi:4207
msgid ""
"In the first example, the number 4 is evaluated as the test in the @code{if} "
"expression and returns itself; consequently, the then-part of the expression "
"is evaluated and returned: @samp{true} appears in the echo area.  In the "
"second example, the @code{nil} indicates false; consequently, the else-part "
"of the expression is evaluated and returned: @samp{false} appears in the "
"echo area."
msgstr ""
"En el primer ejemplo, n@'umero 4 es evaluado como el test en la\n"
"expresi@'on @code{if} y se devuelve por s@'{@dotless{i}} mismo; por\n"
"consiguiente, la then-part de la expresi@'on es evaluada y devuelta:\n"
"@samp{true} aparece en el @'area echo. En el segundo ejemplo,\n"
"@code{nil} indica falso; por consiguiente, el else-part de la\n"
"expresi@'on es evaluada y devuelta: @samp{false} aparece en el @'area echo."

#. type: group
#: emacs-lisp-intro.texi:4213
#, no-wrap
msgid ""
"(if 4\n"
"    'true\n"
"  'false)\n"
msgstr ""
"(if 4\n"
"    'true\n"
"  'false)\n"

#. type: group
#: emacs-lisp-intro.texi:4219
#, no-wrap
msgid ""
"(if nil\n"
"    'true\n"
"  'false)\n"
msgstr ""
"(if nil\n"
"    'true\n"
"  'false)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4227
msgid ""
"Incidentally, if some other useful value is not available for a test that "
"returns true, then the Lisp interpreter will return the symbol @code{t} for "
"true.  For example, the expression @code{(> 5 4)} returns @code{t} when "
"evaluated, as you can see by evaluating it in the usual way:"
msgstr ""
"Incidentalmente, si alg@'un otro valor @'util no est@'a disponible\n"
"para un test que devuelve cierto, entonces el int@'erprete Lisp\n"
"retornar@'a el s@'{@dotless{i}}mbolo @code{t} para cierto. Por\n"
"ejemplo, la expresi@'on @code{(> 5 4)} devuelve @code{t} cuando se\n"
"eval@'ua, como puedes ver evalu@'andolo en el camino usual:"

#. type: smallexample
#: emacs-lisp-intro.texi:4230
#, no-wrap
msgid "(> 5 4)\n"
msgstr "(> 5 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4235
msgid ""
"On the other hand, this function returns @code{nil} if the test is false."
msgstr "Por otro lado, esta funci@'on devuelve @code{nil} si el test es falso."

#. type: smallexample
#: emacs-lisp-intro.texi:4238
#, no-wrap
msgid "(> 4 5)\n"
msgstr "(> 4 5)\n"

#. type: cindex
#: emacs-lisp-intro.texi:4243
#, no-wrap
msgid "Region, what it is"
msgstr "Regi@'on, qu@'e es"

#. type: cindex
#: emacs-lisp-intro.texi:4244
#, no-wrap
msgid "Preserving point, mark, and buffer"
msgstr "Preservando punto, marca, y b@'uffer"

#. type: cindex
#: emacs-lisp-intro.texi:4245
#, no-wrap
msgid "Point, mark, buffer preservation"
msgstr "Punto, marca, preservaci@'on de b@'uffer"

#. type: item
#: emacs-lisp-intro.texi:4246 emacs-lisp-intro.texi:4610
#, no-wrap
msgid "point"
msgstr "punto"

#. type: findex
#: emacs-lisp-intro.texi:4247
#, no-wrap
msgid "mark"
msgstr "marca"

#. type: Plain text
#: emacs-lisp-intro.texi:4251
msgid ""
"The @code{save-excursion} function is the fourth and final special form that "
"we will discuss in this chapter."
msgstr ""
"La funci@'on @code{save-excursion} es la cuarta y @'ultima forma especial\n"
"que se discutir@'a en este cap@'{@dotless{i}}tulo."

#. type: Plain text
#: emacs-lisp-intro.texi:4258
msgid ""
"In Emacs Lisp programs used for editing, the @code{save-excursion} function "
"is very common.  It saves the location of point and mark, executes the body "
"of the function, and then restores point and mark to their previous "
"positions if their locations were changed.  Its primary purpose is to keep "
"the user from being surprised and disturbed by unexpected movement of point "
"or mark."
msgstr ""
"En Emacs Lisp hay programas usados para edici@'on, la funci@'on\n"
"@code{save-excursion} es muy com@'un. Eso guarda la posici@'on de\n"
"punto y marca, ejecuta el cuerpo de la funci@'on, y entonces restaura\n"
"el punto y marca a sus posiciones previas si sus posiciones fueran\n"
"cambiadas. Su prop@'osito primario es guardar que el usuario sea\n"
"sorprendido y molesto por movimientos inesperados de punto y marca."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:4266
#, no-wrap
msgid "Point and Mark"
msgstr "Punto y Marca"

#. type: Plain text
#: emacs-lisp-intro.texi:4278
msgid ""
"Before discussing @code{save-excursion}, however, it may be useful first to "
"review what point and mark are in GNU Emacs.  @dfn{Point} is the current "
"location of the cursor.  Wherever the cursor is, that is point.  More "
"precisely, on terminals where the cursor appears to be on top of a "
"character, point is immediately before the character.  In Emacs Lisp, point "
"is an integer.  The first character in a buffer is number one, the second is "
"number two, and so on.  The function @code{point} returns the current "
"position of the cursor as a number.  Each buffer has its own value for point."
msgstr ""
"Antes de discutir @code{save-excursion}, sin embargo, puede ser @'util\n"
"primero revisar que punto y marca est@'an en GNU Emacs. @dfn{Punto} es\n"
"la posici@'on actual del cursor. En cualquier lugar que el cursor se\n"
"posicione hay un punto. De manera m@'as precisa, en terminales donde\n"
"el cursor parece estar en lo alto de un car@'acter, el punto est@'a\n"
"inmediatamente antes del car@'acter. En Emacs Lisp, punto es un\n"
"entero. El primer car@'acter en un b@'uffer es el n@'umero uno, el segundo\n"
"es el n@'umero dos, y as@'{@dotless{i}}. La funci@'on @code{punto}\n"
"devuelve la posici@'on actual del cursor como un n@'umero. Cada\n"
"b@'uffer tiene su propio valor para el punto."

#. type: Plain text
#: emacs-lisp-intro.texi:4288
msgid ""
"The @dfn{mark} is another position in the buffer; its value can be set with "
"a command such as @kbd{C-@key{SPC}} (@code{set-mark-command}).  If a mark "
"has been set, you can use the command @kbd{C-x C-x} (@code{exchange-point-"
"and-mark}) to cause the cursor to jump to the mark and set the mark to be "
"the previous position of point.  In addition, if you set another mark, the "
"position of the previous mark is saved in the mark ring.  Many mark "
"positions can be saved this way.  You can jump the cursor to a saved mark by "
"typing @kbd{C-u C-@key{SPC}} one or more times."
msgstr ""
"La @dfn{marca} es otra posici@'on en el b@'uffer; su valor puede ser\n"
"asignado con un comando tal como @kbd{C-@key{SPC}}\n"
"(@code{set-mark-command}). Si una marca ha sido asignada, se puede\n"
"usar el comando @kbd{C-x C-x} (@code{exchange-point-and-mark}) para\n"
"hacer que el cursor salte a la marca y asignar la marca para la\n"
"posici@'on previa del punto. Adem@'as, si tu asignas otra marca, la\n"
"posici@'on puede ser guardada por este camino. Se puede saltar al\n"
"cursor para una marca guardada escribiendo @kbd{C-u C-@key{SPC}} una o\n"
"m@'as veces."

#. type: Plain text
#: emacs-lisp-intro.texi:4293
msgid ""
"The part of the buffer between point and mark is called @dfn{the region}.  "
"Numerous commands work on the region, including @code{center-region}, "
"@code{count-lines-region}, @code{kill-region}, and @code{print-region}."
msgstr ""
"La parte del b@'uffer entre el punto y la marca es llamada @dfn{la\n"
"regi@'on}. Numerosos comandos trabajan en la regi@'on, incluyendo\n"
"@code{center-region}, @code{count-lines-region}, @code{kill-region} y\n"
"@code{print-region}."

#. type: Plain text
#: emacs-lisp-intro.texi:4301
msgid ""
"The @code{save-excursion} special form saves the locations of point and mark "
"and restores those positions after the code within the body of the special "
"form is evaluated by the Lisp interpreter.  Thus, if point were in the "
"beginning of a piece of text and some code moved point to the end of the "
"buffer, the @code{save-excursion} would put point back to where it was "
"before, after the expressions in the body of the function were evaluated."
msgstr ""
"La forma especial @code{save-excursion} salva las posiciones del punto\n"
"y la marca y restaura estas posiciones despu@'es del c@'odigo con el\n"
"cuerpo de la forma especial es evaluada por el int@'erprete Lisp. De\n"
"este modo, si el punto fuera en el principio de una pieza de texto y\n"
"alg@'un c@'odigo movido apunta al fin del b@'uffer, el\n"
"@code{save-excursion} no apuntar@'{@dotless{i}}a a donde fu@'e antes,\n"
"despu@'es las expresiones en el cuerpo de las que fueron evaluadas."

#. type: Plain text
#: emacs-lisp-intro.texi:4309
msgid ""
"In Emacs, a function frequently moves point as part of its internal workings "
"even though a user would not expect this.  For example, @code{count-lines-"
"region} moves point.  To prevent the user from being bothered by jumps that "
"are both unexpected and (from the user's point of view) unnecessary, "
"@code{save-excursion} is often used to keep point and mark in the location "
"expected by the user.  The use of @code{save-excursion} is good housekeeping."
msgstr ""
"En Emacs, una funci@'on frecuentemente mueve el punto como parte de\n"
"sus trabajos internos incluso aunque un usuario no espere esto. Por\n"
"ejemplo, @code{count-lines-region} se mueve al punto. Para prevenir al\n"
"usuario que se preocupe por el salto que es inesperado y (desde el punto\n"
"de vista del usuario) innecesario, @code{save-excursion} es con\n"
"frecuencia usado para punto y marca en la posici@'on esperada por el\n"
"usuario. El uso de @code{save-excursion} es un buen guarda casas."

#. type: Plain text
#: emacs-lisp-intro.texi:4314
msgid ""
"To make sure the house stays clean, @code{save-excursion} restores the "
"values of point and mark even if something goes wrong in the code inside of "
"it (or, to be more precise and to use the proper jargon, ``in case of "
"abnormal exit'').  This feature is very helpful."
msgstr ""
"Para estar seguro que la casa est@'a limpia, @code{save-excursion}\n"
"restaura los valores de punto y marca incluso si alguna cosa va mal en\n"
"el c@'odigo dentro de eso (o, para ser m@'as preciso y usar la jerga\n"
"apropiada, ``en caso de salida anormal''). Esta funcionalidad es muy\n"
"@'util."

#. type: Plain text
#: emacs-lisp-intro.texi:4321
msgid ""
"In addition to recording the values of point and mark, @code{save-excursion} "
"keeps track of the current buffer, and restores it, too.  This means you can "
"write code that will change the buffer and have @code{save-excursion} switch "
"you back to the original buffer.  This is how @code{save-excursion} is used "
"in @code{append-to-buffer}.  (@xref{append-to-buffer, , The Definition of "
"@code{append-to-buffer}}.)"
msgstr ""
"Adem@'as grabando los valores de punto y marca, @code{save-excursion}\n"
"guarda la traza del actual buffer, y lo restaura, tambi@'en. Esto\n"
"significa que puedes escribir c@'odigo que cambiar@'a el buffer y\n"
"tener que @code{save-excursion} vuelva al buffer original. Esto es como\n"
"@code{save-excursion} es usado en\n"
"@code{append-to-buffer}. (@xref{append-to-buffer, , La Definici@'on de\n"
"@code{append-to-buffer}}.)"

#. type: subsection
#: emacs-lisp-intro.texi:4323
#, no-wrap
msgid "Template for a @code{save-excursion} Expression"
msgstr "Plantilla para una expresi@'on @code{save-excursion}"

#. type: Plain text
#: emacs-lisp-intro.texi:4327
msgid "The template for code using @code{save-excursion} is simple:"
msgstr "La plantilla para c@'odigo usando @code{save-excursion} es simple:"

#. type: group
#: emacs-lisp-intro.texi:4332
#, no-wrap
msgid ""
"(save-excursion\n"
"  @var{body}@dots{})\n"
msgstr ""
"(save-excursion\n"
"  @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4343
msgid ""
"The body of the function is one or more expressions that will be evaluated "
"in sequence by the Lisp interpreter.  If there is more than one expression "
"in the body, the value of the last one will be returned as the value of the "
"@code{save-excursion} function.  The other expressions in the body are "
"evaluated only for their side effects; and @code{save-excursion} itself is "
"used only for its side effect (which is restoring the positions of point and "
"mark)."
msgstr ""
"El cuerpo de la funci@'on es una o m@'as expresiones que ser@'an\n"
"evaluadas en secuencia por el int@'erprete Lisp. Si hay m@'as de una\n"
"expresi@'on en el cuerpo, el valor de la @'ultima ser@'a devuelto como\n"
"el valor de la funci@'on @code{save-excursion}. Las otras expresiones\n"
"en el cuerpo son evaluadas solo por sus efectos laterales; y\n"
"@code{save-excursion} en s@'{@dotless{i}} es usado solo por su efecto\n"
"lateral (que est@'a restaurando las posiciones de punto y marca)."

#. type: Plain text
#: emacs-lisp-intro.texi:4347
msgid ""
"In more detail, the template for a @code{save-excursion} expression looks "
"like this:"
msgstr ""
"Para m@'as detalles, la siguiente plantilla explica @code{save-excursion}"

#. type: group
#: emacs-lisp-intro.texi:4356
#, no-wrap
msgid ""
"(save-excursion\n"
"  @var{first-expression-in-body}\n"
"  @var{second-expression-in-body}\n"
"  @var{third-expression-in-body}\n"
"   @dots{}\n"
"  @var{last-expression-in-body})\n"
msgstr ""
"(save-excursion\n"
"  @var{primera-expresion-en-el-cuerpo}\n"
"  @var{segunda-expresion-en-el-cuerpo}\n"
"  @var{tercera-expresion-en-el-cuerpo}\n"
"   @dots{}\n"
"  @var{ultima-expresion-en-el-cuerpo})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4361
msgid "An expression, of course, may be a symbol on its own or a list."
msgstr ""
"Una expresi@'on, de acuerdo, puede ser un s@'{@dotless{i}}mbolo por\n"
"s@'{@dotless{i}} mismo o una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:4364
msgid ""
"In Emacs Lisp code, a @code{save-excursion} expression often occurs within "
"the body of a @code{let} expression.  It looks like this:"
msgstr ""
"En c@'odigo Emacs Lisp, una expresi@'on @code{save-excursion} con\n"
"frecuencia ocurre el cuerpo de una expresi@'on @code{let}. Eso se ve\n"
"como esto:"

#. type: group
#: emacs-lisp-intro.texi:4370
#, no-wrap
msgid ""
"(let @var{varlist}\n"
"  (save-excursion\n"
"    @var{body}@dots{}))\n"
msgstr ""
"(let @var{varlist}\n"
"  (save-excursion\n"
"    @var{body}@dots{}))\n"

#. type: section
#: emacs-lisp-intro.texi:4373 emacs-lisp-intro.texi:4374
#: emacs-lisp-intro.texi:5467 emacs-lisp-intro.texi:6505
#: emacs-lisp-intro.texi:9396 emacs-lisp-intro.texi:13576
#, no-wrap
msgid "Review"
msgstr "Revisar"

#. type: Plain text
#: emacs-lisp-intro.texi:4379
msgid ""
"In the last few chapters we have introduced a fair number of functions and "
"special forms.  Here they are described in brief, along with a few similar "
"functions that have not been mentioned yet."
msgstr ""
"En los @'ultimos pocos cap@'{@dotless{i}}tulos se han introducido un\n"
"n@'umero limpio de funciones y formas especiales. Aqu@'{@dotless{i}}\n"
"se han descrito brevemente, con unas pocas funciones similares que no\n"
"han sido mencionadas todav@'{@dotless{i}}a."

#. type: item
#: emacs-lisp-intro.texi:4381
#, no-wrap
msgid "eval-last-sexp"
msgstr "eval-last-sexp"

#. type: table
#: emacs-lisp-intro.texi:4386
msgid ""
"Evaluate the last symbolic expression before the current location of point.  "
"The value is printed in the echo area unless the function is invoked with an "
"argument; in that case, the output is printed in the current buffer.  This "
"command is normally bound to @kbd{C-x C-e}."
msgstr ""
"Eval@'ua la @'ultima expresi@'on simb@'olica antes de la posici@'on\n"
"actual del punto. El valor es impreso en el @'area echo a menos\n"
"que la funci@'on sea invocada con un argumento; en este caso, la salida\n"
"es impresa en el actual b@'uffer. Este comando est@'a normalmente\n"
"asociado a @kbd{C-x C-e}."

#. type: table
#: emacs-lisp-intro.texi:4392
msgid ""
"Define function.  This special form has up to five parts: the name, a "
"template for the arguments that will be passed to the function, "
"documentation, an optional interactive declaration, and the body of the "
"definition."
msgstr ""
"Definir funci@'on. Esta forma especial ha subido a cinco partes: el\n"
"nombre una plantilla para los argumentos que ser@'an pasados a la\n"
"documentaci@'on de la funci@'on, una declaraci@'on interactiva\n"
"opcional, y el cuerpo de la definici@'on."

#. type: table
#: emacs-lisp-intro.texi:4397
msgid ""
"For example, in an early version of Emacs, the function definition was as "
"follows.  (It is slightly more complex now that it seeks the first non-"
"whitespace character rather than the first visible character.)"
msgstr ""
"Por ejemplo, en las primeras versiones de Emacs, la definici@'on de\n"
"funci@'on era como sigue. (Eso es ligeramente m@'as complejo ahora que\n"
"si busca el primer caracter de espacio no en blanco en vez del primer\n"
"caracter visible.)"

#. type: group
#: emacs-lisp-intro.texi:4405
#, no-wrap
msgid ""
"(defun back-to-indentation ()\n"
"  \"Move point to first visible character on line.\"\n"
"  (interactive)\n"
"  (beginning-of-line 1)\n"
"  (skip-chars-forward \" \\t\"))\n"
msgstr ""
"(defun volver-a-indentacion ()\n"
"  \"Mover el punto al primer caracter visible en linea.\"\n"
"  (interactive)\n"
"  (beginning-of-line 1)\n"
"  (skip-chars-forward \" \\t\"))\n"

#. type: table
#: emacs-lisp-intro.texi:4433
msgid ""
"Declare to the interpreter that the function can be used interactively.  "
"This special form may be followed by a string with one or more parts that "
"pass the information to the arguments of the function, in sequence.  These "
"parts may also tell the interpreter to prompt for information.  Parts of the "
"string are separated by newlines, @samp{\\n}."
msgstr ""
"Declara al int@'erprete que la funci@'on puede ser usada\n"
"interactivamente. Esta forma especial puede ser seguida por una cadena\n"
"con una o m@'as partes que pasan la informaci@'on a los argumentos de\n"
"la funci@'on, en secuencia. Estas partes pueden tambi@'en contar al\n"
"int@'erprete para mostrar la informaci@'on. Parte de las cadenas son\n"
"separadas por nuevas l@'{@dotless{i}}neas, @samp{\\n}."

#. type: table
#: emacs-lisp-intro.texi:4436
msgid "Common code characters are:"
msgstr "Caracteres de c@'odigo com@'un son:"

#. type: item
#: emacs-lisp-intro.texi:4438
#, no-wrap
msgid "b"
msgstr "b"

#. type: table
#: emacs-lisp-intro.texi:4440
msgid "The name of an existing buffer."
msgstr "El nombre de un b@'uffer existente."

#. type: item
#: emacs-lisp-intro.texi:4441
#, no-wrap
msgid "f"
msgstr "f"

#. type: table
#: emacs-lisp-intro.texi:4443
msgid "The name of an existing file."
msgstr "El nombre de un fichero existente"

#. type: item
#: emacs-lisp-intro.texi:4444
#, no-wrap
msgid "p"
msgstr "p"

#. type: table
#: emacs-lisp-intro.texi:4446
msgid "The numeric prefix argument.  (Note that this `p' is lower case.)"
msgstr ""
"El argumento prefijo num@'erico. (N@'otese que esta `p' es min@'uscula.)"

#. type: item
#: emacs-lisp-intro.texi:4447
#, no-wrap
msgid "r"
msgstr "r"

#. type: table
#: emacs-lisp-intro.texi:4451
msgid ""
"Point and the mark, as two numeric arguments, smallest first.  This is the "
"only code letter that specifies two successive arguments rather than one."
msgstr ""
"El Punto y la marca, como dos argumentos num@'ericos, el m@'as\n"
"peque@~no primero. Esta es la @'unica letra que especifica dos\n"
"argumentos sucesivos en vez de uno."

#. type: table
#: emacs-lisp-intro.texi:4456
msgid ""
"@xref{Interactive Codes, , Code Characters for @samp{interactive}, elisp, "
"The GNU Emacs Lisp Reference Manual}, for a complete list of code characters."
msgstr ""
"@xref{C@'odigos Interactivos, , Caracteres de C@'odigo para\n"
"@samp{interactive}, elisp, El Manual de Referencia de GNU Emacs Lisp},\n"
"para una lista de caracteres de c@'odigo."

#. type: table
#: emacs-lisp-intro.texi:4465
msgid ""
"Declare that a list of variables is for use within the body of the "
"@code{let} and give them an initial value, either @code{nil} or a specified "
"value; then evaluate the rest of the expressions in the body of the "
"@code{let} and return the value of the last one.  Inside the body of the "
"@code{let}, the Lisp interpreter does not see the values of the variables of "
"the same names that are bound outside of the @code{let}."
msgstr ""
"Declara que una lista de variables es para usarla con el cuerpo del\n"
"@code{let} y darles un valor inicial, bien @code{nil} o un valor\n"
"espec@'{@dotless{i}}fico; entonces se evaluar@'an el resto de las\n"
"expresiones en el cuerpo del @code{let} y devolver el valor de la\n"
"@'ultima. Dentro del cuerpo del @code{let}, el int@'erprete Lisp no ve\n"
"los valores de las variables de los mismos nombres que son asociados\n"
"fuera del @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:4468 emacs-lisp-intro.texi:4486
#: emacs-lisp-intro.texi:4506 emacs-lisp-intro.texi:6662
#: emacs-lisp-intro.texi:15981 emacs-lisp-intro.texi:16373
#: emacs-lisp-intro.texi:21121
msgid "For example,"
msgstr "Por ejemplo,"

#. type: group
#: emacs-lisp-intro.texi:4476
#, no-wrap
msgid ""
"(let ((foo (buffer-name))\n"
"      (bar (buffer-size)))\n"
"  (message\n"
"   \"This buffer is %s and has %d characters.\"\n"
"   foo bar))\n"
msgstr ""
"(let ((foo (nombre-de-buffer))\n"
"      (bar (tamagno-de-buffer)))\n"
"  (message\n"
"   \"Este buffer es %s y tiene %d caracteres.\"\n"
"   foo bar))\n"

#. type: table
#: emacs-lisp-intro.texi:4483
msgid ""
"Record the values of point and mark and the current buffer before evaluating "
"the body of this special form.  Restore the values of point and mark and "
"buffer afterward."
msgstr ""
"Graba los valores de punto y marca y el actual b@'uffer antes de evaluar\n"
"el cuerpo de esta forma especial. Restaura los valores de punto y\n"
"marca y el b@'uffer despu@'es de esto."

#. type: group
#: emacs-lisp-intro.texi:4493
#, no-wrap
msgid ""
"(message \"We are %d characters into this buffer.\"\n"
"         (- (point)\n"
"            (save-excursion\n"
"              (goto-char (point-min)) (point))))\n"
msgstr ""
"(message \"Hay %d caracteres dentro de este buffer.\"\n"
"         (- (point)\n"
"            (save-excursion\n"
"              (goto-char (point-min)) (point))))\n"

#. type: table
#: emacs-lisp-intro.texi:4499
msgid ""
"Evaluate the first argument to the function; if it is true, evaluate the "
"second argument; else evaluate the third argument, if there is one."
msgstr ""
"Eval@'ua el primer argumento a la funci@'on; si es verdad, eval@'ua el\n"
"segundo argumento; lo dem@'as eval@'ua el tercer argumento, si hay uno."

#. type: table
#: emacs-lisp-intro.texi:4503
msgid ""
"The @code{if} special form is called a @dfn{conditional}.  There are other "
"conditionals in Emacs Lisp, but @code{if} is perhaps the most commonly used."
msgstr ""
"La forma especial @code{if} es llamada @dfn{condicional}. Hay otros\n"
"condicionales en Emacs Lisp, pero @code{if} es quiz@'as lo m@'as\n"
"com@'unmente usado."

#. type: group
#: emacs-lisp-intro.texi:4512
#, no-wrap
msgid ""
"(if (= 22 emacs-major-version)\n"
"    (message \"This is version 22 Emacs\")\n"
"  (message \"This is not version 22 Emacs\"))\n"
msgstr ""
"(if (= 22 version-de-emacs-mayor)\n"
"    (message \"Esta es la versi@'on 22 de Emacs\")\n"
"  (message \"Esta no es la versi@'on 22 Emacs\"))\n"

#. type: item
#: emacs-lisp-intro.texi:4516
#, no-wrap
msgid "<"
msgstr "<"

#. type: itemx
#: emacs-lisp-intro.texi:4517
#, no-wrap
msgid ">"
msgstr ">"

#. type: itemx
#: emacs-lisp-intro.texi:4518
#, no-wrap
msgid "<="
msgstr "<="

#. type: itemx
#: emacs-lisp-intro.texi:4519
#, no-wrap
msgid ">="
msgstr ">="

#. type: table
#: emacs-lisp-intro.texi:4527
msgid ""
"The @code{<} function tests whether its first argument is smaller than its "
"second argument.  A corresponding function, @code{>}, tests whether the "
"first argument is greater than the second.  Likewise, @code{<=} tests "
"whether the first argument is less than or equal to the second and @code{>=} "
"tests whether the first argument is greater than or equal to the second.  In "
"all cases, both arguments must be numbers or markers (markers indicate "
"positions in buffers)."
msgstr ""
"La funci@'on @code{<} chequea si su primer argumento es m@'as peque@~no\n"
"que su segundo argumento. Una funci@'on correspondiente, @code{>},\n"
"chequea si el primer argumento es mayor que el segundo. De otro modo,\n"
"@code{<=} chequea si el primer argumento es menor o igual al segundo y\n"
"@code{>=} chequea si el primer argumento es mayor o igual al\n"
"segundo. En todos los casos, ambos argumentos deben ser n@'umeros o\n"
"marcas (las marcas indican posiciones en b@'uffers)."

#. type: item
#: emacs-lisp-intro.texi:4529
#, no-wrap
msgid "="
msgstr "="

#. type: table
#: emacs-lisp-intro.texi:4532
msgid ""
"The @code{=} function tests whether two arguments, both numbers or markers, "
"are equal."
msgstr ""
"La funci@'on @code{=} chequea si dos argumentos, ambos n@'umeros o\n"
"marcadores, son iguales."

#. type: findex
#: emacs-lisp-intro.texi:4534 emacs-lisp-intro.texi:4541
#, no-wrap
msgid "equal"
msgstr "equal"

#. type: findex
#: emacs-lisp-intro.texi:4535 emacs-lisp-intro.texi:4542
#, no-wrap
msgid "eq"
msgstr "eq"

#. type: table
#: emacs-lisp-intro.texi:4541
msgid ""
"Test whether two objects are the same.  @code{equal} uses one meaning of the "
"word `same' and @code{eq} uses another: @code{equal} returns true if the two "
"objects have a similar structure and contents, such as two copies of the "
"same book.  On the other hand, @code{eq}, returns true if both arguments are "
"actually the same object."
msgstr ""
"Chequea si dos objetos son el mismo. @code{equal} usa un signicado de\n"
"la palabra `mismo' y @code{eq} usa otro: @code{equal} devuelve cierto\n"
"si los dos objetos tienen una estructura y contenidos similares, tal\n"
"como dos copias del mismo libro. En una mano, @code{eq}, devuelve\n"
"cierto si ambos argumentos son actualmente el mismo objeto."

#. type: item
#: emacs-lisp-intro.texi:4545
#, no-wrap
msgid "string<"
msgstr "string<"

#. type: itemx
#: emacs-lisp-intro.texi:4546
#, no-wrap
msgid "string-lessp"
msgstr "string-lessp"

#. type: itemx
#: emacs-lisp-intro.texi:4547
#, no-wrap
msgid "string="
msgstr "string="

#. type: itemx
#: emacs-lisp-intro.texi:4548
#, no-wrap
msgid "string-equal"
msgstr "string-equal"

#. type: table
#: emacs-lisp-intro.texi:4552
msgid ""
"The @code{string-lessp} function tests whether its first argument is smaller "
"than the second argument.  A shorter, alternative name for the same function "
"(a @code{defalias}) is @code{string<}."
msgstr ""
"La funci@'on @code{string-lessp} chequea si su primer argumento es\n"
"m@'as peque@~no que el segundo. En resumen, el nombre alternativo para\n"
"la misma funci@'on (un @code{defalias}) es @code{string}."

#. type: table
#: emacs-lisp-intro.texi:4556
msgid ""
"The arguments to @code{string-lessp} must be strings or symbols; the "
"ordering is lexicographic, so case is significant.  The print names of "
"symbols are used instead of the symbols themselves."
msgstr ""
"Los argumentos para @code{string-lessp} deben ser cadenas o\n"
"s@'{@dotless{i}}mbolos; la ordenaci@'on es lexicogr@'afica,\n"
"as@'{@dotless{i}} el caso es significativo. Los nombres impresos de\n"
"s@'{@dotless{i}}mbolos son usado en vez de s@'{@dotless{i}}mbolos por\n"
"s@'{@dotless{i}} mismos."

#. type: cindex
#: emacs-lisp-intro.texi:4557
#, no-wrap
msgid "@samp{empty string} defined"
msgstr "@samp{cadena vac@'{@dotless{i}}a} definida"

#. type: table
#: emacs-lisp-intro.texi:4560
msgid ""
"An empty string, @samp{\"\"}, a string with no characters in it, is smaller "
"than any string of characters."
msgstr ""
"Una cadena vac@'{@dotless{i}}a, @samp{\"\\\"}, es una cadena sin caracteres\n"
"dentro, es m@'as peque@~na que cualquier cadena de caracteres."

#. type: table
#: emacs-lisp-intro.texi:4564
msgid ""
"@code{string-equal} provides the corresponding test for equality.  Its "
"shorter, alternative name is @code{string=}.  There are no string test "
"functions that correspond to @var{>}, @code{>=}, or @code{<=}."
msgstr ""
"@code{string-equal} provee el test correpondiente para igualdad. Su\n"
"corto nombre alternativo es @code{string=}. No hay funciones test que\n"
"correponden a @var{>}, @code{>=}."

#. type: table
#: emacs-lisp-intro.texi:4573
msgid ""
"Print a message in the echo area. The first argument is a string that can "
"contain @samp{%s}, @samp{%d}, or @samp{%c} to print the value of arguments "
"that follow the string.  The argument used by @samp{%s} must be a string or "
"a symbol; the argument used by @samp{%d} must be a number.  The argument "
"used by @samp{%c} must be an @sc{ascii} code number; it will be printed as "
"the character with that @sc{ascii} code.  (Various other %-sequences have "
"not been mentioned.)"
msgstr ""
"Imprime un mensaje en el @'area echo. El primer argumento es una\n"
"cadena que puede contener, @samp{%s}, @samp{%d}, o @samp{%c} para\n"
"imprimir el valor de argumentos que siguen la cadena. El argumento\n"
"usado por @samp{%d} debe ser un n@'umero. El argumento usado por\n"
"@samp{%c} debe ser un n@'umero de c@'odigo @sc{ascii}; eso ser@'a\n"
"impreso como el caracter con este c@'odigo @sc{ascii}. (Otras varias\n"
"%-secuencias no han sido mencionadas.)"

#. type: table
#: emacs-lisp-intro.texi:4582
msgid ""
"The @code{setq} function sets the value of its first argument to the value "
"of the second argument.  The first argument is automatically quoted by "
"@code{setq}.  It does the same for succeeding pairs of arguments.  Another "
"function, @code{set}, takes only two arguments and evaluates both of them "
"before setting the value returned by its first argument to the value "
"returned by its second argument."
msgstr ""
"La funci@'on @code{setq} asigna el valor de su primer argumento al\n"
"valor del segundo argumento. El primer argumento est@'a\n"
"autom@'aticamente citado por @code{setq}. Eso hace lo mismo para los\n"
"pares de argumentos. Otra funci@'on, @code{set}, toma solo dos\n"
"argumentos y eval@'ua ambos de ellos antes de configurar el valor\n"
"devuelto por su primer argumento al valor devuelto por su segundo argumento."

#. type: table
#: emacs-lisp-intro.texi:4585
msgid "Without an argument, return the name of the buffer, as a string."
msgstr "Sin un argumento, devuelve el nombre del b@'uffer, como una cadena."

#. type: table
#: emacs-lisp-intro.texi:4589
msgid ""
"Without an argument, return the name of the file the buffer is visiting."
msgstr ""
"Sin un argumento, devuelve el nombre del fichero si el b@'uffer lo est@'a\n"
"visitando."

#. type: table
#: emacs-lisp-intro.texi:4593
msgid ""
"Return the buffer in which Emacs is active; it may not be the buffer that is "
"visible on the screen."
msgstr ""
"Devuelve el b@'uffer en el que Emacs es activo; eso puede no ser el\n"
"b@'uffer que es visible en la pantalla."

#. type: table
#: emacs-lisp-intro.texi:4598
msgid ""
"Return the most recently selected buffer (other than the buffer passed to "
"@code{other-buffer} as an argument and other than the current buffer)."
msgstr ""
"Devuelve el b@'uffer seleccionado m@'as recientemente (otro que el\n"
"b@'uffer pasado a @code{other-buffer} como un argumento y otro en vez\n"
"de el b@'uffer actual)."

#. type: table
#: emacs-lisp-intro.texi:4602
msgid ""
"Select a buffer for Emacs to be active in and display it in the current "
"window so users can look at it.  Usually bound to @kbd{C-x b}."
msgstr ""
"Selecciona un b@'uffer para que Emacs est@'e activo y lo muestre \n"
"en la ventana actual y as@'{@dotless{i}} los usuarios puedan\n"
"mirarlo. Normalmente se empareja a @kbd{C-x b}."

#. type: table
#: emacs-lisp-intro.texi:4606
msgid ""
"Switch Emacs's attention to a buffer on which programs will run.  Don't "
"alter what the window is showing."
msgstr ""
"Cambia la atenci@'on de Emacs a un b@'uffer en el que los programas se\n"
"ejecutar@'an. No altera lo que la ventana est@'a mostrando."

#. type: item
#: emacs-lisp-intro.texi:4607
#, no-wrap
msgid "buffer-size"
msgstr "buffer-size"

#. type: table
#: emacs-lisp-intro.texi:4609
msgid "Return the number of characters in the current buffer."
msgstr "Devuelve el n@'umero de caracteres en el b@'uffer actual."

#. type: table
#: emacs-lisp-intro.texi:4614
msgid ""
"Return the value of the current position of the cursor, as an integer "
"counting the number of characters from the beginning of the buffer."
msgstr ""
"Devuelve el valor de la actual posici@'on del cursor, como un entero\n"
"contando el n@'umero de caracteres desde el principio del b@'uffer."

#. type: item
#: emacs-lisp-intro.texi:4615
#, no-wrap
msgid "point-min"
msgstr "point-min"

#. type: table
#: emacs-lisp-intro.texi:4618
msgid ""
"Return the minimum permissible value of point in the current buffer.  This "
"is 1, unless narrowing is in effect."
msgstr ""
"Devuelve el valor m@'{@dotless{i}}nimo permisible del punto en el\n"
"b@'uffer actual. Esto es 1, a menos que la contracci@'on est@'e en efecto"

#. type: item
#: emacs-lisp-intro.texi:4619
#, no-wrap
msgid "point-max"
msgstr "point-max"

#. type: table
#: emacs-lisp-intro.texi:4623
msgid ""
"Return the value of the maximum permissible value of point in the current "
"buffer.  This is the end of the buffer, unless narrowing is in effect."
msgstr ""
"Devuelve el valor del m@'aximo valor permisible del punto en el\n"
"b@'uffer actual. Esto es el fin del b@'uffer, a menos que la\n"
"contracci@'on est@'e en efecto"

#. type: itemize
#: emacs-lisp-intro.texi:4633
msgid ""
"Write a non-interactive function that doubles the value of its argument, a "
"number.  Make that function interactive."
msgstr ""
"Escribe una funci@'on no interactiva que doble el valor de su\n"
"argumento, un n@'umero. Luego haz la funci@'on interactiva."

#. type: itemize
#: emacs-lisp-intro.texi:4638
msgid ""
"Write a function that tests whether the current value of @code{fill-column} "
"is greater than the argument passed to the function, and if so, prints an "
"appropriate message."
msgstr ""
"Escribe una funci@'on que chequee si el valor actual de\n"
"@code{fill-column} es m@'as grande que el argumento pasado a la\n"
"funci@'on, y si es as@'{@dotless{i}}, imprime un mensaje apropiado."

#. type: Plain text
#: emacs-lisp-intro.texi:4650
msgid ""
"In this chapter we study in detail several of the functions used in GNU "
"Emacs.  This is called a ``walk-through''.  These functions are used as "
"examples of Lisp code, but are not imaginary examples; with the exception of "
"the first, simplified function definition, these functions show the actual "
"code used in GNU Emacs.  You can learn a great deal from these definitions.  "
"The functions described here are all related to buffers.  Later, we will "
"study other functions."
msgstr ""
"En este cap@'{@dotless{i}}tulo estudiamos en detalle varias de las\n"
"funciones usadas en GNU Emacs. Esto se llama un ``paseo a\n"
"trav@'es''. Estas funciones son usadas como ejemplos de c@'odigo Lisp,\n"
"pero no son ejemplos imaginarios; con la excepci@'on del primero, la\n"
"definici@'on de funci@'on simplificada, esta funciones muestran el\n"
"actual c@'odigo usado en GNU Emacs. Se puede aprender mucho desde\n"
"estas definiciones. Las funciones descritas aqu@'{@dotless{i}} est@'an\n"
"todas relacionadas a b@'uffers. Despu@'es, estudiaremos otras\n"
"funciones."

#. type: section
#: emacs-lisp-intro.texi:4663
#, no-wrap
msgid "Finding More Information"
msgstr "Encontrando m@'as informaci@'on"

#. type: findex
#: emacs-lisp-intro.texi:4665
#, no-wrap
msgid "describe-function, @r{introduced}"
msgstr "describe-function, @r{introducido}"

#. type: cindex
#: emacs-lisp-intro.texi:4666
#, no-wrap
msgid "Find function documentation"
msgstr "Encontrar documentaci@'on de la funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:4674
msgid ""
"In this walk-through, I will describe each new function as we come to it, "
"sometimes in detail and sometimes briefly.  If you are interested, you can "
"get the full documentation of any Emacs Lisp function at any time by typing "
"@kbd{C-h f} and then the name of the function (and then @key{RET}).  "
"Similarly, you can get the full documentation for a variable by typing "
"@kbd{C-h v} and then the name of the variable (and then @key{RET})."
msgstr ""
"En este paseo, se describe cada nueva funci@'on como viene, algunas\n"
"veces en detalle y algunas veces brevemente. Si est@'a interesado, se\n"
"puede obtener la documentaci@'on completa de cualquier funci@'on Emacs\n"
"Lisp en cualquier momento escribiendo @kbd{C-h f} y entonces el\n"
"nombre de la funci@'on (y entonces @key{RET}. De manera similar, se\n"
"puede obtener la documentaci@'on completa para una variable\n"
"escribiendo @kbd{C-h v}, despu@'es el nombre de la variable (y\n"
"entonces @key{RET})."

#. type: cindex
#: emacs-lisp-intro.texi:4675
#, no-wrap
msgid "Find source of function"
msgstr "Encontrar la fuente de la funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:4679
msgid ""
"Also, @code{describe-function} will tell you the location of the function "
"definition."
msgstr ""
"Tambi@'en, en @code{describe-function}, se encontrar@'a la localizaci@'on\n"
"de la definici@'on de la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:4684
msgid ""
"Put point into the name of the file that contains the function and press the "
"@key{RET} key.  In this case, @key{RET} means @code{push-button} rather than "
"`return' or `enter'.  Emacs will take you directly to the function "
"definition."
msgstr ""
"Poner el punto dentro del nombre del fichero que contiene la funci@'on\n"
"y presiona la tecla @key{RET}. En este caso, @key{RET} significa\n"
"@code{push-button} en vez de `return' o `enter'. Emacs tomar@'a\n"
"directamente a la definici@'on de la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:4703
msgid ""
"More generally, if you want to see a function in its original source file, "
"you can use the @code{find-tag} function to jump to it.  @code{find-tag} "
"works with a wide variety of languages, not just Lisp, and C, and it works "
"with non-programming text as well.  For example, @code{find-tag} will jump "
"to the various nodes in the Texinfo source file of this document.  The "
"@code{find-tag} function depends on `tags tables' that record the locations "
"of the functions, variables, and other items to which @code{find-tag} jumps."
msgstr ""
"De manera m@'as general, si quieres ver una funci@'on en su fichero\n"
"fuente original, se puede usar la funci@'on @code{find-tag} para\n"
"saltar dentro. @code{find-tag} funciona con una amplia variedad de\n"
"lenguajes, no solo Lisp, y C, y funciona con texto de no\n"
"programaci@'on tambi@'en. Por ejemplo, @code{find-tag} saltar@'a a los\n"
"varios nodos en el fichero fuente Texinfo de este documento. La\n"
"funci@'on @code{find-tag} depende de `tablas de etiquetas' que graba\n"
"las localizaciones de las funciones, variables, y otros\n"
"@'{@dotless{i}}tems para los que @code{find-tag} salta."

#. type: Plain text
#: emacs-lisp-intro.texi:4713
msgid ""
"To use the @code{find-tag} command, type @kbd{M-.} (i.e., press the period "
"key while holding down the @key{META} key, or else type the @key{ESC} key "
"and then type the period key), and then, at the prompt, type in the name of "
"the function whose source code you want to see, such as @code{mark-whole-"
"buffer}, and then type @key{RET}.  Emacs will switch buffers and display the "
"source code for the function on your screen.  To switch back to your current "
"buffer, type @kbd{C-x b @key{RET}}.  (On some keyboards, the @key{META} key "
"is labeled @key{ALT}.)"
msgstr ""
"Para usar el comando @code{find-tag}, escribe @kbd{M-.} (por ej.,\n"
"presionando la tecla @key{META}, o al menos escribe la tecla @key{ESC}\n"
"y entonces escribe la tecla punto), entonces, en la pantalla, se\n"
"escribe el nombre de la funci@'on cuyo c@'odigo fuente se quiere ver,\n"
"tal como @code{mark-whole-buffer}, y luego escribe @key{RET}. Emacs\n"
"cambiar@'a el b@'uffer y mostrar@'a el c@'odigo fuente para la\n"
"funci@'on en la pantalla. Para volver al b@'uffer actual, escribe\n"
"@kbd{C-x b @key{RET}}. (En algunos teclados, la tecla @key{META} es\n"
"etiquetada con @key{ALT}.)"

#. type: cindex
#: emacs-lisp-intro.texi:4715
#, no-wrap
msgid "TAGS table, specifying"
msgstr "tabla TAGS, especificando"

#. type: item
#: emacs-lisp-intro.texi:4716 emacs-lisp-intro.texi:5477
#, no-wrap
msgid "find-tag"
msgstr "find-tag"

#. type: Plain text
#: emacs-lisp-intro.texi:4727
msgid ""
"Depending on how the initial default values of your copy of Emacs are set, "
"you may also need to specify the location of your `tags table', which is a "
"file called @file{TAGS}.  For example, if you are interested in Emacs "
"sources, the tags table you will most likely want, if it has already been "
"created for you, will be in a subdirectory of the @file{/usr/local/share/"
"emacs/} directory; thus you would use the @code{M-x visit-tags-table} "
"command and specify a pathname such as @file{/usr/local/share/emacs/22.1.1/"
"lisp/TAGS}.  If the tags table has not already been created, you will have "
"to create it yourself.  It will be in a file such as @file{/usr/local/src/"
"emacs/src/TAGS}."
msgstr ""
"Dependiendo de c@'omo los valores iniciales por defecto de tu copia de\n"
"Emacs son asignados se puede tambi@'en necesitar especificar la\n"
"posici@'on de tu `tabla de tags', que es un fichero llamado\n"
"@file{TAGS}. Por ejemplo, si se est@'a interesado en fuentes de Emacs,\n"
"la tabla de tags que se desea, si ya ha sido creada para\n"
"t@'{@dotless{i}}, estar@'a en un subdirectorio del directorio\n"
"@file{/usr/local/share/emacs}; de este modo se usar@'{@dotless{i}}a el\n"
"comando @code{M-x visit-tags-table} y especifica una ruta tal como\n"
"@file{/usr/local/share/emacs/22.1.1/lisp/TAGS}. Si la tabla tags no ha\n"
"sido creada, tendr@'as que crearla por t@'{@dotless{i}} mismo. Ser@'a\n"
"un fichero tal como @file{/usr/local/src/emacs/src/TAGS}."

#. type: Plain text
#: emacs-lisp-intro.texi:4733
msgid ""
"To create a @file{TAGS} file in a specific directory, switch to that "
"directory in Emacs using @kbd{M-x cd} command, or list the directory with "
"@kbd{C-x d} (@code{dired}).  Then run the compile command, with "
"@w{@code{etags *.el}} as the command to execute:"
msgstr ""
"Para crear un fichero @file{TAGS} en un directorio\n"
"espec@'{@dotless{i}}fico, cambia a este directorio en Emacs usando\n"
"un comando @kbd{M-x cd}, o lista el directorio como @w{@code{etags\n"
"*.el}} como el comando para ejecutar:"

#. type: smallexample
#: emacs-lisp-intro.texi:4736 emacs-lisp-intro.texi:13491
#, no-wrap
msgid "M-x compile RET etags *.el RET\n"
msgstr "M-x compile RET etags *.el RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4739
msgid ""
"For more information, see @ref{etags, , Create Your Own @file{TAGS} File}."
msgstr ""
"Para m@'as informaci@'on, ver @ref{etags, , Crea tu propio fichero\n"
"@file{TAGS}}."

#. type: Plain text
#: emacs-lisp-intro.texi:4743
msgid ""
"After you become more familiar with Emacs Lisp, you will find that you will "
"frequently use @code{find-tag} to navigate your way around source code; and "
"you will create your own @file{TAGS} tables."
msgstr ""
"Despu@'es de llegar a estar m@'as familiarizado con Emacs Lisp,\n"
"se encontrar@'a frecuentemente usar @code{find-tag} para navegar tu\n"
"camino alrededor del c@'odigo fuente; y se crear@'an tus propias tablas\n"
"@file{TAGS}."

#. type: cindex
#: emacs-lisp-intro.texi:4744
#, no-wrap
msgid "Library, as term for `file'"
msgstr "Librer@'{@dotless{i}}a, como t@'ermino para `fichero'"

#. type: Plain text
#: emacs-lisp-intro.texi:4757
msgid ""
"Incidentally, the files that contain Lisp code are conventionally called "
"@dfn{libraries}.  The metaphor is derived from that of a specialized "
"library, such as a law library or an engineering library, rather than a "
"general library.  Each library, or file, contains functions that relate to a "
"particular topic or activity, such as @file{abbrev.el} for handling "
"abbreviations and other typing shortcuts, and @file{help.el} for on-line "
"help.  (Sometimes several libraries provide code for a single activity, as "
"the various @file{rmail@dots{}} files provide code for reading electronic "
"mail.)  In @cite{The GNU Emacs Manual}, you will see sentences such as ``The "
"@kbd{C-h p} command lets you search the standard Emacs Lisp libraries by "
"topic keywords.''"
msgstr ""
"Incidentalmente, los ficheros que contienen c@'odigo Lisp son\n"
"convencionalmente llamadas @dfn{librer@'{@dotless{i}}as}. La\n"
"met@'afora se deriva que una librer@'{@dotless{i}}a, tal como\n"
"la librer@'{@dotless{i}}a de leyes o una librer@'{@dotless{i}}a de\n"
"ingenier@'{@dotless{i}}a, en vez de una librer@'{@dotless{i}}a\n"
"general. Cada librer@'{@dotless{i}}a, o fichero, contiene funciones\n"
"que se relacionan a un asunto particular o actividad, tal como\n"
"@file{abbrev.el} para manejar abreviaciones y otros atajos, y\n"
"@file{help.el} para la ayuda on-line. (Algunas veces varias\n"
"librer@'{@dotless{i}}as proporcionan c@'odigo para una actividad\n"
"simple, como varios @file{rmail@dots{}} ficheros proveen c@'odigo para\n"
"leer correos electr@'onicos.) En @cite{El Manual de GNU Emacs}, tu\n"
"ver@'as varias frases tales como ``El comando @kbd{C-h p} te permite\n"
"buscar el est@'andar de las librer@'{@dotless{i}}as Emacs Lisp por las\n"
"palabras claves."

#. type: section
#: emacs-lisp-intro.texi:4759
#, no-wrap
msgid "A Simplified @code{beginning-of-buffer} Definition"
msgstr "Una definici@'on simplificada de @code{beginning-of-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:4767
msgid ""
"The @code{beginning-of-buffer} command is a good function to start with "
"since you are likely to be familiar with it and it is easy to understand.  "
"Used as an interactive command, @code{beginning-of-buffer} moves the cursor "
"to the beginning of the buffer, leaving the mark at the previous position.  "
"It is generally bound to @kbd{M-<}."
msgstr ""
"El comando @code{beginning-of-buffer} es una buena funci@'on para\n"
"empezar ya puedes tener cierta familiaridad con eso y es f@'acil de\n"
"comprender. Usado como un comando interactivo,\n"
"@code{beginning-of-buffer} mueve el cursor al principio del b@'uffer,\n"
"dejando la marca en la posici@'on previa. Eso es generalmente\n"
"asignados a @kbd{M-<}."

#. type: Plain text
#: emacs-lisp-intro.texi:4774
msgid ""
"In this section, we will discuss a shortened version of the function that "
"shows how it is most frequently used.  This shortened function works as "
"written, but it does not contain the code for a complex option.  In another "
"section, we will describe the entire function.  (@xref{beginning-of-"
"buffer, , Complete Definition of @code{beginning-of-buffer}}.)"
msgstr ""
"En esta secci@'on, se discutir@'a una versi@'on ordenada de la\n"
"funci@'on que muestra como eso es lo usado m@'as frecuentemente. Esta\n"
"funci@'on ordenada trabaja como se escribe, pero no contiene el\n"
"c@'odigo para una funci@'on compleja. En otra secci@'on, describiremos\n"
"la funci@'on entera. (@xref{beginning-of-buffer, Definici@'on Completa\n"
"de @code{beginnning-of-buffer}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:4782
msgid ""
"Before looking at the code, let's consider what the function definition has "
"to contain: it must include an expression that makes the function "
"interactive so it can be called by typing @kbd{M-x beginning-of-buffer} or "
"by typing a keychord such as @kbd{M-<}; it must include code to leave a mark "
"at the original position in the buffer; and it must include code to move the "
"cursor to the beginning of the buffer."
msgstr ""
"Antes de mirar en el c@'odigo, perm@'{@dotless{i}}tenos considerar que\n"
"la definici@'on de funci@'on tiene que contener: eso debe incluir una\n"
"expresi@'on que crea la funci@'on interactiva as@'{@dotless{i}} puede\n"
"ser llamado escribiendo @kbd{M-x beginning-of-buffer} o escribiendo\n"
"unos atajos tales como @kbd{M-<}; debe incluir c@'odigo para dejar una\n"
"marca en la posici@'on original en el b@'uffer; y debe incluir\n"
"c@'odigo el cursor al principio del b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:4785
msgid "Here is the complete text of the shortened version of the function:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el texto completo la versi@'on ordenada de\n"
"la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:4794
#, no-wrap
msgid ""
"(defun simplified-beginning-of-buffer ()\n"
"  \"Move point to the beginning of the buffer;\n"
"leave mark at previous position.\"\n"
"  (interactive)\n"
"  (push-mark)\n"
"  (goto-char (point-min)))\n"
msgstr ""
"(defun simplified-beginning-of-buffer ()\n"
"  \"Mover punto al principio del bufer; dejar marca en la posici@'on previa.\"\n"
"  (interactive)\n"
"  (push-mark)\n"
"  (goto-char (point-min)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4799
msgid ""
"Like all function definitions, this definition has five parts following the "
"special form @code{defun}:"
msgstr ""
"Como todas las definiciones de funci@'on, esta definici@'on tiene\n"
"cinco partes siguiendo la forma especial @code{defun}:"

#. type: enumerate
#: emacs-lisp-intro.texi:4803
msgid "The name: in this example, @code{simplified-beginning-of-buffer}."
msgstr "El nombre: en este ejemplo, @code{simplified-beginning-of-buffer}."

#. type: enumerate
#: emacs-lisp-intro.texi:4806
msgid "A list of the arguments: in this example, an empty list, @code{()},"
msgstr ""
"Una lista de los argumentos: en este ejemplo, una lista\n"
"vac@'{@dotless{i}}a, @code{()},"

#. type: enumerate
#: emacs-lisp-intro.texi:4809
msgid "The documentation string."
msgstr "La cadena de documentaci@'on."

#. type: enumerate
#: emacs-lisp-intro.texi:4812
msgid "The interactive expression."
msgstr "La expresi@'on interactive."

#. type: enumerate
#: emacs-lisp-intro.texi:4815
msgid "The body."
msgstr "El cuerpo."

#. type: Plain text
#: emacs-lisp-intro.texi:4822
msgid ""
"In this function definition, the argument list is empty; this means that "
"this function does not require any arguments.  (When we look at the "
"definition for the complete function, we will see that it may be passed an "
"optional argument.)"
msgstr ""
"En esta definici@'on de funci@'on, la lista de argumentos est@'a\n"
"vac@'{@dotless{i}}a; esto significa que esta funci@'on no requiere\n"
"argumentos. (Cuando se busca la definici@'on para la funci@'on\n"
"completa, se ver@'a que puede pasarse un argumento opcional.)"

#. type: Plain text
#: emacs-lisp-intro.texi:4827
msgid ""
"The interactive expression tells Emacs that the function is intended to be "
"used interactively.  In this example, @code{interactive} does not have an "
"argument because @code{simplified-beginning-of-buffer} does not require one."
msgstr ""
"La expresi@'on interactiva cuenta a Emacs que la funci@'on se pretende\n"
"ser usada interactivamente. En este ejemplo, @code{interactive} no\n"
"tiene un argumento porque @code{simplified-beginning-of-buffer} no se "
"requiere."

#. type: Plain text
#: emacs-lisp-intro.texi:4830
msgid "The body of the function consists of the two lines:"
msgstr "El cuerpo de la funci@'on consiste de dos l@'{@dotless{i}}neas:"

#. type: group
#: emacs-lisp-intro.texi:4835
#, no-wrap
msgid ""
"(push-mark)\n"
"(goto-char (point-min))\n"
msgstr ""
"(push-mark)\n"
"(goto-char (point-min))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4842
msgid ""
"The first of these lines is the expression, @code{(push-mark)}.  When this "
"expression is evaluated by the Lisp interpreter, it sets a mark at the "
"current position of the cursor, wherever that may be.  The position of this "
"mark is saved in the mark ring."
msgstr ""
"La primera de estas l@'{@dotless{i}}neas es la expresi@'on,\n"
"@code{(push-mark)}. Cuando esta expresi@'on es evaluado por el\n"
"int@'erprete Lisp, eso asigna una marca en la posici@'on actual del\n"
"cursor, siempre y cuando esto pueda ser. La posici@'on de esta marca\n"
"est@'a guardada en el anillo de marcas."

#. type: Plain text
#: emacs-lisp-intro.texi:4848
msgid ""
"The next line is @code{(goto-char (point-min))}.  This expression jumps the "
"cursor to the minimum point in the buffer, that is, to the beginning of the "
"buffer (or to the beginning of the accessible portion of the buffer if it is "
"narrowed.  @xref{Narrowing & Widening, , Narrowing and Widening}.)"
msgstr ""
"La siguiente l@'{@dotless{i}}nea es @code{(goto-char\n"
"(point-min))}. Esta expresi@'on salta el cursor al punto\n"
"m@'{@dotless{i}}nimo en el b@'uffer, esto es, para el comienzo del\n"
"b@'uffer (o al principio de la porci@'on accesible del b@'uffer si eso\n"
"est@'a encogido. @xref{Encogiendo y extendiendo, , Encogiendo y\n"
"extendiendo}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:4853
msgid ""
"The @code{push-mark} command sets a mark at the place where the cursor was "
"located before it was moved to the beginning of the buffer by the "
"@code{(goto-char (point-min))} expression.  Consequently, you can, if you "
"wish, go back to where you were originally by typing @kbd{C-x C-x}."
msgstr ""
"El comando @code{push-mark} estable una marca en el lugar donde el\n"
"cursor fu@'e localizado antes que fuera movido al principio del\n"
"b@'uffer por la expresi@'on @code{(goto-char\n"
"(point-min))}. Consiguientemente, puedes, si lo deseas, volver donde\n"
"estabas originalmente escribiendo @kbd{C-x C-x}."

#. type: Plain text
#: emacs-lisp-intro.texi:4855
msgid "That is all there is to the function definition!"
msgstr ""
"@exclamdown{}Esto es todo lo que hay para la definici@'on de funci@'on!"

#. type: item
#: emacs-lisp-intro.texi:4856 emacs-lisp-intro.texi:5472
#, no-wrap
msgid "describe-function"
msgstr "describe-function"

#. type: Plain text
#: emacs-lisp-intro.texi:4864
msgid ""
"When you are reading code such as this and come upon an unfamiliar function, "
"such as @code{goto-char}, you can find out what it does by using the "
"@code{describe-function} command.  To use this command, type @kbd{C-h f} and "
"then type in the name of the function and press @key{RET}.  The "
"@code{describe-function} command will print the function's documentation "
"string in a @file{*Help*} window.  For example, the documentation for "
"@code{goto-char} is:"
msgstr ""
"Cuando se lee c@'odigo como este y vuelve a una funci@'on no familiar,\n"
"tal como @code{goto-char}, se puede encontrar que se hace usando el\n"
"comando @code{describe-function}. Para usar este comando, escribe\n"
"@kbd{C-h f} y entonces escribe en el nombre de la funci@'on y presiona\n"
"@key{RET}. El comando @code{describe-function} imprimir@'a la\n"
"documentaci@'n de la cadena de la  funci@'on en una ventana\n"
"@file{*Help*}. Por ejemplo, la documentaci@'on para @code{goto-char} es:"

#. type: group
#: emacs-lisp-intro.texi:4869
#, no-wrap
msgid ""
"Set point to POSITION, a number or marker.\n"
"Beginning of buffer is position (point-min), end is (point-max).\n"
msgstr ""
"Asignar punto a POSITION, un n@'umero o marca\n"
"Empezando el buffer es la posici@'on (point-min), y el final es\n"
"(point-max).\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4874
msgid "The function's one argument is the desired position."
msgstr "La funci@'on es un argumento es la posici@'on deseada."

#. type: Plain text
#: emacs-lisp-intro.texi:4880
msgid ""
"(The prompt for @code{describe-function} will offer you the symbol under or "
"preceding the cursor, so you can save typing by positioning the cursor right "
"over or after the function and then typing @kbd{C-h f @key{RET}}.)"
msgstr ""
"(La consola para @code{describe-function} te ofrecer@'a el\n"
"s@'{@dotless{i}}mbolo abajo o precediendo al cursor, as@'{@dotless{i}}\n"
"se puede guardar escribiendo al posicionar el cursor a la derecha o\n"
"despu@'es de la funci@'on y entonces escribir @kbd{C-h f @key{RET}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:4885
msgid ""
"The @code{end-of-buffer} function definition is written in the same way as "
"the @code{beginning-of-buffer} definition except that the body of the "
"function contains the expression @code{(goto-char (point-max))} in place of "
"@code{(goto-char (point-min))}."
msgstr ""
"La definici@'on de funci@'on @code{end-of-buffer} est@'a escrito en el\n"
"mismo modo que la definici@'on @code{beginnig-of-buffer} excepto que\n"
"el cuerpo de la funci@'on contenga la expresi@'on @code{(goto-char\n"
"(point-max))} en lugar de @code{(goto-char (point-min))}"

#. type: Plain text
#: emacs-lisp-intro.texi:4893
msgid ""
"The @code{mark-whole-buffer} function is no harder to understand than the "
"@code{simplified-beginning-of-buffer} function.  In this case, however, we "
"will look at the complete function, not a shortened version."
msgstr ""
"La funci@'on @code{mark-whole-buffer} no es tan dif@'{@dotless{i}}cil de\n"
"comprender que la funci@'on @code{simplified-beginning-of-buffer}. En\n"
"este caso, sin embargo, se ver@'a la funci@'on completa, no una\n"
"versi@'on ordenada."

#. type: Plain text
#: emacs-lisp-intro.texi:4899
msgid ""
"The @code{mark-whole-buffer} function is not as commonly used as the "
"@code{beginning-of-buffer} function, but is useful nonetheless: it marks a "
"whole buffer as a region by putting point at the beginning and a mark at the "
"end of the buffer.  It is generally bound to @kbd{C-x h}."
msgstr ""
"La funci@'on @code{mark-whole-buffer} no est@'a com@'unmente usada\n"
"como la funci@'on @code{beginning-of-buffer}, pero eso no es @'util:\n"
"eso marca un b@'uffer completo como una regi@'on poniendo el punto al\n"
"principio y una marca al fin del b@'uffer. Eso est@'a generalmente\n"
"asociado a @kbd{C-x h}."

#. type: node
#: emacs-lisp-intro.texi:4906
#, no-wrap
msgid "mark-whole-buffer overview"
msgstr "resumen de mark-whole-buffer"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:4907
#, no-wrap
msgid "An overview of @code{mark-whole-buffer}"
msgstr "Un resumen de @code{mark-whole-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:4912
msgid "In GNU Emacs 22, the code for the complete function looks like this:"
msgstr "En GNU Emacs 22, el c@'odigo para la funci@'on completa se parece a:"

#. type: group
#: emacs-lisp-intro.texi:4924
#, no-wrap
msgid ""
"(defun mark-whole-buffer ()\n"
"  \"Put point at beginning and mark at end of buffer.\n"
"You probably should not use this function in Lisp programs;\n"
"it is usually a mistake for a Lisp function to use any subroutine\n"
"that uses or sets the mark.\"\n"
"  (interactive)\n"
"  (push-mark (point))\n"
"  (push-mark (point-max) nil t)\n"
"  (goto-char (point-min)))\n"
msgstr ""
"(defun mark-whole-buffer ()\n"
"  \"Pon el punto al principio y marca el fin del b@'uffer. \n"
"Probablemante no deber@'{@dotless{i}}as usar esta funci@'on en\n"
"  programas Lisp; normalmente un error para una funci@'on Lisp usa\n"
"  cualquier subrrutina que usa o asigna la marca.\"\n"
"  (interactive)\n"
"  (push-mark (point))\n"
"  (push-mark (point-max) nil t)\n"
"  (goto-char (point-min)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4931
msgid ""
"Like all other functions, the @code{mark-whole-buffer} function fits into "
"the template for a function definition.  The template looks like this:"
msgstr ""
"Como todas las otras funciones, la funci@'on @code{mark-whole-buffer}\n"
"se ajusta dentro de la plantilla para una definici@'on. La plantilla\n"
"se parece a esta:"

#. type: group
#: emacs-lisp-intro.texi:4938 emacs-lisp-intro.texi:13766
#, no-wrap
msgid ""
"(defun @var{name-of-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{interactive-expression}@dots{})\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun @var{name-of-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{interactive-expression}@dots{})\n"
"  @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4945
msgid ""
"Here is how the function works: the name of the function is @code{mark-whole-"
"buffer}; it is followed by an empty argument list, @samp{()}, which means "
"that the function does not require arguments.  The documentation comes next."
msgstr ""
"Aqu@'{@dotless{i}} est@'a c@'omo la funci@'on trabaja: el nombre de la\n"
"funci@'on es @code{mark-whole-buffer}; eso es seguida por un argumento\n"
"de lista vac@'{@dotless{i}}a, @samp{()}, que significa que la\n"
"funci@'on no requiere argumentos. La documentaci@'on viene la siguiente."

#. type: Plain text
#: emacs-lisp-intro.texi:4950
msgid ""
"The next line is an @code{(interactive)} expression that tells Emacs that "
"the function will be used interactively.  These details are similar to the "
"@code{simplified-beginning-of-buffer} function described in the previous "
"section."
msgstr ""
"La siguiente l@'{@dotless{i}}nea es una expresi@'on\n"
"@code{(interactive)} que cuenta a Emacs que la funci@'on ser@'a usada\n"
"interactivamente. Estos detalles son similares a la funci@'on\n"
"@code{simplified-beginning-of-buffer} descrita en la secci@'on previa"

#. type: subsection
#: emacs-lisp-intro.texi:4953
#, no-wrap
msgid "Body of @code{mark-whole-buffer}"
msgstr "Cuerpo de @code{mark-whole-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:4957
msgid ""
"The body of the @code{mark-whole-buffer} function consists of three lines of "
"code:"
msgstr ""
"El cuerpo de la funci@'on @code{mark-whole-buffer} consiste en tres\n"
"l@'{@dotless{i}}neas de c@'odigo:"

#. type: group
#: emacs-lisp-intro.texi:4964
#, no-wrap
msgid ""
"(push-mark (point))\n"
"(push-mark (point-max) nil t)\n"
"(goto-char (point-min))\n"
msgstr ""
"(push-mark (point))\n"
"(push-mark (point-max) nil t)\n"
"(goto-char (point-min))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:4968
msgid "The first of these lines is the expression, @code{(push-mark (point))}."
msgstr ""
"El primero de estas l@'{@dotless{i}}neas es la expresi@'on,\n"
"@code{(push-mark (point))}."

#. type: Plain text
#: emacs-lisp-intro.texi:4973
msgid ""
"This line does exactly the same job as the first line of the body of the "
"@code{simplified-beginning-of-buffer} function, which is written @code{(push-"
"mark)}.  In both cases, the Lisp interpreter sets a mark at the current "
"position of the cursor."
msgstr ""
"Esta l@'{@dotless{i}}nea hace exactamente el mismo trabajo que la\n"
"primera l@'{@dotless{i}}nea del cuerpo de la funci@'on\n"
"@code{simplified-beginning-of-buffer}, que est@'a escrita\n"
"@code{(push-mark)}. En ambos casos, el int@'erprete Lisp asigna una\n"
"marca en la posici@'on actual del cursor."

#. type: Plain text
#: emacs-lisp-intro.texi:4984
msgid ""
"I don't know why the expression in @code{mark-whole-buffer} is written "
"@code{(push-mark (point))} and the expression in @code{beginning-of-buffer} "
"is written @code{(push-mark)}.  Perhaps whoever wrote the code did not know "
"that the arguments for @code{push-mark} are optional and that if @code{push-"
"mark} is not passed an argument, the function automatically sets mark at the "
"location of point by default.  Or perhaps the expression was written so as "
"to parallel the structure of the next line.  In any case, the line causes "
"Emacs to determine the position of point and set a mark there."
msgstr ""
"No s@'e por qu@'e en la expresi@'on @code{mark-whole-buffer} est@'a\n"
"escrito @code{(push-mark (point))} y en la expresi@'on\n"
"@code{beginning-of-buffer} est@'a escrito @code{(push-mark)}. Quiz@'as\n"
"quien escribi@'o el c@'odigo no sab@'{@dotless{i}}a que los argumentos\n"
"para @code{push-mark} son opcionales y que si @code{push-mark} no se\n"
"pasa como argumento, la funci@'on autom@'aticamente asigna la marca en\n"
"la localizaci@'on del punto por defecto. O quiz@'as la expresi@'on\n"
"fu@'e escrita as@'{@dotless{i}} como para parelizar la estructura de\n"
"la siguiente l@'{@dotless{i}}nea. En cualquier caso, la\n"
"l@'{@dotless{i}}nea causa que Emacs determine la posici@'on del\n"
"punto y asigne una marca all@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:4996
msgid ""
"In earlier versions of GNU Emacs, the next line of @code{mark-whole-buffer} "
"was @code{(push-mark (point-max))}.  This expression sets a mark at the "
"point in the buffer that has the highest number.  This will be the end of "
"the buffer (or, if the buffer is narrowed, the end of the accessible portion "
"of the buffer.  @xref{Narrowing & Widening, , Narrowing and Widening}, for "
"more about narrowing.)  After this mark has been set, the previous mark, the "
"one set at point, is no longer set, but Emacs remembers its position, just "
"as all other recent marks are always remembered.  This means that you can, "
"if you wish, go back to that position by typing @kbd{C-u C-@key{SPC}} twice."
msgstr ""
"En las primeras versiones de GNU Emacs, la siguiente\n"
"l@'{@dotless{i}}nea de @code{mark-whole-buffer} fu@'e @code{(push-mark\n"
"(point-max))}. Esta expresi@'on asigna una marca en el punto en el\n"
"b@'uffer que tiene el n@'umero m@'as alto. Esto ser@'a el fin del\n"
"b@'uffer (o, si el b@'uffer es encogida, el fin de la porci@'on\n"
"accesible del b@'uffer. @xref{Encogiendo y extendiendo, , Encogiendo y\n"
"extendiendo}, para m@'as acerca de encoger). Despu@'es esta marca ha sido\n"
"asignada, la marca previa, uno asigna un punto, pero no se asigna largo,\n"
"pero Emacs recuerda su posici@'on, solo como todas las otras marcas\n"
"recientes son siempre recordadas. Esto significa que se puede, si lo\n"
"deseas, vuelve a esta posici@'on escribiendo @kbd{C-u C-@key{SPC}} dos\n"
"veces."

#. type: Plain text
#: emacs-lisp-intro.texi:5000
msgid ""
"In GNU Emacs 22, the @code{(point-max)} is slightly more complicated.  The "
"line reads"
msgstr ""
"En GNU Emacs 22, el @code{(point-max)} es ligeramente m@'as\n"
"complicado. La l@'{@dotless{i}}nea lee"

#. type: smallexample
#: emacs-lisp-intro.texi:5003
#, no-wrap
msgid "(push-mark (point-max) nil t)\n"
msgstr "(push-mark (point-max) nil t)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5015
msgid ""
"The expression works nearly the same as before.  It sets a mark at the "
"highest numbered place in the buffer that it can.  However, in this version, "
"@code{push-mark} has two additional arguments.  The second argument to "
"@code{push-mark} is @code{nil}.  This tells the function it @emph{should} "
"display a message that says `Mark set' when it pushes the mark.  The third "
"argument is @code{t}.  This tells @code{push-mark} to activate the mark when "
"Transient Mark mode is turned on.  Transient Mark mode highlights the "
"currently active region.  It is often turned off."
msgstr ""
"La expresi@'on funciona cerca de lo mismo que antes. Eso asigna una marca\n"
"en el lugar numerado m@'as alto que se puede en el b@'uffer. Sin\n"
"embargo, en esta versi@'on, @code{push-mark} tiene dos argumentos\n"
"adicionales. El segundo argumento para @code{push-mark} es\n"
"@code{nil}. Esto cuenta la funci@'on que\n"
"@emph{mostrar@'{@dotless{i}}a} un mensaje que dice `Marca asignada'\n"
"cuando eso empuja la marca. El tercer argumento es @code{t}. Esto\n"
"cuenta @code{push-mark} para activar la marca cuando el modo Transient\n"
"Mark est@'a activado. Transient Mark mode ilumina la regi@'on de marca\n"
"activa. Con frecuencia desactivada"

#. type: Plain text
#: emacs-lisp-intro.texi:5024
msgid ""
"Finally, the last line of the function is @code{(goto-char (point-min)))}.  "
"This is written exactly the same way as it is written in @code{beginning-of-"
"buffer}.  The expression moves the cursor to the minimum point in the "
"buffer, that is, to the beginning of the buffer (or to the beginning of the "
"accessible portion of the buffer).  As a result of this, point is placed at "
"the beginning of the buffer and mark is set at the end of the buffer.  The "
"whole buffer is, therefore, the region."
msgstr ""
"Finalmente, la @'ultima l@'{@dotless{i}}nea de la funci@'on es\n"
"@code{(goto-char (point-min))}. Esto es escrito exactamente el mismo\n"
"camino camino como est@'a escrito @code{beginning-of-buffer}. La\n"
"expresi@'on mueve el cursor al m@'{@dotless{i}}nimo punto en el\n"
"b@'uffer, que es, al principio del b@'ufferr (o para el principio de\n"
"la porci@'on accesible del b@'uffer). Como un resultado de esto, punto\n"
"est@'a emplazado al principio del b@'uffer y la marca est@'a asignada al\n"
"fin del b@'uffer. El b@'uffer completo es, m@'as all@'a, la regi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:5033
msgid ""
"The @code{append-to-buffer} command is more complex than the @code{mark-"
"whole-buffer} command.  What it does is copy the region (that is, the part "
"of the buffer between point and mark) from the current buffer to a specified "
"buffer."
msgstr ""
"El comando @code{append-to-buffer} es m@'as complejo que el comando\n"
"@code{mark-whole-buffer}. Lo que hace es copiar la regi@'on (que es,\n"
"la parte del b@'uffer entre punto y marca) desde el buffer actual a un\n"
"b@'uffer espec@'{@dotless{i}}fico."

#. type: node
#: emacs-lisp-intro.texi:5042
#, no-wrap
msgid "append-to-buffer overview"
msgstr "resumen de append-to-buffer"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:5043
#, no-wrap
msgid "An Overview of @code{append-to-buffer}"
msgstr "Un resumen de @code{append-to-buffer}"

#. type: item
#: emacs-lisp-intro.texi:5046 emacs-lisp-intro.texi:5498
#, no-wrap
msgid "insert-buffer-substring"
msgstr "insert-buffer-substring"

#. type: Plain text
#: emacs-lisp-intro.texi:5052
msgid ""
"The @code{append-to-buffer} command uses the @code{insert-buffer-substring} "
"function to copy the region.  @code{insert-buffer-substring} is described by "
"its name: it takes a string of characters from part of a buffer, a "
"``substring'', and inserts them into another buffer."
msgstr ""
"El comando @code{append-to-buffer} usa la funci@'on\n"
"@code{insert-buffer-substring} para copiar la\n"
"regi@'on. @code{insert-buffer-substring} es descrita por su nombre:\n"
"eso toma una cadena de caracteres desde parte de un b@'uffer, una\n"
"``subcadena'', y las inserta dentro de otro b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5058
msgid ""
"Most of @code{append-to-buffer} is concerned with setting up the conditions "
"for @code{insert-buffer-substring} to work: the code must specify both the "
"buffer to which the text will go, the window it comes from and goes to, and "
"the region that will be copied."
msgstr ""
"La mayor@'{@dotless{i}}a de @code{append-to-buffer} se refiere con la\n"
"configuraci@'on de las condiciones para @code{insert-buffer-substring}\n"
"para trabajar: el c@'odigo debe especificar ambos el b@'uffer para el\n"
"que el texto ir@'a, la ventana viene y va, y la regi@'on que ser@'a copiada."

#. type: Plain text
#: emacs-lisp-intro.texi:5061
msgid "Here is the complete text of the function:"
msgstr "Aqu@'{@dotless{i}} est@'a el texto completo de la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:5067
#, no-wrap
msgid ""
"(defun append-to-buffer (buffer start end)\n"
"  \"Append to specified buffer the text of the region.\n"
"It is inserted into that buffer before its point.\n"
msgstr ""
"(defun append-to-buffer (buffer start end)\n"
"  \"Introduce al b@'uffer espec@'{@dotless{i}}fico el texto de la\n"
"  regi@'on. Esto es insertado de este b@'uffer antes de su punto.\n"

#. type: group
#: emacs-lisp-intro.texi:5077
#, no-wrap
msgid ""
"When calling from a program, give three arguments:\n"
"BUFFER (or buffer name), START and END.\n"
"START and END specify the portion of the current buffer to be copied.\"\n"
"  (interactive\n"
"   (list (read-buffer \"Append to buffer: \" (other-buffer\n"
"                                            (current-buffer) t))\n"
"         (region-beginning) (region-end)))\n"
msgstr ""
"Cuando se llama desde un programa, se dan tres argumentos:\n"
"BUFFER (o nombre del b@'uffer), START y END.\n"
"START y END especifica la porci@'on del b@'uffer actual para ser copiado.\"\n"
"  (interactive\n"
"   (list (read-buffer \"Append to buffer: \" (other-buffer\n"
"                                            (current-buffer) t))\n"
"         (region-beginning) (region-end)))\n"

#. type: group
#: emacs-lisp-intro.texi:5091
#, no-wrap
msgid ""
"  (let ((oldbuf (current-buffer)))\n"
"    (save-excursion\n"
"      (let* ((append-to (get-buffer-create buffer))\n"
"             (windows (get-buffer-window-list append-to t t))\n"
"             point)\n"
"        (set-buffer append-to)\n"
"        (setq point (point))\n"
"        (barf-if-buffer-read-only)\n"
"        (insert-buffer-substring oldbuf start end)\n"
"        (dolist (window windows)\n"
"          (when (= (window-point window) point)\n"
"            (set-window-point window (point))))))))\n"
msgstr ""
"  (let ((oldbuf (current-buffer)))\n"
"    (save-excursion\n"
"      (let* ((append-to (get-buffer-create buffer))\n"
"             (windows (get-buffer-window-list append-to t t))\n"
"             point)\n"
"        (set-buffer append-to)\n"
"        (setq point (point))\n"
"        (barf-if-buffer-read-only)\n"
"        (insert-buffer-substring oldbuf start end)\n"
"        (dolist (window windows)\n"
"          (when (= (window-point window) point)\n"
"            (set-window-point window (point))))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5096
msgid ""
"The function can be understood by looking at it as a series of filled-in "
"templates."
msgstr ""
"La funci@'on puede ser comprendida buscando como series de plantillas "
"rellenas"

#. type: Plain text
#: emacs-lisp-intro.texi:5099
msgid ""
"The outermost template is for the function definition.  In this function, it "
"looks like this (with several slots filled in):"
msgstr ""
"La plantilla de fuera es para la definici@'on de la funci@'on. En esta\n"
"funci@'on, se ve como esto (con varios slots rellenos):"

#. type: group
#: emacs-lisp-intro.texi:5106
#, no-wrap
msgid ""
"(defun append-to-buffer (buffer start end)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive @dots{})\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun append-to-buffer (buffer start end)\n"
"  \"@var{documentacion}@dots{}\"\n"
"  (interactive @dots{})\n"
"  @var{cuerpo}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5113
msgid ""
"The first line of the function includes its name and three arguments.  The "
"arguments are the @code{buffer} to which the text will be copied, and the "
"@code{start} and @code{end} of the region in the current buffer that will be "
"copied."
msgstr ""
"La primera l@'{@dotless{i}}nea de la funci@'on incluye su nombre y los\n"
"tres argumentos. Los argumentos son el @code{b@'uffer} que el texto\n"
"ser@'a copiado, y el @code{start} y @code{end} de la regi@'on en el\n"
"buffer actual que ser@'a copiado."

#. type: Plain text
#: emacs-lisp-intro.texi:5118
msgid ""
"The next part of the function is the documentation, which is clear and "
"complete.  As is conventional, the three arguments are written in upper case "
"so you will notice them easily.  Even better, they are described in the same "
"order as in the argument list."
msgstr ""
"La siguiente parte de la funci@'on es la documentaci@'on, que es claro\n"
"y completo. Como es convencional, los tres argumentos son escritos en\n"
"may@'usculas as@'{@dotless{i}} se notificar@'an f@'acilmente. Incluso\n"
"mejor, son descritas en el mismo orden como en la lista de argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:5121
msgid ""
"Note that the documentation distinguishes between a buffer and its name.  "
"(The function can handle either.)"
msgstr ""
"N@'otese que la documentaci@'on distingue entre un b@'uffer y su\n"
"nombre. (La funci@'on puede manejar otro.)"

#. type: subsection
#: emacs-lisp-intro.texi:5123
#, no-wrap
msgid "The @code{append-to-buffer} Interactive Expression"
msgstr "La expresi@'on interactiva @code{append-to-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5129
msgid ""
"Since the @code{append-to-buffer} function will be used interactively, the "
"function must have an @code{interactive} expression.  (For a review of "
"@code{interactive}, see @ref{Interactive, , Making a Function "
"Interactive}.)  The expression reads as follows:"
msgstr ""
"Desde que la funci@'on @code{append-to-buffer} ser@'a usada\n"
"interactivamente, la funci@'on debe tener una expresi@'on\n"
"@code{interactive}. (Para una revisi@'on de @code{interactive}, ver\n"
"@ref{Interactive, , Creando una Funci@'on Interactive}.) La\n"
"expresi@'on se lee de la siguiente manera:"

#. type: group
#: emacs-lisp-intro.texi:5138
#, no-wrap
msgid ""
"(interactive\n"
" (list (read-buffer\n"
"        \"Append to buffer: \"\n"
"        (other-buffer (current-buffer) t))\n"
"       (region-beginning)\n"
"       (region-end)))\n"
msgstr ""
"(interactive\n"
" (list (read-buffer\n"
"        \"Agrega al buffer: \"\n"
"        (other-buffer (current-buffer) t))\n"
"       (region-beginning)\n"
"       (region-end)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5144
msgid ""
"This expression is not one with letters standing for parts, as described "
"earlier.  Instead, it starts a list with these parts:"
msgstr ""
"Esta expresi@'on no es una con letras separadas por partes, como se\n"
"describe antes. En vez de eso, empieza una lista con estas partes:"

#. type: Plain text
#: emacs-lisp-intro.texi:5150
msgid ""
"The first part of the list is an expression to read the name of a buffer and "
"return it as a string.  That is @code{read-buffer}.  The function requires a "
"prompt as its first argument, @samp{\"Append to buffer: \"}.  Its second "
"argument tells the command what value to provide if you don't specify "
"anything."
msgstr ""
"La primera parte de la lista es una expresi@'on para leer el nombre de\n"
"un b@'uffer y lo devuelve como una cadena. Esto es\n"
"@code{read-buffer}. La funci@'on requiere una consola como su primer\n"
"argumento, @samp{\"Asocia al buffer: \"}. Su segundo argumento cuenta el\n"
"comando que valora para proporciona si no especifica cualquier cosa."

#. type: Plain text
#: emacs-lisp-intro.texi:5154
msgid ""
"In this case that second argument is an expression containing the function "
"@code{other-buffer}, an exception, and a @samp{t}, standing for true."
msgstr ""
"En este caso este segundo argumento es una expresi@'on conteniendo la\n"
"funci@'on @code{other-buffer}, una excepci@'on, y una @samp{t}, para verdad."

#. type: Plain text
#: emacs-lisp-intro.texi:5160
msgid ""
"The first argument to @code{other-buffer}, the exception, is yet another "
"function, @code{current-buffer}.  That is not going to be returned.  The "
"second argument is the symbol for true, @code{t}. that tells @code{other-"
"buffer} that it may show visible buffers (except in this case, it will not "
"show the current buffer, which makes sense)."
msgstr ""
"El primer argumento para @code{other-buffer}, la excepci@'on, es\n"
"todav@'{@dotless{i}}a otra funci@'on, @code{other-buffer}. Esto es no\n"
"yendo a ser devuelto. El segundo argumento es el s@'{@dotless{i}}mbolo\n"
"para verdad, @code{t}. Esto cuenta @code{other-buffer} que puede\n"
"mostrar b@'uffers visibles (excepto en este caso, eso no mostrar@'a el\n"
"b@'uffer actual, que tiene sentido)."

#. type: Plain text
#: emacs-lisp-intro.texi:5163 emacs-lisp-intro.texi:9038
msgid "The expression looks like this:"
msgstr "La expresi@'on se ve como:"

#. type: smallexample
#: emacs-lisp-intro.texi:5166
#, no-wrap
msgid "(other-buffer (current-buffer) t)\n"
msgstr "(other-buffer (current-buffer) t)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5171
msgid ""
"The second and third arguments to the @code{list} expression are "
"@code{(region-beginning)} and @code{(region-end)}.  These two functions "
"specify the beginning and end of the text to be appended."
msgstr ""
"El segundo y tercer argumento de la expresi@'on @code{list} son\n"
"@code{(region-beginning)} y @code{(region-end)}. Estas dos funciones\n"
"especifican el principio el y el final del texto que se adjunta."

#. type: Plain text
#: emacs-lisp-intro.texi:5175
msgid ""
"Originally, the command used the letters @samp{B} and @samp{r}.  The whole "
"@code{interactive} expression looked like this:"
msgstr ""
"Originalmente, el comando usaba las letras @samp{B} y @samp{r}. La\n"
"expresi@'on completa @code{interactive} es as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:5178
#, no-wrap
msgid "(interactive \"BAppend to buffer:@: \\nr\")\n"
msgstr "(interactive \"BAsociar al buffer:@: \\nr\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5183
msgid ""
"But when that was done, the default value of the buffer switched to was "
"invisible.  That was not wanted."
msgstr ""
"Pero cuando esto fu@'e hecho, el valor por defecto del b@'uffer cambi@'o\n"
"a ser invisible. Esto no se quer@'{@dotless{i}}a."

#. type: Plain text
#: emacs-lisp-intro.texi:5189
msgid ""
"(The prompt was separated from the second argument with a newline, "
"@samp{\\n}.  It was followed by an @samp{r} that told Emacs to bind the two "
"arguments that follow the symbol @code{buffer} in the function's argument "
"list (that is, @code{start} and @code{end}) to the values of point and "
"mark.  That argument worked fine.)"
msgstr ""
"(La consola estaba separada del segundo argumento con una nueva\n"
"l@'{@dotless{i}}nea, @samp{\\n}. Estaba seguido por un @samp{r} que\n"
"contaba a Emacs emparejar los dos argumentos que siguen el\n"
"s@'{@dotless{i}}mbolo @code{buffer} en la lista de argumentos de la\n"
"funci@'on (que es, @code{start} y @code{end}) para los valores de\n"
"punto y marca. Este argumento trabaj@'o bien.)"

#. type: subsection
#: emacs-lisp-intro.texi:5191
#, no-wrap
msgid "The Body of @code{append-to-buffer}"
msgstr "El cuerpo de @code{append-to-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5221
msgid ""
"The body of the @code{append-to-buffer} function begins with @code{let}."
msgstr ""
"El cuerpo de la funci@'on @code{append-to-buffer} empieza con @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:5227
msgid ""
"As we have seen before (@pxref{let, , @code{let}}), the purpose of a "
"@code{let} expression is to create and give initial values to one or more "
"variables that will only be used within the body of the @code{let}.  This "
"means that such a variable will not be confused with any variable of the "
"same name outside the @code{let} expression."
msgstr ""
"Como se ha visto antes (@pxref{let, , @code{let}}), el prop@'osito de\n"
"una expresi@'on @code{let} es crear y dar valores iniciales a una o\n"
"m@'as variable que solo ser@'an usada con el cuerpo del\n"
"@code{let}. Esto significa que tal variable no ser@'a confuso con\n"
"cualquier variable del mismo nombre fuera de la expresi@'on @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:5231
msgid ""
"We can see how the @code{let} expression fits into the function as a whole "
"by showing a template for @code{append-to-buffer} with the @code{let} "
"expression in outline:"
msgstr ""
"Podemos ver como la expresi@'on @code{let} se ajusta dentro de la\n"
"funci@'on como un todo mostrando una plantilla para\n"
"@code{append-to-buffer} con la expresi@'on @code{let} en l@'{@dotless{i}}nea:"

#. type: group
#: emacs-lisp-intro.texi:5239
#, no-wrap
msgid ""
"(defun append-to-buffer (buffer start end)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive @dots{})\n"
"  (let ((@var{variable} @var{value}))\n"
"        @var{body}@dots{})\n"
msgstr ""
"(defun append-to-buffer (buffer start end)\n"
"  \"@var{documentacion}@dots{}\"\n"
"  (interactive @dots{})\n"
"  (let ((@var{variable} @var{valor}))\n"
"        @var{cuerpo}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5243
msgid "The @code{let} expression has three elements:"
msgstr "La expresi@'on @code{let} tiene tres elementos:"

#. type: enumerate
#: emacs-lisp-intro.texi:5247
msgid "The symbol @code{let};"
msgstr "El s@'{@dotless{i}}mbolo @code{let};"

#. type: enumerate
#: emacs-lisp-intro.texi:5251
msgid ""
"A varlist containing, in this case, a single two-element list, "
"@code{(@var{variable} @var{value})};"
msgstr ""
"Una varlist conteniendo, en este caso, una lista simple de dos\n"
"elementos, @code{(@var{variable} @var{value})};"

#. type: enumerate
#: emacs-lisp-intro.texi:5254
msgid "The body of the @code{let} expression."
msgstr "El cuerpo de la expresi@'on @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:5258
msgid "In the @code{append-to-buffer} function, the varlist looks like this:"
msgstr "En la funci@'on @code{append-to-buffer}, la varlist se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:5261
#, no-wrap
msgid "(oldbuf (current-buffer))\n"
msgstr "(oldbuf (current-buffer))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5269
msgid ""
"In this part of the @code{let} expression, the one variable, @code{oldbuf}, "
"is bound to the value returned by the @code{(current-buffer)} expression.  "
"The variable, @code{oldbuf}, is used to keep track of the buffer in which "
"you are working and from which you will copy."
msgstr ""
"En esta parte de la expresi@'on @code{let}, una variable,\n"
"@code{oldbuf} es emparejada al valor devuelto por la expresi@'on\n"
"@code{(current-buffer)}. La variable, @code{oldbuf}, es usada para\n"
"guardar la traza del b@'uffer en el que tu est@'as trabajando y desde\n"
"el que se copiar@'a."

#. type: Plain text
#: emacs-lisp-intro.texi:5275
msgid ""
"The element or elements of a varlist are surrounded by a set of parentheses "
"so the Lisp interpreter can distinguish the varlist from the body of the "
"@code{let}.  As a consequence, the two-element list within the varlist is "
"surrounded by a circumscribing set of parentheses.  The line looks like this:"
msgstr ""
"El elemento o elementos de una varlist son rodeados por un conjunto de\n"
"par@'entesis as@'{@dotless{i}} el int@'erprete Lisp puede distinguir\n"
"la varlist desde el cuerpo del @code{let}. Como consecuencia, la lista\n"
"de dos elementos con la varlist est@'a rodeados por un circunscrito\n"
"conjunto de par@'entesis. Las l@'{@dotless{i}}neas se ven\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:5280
#, no-wrap
msgid ""
"(let ((oldbuf (current-buffer)))\n"
"  @dots{} )\n"
msgstr ""
"(let ((oldbuf (current-buffer)))\n"
"  @dots{} )\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5288
msgid ""
"The two parentheses before @code{oldbuf} might surprise you if you did not "
"realize that the first parenthesis before @code{oldbuf} marks the boundary "
"of the varlist and the second parenthesis marks the beginning of the two-"
"element list, @code{(oldbuf (current-buffer))}."
msgstr ""
"Los dos par@'entesis antes de @code{oldbuf} podr@'{@dotless{i}}an\n"
"sorprenderte si no fuera porque los primeros par@'entesis antes de\n"
"@code{oldbuf} marcan el l@'{@dotless{i}}mite de la varlist y el segundo\n"
"par@'entesis marca el principio de la lista de dos elementos,\n"
"@code{(oldbuf (current-buffer))}."

#. type: subsection
#: emacs-lisp-intro.texi:5290
#, no-wrap
msgid "@code{save-excursion} in @code{append-to-buffer}"
msgstr "@code{save-excursion} en @code{append-to-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5294
msgid ""
"The body of the @code{let} expression in @code{append-to-buffer} consists of "
"a @code{save-excursion} expression."
msgstr ""
"El cuerpo de la expresi@'on @code{let} en @code{append-to-buffer}\n"
"consiste de una expresi@'on @code{save-excursion}."

#. type: Plain text
#: emacs-lisp-intro.texi:5301
msgid ""
"The @code{save-excursion} function saves the locations of point and mark, "
"and restores them to those positions after the expressions in the body of "
"the @code{save-excursion} complete execution.  In addition, @code{save-"
"excursion} keeps track of the original buffer, and restores it.  This is how "
"@code{save-excursion} is used in @code{append-to-buffer}."
msgstr ""
"La funci@'on @code{save-excursion} guarda las localizaciones de punto y\n"
"la marca, y las restaura a estas posiciones despu@'es de las expresiones\n"
"en el cuerpo de la ejecuci@'on completa\n"
"@code{save-excursion}. Adem@'as, @code{save-excursion} completa\n"
"la ejecuci@'on. Adem@'as, @code{save-excursion} guarda la traza del\n"
"b@'uffer original, y lo restaura. Esto es c@'omo @code{save-excursion}\n"
"que se usa en @code{append-to-buffer}."

#. type: cindex
#: emacs-lisp-intro.texi:5303
#, no-wrap
msgid "Indentation for formatting"
msgstr "Indentaci@'n para formatear"

#. type: cindex
#: emacs-lisp-intro.texi:5304
#, no-wrap
msgid "Formatting convention"
msgstr "Convenci@'on formateando"

#. type: Plain text
#: emacs-lisp-intro.texi:5311
msgid ""
"Incidentally, it is worth noting here that a Lisp function is normally "
"formatted so that everything that is enclosed in a multi-line spread is "
"indented more to the right than the first symbol.  In this function "
"definition, the @code{let} is indented more than the @code{defun}, and the "
"@code{save-excursion} is indented more than the @code{let}, like this:"
msgstr ""
"Incidentalmente, no se valora nada aqu@'{@dotless{i}} que una\n"
"funci@'on Lisp es normalmente formateada as@'{@dotless{i}} que cada\n"
"cosa que es encerrada en conjunto multil@'{@dotless{i}}nea que es\n"
"indentada m@'as a la derecha que el primer s@'{@dotless{i}}mbolo. En\n"
"esta definici@'on de funci@'on, el @code{let} es indentado m@'as que\n"
"@code{defun}, y el @code{save-excursion} es indentado m@'as que el\n"
"@code{let}, como esto:"

#. type: group
#: emacs-lisp-intro.texi:5320
#, no-wrap
msgid ""
"(defun @dots{}\n"
"  @dots{}\n"
"  @dots{}\n"
"  (let@dots{}\n"
"    (save-excursion\n"
"      @dots{}\n"
msgstr ""
"(defun @dots{}\n"
"  @dots{}\n"
"  @dots{}\n"
"  (let@dots{}\n"
"    (save-excursion\n"
"      @dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5330
msgid ""
"This formatting convention makes it easy to see that the lines in the body "
"of the @code{save-excursion} are enclosed by the parentheses associated with "
"@code{save-excursion}, just as the @code{save-excursion} itself is enclosed "
"by the parentheses associated with the @code{let}:"
msgstr ""
"Esta convenci@'on formatea que sea f@'acil de ver que las\n"
"l@'{@dotless{i}}neas en el cuerpo de @code{save-excursion}, solo\n"
"como @code{save-excurion} por s@'{@dotless{i}} mismo est@'an\n"
"encerradas por los par@'entesis asociados con el @code{let}:"

#. type: group
#: emacs-lisp-intro.texi:5339
#, no-wrap
msgid ""
"(let ((oldbuf (current-buffer)))\n"
"  (save-excursion\n"
"    @dots{}\n"
"    (set-buffer @dots{})\n"
"    (insert-buffer-substring oldbuf start end)\n"
"    @dots{}))\n"
msgstr ""
"(let ((oldbuf (current-buffer)))\n"
"  (save-excursion\n"
"    @dots{}\n"
"    (set-buffer @dots{})\n"
"    (insert-buffer-substring oldbuf start end)\n"
"    @dots{}))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5345
msgid ""
"The use of the @code{save-excursion} function can be viewed as a process of "
"filling in the slots of a template:"
msgstr ""
"El uso de la funci@'on @code{save-excursion} puede ser vista como un\n"
"proceso de rellenar slots de una plantilla:"

#. type: group
#: emacs-lisp-intro.texi:5353
#, no-wrap
msgid ""
"(save-excursion\n"
"  @var{first-expression-in-body}\n"
"  @var{second-expression-in-body}\n"
"   @dots{}\n"
"  @var{last-expression-in-body})\n"
msgstr ""
"(save-excursion\n"
"  @var{primera-expresion-en-cuerpo}\n"
"  @var{segunda-expresion-en-cuerpo}\n"
"   @dots{}\n"
"  @var{ultima-expresion-en-cuerpo})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5363
msgid ""
"In this function, the body of the @code{save-excursion} contains only one "
"expression, the @code{let*} expression.  You know about a @code{let} "
"function.  The @code{let*} function is different.  It has a @samp{*} in its "
"name.  It enables Emacs to set each variable in its varlist in sequence, one "
"after another."
msgstr ""
"En esta funci@'on, el cuerpo de @code{save-excursion} contiene solo\n"
"una expresi@'on, la expresi@'on @code{let*}. Se conoce una funci@'on\n"
"@code{let}. La funci@'on @code{let*} es diferente. Eso tiene un\n"
"@samp{*} en su nombre. Eso permite a Emacs asignar cada variable de su\n"
"varlist en secuencia, una despu@'es de otra."

#. type: Plain text
#: emacs-lisp-intro.texi:5367
msgid ""
"Its critical feature is that variables later in the varlist can make use of "
"the values to which Emacs set variables earlier in the varlist.  @xref{fwd-"
"para let, , The @code{let*} expression}."
msgstr ""
"Su funcionalidad cr@'{@dotless{i}}tica es que las variable despu@'es\n"
"en la varlist puedan hacer uso de los valores para los que Emacs asigna\n"
"variables pronto en la varlist. @xref{fwd-para let, La expresi@'on\n"
"@code{let*}}."

#. type: Plain text
#: emacs-lisp-intro.texi:5371
msgid ""
"We will skip functions like @code{let*} and focus on two: the @code{set-"
"buffer} function and the @code{insert-buffer-substring} function."
msgstr ""
"Se obviar@'an funciones como @code{let*} y se focalizar@'a en dos: la\n"
"funci@'on @code{set-buffer} y la funci@'on\n"
"@code{insert-buffer-substring}."

#. type: Plain text
#: emacs-lisp-intro.texi:5374
msgid "In the old days, the @code{set-buffer} expression was simply"
msgstr "En anta@~no, la expresi@'on @code{set-buffer} era simple:"

#. type: smallexample
#: emacs-lisp-intro.texi:5377
#, no-wrap
msgid "(set-buffer (get-buffer-create buffer))\n"
msgstr "(set-buffer (get-buffer-create buffer))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5382
msgid "but now it is"
msgstr "pero ahora eso es"

#. type: smallexample
#: emacs-lisp-intro.texi:5385
#, no-wrap
msgid "(set-buffer append-to)\n"
msgstr "(set-buffer append-to)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5392
msgid ""
"@code{append-to} is bound to @code{(get-buffer-create buffer)} earlier on in "
"the @code{let*} expression.  That extra binding would not be necessary "
"except for that @code{append-to} is used later in the varlist as an argument "
"to @code{get-buffer-window-list}."
msgstr ""
"@code{append-to} se asigna a @code{(get-buffer-create-buffer)} pronto\n"
"en la expresi@'on @code{let*}. Esta asociaci@'on extra no\n"
"ser@'{@dotless{i}}a necesaria excepto para este @code{append-to} es\n"
"usado despu@'es en la varlist como un argumento para\n"
"@code{get-buffer-window-list}."

#. type: Plain text
#: emacs-lisp-intro.texi:5417
msgid ""
"The @code{append-to-buffer} function definition inserts text from the buffer "
"in which you are currently to a named buffer.  It happens that @code{insert-"
"buffer-substring} copies text from another buffer to the current buffer, "
"just the reverse---that is why the @code{append-to-buffer} definition starts "
"out with a @code{let} that binds the local symbol @code{oldbuf} to the value "
"returned by @code{current-buffer}."
msgstr ""
"La definici@'on de la funci@'on @code{append-to-buffer} inserta texto\n"
"desde el b@'uffer en el que est@'as actualmente a un buffer\n"
"nombrado. Eso sucede que @code{insert-buffer-substring} copia texto\n"
"desde otro b@'uffer al b@'uffer actual, solo el inverso --- que es\n"
"porque la definici@'on @code{append-to-buffer} empieza con un\n"
"@code{let} que asocia el s@'{@dotless{i}}mbolo local @code{oldbuf} al\n"
"valor devuelto por @code{current-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:5420
msgid "The @code{insert-buffer-substring} expression looks like this:"
msgstr "La expresi@'on @code{insert-buffer-substring} se ve como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:5423
#, no-wrap
msgid "(insert-buffer-substring oldbuf start end)\n"
msgstr "(insert-buffer-substring oldbuf start end)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5433
msgid ""
"The @code{insert-buffer-substring} function copies a string @emph{from} the "
"buffer specified as its first argument and inserts the string into the "
"present buffer.  In this case, the argument to @code{insert-buffer-"
"substring} is the value of the variable created and bound by the @code{let}, "
"namely the value of @code{oldbuf}, which was the current buffer when you "
"gave the @code{append-to-buffer} command."
msgstr ""
"La funci@'on @code{insert-buffer-substring} copia una cadena\n"
"@emph{from} al b@'uffer especificado como su primer argumento e\n"
"inserta la cadena dentro del b@'uffer presente. En este caso, el\n"
"argumento para @code{insert-buffer-substring} es el valor de la\n"
"variable creada y asociada por el @code{let}, llama al valor de\n"
"@code{oldbuf}, que fu@'e el b@'uffer actual cuando tu diste el comando\n"
"@code{append-to-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:5437
msgid ""
"After @code{insert-buffer-substring} has done its work, @code{save-"
"excursion} will restore the action to the original buffer and @code{append-"
"to-buffer} will have done its job."
msgstr ""
"Despu@'es de que @code{insert-buffer-substring} ha hecho su trabajo,\n"
"@code{save-excursion} restaurar@'a la acci@'on al b@'uffer original y\n"
"@code{append-to-buffer} habr@'a hecho su trabajo."

#. type: Plain text
#: emacs-lisp-intro.texi:5440
msgid "Written in skeletal form, the workings of the body look like this:"
msgstr ""
"Escrito en forma esquel@'etica, los trabajos del cuerpo se ven como esto:"

#. type: group
#: emacs-lisp-intro.texi:5447
#, no-wrap
msgid ""
"(let (@var{bind-}@code{oldbuf}@var{-to-value-of-}@code{current-buffer})\n"
"  (save-excursion                       ; @r{Keep track of buffer.}\n"
"    @var{change-buffer}\n"
"    @var{insert-substring-from-}@code{oldbuf}@var{-into-buffer})\n"
"\n"
msgstr ""
"(let (@var{bind-}@code{oldbuf}@var{-to-value-of-}@code{current-buffer})\n"
"  (save-excursion                       ; @r{Guarda la traza del b@'uffer.}\n"
"    @var{change-buffer}\n"
"    @var{insert-substring-from-}@code{oldbuf}@var{-into-buffer})\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:5450
#, no-wrap
msgid ""
"  @var{change-back-to-original-buffer-when-finished}\n"
"@var{let-the-local-meaning-of-}@code{oldbuf}@var{-disappear-when-finished}\n"
msgstr ""
"  @var{change-back-to-original-buffer-when-finished}\n"
"@var{let-the-local-meaning-of-}@code{oldbuf}@var{-disappear-when-finished}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5459
msgid ""
"In summary, @code{append-to-buffer} works as follows: it saves the value of "
"the current buffer in the variable called @code{oldbuf}.  It gets the new "
"buffer (creating one if need be) and switches Emacs's attention to it.  "
"Using the value of @code{oldbuf}, it inserts the region of text from the old "
"buffer into the new buffer; and then using @code{save-excursion}, it brings "
"you back to your original buffer."
msgstr ""
"En resumen, @code{append-to-buffer} funciona como sigue: se guarda el\n"
"valor del b@'uffer actual en la variable llamada @code{oldbuf}. Se obtiene\n"
"el nuevo b@'uffer (creando uno si necesita ser) y cambia la atenci@'on\n"
"de Emacs a eso. Usando el valor de @code{oldbuf}, inserta la regi@'on\n"
"del texto desde el viejo b@'uffer dentro del nuevo b@'uffer; y entonces\n"
"usando @code{save-excursion}, trae atr@'as a tu b@'uffer original."

#. type: Plain text
#: emacs-lisp-intro.texi:5465
msgid ""
"In looking at @code{append-to-buffer}, you have explored a fairly complex "
"function.  It shows how to use @code{let} and @code{save-excursion}, and how "
"to change to and come back from another buffer.  Many function definitions "
"use @code{let}, @code{save-excursion}, and @code{set-buffer} this way."
msgstr ""
"Buscando @code{append-to-buffer}, se ha explorado una funci@'on limpia\n"
"compleja. Eso muestra como usar @code{let} y @code{save-excursion}, y\n"
"como cambiar y volver desde otro buffer. Muchas definiciones de\n"
"funci@'on usan @code{let}, @code{save-excursion}, y @code{set-buffer}\n"
"de este modo."

#. type: Plain text
#: emacs-lisp-intro.texi:5470
msgid ""
"Here is a brief summary of the various functions discussed in this chapter."
msgstr ""
"Aqu@'{@dotless{i}} est@'a un breve resumen de varias funciones\n"
"discutidas en este cap@'{@dotless{i}}tulo."

#. type: itemx
#: emacs-lisp-intro.texi:5473
#, no-wrap
msgid "describe-variable"
msgstr "describe-variable"

#. type: table
#: emacs-lisp-intro.texi:5476
msgid ""
"Print the documentation for a function or variable.  Conventionally bound to "
"@kbd{C-h f} and @kbd{C-h v}."
msgstr ""
"Imprime la documentaci@'on para una funci@'on o\n"
"variable. Convencionalmente asociada a @kbd{C-h f} y @kbd{C-h v}."

#. type: table
#: emacs-lisp-intro.texi:5482
msgid ""
"Find the file containing the source for a function or variable and switch "
"buffers to it, positioning point at the beginning of the item.  "
"Conventionally bound to @kbd{M-.} (that's a period following the @key{META} "
"key)."
msgstr ""
"Encuentra el fichero que contiene la fuente para una funci@'on o\n"
"variable y cambia buffer a @'el, posicionando el punto al principio\n"
"del @'{@dotless{i}}tem. Convencionalmente emparejado a @kbd{M-.} (esto\n"
"es un per@'{@dotless{i}}odo seguiendo la tecla @key{META})."

#. type: table
#: emacs-lisp-intro.texi:5487
msgid ""
"Save the location of point and mark and restore their values after the "
"arguments to @code{save-excursion} have been evaluated.  Also, remember the "
"current buffer and return to it."
msgstr ""
"Guarda la localizaci@'on de punto y marca y restaura sus valores\n"
"despu@'es de los argumentos para @code{save-excursion} y han sido\n"
"evaluados. Tambi@'en, recuerda el buffer actual y devu@'elvelo."

#. type: item
#: emacs-lisp-intro.texi:5488
#, no-wrap
msgid "push-mark"
msgstr "push-mark"

#. type: table
#: emacs-lisp-intro.texi:5492
msgid ""
"Set mark at a location and record the value of the previous mark on the mark "
"ring.  The mark is a location in the buffer that will keep its relative "
"position even if text is added to or removed from the buffer."
msgstr ""
"Asigna la marca en una localizaci@'on y graba el valor de la marca\n"
"previa en el anillo de la marca. La marca es una localizaci@'on en el\n"
"b@'uffer que guarda su posici@'on relativa incluso si el texto es\n"
"a@~nadido o borrado desde el b@'uffer."

#. type: item
#: emacs-lisp-intro.texi:5493
#, no-wrap
msgid "goto-char"
msgstr "goto-char"

#. type: table
#: emacs-lisp-intro.texi:5497
msgid ""
"Set point to the location specified by the value of the argument, which can "
"be a number, a marker, or an expression that returns the number of a "
"position, such as @code{(point-min)}."
msgstr ""
"Asigna punto a la localizaci@'on especificada por el valor del\n"
"argumento, que puede ser un n@'umero, una marca, o una expresi@'on que\n"
"devuelve el n@'umero de una posici@'on, tal como @code{(point-min)}."

#. type: table
#: emacs-lisp-intro.texi:5501
msgid ""
"Copy a region of text from a buffer that is passed to the function as an "
"argument and insert the region into the current buffer."
msgstr ""
"Copia una regi@'on de texto desde un b@'uffer que es pasado a la\n"
"funci@'on como un argumento e inserta la regi@'on dentro del b@'uffer actual."

#. type: table
#: emacs-lisp-intro.texi:5504
msgid "Mark the whole buffer as a region.  Normally bound to @kbd{C-x h}."
msgstr ""
"Marca el b@'uffer completo como una regi@'on. Normalmente asignado a\n"
"@kbd{C-x h}."

#. type: table
#: emacs-lisp-intro.texi:5509
msgid ""
"Switch the attention of Emacs to another buffer, but do not change the "
"window being displayed.  Used when the program rather than a human is to "
"work on a different buffer."
msgstr ""
"Cambia la atenci@'on de Emacs a otro b@'uffer, pero no cambies la\n"
"ventana siendo mostrada. Usado cuando el programa en vez de un humano\n"
"trabaja en un b@'uffer diferente."

#. type: item
#: emacs-lisp-intro.texi:5510
#, no-wrap
msgid "get-buffer-create"
msgstr "get-buffer-create"

#. type: itemx
#: emacs-lisp-intro.texi:5511
#, no-wrap
msgid "get-buffer"
msgstr "get-buffer"

#. type: table
#: emacs-lisp-intro.texi:5515
msgid ""
"Find a named buffer or create one if a buffer of that name does not exist.  "
"The @code{get-buffer} function returns @code{nil} if the named buffer does "
"not exist."
msgstr ""
"Encuentra un b@'uffer nombrado o crea uno si un b@'uffer de este\n"
"nombre no existe. La funci@'on @code{get-buffer} devuelve @code{nil}\n"
"si el nombre del b@'uffer no existe."

#. type: itemize
#: emacs-lisp-intro.texi:5525
msgid ""
"Write your own @code{simplified-end-of-buffer} function definition; then "
"test it to see whether it works."
msgstr ""
"Escribe tu propia definici@'on de funci@'on\n"
"@code{simplified-end-of-buffer}; entonces testea para ver si funciona."

#. type: itemize
#: emacs-lisp-intro.texi:5529
msgid ""
"Use @code{if} and @code{get-buffer} to write a function that prints a "
"message telling you whether a buffer exists."
msgstr ""
"Usa @code{if} y @code{get-buffer} para escribir una funci@'on que\n"
"imprime un mensaje contando si un buffer existe."

#. type: itemize
#: emacs-lisp-intro.texi:5533
msgid ""
"Using @code{find-tag}, find the source for the @code{copy-to-buffer} "
"function."
msgstr ""
"Usando @code{find-tag}, encuentra la fuente para la funci@'on @code{copy-to-"
"buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5545
msgid ""
"In this chapter, we build on what we have learned in previous chapters by "
"looking at more complex functions.  The @code{copy-to-buffer} function "
"illustrates use of two @code{save-excursion} expressions in one definition, "
"while the @code{insert-buffer} function illustrates use of an asterisk in an "
"@code{interactive} expression, use of @code{or}, and the important "
"distinction between a name and the object to which the name refers."
msgstr ""
"En este cap@'{@dotless{i}}tulo, se construye lo que se aprendi@'o en\n"
"los cap@'{@dotless{i}}tulos previos mirando en funciones m@'as\n"
"complejas. La funci@'on @code{copy-to-buffer} ilustra el uso de\n"
"expresiones @code{save-excursion} en una definici@'on, mientras la\n"
"funci@'on @code{insert-buffer} ilustra el uso de un asterisco en una\n"
"expresi@'on @code{interactive}, uso de @code{o}, y la importante\n"
"distinci@'on entre un nombre y el objeto para el que el nombre se\n"
"refiere."

#. type: section
#: emacs-lisp-intro.texi:5556
#, no-wrap
msgid "The Definition of @code{copy-to-buffer}"
msgstr "La definici@'on de @code{copy-to-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5563
msgid ""
"After understanding how @code{append-to-buffer} works, it is easy to "
"understand @code{copy-to-buffer}.  This function copies text into a buffer, "
"but instead of adding to the second buffer, it replaces all the previous "
"text in the second buffer."
msgstr ""
"Despu@'es de comprender c@'omo se trabaja @code{append-to-buffer}, es\n"
"f@'acil para comprender @code{copy-to-buffer}. Esta funci@'on copia\n"
"texto dentro de un b@'uffer, pero en vez de a@~nadir al segundo\n"
"b@'uffer, se reemplaza a todo el texto previo en el segundo b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5566
msgid "The body of @code{copy-to-buffer} looks like this,"
msgstr "El cuerpo de @code{copy-to-buffer} se ve como esto,"

#. type: group
#: emacs-lisp-intro.texi:5577
#, no-wrap
msgid ""
"@dots{}\n"
"(interactive \"BCopy to buffer: \\nr\")\n"
"(let ((oldbuf (current-buffer)))\n"
"  (with-current-buffer (get-buffer-create buffer)\n"
"    (barf-if-buffer-read-only)\n"
"    (erase-buffer)\n"
"    (save-excursion\n"
"      (insert-buffer-substring oldbuf start end)))))\n"
msgstr ""
"@dots{}\n"
"(interactive \"BCopy to buffer: \\nr\")\n"
"(let ((oldbuf (current-buffer)))\n"
"  (with-current-buffer (get-buffer-create buffer)\n"
"    (barf-if-buffer-read-only)\n"
"    (erase-buffer)\n"
"    (save-excursion\n"
"      (insert-buffer-substring oldbuf start end)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5582
msgid ""
"The @code{copy-to-buffer} function has a simpler @code{interactive} "
"expression than @code{append-to-buffer}."
msgstr ""
"La funci@'on @code{copy-to-buffer} tiene una expresi@'on simple\n"
"@code{interactive} en vez de @code{append-to-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:5585
msgid "The definition then says"
msgstr "La definici@'on entonces dice:"

#. type: smallexample
#: emacs-lisp-intro.texi:5588
#, no-wrap
msgid "(with-current-buffer (get-buffer-create buffer) @dots{}\n"
msgstr "(with-current-buffer (get-buffer-create buffer) @dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5596
msgid ""
"First, look at the earliest inner expression; that is evaluated first.  That "
"expression starts with @code{get-buffer-create buffer}.  The function tells "
"the computer to use the buffer with the name specified as the one to which "
"you are copying, or if such a buffer does not exist, to create it.  Then, "
"the @code{with-current-buffer} function evaluates its body with that buffer "
"temporarily current."
msgstr ""
"Primero, mira en la expresi@'on interna m@'as temprana; que es\n"
"evaluada primero. Esta expresi@'on empieza con @code{get-buffer-create\n"
"buffer}. La funci@'on cuenta al ordenador para usar el b@'uffer con el\n"
"nombre espec@'{@dotless{i}}ficado como uno para el que est@'as\n"
"copiando, o si tal b@'uffer no existe, cr@'ealo. Entonces, la funci@'on\n"
"@code{with-current-buffer} eval@'ua su cuerpo con este b@'uffer\n"
"temporalmente al actual."

#. type: Plain text
#: emacs-lisp-intro.texi:5602
msgid ""
"(This demonstrates another way to shift the computer's attention but not the "
"user's.  The @code{append-to-buffer} function showed how to do the same with "
"@code{save-excursion} and @code{set-buffer}.  @code{with-current-buffer} is "
"a newer, and arguably easier, mechanism.)"
msgstr ""
"(Esto demuestra otro camino para cambiar la atenci@'on del ordenador\n"
"pero no los usuarios. La funci@'on @code{append-to-buffer} muestra\n"
"como hacer lo mismo con @code{save-excursion} y\n"
"@code{set-buffer}. @code{with-current-buffer} es uno nuevo, y\n"
"argumentablemente f@'acil, mecanismo.)"

#. type: Plain text
#: emacs-lisp-intro.texi:5605
msgid ""
"The @code{barf-if-buffer-read-only} function sends you an error message "
"saying the buffer is read-only if you cannot modify it."
msgstr ""
"La funci@'on @code{barf-if-buffer-read-only} env@'{@dotless{i}}a un\n"
"mensaje de error diciendo al b@'uffer es de solo lectura si no se\n"
"puede modificar."

#. type: Plain text
#: emacs-lisp-intro.texi:5608
msgid ""
"The next line has the @code{erase-buffer} function as its sole contents.  "
"That function erases the buffer."
msgstr ""
"La siguiente l@'{@dotless{i}}nea tiene la funci@'on\n"
"@code{erase-buffer} como sus @'unicos contenidos. Este funci@'on borra\n"
"el b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5615
msgid ""
"Finally, the last two lines contain the @code{save-excursion} expression "
"with @code{insert-buffer-substring} as its body.  The @code{insert-buffer-"
"substring} expression copies the text from the buffer you are in (and you "
"have not seen the computer shift its attention, so you don't know that that "
"buffer is now called @code{oldbuf})."
msgstr ""
"Finalmente, las @'ultimas dos l@'{@dotless{i}}neas contienen la\n"
"expresi@'on @code{save-excursion} con @code{insert-buffer-substring}\n"
"como su cuerpo. La expresi@'on @code{insert-buffer-substring} copia el\n"
"texto desde el b@'uffer en el que se est@'a (y no se ha visto el\n"
"ordenador puesta su atenci@'on, as@'{@dotless{i}} no se sabe que este\n"
"b@'uffer es ahora llamado @code{oldbuf})."

#. type: Plain text
#: emacs-lisp-intro.texi:5618
msgid ""
"Incidentally, this is what is meant by `replacement'.  To replace text, "
"Emacs erases the previous text and then inserts new text."
msgstr ""
"De manera incidental, esto es lo que significa por `reemplazo'. Para\n"
"reemplazar texto Emacs se borra el texto previo y entonces se inserta el\n"
"nuevo texto."

#. type: Plain text
#: emacs-lisp-intro.texi:5621
msgid "In outline, the body of @code{copy-to-buffer} looks like this:"
msgstr ""
"El c@'odigo fuente, del cuerpo de @code{copy-to-buffer} se parece a\n"
"esto:"

#. type: group
#: emacs-lisp-intro.texi:5630
#, no-wrap
msgid ""
"(let (@var{bind-}@code{oldbuf}@var{-to-value-of-}@code{current-buffer})\n"
"    (@var{with-the-buffer-you-are-copying-to}\n"
"      (@var{but-do-not-erase-or-copy-to-a-read-only-buffer})\n"
"      (erase-buffer)\n"
"      (save-excursion\n"
"        @var{insert-substring-from-}@code{oldbuf}@var{-into-buffer})))\n"
msgstr ""
"(let (@var{bind-}@code{oldbuf}@var{-to-value-of-}@code{current-buffer})\n"
"    (@var{with-the-buffer-you-are-copying-to}\n"
"      (@var{but-do-not-erase-or-copy-to-a-read-only-buffer})\n"
"      (erase-buffer)\n"
"      (save-excursion\n"
"        @var{insert-substring-from-}@code{oldbuf}@var{-into-buffer})))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5641
msgid ""
"@code{insert-buffer} is yet another buffer-related function.  This command "
"copies another buffer @emph{into} the current buffer.  It is the reverse of "
"@code{append-to-buffer} or @code{copy-to-buffer}, since they copy a region "
"of text @emph{from} the current buffer to another buffer."
msgstr ""
"@code{insert-buffer} es todav@'{@dotless{i}}a una funci@'on\n"
"relacionada con el b@'uffer. Este comando copia otro b@'uffer\n"
"@emph{dentro} del b@'uffer actual. Es lo inverso de\n"
"@code{append-to-buffer} o @code{copy-to-buffer}, desde que se copia\n"
"una regi@'on de texto @emph{desde} el b@'uffer actual a otro\n"
"b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5644
msgid ""
"Here is a discussion based on the original code.  The code was simplified in "
"2003 and is harder to understand."
msgstr ""
"Aqu@'{@dotless{i}} hay una discusi@'on basada en el c@'odigo\n"
"original. El c@'odigo era simplificado en 2003 y es duro de comprender."

#. type: Plain text
#: emacs-lisp-intro.texi:5647
msgid ""
"(@xref{New insert-buffer, , New Body for @code{insert-buffer}}, to see a "
"discussion of the new body.)"
msgstr ""
"(@xref{Nuevo insert-buffer, , Nuevo Cuerpo para @code{insert-buffer}},\n"
"para ver una discusi@'on del nuevo cuerpo.)"

#. type: Plain text
#: emacs-lisp-intro.texi:5651
msgid ""
"In addition, this code illustrates the use of @code{interactive} with a "
"buffer that might be @dfn{read-only} and the important distinction between "
"the name of an object and the object actually referred to."
msgstr ""
"Adem@'as, este c@'odigo ilustra el uso de @code{interactive} con un\n"
"b@'uffer que podr@'{@dotless{i}}a ser @dfn{read-only} y la\n"
"distinci@'on entre el nombre de un objeto y el objeto actualmente referido."

#. type: node
#: emacs-lisp-intro.texi:5663
#, no-wrap
msgid "insert-buffer code"
msgstr "c@'odigo insert-buffer"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:5664
#, no-wrap
msgid "The Code for @code{insert-buffer}"
msgstr "El c@'odigo para @code{insert-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5669
msgid "Here is the earlier code:"
msgstr "Aqu@'{@dotless{i}} est@'a el primer c@'odigo"

#. type: group
#: emacs-lisp-intro.texi:5677
#, no-wrap
msgid ""
"(defun insert-buffer (buffer)\n"
"  \"Insert after point the contents of BUFFER.\n"
"Puts mark after the inserted text.\n"
"BUFFER may be a buffer or a buffer name.\"\n"
"  (interactive \"*bInsert buffer:@: \")\n"
msgstr ""
"(defun insert-buffer (buffer)\n"
"  \"Inserta despu@'es del punto los contenidos del BUFFER.\n"
"Pon la marca despu@'es del texto insertado.\n"
"El BUFFER puede ser un buffer un nombre de buffer.\"\n"
"  (interactive \"*bInsert buffer:@: \")\n"

#. type: group
#: emacs-lisp-intro.texi:5686
#, no-wrap
msgid ""
"  (or (bufferp buffer)\n"
"      (setq buffer (get-buffer buffer)))\n"
"  (let (start end newmark)\n"
"    (save-excursion\n"
"      (save-excursion\n"
"        (set-buffer buffer)\n"
"        (setq start (point-min) end (point-max)))\n"
msgstr ""
"  (or (bufferp buffer)\n"
"      (setq buffer (get-buffer buffer)))\n"
"  (let (start end newmark)\n"
"    (save-excursion\n"
"      (save-excursion\n"
"        (set-buffer buffer)\n"
"        (setq start (point-min) end (point-max)))\n"

#. type: group
#: emacs-lisp-intro.texi:5691
#, no-wrap
msgid ""
"      (insert-buffer-substring buffer start end)\n"
"      (setq newmark (point)))\n"
"    (push-mark newmark)))\n"
msgstr ""
"      (insert-buffer-substring buffer start end)\n"
"      (setq newmark (point)))\n"
"    (push-mark newmark)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5697
msgid ""
"As with other function definitions, you can use a template to see an outline "
"of the function:"
msgstr ""
"Como con otras definiciones de funci@'on, se puede usar una plantilla\n"
"para visi@'on de la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:5704
#, no-wrap
msgid ""
"(defun insert-buffer (buffer)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"*bInsert buffer:@: \")\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun insert-buffer (buffer)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"*bInsert buffer:@: \")\n"
"  @var{body}@dots{})\n"

#. type: findex
#: emacs-lisp-intro.texi:5709
#, no-wrap
msgid "interactive, @r{example use of}"
msgstr "interactive, @r{ejemplo de uso}"

#. type: Plain text
#: emacs-lisp-intro.texi:5714
msgid ""
"In @code{insert-buffer}, the argument to the @code{interactive} declaration "
"has two parts, an asterisk, @samp{*}, and @samp{bInsert buffer:@: }."
msgstr ""
"En @code{insert-buffer}, el argumetno para la declaraci@'on\n"
"@code{interactive} tiene dos partes, un asterisco, @samp{*}, y\n"
"@samp{bInserta un buffer:@: }."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:5721
#, no-wrap
msgid "A Read-only Buffer"
msgstr "Un b@'uffer de solo lectura"

#. type: cindex
#: emacs-lisp-intro.texi:5723
#, no-wrap
msgid "Asterisk for read-only buffer"
msgstr "Asterisco para b@'uffer de solo lectura"

#. type: findex
#: emacs-lisp-intro.texi:5724
#, no-wrap
msgid "* @r{for read-only buffer}"
msgstr "* @r{para buffer solo lectura}"

#. type: Plain text
#: emacs-lisp-intro.texi:5733
msgid ""
"The asterisk is for the situation when the current buffer is a read-only "
"buffer---a buffer that cannot be modified.  If @code{insert-buffer} is "
"called when the current buffer is read-only, a message to this effect is "
"printed in the echo area and the terminal may beep or blink at you; you will "
"not be permitted to insert anything into current buffer.  The asterisk does "
"not need to be followed by a newline to separate it from the next argument."
msgstr ""
"El asterisco se utliza en la situaci@'on cuando el b@'uffer actual es un\n"
"b@'uffer de solo lectura --- un b@'uffer que no puede ser modificado. Si\n"
"@code{insert-buffer} es llamado cuando el b@'uffer actual es de solo\n"
"lectura, un mensaje a este efecto est@'a impreso en el @'area echo y\n"
"el terminal puede avisar; no se permite insertar cualquier cosa dentro\n"
"del b@'uffer. El asterisco no necesita ser seguido por una nueva\n"
"l@'{@dotless{i}}nea para separarse desde el siguiente argumento."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:5735
#, no-wrap
msgid "@samp{b} in an Interactive Expression"
msgstr "@samp{b} en una expresi@'on interactiva"

#. type: Plain text
#: emacs-lisp-intro.texi:5748
msgid ""
"The next argument in the interactive expression starts with a lower case "
"@samp{b}.  (This is different from the code for @code{append-to-buffer}, "
"which uses an upper-case @samp{B}.  @xref{append-to-buffer, , The Definition "
"of @code{append-to-buffer}}.)  The lower-case @samp{b} tells the Lisp "
"interpreter that the argument for @code{insert-buffer} should be an existing "
"buffer or else its name.  (The upper-case @samp{B} option provides for the "
"possibility that the buffer does not exist.)  Emacs will prompt you for the "
"name of the buffer, offering you a default buffer, with name completion "
"enabled.  If the buffer does not exist, you receive a message that says ``No "
"match''; your terminal may beep at you as well."
msgstr ""
"El siguiente argumento en la expresi@'on interactiva empieza con una\n"
"tecla min@'uscula @samp{b}. (Esto es diferente desde el c@'odigo para\n"
"@code{append-to-buffer}, que usa una may@'uscula\n"
"@samp{B}. @xref{append-to-buffer, , La Definici@'on de\n"
"@code{append-to-buffer}}.) La tecla min@'uscula cuenta al int@'erprete\n"
"Lisp que el argumento para @code{insert-buffer} ser@'{@dotless{i}}a un\n"
"buffer existente o sino su nombre. (La may@'uscula @samp{B} provee\n"
"para la posibilidad que el b@'uffer no existe.) Emacs te mostrar@'a en\n"
"pantalla el nombre del b@'uffer, ofreciendo un b@'uffer por defecto,\n"
"con la compleci@'on de nombre habilitado. Si el b@'uffer no existe, se\n"
"recibe un mensaje que dice ``No concuerda''; tu terminal te avisa tambi@'en."

#. type: Plain text
#: emacs-lisp-intro.texi:5753
msgid ""
"The new and simplified code generates a list for @code{interactive}.  It "
"uses the @code{barf-if-buffer-read-only} and @code{read-buffer} functions "
"with which we are already familiar and the @code{progn} special form with "
"which we are not.  (It will be described later.)"
msgstr ""
"El nuevo y simplificado c@'odigo genera una lista\n"
"@code{interactive}. Eso usa las funciones\n"
"@code{barf-if-buffer-read-only} y @code{read-buffer} con las que\n"
"estamos ya familiarizados y la forma especial @code{progn} con los que\n"
"no. (Eso ser@'a descrito despu@'es)."

#. type: subsection
#: emacs-lisp-intro.texi:5755
#, no-wrap
msgid "The Body of the @code{insert-buffer} Function"
msgstr "El cuerpo de la funci@'on @code{insert-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5763
msgid ""
"The body of the @code{insert-buffer} function has two major parts: an "
"@code{or} expression and a @code{let} expression.  The purpose of the "
"@code{or} expression is to ensure that the argument @code{buffer} is bound "
"to a buffer and not just the name of a buffer.  The body of the @code{let} "
"expression contains the code which copies the other buffer into the current "
"buffer."
msgstr ""
"El cuerpo de la funci@'on @code{insert-buffer} tiene dos partes\n"
"principales: una expresi@'on @code{or} y una expresi@'on\n"
"@code{let}. El prop@'osito de la expresi@'on @code{or} es asegurar que\n"
"el argumento @code{buffer} es emparejado a un b@'uffer y no solo el\n"
"nombre de un b@'uffer. El cuerpo de la expresi@'on @code{let} contiene\n"
"el c@'odigo que copia los otros b@'uffers dentro del b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5767
msgid ""
"In outline, the two expressions fit into the @code{insert-buffer} function "
"like this:"
msgstr ""
"En el \"outline\" (esquema), las dos expresiones se ajustan dentro de la\n"
"funci@'on @code{insert-buffer} como esto:"

#. type: group
#: emacs-lisp-intro.texi:5775
#, no-wrap
msgid ""
"(defun insert-buffer (buffer)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"*bInsert buffer:@: \")\n"
"  (or @dots{}\n"
"      @dots{}\n"
msgstr ""
"(defun insert-buffer (buffer)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"*bInsertar buffer:@: \")\n"
"  (or @dots{}\n"
"      @dots{}\n"

#. type: group
#: emacs-lisp-intro.texi:5779
#, no-wrap
msgid ""
"  (let (@var{varlist})\n"
"      @var{body-of-}@code{let}@dots{} )\n"
msgstr ""
"  (let (@var{varlist})\n"
"      @var{body-of-}@code{let}@dots{} )\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5785
msgid ""
"To understand how the @code{or} expression ensures that the argument "
"@code{buffer} is bound to a buffer and not to the name of a buffer, it is "
"first necessary to understand the @code{or} function."
msgstr ""
"Para comprender como la expresi@'on @code{or} asegura que el argumento\n"
"@code{buffer} es emparejado a un buffer y no al nombre de un b@'uffer,\n"
"es primero necesario comprender la funci@'on @code{or}."

#. type: Plain text
#: emacs-lisp-intro.texi:5788
msgid ""
"Before doing this, let me rewrite this part of the function using @code{if} "
"so that you can see what is done in a manner that will be familiar."
msgstr ""
"Antes de hacer esto, perm@'{@dotless{i}}teme reescribir esta parte de\n"
"la funci@'on usando @code{if} as@'{@dotless{i}} puedes ver que es\n"
"hecho en una manera que ser@'a familiar."

#. type: subsection
#: emacs-lisp-intro.texi:5790
#, no-wrap
msgid "@code{insert-buffer} With an @code{if} Instead of an @code{or}"
msgstr "@code{insert-buffer} con un @code{if} en vez de un @code{or}"

#. type: Plain text
#: emacs-lisp-intro.texi:5795
msgid ""
"The job to be done is to make sure the value of @code{buffer} is a buffer "
"itself and not the name of a buffer.  If the value is the name, then the "
"buffer itself must be got."
msgstr ""
"El trabajo que debe ser hecho y asegura el valor de @code{buffer} es\n"
"un b@'uffer en s@'{@dotless{i}} mismo y no el nombre de un b@'uffer. Si\n"
"el valor es el nombre, entonces el b@'uffer en s@'{@dotless{i}} debe ser\n"
"obtenido."

#. type: Plain text
#: emacs-lisp-intro.texi:5800
msgid ""
"You can imagine yourself at a conference where an usher is wandering around "
"holding a list with your name on it and looking for you: the usher is "
"``bound'' to your name, not to you; but when the usher finds you and takes "
"your arm, the usher becomes ``bound'' to you."
msgstr ""
"Te puedes imaginar a t@'{@dotless{i}} mismo en una conferencia donde\n"
"un acomodador est@'a observando una lista con tu nombre dentro y\n"
"mir@'andote: el acomodador sabe ``asociar'' tu nombre, pero no a\n"
"t@'{@dotless{i}}; pero cuando el acomodador te encuentra y te toma el\n"
"brazo, el acomodador llega a ``asociarte'' a t@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:5803
msgid "In Lisp, you might describe this situation like this:"
msgstr ""
"En Lisp, se podr@'{@dotless{i}}a describir esta situaci@'on "
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:5808
#, no-wrap
msgid ""
"(if (not (holding-on-to-guest))\n"
"    (find-and-take-arm-of-guest))\n"
msgstr ""
"(if (not (holding-on-to-guest))\n"
"    (find-and-take-arm-of-guest))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5813
msgid ""
"We want to do the same thing with a buffer---if we do not have the buffer "
"itself, we want to get it."
msgstr ""
"Se quiere hacer la misma cosa con un b@'uffer --- si no tenemos el\n"
"b@'uffer en s@'{@dotless{i}}, queremos tenerlo."

#. type: Plain text
#: emacs-lisp-intro.texi:5817
msgid ""
"Using a predicate called @code{bufferp} that tells us whether we have a "
"buffer (rather than its name), we can write the code like this:"
msgstr ""
"Usando un predicado llamado @code{bufferp} que nos cuenta si tenemos\n"
"un b@'uffer (en vez de su nombre), se puede escribir el c@'odigo como\n"
"este:"

#. type: group
#: emacs-lisp-intro.texi:5822
#, no-wrap
msgid ""
"(if (not (bufferp buffer))              ; @r{if-part}\n"
"    (setq buffer (get-buffer buffer)))  ; @r{then-part}\n"
msgstr ""
"(if (not (bufferp buffer))              ; @r{if-part}\n"
"    (setq buffer (get-buffer buffer)))  ; @r{then-part}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5829
msgid ""
"Here, the true-or-false-test of the @code{if} expression is @w{@code{(not "
"(bufferp buffer))}}; and the then-part is the expression @w{@code{(setq "
"buffer (get-buffer buffer))}}."
msgstr ""
"Aqu@'{@dotless{i}}, el true-or-false-test de la expresi@'on @code{if}\n"
"es @w{@code{(not (bufferp buffer))}}; y la then-part es la expresi@'on\n"
"@w{@code{(setq buffer (get-buffer buffer))}}."

#. type: Plain text
#: emacs-lisp-intro.texi:5838
msgid ""
"In the test, the function @code{bufferp} returns true if its argument is a "
"buffer---but false if its argument is the name of the buffer.  (The last "
"character of the function name @code{bufferp} is the character @samp{p}; as "
"we saw earlier, such use of @samp{p} is a convention that indicates that the "
"function is a predicate, which is a term that means that the function will "
"determine whether some property is true or false.  @xref{Wrong Type of "
"Argument, , Using the Wrong Type Object as an Argument}.)"
msgstr ""
"En el test, la funci@'on @code{bufferp} devuelve cierto si su\n"
"argumento es un b@'uffer --- pero falso si su argumento es el nombre del\n"
"b@'uffer. (El @'ultimo car@'acter del nombre de la funci@'on\n"
"@code{bufferp} es el car@'acter @samp{p}; como se vi@'o antes, tal uso de\n"
"@samp{p} es una convenci@'on que indica que la funci@'on es un\n"
"predicado, que es un t@'ermino que significa que la funci@'on\n"
"determinar@'a si alguna propiedad es verdadera o falsa. @xref{Tipo\n"
"incorrecto de argumento, , Usando el objeto de tipo incorrecto como un\n"
"argumento}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:5842
msgid ""
"The function @code{not} precedes the expression @code{(bufferp buffer)}, so "
"the true-or-false-test looks like this:"
msgstr ""
"La funci@'on @code{not} precede la expresi@'on @code{(bufferp\n"
"buffer)}, as@'{@dotless{i}} el true-or-false-test se ve como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:5845
#, no-wrap
msgid "(not (bufferp buffer))\n"
msgstr "(not (bufferp buffer))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5852
msgid ""
"@code{not} is a function that returns true if its argument is false and "
"false if its argument is true.  So if @code{(bufferp buffer)} returns true, "
"the @code{not} expression returns false and vice-verse: what is ``not true'' "
"is false and what is ``not false'' is true."
msgstr ""
"@code{no} es una funci@'on que devuelve cierto si su argumento es falso\n"
"y falso si su argumento es verdadero. As@'{@dotless{i}} si\n"
"@code{(bufferp buffer)} devuelve cierto, la expresi@'on @code{no}\n"
"devuelve falso y vice-versa: que es ``no cierto'' es falso que es ``no\n"
"falso'' es verdadero."

#. type: Plain text
#: emacs-lisp-intro.texi:5859
msgid ""
"Using this test, the @code{if} expression works as follows: when the value "
"of the variable @code{buffer} is actually a buffer rather than its name, the "
"true-or-false-test returns false and the @code{if} expression does not "
"evaluate the then-part.  This is fine, since we do not need to do anything "
"to the variable @code{buffer} if it really is a buffer."
msgstr ""
"Usando este test, la expresi@'on @code{if} trabaja como sigue: cuando\n"
"el valor de la variable @code{buffer} est@'a actualmente en un\n"
"b@'uffer en vez de su nombre, el test true-or-false-test devuelve\n"
"false y la expresi@'on @code{if} no eval@'ua la parte then-part. Esto\n"
"est@'a bien, desde que no necesita para hacer cualquier cosa para la\n"
"variable @code{buffer} si es realmente un b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5868
msgid ""
"On the other hand, when the value of @code{buffer} is not a buffer itself, "
"but the name of a buffer, the true-or-false-test returns true and the then-"
"part of the expression is evaluated.  In this case, the then-part is "
"@code{(setq buffer (get-buffer buffer))}.  This expression uses the "
"@code{get-buffer} function to return an actual buffer itself, given its "
"name.  The @code{setq} then sets the variable @code{buffer} to the value of "
"the buffer itself, replacing its previous value (which was the name of the "
"buffer)."
msgstr ""
"Por otro lado, cuando el valor de @code{buffer} no es un buffer en\n"
"s@'{@dotless{i}}, pero el nombre de un buffer, el true-or-false-test\n"
"devuelve cierto y la then-part de la expresi@'on es evaluada. En este\n"
"caso, la then-part es @code{(setq buffer (get-buffer buffer))}. Esta\n"
"expresi@'on usa la funci@'on @code{get-buffer} para devolver un buffer\n"
"actual en s@'{@dotless{i}}, dado su nombre. El @code{setq} entonces\n"
"asigna la variable @code{buffer} al valor del buffer en\n"
"s@'{@dotless{i}}, reemplazando su valor previo (que era el nombre del\n"
"buffer)."

#. type: subsection
#: emacs-lisp-intro.texi:5870
#, no-wrap
msgid "The @code{or} in the Body"
msgstr "El @code{or} en el cuerpo"

#. type: Plain text
#: emacs-lisp-intro.texi:5878
msgid ""
"The purpose of the @code{or} expression in the @code{insert-buffer} function "
"is to ensure that the argument @code{buffer} is bound to a buffer and not "
"just to the name of a buffer.  The previous section shows how the job could "
"have been done using an @code{if} expression.  However, the @code{insert-"
"buffer} function actually uses @code{or}.  To understand this, it is "
"necessary to understand how @code{or} works."
msgstr ""
"El prop@'osito de la expresi@'on @code{or} en la funci@'on\n"
"@code{insert-buffer} es asegurar que el argumento @code{buffer} est@'a\n"
"asociado a un b@'uffer y no solo al nombre de un b@'uffer. La secci@'on\n"
"previa muestra como el trabajo podr@'{@dotless{i}}a haber sido hecho\n"
"usando una expresi@'on @code{if}. Sin embargo, la funci@'on\n"
"@code{insert-buffer} actualmente usa @code{or}. Para comprender esto,\n"
"es necesario comprender como @code{or} trabaja."

#. type: exdent
#: emacs-lisp-intro.texi:5879 emacs-lisp-intro.texi:6510
#: emacs-lisp-intro.texi:18087
#, no-wrap
msgid "or"
msgstr "or"

#. type: Plain text
#: emacs-lisp-intro.texi:5885
msgid ""
"An @code{or} function can have any number of arguments.  It evaluates each "
"argument in turn and returns the value of the first of its arguments that is "
"not @code{nil}.  Also, and this is a crucial feature of @code{or}, it does "
"not evaluate any subsequent arguments after returning the first non-"
"@code{nil} value."
msgstr ""
"Una funci@'on @code{or} puede tener cualquier n@'umero de\n"
"argumentos. Eso eval@'ua cada argumento en turno y devuelve el valor\n"
"del primero de sus argumentos que no es @code{nil}. Tambi@'en, y esto\n"
"es una funcionalidad crucial de @code{or}, eso no eval@'ua cualquier\n"
"argumentos subsiguientes despu@'es devolviendo el primer valor\n"
"no-@code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:5888
msgid "The @code{or} expression looks like this:"
msgstr "La expresi@'on @code{or} se ve como esto:"

#. type: group
#: emacs-lisp-intro.texi:5893
#, no-wrap
msgid ""
"(or (bufferp buffer)\n"
"    (setq buffer (get-buffer buffer)))\n"
msgstr ""
"(or (bufferp buffer)\n"
"    (setq buffer (get-buffer buffer)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5904
msgid ""
"The first argument to @code{or} is the expression @code{(bufferp buffer)}.  "
"This expression returns true (a non-@code{nil} value) if the buffer is "
"actually a buffer, and not just the name of a buffer.  In the @code{or} "
"expression, if this is the case, the @code{or} expression returns this true "
"value and does not evaluate the next expression---and this is fine with us, "
"since we do not want to do anything to the value of @code{buffer} if it "
"really is a buffer."
msgstr ""
"El primer argumento a @code{or} es la expresi@'on @code{(bufferp\n"
"buffer)}. Esta expresi@'on devuelve cierto (un valor no-@code{nil}) si\n"
"el b@'uffer es actualmente un b@'uffer, y no solo el nombre de un\n"
"b@'uffer. En la expresi@'on @code{or}, si este es el caso, la\n"
"expresi@'on @code{or} devuelve esto el valor cierto y no eval@'ua la\n"
"siguiente expresi@'on --- y esto es bueno para nosotros, desde que\n"
"nosotros no queremos hacer cualquier cosa al valor de @code{buffer} si\n"
"eso es realmente un b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5912
msgid ""
"On the other hand, if the value of @code{(bufferp buffer)} is @code{nil}, "
"which it will be if the value of @code{buffer} is the name of a buffer, the "
"Lisp interpreter evaluates the next element of the @code{or} expression.  "
"This is the expression @code{(setq buffer (get-buffer buffer))}.  This "
"expression returns a non-@code{nil} value, which is the value to which it "
"sets the variable @code{buffer}---and this value is a buffer itself, not the "
"name of a buffer."
msgstr ""
"Por otro lado, si el valor de @code{(bufferp buffer)} es @code{nil},\n"
"que ser@'a si el valor de @code{buffer} es el nombre de un buffer, el\n"
"int@'erprete Lisp eval@'ua el siguiente elemento de la\n"
"expresi@'on. Esta es la expresi@'on @code{(setq buffer (get-buffer\n"
"buffer))}. Esta expresi@'on devuelve un valor no-@code{nil}, que es el\n"
"valor para el que asigna la variable @code{buffer} --- y este valor es\n"
"un b@'uffer en s@'{@dotless{i}}, no el nombre de un b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5918
msgid ""
"The result of all this is that the symbol @code{buffer} is always bound to a "
"buffer itself rather than to the name of a buffer.  All this is necessary "
"because the @code{set-buffer} function in a following line only works with a "
"buffer itself, not with the name to a buffer."
msgstr ""
"El resultado de todo esto es que el s@'{@dotless{i}}mbolo\n"
"@code{buffer} es siempre asociado a un b@'uffer en s@'{@dotless{i}} en\n"
"vez del nombre de un b@'uffer. Toda es necesario porque la funci@'on\n"
"@code{set-buffer} en una l@'{@dotless{i}}nea siguiente trabaja con un\n"
"buffer en s@'{@dotless{i}}, no con el nombre de un b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:5922
msgid ""
"Incidentally, using @code{or}, the situation with the usher would be written "
"like this:"
msgstr ""
"Incidentalmente, usando @code{or}, la situaci@'on con el acomodador se\n"
"ver@'{@dotless{i}}a as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:5925
#, no-wrap
msgid "(or (holding-on-to-guest) (find-and-take-arm-of-guest))\n"
msgstr "(or (holding-on-to-guest) (find-and-take-arm-of-guest))\n"

#. type: subsection
#: emacs-lisp-intro.texi:5928
#, no-wrap
msgid "The @code{let} Expression in @code{insert-buffer}"
msgstr "La expresi@'on @code{let} en @code{insert-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:5937
msgid ""
"After ensuring that the variable @code{buffer} refers to a buffer itself and "
"not just to the name of a buffer, the @code{insert-buffer function} "
"continues with a @code{let} expression.  This specifies three local "
"variables, @code{start}, @code{end}, and @code{newmark} and binds them to "
"the initial value @code{nil}.  These variables are used inside the remainder "
"of the @code{let} and temporarily hide any other occurrence of variables of "
"the same name in Emacs until the end of the @code{let}."
msgstr ""
"Despu@'es asegurando que la variable @code{buffer} se refiere a un\n"
"buffer en s@'{@dotless{i}} y no solo al nombre de un buffer, la\n"
"funci@'on @code{insert-buffer} contin@'ua con una expresi@'on\n"
"@code{let}. Esto especifica tres variables locales, @code{start},\n"
"@code{end} y @code{newmark} y los asocia al valor inicial\n"
"@code{nil}. Estas variables son usadas dentro del resto de @code{let}\n"
"y temporalmente se oculta con cualquier otra ocurrencia de variables\n"
"del mismo nombre en Emacs hasta el fin del @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:5942
msgid ""
"The body of the @code{let} contains two @code{save-excursion} expressions.  "
"First, we will look at the inner @code{save-excursion} expression in "
"detail.  The expression looks like this:"
msgstr ""
"El cuerpo del @code{let} contiene dos expresiones\n"
"@code{save-excursion}. Primero, miraremos la expresi@'on\n"
"@code{save-excursion} en detalle. La expresi@'on se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:5948
#, no-wrap
msgid ""
"(save-excursion\n"
"  (set-buffer buffer)\n"
"  (setq start (point-min) end (point-max)))\n"
msgstr ""
"(save-excursion\n"
"  (set-buffer buffer)\n"
"  (setq start (point-min) end (point-max)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5961
msgid ""
"The expression @code{(set-buffer buffer)} changes Emacs's attention from the "
"current buffer to the one from which the text will copied.  In that buffer, "
"the variables @code{start} and @code{end} are set to the beginning and end "
"of the buffer, using the commands @code{point-min} and @code{point-max}.  "
"Note that we have here an illustration of how @code{setq} is able to set two "
"variables in the same expression.  The first argument of @code{setq} is set "
"to the value of its second, and its third argument is set to the value of "
"its fourth."
msgstr ""
"La expresi@'on @code{(set-buffer buffer)} cambia la atenci@'on de\n"
"Emacs desde el b@'uffer actual a uno desde el que el texto ser@'a\n"
"copiado. En este b@'uffer las variables @code{start} y @code{end} se\n"
"asignadan al principio y al fin del b@'uffer, usando los comandos\n"
"@code{point-min} y @code{point-max}. Note que tenemos\n"
"aqu@'{@dotless{i}} una ilustraci@'on de c@'omo @code{setq} es capaz de\n"
"asignar dos variables en la misma expresi@'on. El primer argumento de\n"
"@code{setq} es asignar al valor del segundo, y su tercer argumento\n"
"est@'a asignado al valor del cuarto."

#. type: Plain text
#: emacs-lisp-intro.texi:5966
msgid ""
"After the body of the inner @code{save-excursion} is evaluated, the "
"@code{save-excursion} restores the original buffer, but @code{start} and "
"@code{end} remain set to the values of the beginning and end of the buffer "
"from which the text will be copied."
msgstr ""
"Despu@'es el cuerpo del @code{save-excursion} propio es evaluado, el\n"
"@code{save-excursion} restaura el b@'uffer original, pero @code{start}\n"
"y @code{end} permanece asignado a los valores del principio y fin del\n"
"b@'uffer en el que el texto ser@'a copiado."

#. type: Plain text
#: emacs-lisp-intro.texi:5969
msgid "The outer @code{save-excursion} expression looks like this:"
msgstr "La expresi@'on por fuera @code{save-excursion} se ve como:"

#. type: group
#: emacs-lisp-intro.texi:5977
#, no-wrap
msgid ""
"(save-excursion\n"
"  (@var{inner-}@code{save-excursion}@var{-expression}\n"
"     (@var{go-to-new-buffer-and-set-}@code{start}@var{-and-}@code{end})\n"
"  (insert-buffer-substring buffer start end)\n"
"  (setq newmark (point)))\n"
msgstr ""
"(save-excursion\n"
"  (@var{inner-}@code{save-excursion}@var{-expression}\n"
"     (@var{go-to-new-buffer-and-set-}@code{start}@var{-and-}@code{end})\n"
"  (insert-buffer-substring buffer start end)\n"
"  (setq newmark (point)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:5988
msgid ""
"The @code{insert-buffer-substring} function copies the text @emph{into} the "
"current buffer @emph{from} the region indicated by @code{start} and "
"@code{end} in @code{buffer}.  Since the whole of the second buffer lies "
"between @code{start} and @code{end}, the whole of the second buffer is "
"copied into the buffer you are editing.  Next, the value of point, which "
"will be at the end of the inserted text, is recorded in the variable "
"@code{newmark}."
msgstr ""
"La funci@'on @code{insert-buffer-substring} copia el texto\n"
"@emph{dento} del b@'uffer @emph{desde} la regi@'on indicada por\n"
"@code{start} y @code{end} en el @code{b@'uffer}. Desde el total del\n"
"segundo b@'uffer cae entre @code{start} y @code{end}, el todo del\n"
"segundo b@'uffer es copiado dentro del b@'uffer que est@'as\n"
"editando. Lo siguiente, el valor del punto, que ser@'a al fin del\n"
"texto insertado, es grabado en la variable @code{newmark}."

#. type: Plain text
#: emacs-lisp-intro.texi:5991
msgid ""
"After the body of the outer @code{save-excursion} is evaluated, point and "
"mark are relocated to their original places."
msgstr ""
"Despu@'es el cuerpo de @code{save-excursion} es evaluado, punto y\n"
"marca son recolocados a sus lugares originales."

#. type: Plain text
#: emacs-lisp-intro.texi:6002
msgid ""
"However, it is convenient to locate a mark at the end of the newly inserted "
"text and locate point at its beginning.  The @code{newmark} variable records "
"the end of the inserted text.  In the last line of the @code{let} "
"expression, the @code{(push-mark newmark)} expression function sets a mark "
"to this location.  (The previous location of the mark is still accessible; "
"it is recorded on the mark ring and you can go back to it with @kbd{C-u C-"
"@key{SPC}}.)  Meanwhile, point is located at the beginning of the inserted "
"text, which is where it was before you called the insert function, the "
"position of which was saved by the first @code{save-excursion}."
msgstr ""
"Sin embargo, es conveniente localizar una marca al fin del texto\n"
"nuevamente insertado y localizar el punto al principio. La variable\n"
"@code{newmark} graba el fin del texto insertado. En la @'ultima\n"
"l@'{@dotless{i}}nea de la expresi@'on @code{let}, la expresi@'on de la\n"
"funci@'on @code{(push-mark newmark)} asigna una marca a esta\n"
"posici@'on. (La posici@'on previa de la marca est@'a\n"
"todav@'{@dotless{i}}a accesible; est@'a grabado en la marca del anillo\n"
"y se puede regresar a eso con @kbd{C-u C-@key{SPC}}.) Mientras tanto,\n"
"el punto est@'a localizado al principio del texto insertado, que\n"
"est@'a donde estaba antes de ser llamado la funci@'on que inserta, la\n"
"posici@'on de lo que estaba guardado por la primera @code{save-excursion}."

#. type: Plain text
#: emacs-lisp-intro.texi:6005
msgid "The whole @code{let} expression looks like this:"
msgstr "La expresi@'on @code{let} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:6016
#, no-wrap
msgid ""
"(let (start end newmark)\n"
"  (save-excursion\n"
"    (save-excursion\n"
"      (set-buffer buffer)\n"
"      (setq start (point-min) end (point-max)))\n"
"    (insert-buffer-substring buffer start end)\n"
"    (setq newmark (point)))\n"
"  (push-mark newmark))\n"
msgstr ""
"(let (start end newmark)\n"
"  (save-excursion\n"
"    (save-excursion\n"
"      (set-buffer buffer)\n"
"      (setq start (point-min) end (point-max)))\n"
"    (insert-buffer-substring buffer start end)\n"
"    (setq newmark (point)))\n"
"  (push-mark newmark))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6024
msgid ""
"Like the @code{append-to-buffer} function, the @code{insert-buffer} function "
"uses @code{let}, @code{save-excursion}, and @code{set-buffer}.  In addition, "
"the function illustrates one way to use @code{or}.  All these functions are "
"building blocks that we will find and use again and again."
msgstr ""
"Como la funci@'on @code{append-to-buffer}, la funci@'on\n"
"@code{insert-buffer} usa @code{let}, @code{save-excursion} y\n"
"@code{set-buffer}. Adem@'as, la funci@'on ilustra un camino para usar\n"
"@code{o}. Toda estas funciones est@'an construyendo el bloque que\n"
"se encontrar@'an y usar@'an una y otra vez."

#. type: subsection
#: emacs-lisp-intro.texi:6026
#, no-wrap
msgid "New Body for @code{insert-buffer}"
msgstr "Nuevo cuerpo para @code{insert-buffer}"

#. type: findex
#: emacs-lisp-intro.texi:6027
#, no-wrap
msgid "insert-buffer, new version body"
msgstr "insert-buffer, nueva versi@'on del cuerpo"

#. type: findex
#: emacs-lisp-intro.texi:6028
#, no-wrap
msgid "new version body for insert-buffer"
msgstr "nueva versi@'on cuerpo para insert-buffer"

#. type: Plain text
#: emacs-lisp-intro.texi:6031
msgid ""
"The body in the GNU Emacs 22 version is more confusing than the original."
msgstr ""
"El cuerpo en la versi@'on de GNU Emacs 22 es m@'as confuso que en el "
"original."

#. type: Plain text
#: emacs-lisp-intro.texi:6034
msgid "It consists of two expressions,"
msgstr "Consiste de dos expresiones"

#. type: group
#: emacs-lisp-intro.texi:6041
#, no-wrap
msgid ""
"  (push-mark\n"
"   (save-excursion\n"
"     (insert-buffer-substring (get-buffer buffer))\n"
"     (point)))\n"
"\n"
msgstr ""
"  (push-mark\n"
"   (save-excursion\n"
"     (insert-buffer-substring (get-buffer buffer))\n"
"     (point)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:6043
#, no-wrap
msgid "   nil\n"
msgstr "   nil\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6049
msgid ""
"except, and this is what confuses novices, very important work is done "
"inside the @code{push-mark} expression."
msgstr ""
"excepto, y esto es lo que los novicios confunden, un trabajo muy\n"
"importante es hecho dentro de la expresi@'on @code{push-mark}."

#. type: Plain text
#: emacs-lisp-intro.texi:6056
msgid ""
"The @code{get-buffer} function returns a buffer with the name provided.  You "
"will note that the function is @emph{not} called @code{get-buffer-create}; "
"it does not create a buffer if one does not already exist.  The buffer "
"returned by @code{get-buffer}, an existing buffer, is passed to @code{insert-"
"buffer-substring}, which inserts the whole of the buffer (since you did not "
"specify anything else)."
msgstr ""
"La funci@'on @code{get-buffer} devuelve un b@'uffer con el nombre\n"
"proporcionado. Se tomar@'a nota de que la funci@'on @emph{no} se\n"
"llama @code{get-buffer-create}; eso no crea un b@'uffer si uno no\n"
"existe ya. El b@'uffer devuelto por @code{get-buffer}, un b@'uffer\n"
"existente, es pasado a @code{insert-buffer-substring}, que inserta el\n"
"total del b@'uffer (desde que no se especific@'on ninguna cosa\n"
"m@'as)."

#. type: Plain text
#: emacs-lisp-intro.texi:6062
msgid ""
"The location into which the buffer is inserted is recorded by @code{push-"
"mark}.  Then the function returns @code{nil}, the value of its last "
"command.  Put another way, the @code{insert-buffer} function exists only to "
"produce a side effect, inserting another buffer, not to return any value."
msgstr ""
"La posici@'on dentro del buffer es insertado es grabado por\n"
"@code{push-mark}. Entonces la funci@'on devuelve @code{nil}, el valor\n"
"de su @'ultimo comando. Pon otro camino, la funci@'on\n"
"@code{insert-buffer} existe solo para producir un efecto lateral,\n"
"insertando otro buffer, no para devolver cualquier valor."

#. type: Plain text
#: emacs-lisp-intro.texi:6071
msgid ""
"The basic structure of the @code{beginning-of-buffer} function has already "
"been discussed.  (@xref{simplified-beginning-of-buffer, , A Simplified "
"@code{beginning-of-buffer} Definition}.)  This section describes the complex "
"part of the definition."
msgstr ""
"La estructura b@'asica de la funci@'on @code{beginning-of-buffer} ya\n"
"ha sido discutida. (@xref{simplified-beginning-of-buffer, , Una\n"
"Definici@'on Simplificada @code{beginning-of-buffer}}). Esta secci@'on\n"
"describe la parte compleja de la definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:6085
msgid ""
"As previously described, when invoked without an argument, @code{beginning-"
"of-buffer} moves the cursor to the beginning of the buffer (in truth, the "
"beginning of the accessible portion of the buffer), leaving the mark at the "
"previous position.  However, when the command is invoked with a number "
"between one and ten, the function considers that number to be a fraction of "
"the length of the buffer, measured in tenths, and Emacs moves the cursor "
"that fraction of the way from the beginning of the buffer.  Thus, you can "
"either call this function with the key command @kbd{M-<}, which will move "
"the cursor to the beginning of the buffer, or with a key command such as "
"@kbd{C-u 7 M-<} which will move the cursor to a point 70% of the way through "
"the buffer.  If a number bigger than ten is used for the argument, it moves "
"to the end of the buffer."
msgstr ""
"Como se describe previamente, cuando se invoca sin un argumento,\n"
"@code{beginning-of-buffer} mueve el cursor al principio del b@'uffer\n"
"(en realidad, al principio de la porci@'on accesible del b@'uffer),\n"
"dejando la marca en la posici@'on previa. Sin embargo, cuando el\n"
"comando es invocado con un n@'umero entre uno y diez, la funci@'on\n"
"considera que n@'umero ser@'a una fracci@'on del tama@~no del\n"
"b@'uffer, medido en decenas, y Emacs mueve el cursor en esta\n"
"fracci@'on del camino desde el principio del b@'uffer. De este modo,\n"
"se puede o bien llamar a esta funci@'on con la tecla comando @kbd{M-<},\n"
"que mover@'a el cursor al principio del b@'uffer, o con una tecla tal\n"
"como @kbd{C-u 7 M-<} que mover@'a el cursor a un punto 70% del camino\n"
"a trav@'es del b@'uffer. Si un n@'umero m@'as grande de diez es usado\n"
"para el argumento que se mueve al final del b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:6088
msgid ""
"The @code{beginning-of-buffer} function can be called with or without an "
"argument.  The use of the argument is optional."
msgstr ""
"La funci@'on @code{beginning-of-buffer} puede ser llamada con o sin\n"
"argumentos. El uso del argumento es opcional."

#. type: subsection
#: emacs-lisp-intro.texi:6095 emacs-lisp-intro.texi:6096
#, no-wrap
msgid "Optional Arguments"
msgstr "Argumentos opcionales"

#. type: Plain text
#: emacs-lisp-intro.texi:6102
msgid ""
"Unless told otherwise, Lisp expects that a function with an argument in its "
"function definition will be called with a value for that argument.  If that "
"does not happen, you get an error and a message that says @samp{Wrong number "
"of arguments}."
msgstr ""
"A menos que se cuente de otro modo, Lisp espera que una funci@'on con\n"
"un argumento en su definici@'on de funci@'on se llame con un valor\n"
"para este argumento. Si esto no ocurre, se obtiene un error y un\n"
"mensaje que dice @samp{N@'umero de argumentos err@'oneo}."

#. type: cindex
#: emacs-lisp-intro.texi:6103
#, no-wrap
msgid "Optional arguments"
msgstr "Argumentos Opcionales"

#. type: cindex
#: emacs-lisp-intro.texi:6104
#, no-wrap
msgid "Keyword"
msgstr "Palabra Clave"

#. type: findex
#: emacs-lisp-intro.texi:6105
#, no-wrap
msgid "optional"
msgstr "opcional"

#. type: Plain text
#: emacs-lisp-intro.texi:6112
msgid ""
"However, optional arguments are a feature of Lisp: a particular "
"@dfn{keyword} is used to tell the Lisp interpreter that an argument is "
"optional.  The keyword is @code{&optional}.  (The @samp{&} in front of "
"@samp{optional} is part of the keyword.)  In a function definition, if an "
"argument follows the keyword @code{&optional}, no value need be passed to "
"that argument when the function is called."
msgstr ""
"Sin embargo, los argumentos opcionales son una funcionalidad de Lisp:\n"
"una @dfn{palabra clave} particular es usada para contar al\n"
"int@'erprete Lisp que un argumento es opcional. La palabra clave es\n"
"@code{&optional}. (El @samp{&} en frente de @samp{opcional} es parte\n"
"de la palabra clave.) En una definici@'on de funci@'on, si un\n"
"argumento sigue a la palabra clave @code{&optional}, ning@'un valor\n"
"necesita ser pasado a este argumento cuando la funci@'on se llama."

#. type: Plain text
#: emacs-lisp-intro.texi:6116
msgid ""
"The first line of the function definition of @code{beginning-of-buffer} "
"therefore looks like this:"
msgstr ""
"La primera l@'{@dotless{i}}nea de la definici@'on de funci@'on de\n"
"@code{beginning-of-buffer} tiene lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:6119
#, no-wrap
msgid "(defun beginning-of-buffer (&optional arg)\n"
msgstr "(defun beginning-of-buffer (&optional arg)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6123
msgid "In outline, the whole function looks like this:"
msgstr "En el \"outline\" (esquema), la funci@'on completa se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:6139
#, no-wrap
msgid ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"P\")\n"
"  (or (@var{is-the-argument-a-cons-cell} arg)\n"
"      (and @var{are-both-transient-mark-mode-and-mark-active-true})\n"
"      (push-mark))\n"
"  (let (@var{determine-size-and-set-it})\n"
"  (goto-char\n"
"    (@var{if-there-is-an-argument}\n"
"        @var{figure-out-where-to-go}\n"
"      @var{else-go-to}\n"
"      (point-min))))\n"
"   @var{do-nicety}\n"
msgstr ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"P\")\n"
"  (or (@var{is-the-argument-a-cons-cell} arg)\n"
"      (and @var{are-both-transient-mark-mode-and-mark-active-true})\n"
"      (push-mark))\n"
"  (let (@var{determine-size-and-set-it})\n"
"  (goto-char\n"
"    (@var{if-there-is-an-argument}\n"
"        @var{figure-out-where-to-go}\n"
"      @var{else-go-to}\n"
"      (point-min))))\n"
"   @var{do-nicety}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6147
msgid ""
"The function is similar to the @code{simplified-beginning-of-buffer} "
"function except that the @code{interactive} expression has @code{\"P\"} as "
"an argument and the @code{goto-char} function is followed by an if-then-else "
"expression that figures out where to put the cursor if there is an argument "
"that is not a cons cell."
msgstr ""
"La funci@'on es similar a la funci@'on\n"
"@code{simplified-beginning-of-buffer} excepto que la expresi@'on\n"
"@code{interactive} tiene @code{\"P\"} como un argumento y la funci@'on\n"
"@code{goto-char} es seguida por una expresi@'on if-then-else que\n"
"figura donde poner el cursor si hay un argumento que no es un cons cell."

#. type: Plain text
#: emacs-lisp-intro.texi:6153
msgid ""
"(Since I do not explain a cons cell for many more chapters, please consider "
"ignoring the function @code{consp}.  @xref{List Implementation, , How Lists "
"are Implemented}, and @ref{Cons Cell Type, , Cons Cell and List Types, "
"elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"(Puesto que no se explica un cons cell en muchos\n"
"cap@'{@dotless{i}}tulos, por favor, considere ignorar la funci@'on\n"
"@code{consp}. @ref{Implementaci@'on de listas, , C@'omo las Listas son\n"
"Implementadas}, y @ref{Tipo de Cons Cell, , Cons Cell y Tipos de\n"
"Listas, elisp, El Manual de Referencia GNU Emacs Lisp})."

#. type: Plain text
#: emacs-lisp-intro.texi:6161
msgid ""
"The @code{\"P\"} in the @code{interactive} expression tells Emacs to pass a "
"prefix argument, if there is one, to the function in raw form.  A prefix "
"argument is made by typing the @key{META} key followed by a number, or by "
"typing @kbd{C-u} and then a number.  (If you don't type a number, @kbd{C-u} "
"defaults to a cons cell with a 4.  A lowercase @code{\"p\"} in the "
"@code{interactive} expression causes the function to convert a prefix arg to "
"a number.)"
msgstr ""
"El @code{\"P\"} en la expresi@'on @code{interactive} cuenta a Emacs\n"
"c@'omo pasar un argumento prefijo, si hay uno, a la funci@'on en forma\n"
"plana. Un argumento prefijo se crea escribiendo la tecla @key{META}\n"
"seguida por un n@'umero, o escribiendo @kbd{C-u} y entonces un\n"
"n@'umero. (Si no escribes un n@'umero, @kbd{C-u} por defecto a un cons\n"
"cell con un 4. Una min@'uscula @code{\"p\"} en la expresi@'on\n"
"@code{interactive} causa a la funci@'on convertir un argumento prefijo\n"
"a un n@'umero.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6177
msgid ""
"The true-or-false-test of the @code{if} expression looks complex, but it is "
"not: it checks whether @code{arg} has a value that is not @code{nil} and "
"whether it is a cons cell.  (That is what @code{consp} does; it checks "
"whether its argument is a cons cell.)  If @code{arg} has a value that is not "
"@code{nil} (and is not a cons cell), which will be the case if "
"@code{beginning-of-buffer} is called with a numeric argument, then this true-"
"or-false-test will return true and the then-part of the @code{if} expression "
"will be evaluated.  On the other hand, if @code{beginning-of-buffer} is not "
"called with an argument, the value of @code{arg} will be @code{nil} and the "
"else-part of the @code{if} expression will be evaluated.  The else-part is "
"simply @code{point-min}, and when this is the outcome, the whole @code{goto-"
"char} expression is @code{(goto-char (point-min))}, which is how we saw the "
"@code{beginning-of-buffer} function in its simplified form."
msgstr ""
"El true-or-false-test de la expresi@'on @code{if} se ve compleja, pero\n"
"no lo es: se chequea si @code{arg} tiene un valor que no es @code{nil}\n"
"y si es un cons cell. (Esto es lo que @code{consp} hace; chequea si su\n"
"argumento es un cons cell.) Si @code{arg} tiene un valor que no es\n"
"@code{nil} (y no es un cons cell.), que ser@'a el caso si\n"
"@code{beginning-of-buffer} se llama con un argumento, entonces este\n"
"true-or-false-test devolver@'a cierto y la then-part de la expresi@'on\n"
"@code{if} falsa. Por otro lado, si @code{beginning-of-bufer} no se\n"
"llama con un argumento, el valor de @code{arg} ser@'a @code{nil} y la\n"
"else-part de la expresi@'on @code{if} se evaluar@'a. La else-part es\n"
"simple @code{point-min}, y esto es lo de fuera, la expresi@'on\n"
"@code{goto-char} es @code{(goto-char (point-min))}, que es c@'omo se\n"
"vi@'o la funci@'on @code{beginning-of-buffer} en su forma\n"
"simplificada."

#. type: Plain text
#: emacs-lisp-intro.texi:6186
msgid ""
"When @code{beginning-of-buffer} is called with an argument, an expression is "
"evaluated which calculates what value to pass to @code{goto-char}.  This "
"expression is rather complicated at first sight.  It includes an inner "
"@code{if} expression and much arithmetic.  It looks like this:"
msgstr ""
"Cuando @code{beginning-of-buffer} se llama con un argumento, una\n"
"expresi@'on es evaluada que calcula que valor pasa a\n"
"@code{goto-char}. Esto es incluso complicado a primera vista. Eso\n"
"incluye una expresi@'on @code{if} propia y mucha aritm@'etica. Se ve\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:6197
#, no-wrap
msgid ""
"(if (> (buffer-size) 10000)\n"
"    ;; @r{Avoid overflow for large buffer sizes!}\n"
"                          (* (prefix-numeric-value arg)\n"
"                             (/ size 10))\n"
"  (/\n"
"   (+ 10\n"
"      (*\n"
"       size (prefix-numeric-value arg))) 10)))\n"
msgstr ""
"(if (> (buffer-size) 10000)\n"
"    ;; @r{@exclamdown{}Evitar sobrecarga para grandes tama@~nos de b@'uffer!}\n"
"                          (* (prefix-numeric-value arg)\n"
"                             (/ size 10))\n"
"  (/\n"
"   (+ 10\n"
"      (*\n"
"       size (prefix-numeric-value arg))) 10)))\n"

#. type: node
#: emacs-lisp-intro.texi:6207
#, no-wrap
msgid "Disentangle beginning-of-buffer"
msgstr "Desenmara@~nar beginning-of-buffer"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:6208
#, no-wrap
msgid "Disentangle @code{beginning-of-buffer}"
msgstr "Desenmara@~nar @code{beginning-of-buffer}"

#. type: Plain text
#: emacs-lisp-intro.texi:6215
msgid ""
"Like other complex-looking expressions, the conditional expression within "
"@code{beginning-of-buffer} can be disentangled by looking at it as parts of "
"a template, in this case, the template for an if-then-else expression.  In "
"skeletal form, the expression looks like this:"
msgstr ""
"Como otras expresiones que se ven complejas, la expresi@'on\n"
"condicional con @code{beginning-of-buffer} puede ser desenredada\n"
"mir@'andola por partes de una plantilla, en este caso, la plantilla\n"
"par una expresi@'on if-then-else. En forma esquel@'etica, la\n"
"expresi@'on se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:6221
#, no-wrap
msgid ""
"(if (@var{buffer-is-large}\n"
"    @var{divide-buffer-size-by-10-and-multiply-by-arg}\n"
"  @var{else-use-alternate-calculation}\n"
msgstr ""
"(if (@var{buffer-is-large}\n"
"    @var{divide-buffer-size-by-10-and-multiply-by-arg}\n"
"  @var{else-use-alternate-calculation}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6233
msgid ""
"The true-or-false-test of this inner @code{if} expression checks the size of "
"the buffer.  The reason for this is that the old version 18 Emacs used "
"numbers that are no bigger than eight million or so and in the computation "
"that followed, the programmer feared that Emacs might try to use over-large "
"numbers if the buffer were large.  The term `overflow', mentioned in the "
"comment, means numbers that are over large.  More recent versions of Emacs "
"use larger numbers, but this code has not been touched, if only because "
"people now look at buffers that are far, far larger than ever before."
msgstr ""
"El true-or-fase-test de esta expresi@'on @code{if} propia chequea el\n"
"tama@~no del buffer. La raz@'on para esto es que la versi@'on vieja de\n"
"Emacs 18 usaba n@'umeros que no son m@'as grandes que 8 millones o\n"
"as@'{@dotless{i}} y en la computaci@'on que segu@'{@dotless{i}}a, el\n"
"programador tem@'{@dotless{i}}a que Emacs podr@'{@dotless{i}}a\n"
"intentar usar a trav@'es de largos n@'umeros si el b@'uffer fuera\n"
"largo. El t@'ermino `sobrecarga', que se mencion@'o en el comentario,\n"
"significa que los n@'umeros son grandes. Las versiones m@'as recientes\n"
"de Emacs usan n@'umeros largos, pero este c@'odigo no ha sido tocado,\n"
"solo porque la gente ahora mira en b@'uffers que est@'an lejos, tan\n"
"lejos como antes."

#. type: Plain text
#: emacs-lisp-intro.texi:6235
msgid "There are two cases: if the buffer is large and if it is not."
msgstr "Hay dos casos: si el b@'uffer es largo, o si no."

#. type: node
#: emacs-lisp-intro.texi:6236
#, no-wrap
msgid "Large buffer case"
msgstr "El caso del buffer largo"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:6237
#, no-wrap
msgid "What happens in a large buffer"
msgstr "Qu@'e ocurre en un b@'uffer largo"

#. type: Plain text
#: emacs-lisp-intro.texi:6243
msgid ""
"In @code{beginning-of-buffer}, the inner @code{if} expression tests whether "
"the size of the buffer is greater than 10,000 characters.  To do this, it "
"uses the @code{>} function and the computation of @code{size} that comes "
"from the let expression."
msgstr ""
"En @code{beginning-of-buffer}, la expresi@'on propia @code{if} chequea\n"
"si el tama@~no del b@'uffer es mayor que 10000 caracteres. Para hacer\n"
"esto, se usa la funci@'on @code{>} y la computaci@'on de @code{size}\n"
"que viene desde la expresi@'on let."

#. type: Plain text
#: emacs-lisp-intro.texi:6250
msgid ""
"In the old days, the function @code{buffer-size} was used.  Not only was "
"that function called several times, it gave the size of the whole buffer, "
"not the accessible part.  The computation makes much more sense when it "
"handles just the accessible part.  (@xref{Narrowing & Widening, , Narrowing "
"and Widening}, for more information on focusing attention to an `accessible' "
"part.)"
msgstr ""
"Hace tiempo, se usaba la funci@'on @code{buffer-size}. No solo esta\n"
"funci@'on era llamada varias veces, eso daba el tama@~no del b@'uffer\n"
"completo, no la parte accesible. La computaci@'on tiene mucho m@'as\n"
"sentido cuando se maneja solo la parte accesible. (@xref{Encogiendo y\n"
"extendiendo, , Encogiendo y extendiendo}, para m@'as informaci@'on en\n"
"focalizar la atenci@'on para una parte `accesible'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6253
msgid "The line looks like this:"
msgstr "La l@'{@dotless{i}}nea se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:6256
#, no-wrap
msgid "(if (> size 10000)\n"
msgstr "(if (> size 10000)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6262
msgid ""
"When the buffer is large, the then-part of the @code{if} expression is "
"evaluated.  It reads like this (after formatting for easy reading):"
msgstr ""
"Cuando el b@'uffer es largo, el then-part de la expresi@'on @code{if}\n"
"se eval@'ua. Eso se lee as@'{@dotless{i}} (despu@'es de ser formateado\n"
"para una f@'acil lectura):"

#. type: group
#: emacs-lisp-intro.texi:6268
#, no-wrap
msgid ""
"(*\n"
"  (prefix-numeric-value arg)\n"
"  (/ size 10))\n"
msgstr ""
"(*\n"
"  (prefix-numeric-value arg)\n"
"  (/ size 10))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6274
msgid ""
"This expression is a multiplication, with two arguments to the function "
"@code{*}."
msgstr ""
"Esta expresi@'on es una multiplicaci@'on, con dos argumentos para la\n"
"funci@'on @code{*}."

#. type: Plain text
#: emacs-lisp-intro.texi:6281
msgid ""
"The first argument is @code{(prefix-numeric-value arg)}.  When @code{\"P\"} "
"is used as the argument for @code{interactive}, the value passed to the "
"function as its argument is passed a ``raw prefix argument'', and not a "
"number.  (It is a number in a list.)  To perform the arithmetic, a "
"conversion is necessary, and @code{prefix-numeric-value} does the job."
msgstr ""
"El primer argumento es @code{(prefix-numeric-value arg)}. Cuando\n"
"@code{\"P\"} se usa como argumento para @code{interactive}, el valor\n"
"pasado para la funci@'on como argumento es un ``argumento prefijo\n"
"crudo'', y no un n@'umero. (Es un n@'umero en una lista). Para\n"
"desarrollar la aritm@'etica, una conversi@'on es necesaria, y\n"
"@code{prefix-numeric-value} hace el trabajo."

#. type: findex
#: emacs-lisp-intro.texi:6282
#, no-wrap
msgid "/ @r{(division)}"
msgstr "/ @r{(division)}"

#. type: cindex
#: emacs-lisp-intro.texi:6283
#, no-wrap
msgid "Division"
msgstr "Divisi@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:6290
msgid ""
"The second argument is @code{(/ size 10)}.  This expression divides the "
"numeric value by ten---the numeric value of the size of the accessible "
"portion of the buffer.  This produces a number that tells how many "
"characters make up one tenth of the buffer size.  (In Lisp, @code{/} is used "
"for division, just as @code{*} is used for multiplication.)"
msgstr ""
"El segundo argumento es @code{(/ size 10)}. Esta expresi@'on divide el\n"
"valor num@'erico por diez --- el valor num@'erico del tama@~no de la\n"
"porci@'on accesible del b@'uffer. Esto produce un n@'umero que cuenta\n"
"cu@'antos caracteres crean una decena del tama@~no del b@'uffer. (En Lisp,\n"
"@code{/} es usado para divisi@'on, solo como @code{*} es usado para\n"
"multiplicaci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6294
msgid ""
"In the multiplication expression as a whole, this amount is multiplied by "
"the value of the prefix argument---the multiplication looks like this:"
msgstr ""
"En la expresi@'on de la multiplicaci@'on como un todo, esta cantidad\n"
"se multiplica por el valor del argumento prefijo --- la\n"
"multiplicaci@'on se parece a:"

#. type: group
#: emacs-lisp-intro.texi:6299
#, no-wrap
msgid ""
"(* @var{numeric-value-of-prefix-arg}\n"
"   @var{number-of-characters-in-one-tenth-of-the-accessible-buffer})\n"
msgstr ""
"(* @var{numeric-value-of-prefix-arg}\n"
"   @var{number-of-characters-in-one-tenth-of-the-accessible-buffer})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6305
msgid ""
"If, for example, the prefix argument is @samp{7}, the one-tenth value will "
"be multiplied by 7 to give a position 70% of the way through."
msgstr ""
"Si, por ejemplo, el argumento prefijo es @samp{7}, el valor one-tenth\n"
"ser@'a multiplicado por 7 para dar una posici@'on del 70% del camino."

#. type: Plain text
#: emacs-lisp-intro.texi:6309
msgid ""
"The result of all this is that if the accessible portion of the buffer is "
"large, the @code{goto-char} expression reads like this:"
msgstr ""
"El resultado de todo esto es que si la porci@'on accesible del b@'uffer\n"
"es largo, la expresi@'on @code{goto-char} se lee esto:"

#. type: group
#: emacs-lisp-intro.texi:6314
#, no-wrap
msgid ""
"(goto-char (* (prefix-numeric-value arg)\n"
"              (/ size 10)))\n"
msgstr ""
"(goto-char (* (prefix-numeric-value arg)\n"
"              (/ size 10)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6318
msgid "This puts the cursor where we want it."
msgstr "Esto pone el cursor donde se quiere."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:6320
#, no-wrap
msgid "What happens in a small buffer"
msgstr "Qu@'e ocurre en un b@'uffer peque@~no"

#. type: Plain text
#: emacs-lisp-intro.texi:6327
msgid ""
"If the buffer contains fewer than 10,000 characters, a slightly different "
"computation is performed.  You might think this is not necessary, since the "
"first computation could do the job.  However, in a small buffer, the first "
"method may not put the cursor on exactly the desired line; the second method "
"does a better job."
msgstr ""
"Si el b@'uffer contiene poco m@'as de 10000 caracteres, una\n"
"computaci@'on ligeramente diferente es medida. Se podr@'{@dotless{i}}a\n"
"pensar que esto no es necesario, desde que la primera computaci@'on\n"
"podr@'{@dotless{i}}a hacer el trabajo. Sin embargo, en un b@'uffer\n"
"peque@~no, el primer m@'etodo puede no poner el cursor en la\n"
"l@'{@dotless{i}}nea exactamente deseada; el segundo m@'etodo hace un\n"
"trabajo mejor."

#. type: Plain text
#: emacs-lisp-intro.texi:6330 emacs-lisp-intro.texi:14844
#: emacs-lisp-intro.texi:19326 emacs-lisp-intro.texi:19466
#: emacs-lisp-intro.texi:20329
msgid "The code looks like this:"
msgstr "El c@'odigo se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:6334
#, no-wrap
msgid "(/ (+ 10 (* size (prefix-numeric-value arg))) 10))\n"
msgstr "(/ (+ 10 (* size (prefix-numeric-value arg))) 10))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6342
msgid ""
"This is code in which you figure out what happens by discovering how the "
"functions are embedded in parentheses.  It is easier to read if you reformat "
"it with each expression indented more deeply than its enclosing expression:"
msgstr ""
"Este es el c@'odigo en el que se ve qu@'e ocurre descubriendo como las\n"
"funciones se embeben entre par@'entesis. Eso es f@'acil de leer si se\n"
"reformatea con cada expresi@'on indentada m@'as profundamente que la\n"
"expresi@'on que encierra:"

#. type: group
#: emacs-lisp-intro.texi:6351
#, no-wrap
msgid ""
"  (/\n"
"   (+ 10\n"
"      (*\n"
"       size\n"
"       (prefix-numeric-value arg)))\n"
"   10))\n"
msgstr ""
"  (/\n"
"   (+ 10\n"
"      (*\n"
"       size\n"
"       (prefix-numeric-value arg)))\n"
"   10))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6360
msgid ""
"Looking at parentheses, we see that the innermost operation is @code{(prefix-"
"numeric-value arg)}, which converts the raw argument to a number.  In the "
"following expression, this number is multiplied by the size of the "
"accessible portion of the buffer:"
msgstr ""
"Mirando los par@'entesis, se ve que la operaci@'on propia es\n"
"@code{(prefix-numeric-value arg)}, que convierte el argumento plano\n"
"para un n@'umero. En la siguiente expresi@'on, este n@'umero es\n"
"multiplicado por el tama@~no de la porci@'on accesible del b@'uffer:"

#. type: smallexample
#: emacs-lisp-intro.texi:6363
#, no-wrap
msgid "(* size (prefix-numeric-value arg))\n"
msgstr "(* size (prefix-numeric-value arg))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6371
msgid ""
"This multiplication creates a number that may be larger than the size of the "
"buffer---seven times larger if the argument is 7, for example.  Ten is then "
"added to this number and finally the large number is divided by ten to "
"provide a value that is one character larger than the percentage position in "
"the buffer."
msgstr ""
"Esta multiplicaci@'on crea un n@'umero que puede ser m@'as largo que\n"
"el tama@~no del buffer --- siete veces m@'as larga si el argumento es\n"
"7, por ejemplo. Diez se a@~anade a @'este n@~umero y finalmente el\n"
"n@'umero es dividido por 10 para proporcionar un valor que es un\n"
"car@'acter m@'as largo que la posici@'on de porcentaje en el b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:6374
msgid ""
"The number that results from all this is passed to @code{goto-char} and the "
"cursor is moved to that point."
msgstr ""
"El n@'umero que resulta de todo esto se pasa a @code{goto-char} y\n"
"el cursor se mueve a este punto."

#. type: subsection
#: emacs-lisp-intro.texi:6377
#, no-wrap
msgid "The Complete @code{beginning-of-buffer}"
msgstr "El @code{beginning-of-buffer} completo"

#. type: Plain text
#: emacs-lisp-intro.texi:6381
msgid "Here is the complete text of the @code{beginning-of-buffer} function:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el texto completo de la funci@'on @code{beginning-"
"of-buffer}:"

#. type: group
#: emacs-lisp-intro.texi:6393
#, no-wrap
msgid ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"Move point to the beginning of the buffer;\n"
"leave mark at previous position.\n"
"With \\\\[universal-argument] prefix,\n"
"do not set mark at previous position.\n"
"With numeric arg N,\n"
"put point N/10 of the way from the beginning.\n"
"\n"
msgstr ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"Mueve el punto al principio del buffer;\n"
"deja marca en la posici@'on previa. \n"
"Con prefijo \\\\[universal-argument], \n"
"no se asigna una marca en la posici@'on previa.\n"
"Con el argumento num@'erico N, pon el \n"
"punto N/10 del camino desde el principio.\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:6397
#, no-wrap
msgid ""
"If the buffer is narrowed,\n"
"this command uses the beginning and size\n"
"of the accessible part of the buffer.\n"
msgstr ""
"Si el b@'uffer est@'a encogido\n"
"este comando usa el principio y tama@~no\n"
"de la parte accesible del b@'uffer.\n"

#. type: group
#: emacs-lisp-intro.texi:6407
#, no-wrap
msgid ""
"Don't use this command in Lisp programs!\n"
"\\(goto-char (point-min)) is faster\n"
"and avoids clobbering the mark.\"\n"
"  (interactive \"P\")\n"
"  (or (consp arg)\n"
"      (and transient-mark-mode mark-active)\n"
"      (push-mark))\n"
msgstr ""
"@exclamdown{}No use este comando en programas Lisp!\n"
"\\(goto-char (point-min)) es r@'apido\n"
"y evita poseer la marca.\"\n"
"  (interactive \"P\")\n"
"  (or (consp arg)\n"
"      (and transient-mark-mode mark-active)\n"
"      (push-mark))\n"

#. type: group
#: emacs-lisp-intro.texi:6420
#, no-wrap
msgid ""
"  (let ((size (- (point-max) (point-min))))\n"
"    (goto-char (if (and arg (not (consp arg)))\n"
"                   (+ (point-min)\n"
"                      (if (> size 10000)\n"
"                          ;; Avoid overflow for large buffer sizes!\n"
"                          (* (prefix-numeric-value arg)\n"
"                             (/ size 10))\n"
"                        (/ (+ 10 (* size (prefix-numeric-value arg)))\n"
"                           10)))\n"
"                 (point-min))))\n"
"  (if arg (forward-line 1)))\n"
msgstr ""
"  (let ((size (- (point-max) (point-min))))\n"
"    (goto-char (if (and arg (not (consp arg)))\n"
"                   (+ (point-min)\n"
"                      (if (> size 10000)\n"
"                          ;; @exclamdown{}Evita sobrecarga para grandes tama@~nos de b@'uffer!\n"
"                          (* (prefix-numeric-value arg)\n"
"                             (/ size 10))\n"
"                        (/ (+ 10 (* size (prefix-numeric-value arg)))\n"
"                           10)))\n"
"                 (point-min))))\n"
"  (if arg (forward-line 1)))\n"

#. type: group
#: emacs-lisp-intro.texi:6432
#, no-wrap
msgid ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"Move point to the beginning of the buffer;\n"
"leave mark at previous position.\n"
"With arg N, put point N/10 of the way\n"
"from the true beginning.\n"
msgstr ""
"(defun beginning-of-buffer (&optional arg)\n"
"  \"Mueve el punto al principio del buffer;\n"
"deja la marca a la posici@'on previa.\n"
"Con el arg N, pon el punto N/10 del camino \n"
"desde el comienzo real.\n"

#. type: group
#: emacs-lisp-intro.texi:6439
#, no-wrap
msgid ""
"Don't use this in Lisp programs!\n"
"\\(goto-char (point-min)) is faster\n"
"and does not set the mark.\"\n"
"  (interactive \"P\")\n"
"  (push-mark)\n"
msgstr ""
"@exclamdown{}No usar esto en programas Lisp!\n"
"\\(goto-char (point-min)) es r@'apido \n"
"y no asigna la marca.\"\n"
"  (interactive \"P\")\n"
"  (push-mark)\n"

#. type: group
#: emacs-lisp-intro.texi:6447
#, no-wrap
msgid ""
"  (goto-char\n"
"   (if arg\n"
"       (if (> (buffer-size) 10000)\n"
"           ;; @r{Avoid overflow for large buffer sizes!}\n"
"           (* (prefix-numeric-value arg)\n"
"              (/ (buffer-size) 10))\n"
msgstr ""
"  (goto-char\n"
"   (if arg\n"
"       (if (> (buffer-size) 10000)\n"
"           ;; @r{@exclamdown{}Evita overflow para tama@~nos de b@'uffer grandes!}\n"
"           (* (prefix-numeric-value arg)\n"
"              (/ (buffer-size) 10))\n"

#. type: group
#: emacs-lisp-intro.texi:6454
#, no-wrap
msgid ""
"         (/ (+ 10 (* (buffer-size)\n"
"                     (prefix-numeric-value arg)))\n"
"            10))\n"
"     (point-min)))\n"
"  (if arg (forward-line 1)))\n"
msgstr ""
"         (/ (+ 10 (* (buffer-size)\n"
"                     (prefix-numeric-value arg)))\n"
"            10))\n"
"     (point-min)))\n"
"  (if arg (forward-line 1)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6463
msgid ""
"Except for two small points, the previous discussion shows how this function "
"works.  The first point deals with a detail in the documentation string, and "
"the second point concerns the last line of the function."
msgstr ""
"Excepto por dos peque@~nos puntos, la discusi@'on previa muestra\n"
"c@'omo esta funci@'on trabaja. El primer punto trata un detalle en la\n"
"cadena de documentaci@'on, y el segundo concierne la @'ultima\n"
"l@'{@dotless{i}}nea de la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:6466
msgid "In the documentation string, there is reference to an expression:"
msgstr "En la cadena de documentaci@'on, hay referencia a una expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:6469
#, no-wrap
msgid "\\\\[universal-argument]\n"
msgstr "\\\\[universal-argument]\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6479
msgid ""
"A @samp{\\\\} is used before the first square bracket of this expression.  "
"This @samp{\\\\} tells the Lisp interpreter to substitute whatever key is "
"currently bound to the @samp{[@dots{}]}.  In the case of @code{universal-"
"argument}, that is usually @kbd{C-u}, but it might be different.  "
"(@xref{Documentation Tips, , Tips for Documentation Strings, elisp, The GNU "
"Emacs Lisp Reference Manual}, for more information.)"
msgstr ""
"Un @samp{\\\\} es usado antes de la primera llave de esta\n"
"expresi@'on. Este @samp{\\\\} le cuenta al int@'erprete Lisp sustituir\n"
"qu@'e clave est@'a actualmente emparejada a los @samp{[@dots{}]}. En el\n"
"caso de @code{universal-argument}, que es normalmente @kbd{C-u}, pero\n"
"eso podr@'{@dotless{i}}a ser diferente. (@xref{Consejos de "
"Documentaci@'on, ,\n"
"Consejos para Cadenas de Documentaci@'on, elisp, El Manual de\n"
"Referencia de GNU Emacs Lisp}, para m@'as informaci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6484
msgid ""
"Finally, the last line of the @code{beginning-of-buffer} command says to "
"move point to the beginning of the next line if the command is invoked with "
"an argument:"
msgstr ""
"Finalmente, la @'ultima l@'{@dotless{i}}nea del comando\n"
"@code{beginning-of-buffer} dice mover el punto al principio de la\n"
"siguiente l@'{@dotless{i}}nea si el comando es invocado con un argumento:"

#. type: smallexample
#: emacs-lisp-intro.texi:6487
#, no-wrap
msgid "(if arg (forward-line 1)))\n"
msgstr "(if arg (forward-line 1)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6496
msgid ""
"This puts the cursor at the beginning of the first line after the "
"appropriate tenths position in the buffer.  This is a flourish that means "
"that the cursor is always located @emph{at least} the requested tenths of "
"the way through the buffer, which is a nicety that is, perhaps, not "
"necessary, but which, if it did not occur, would be sure to draw complaints."
msgstr ""
"Esto pone el cursor al principio de la primera l@'{@dotless{i}}nea\n"
"despu@'es de las apropiadas decenas de posiciones en el b@'uffer. Esto\n"
"significa que el cursor est@'a siempre localizado @emph{al menos} las\n"
"decenas solicitadas del camino a trav@'es del b@'uffer, que es un bien\n"
"que es, quiz@'as, no necesario, pero que, si no ocurri@'o,\n"
"estar@'{@dotless{i}}a seguro de dibujar rumores."

#. type: Plain text
#: emacs-lisp-intro.texi:6503
msgid ""
"On the other hand, it also means that if you specify the command with a "
"@kbd{C-u}, but without a number, that is to say, if the `raw prefix "
"argument' is simply a cons cell, then the command puts you at the beginning "
"of the second line @dots{} I don't know whether this is intended or whether "
"no one has dealt with the code to avoid this happening."
msgstr ""
"Por otro lado, eso significa que si se especifica el comando con un\n"
"@kbd{C-u}, sin un n@'umero, que es decir, si el `prefijo de argumento\n"
"plano' es simplemente un cons cell, entonces el comando te pone al\n"
"principio de la segunda l@'{@dotless{i}}nea @dots{} no s@'e si este se\n"
"pretende ning@'un trato con el c@'odigo para evitar que esto ocurre."

#. type: node
#: emacs-lisp-intro.texi:6504
#, no-wrap
msgid "Second Buffer Related Review"
msgstr "Revisar el segundo b@'uffer relacionado"

#. type: Plain text
#: emacs-lisp-intro.texi:6508
msgid "Here is a brief summary of some of the topics covered in this chapter."
msgstr ""
"Aqu@'{@dotless{i}} hay un breve resumen de los asuntos cubierto en\n"
"este cap@'{@dotless{i}}tulo."

#. type: table
#: emacs-lisp-intro.texi:6516
msgid ""
"Evaluate each argument in sequence, and return the value of the first "
"argument that is not @code{nil}; if none return a value that is not "
"@code{nil}, return @code{nil}.  In brief, return the first true value of the "
"arguments; return a true value if one @emph{or} any of the others are true."
msgstr ""
"Eval@'ua cada argumento en secuencia, y devuelve el valor del primer\n"
"argumento que no es @code{nil}, si ninguno devuelve un valor que no es\n"
"@code{nil}, devuelve @code{nil}. En breve, devuelve el primer valor de\n"
"verdad de los argumento; devuelve un valor cierto si un @emph{or}\n"
"cualquier de los otros son verdad."

#. type: findex
#: emacs-lisp-intro.texi:6517 emacs-lisp-intro.texi:9007
#: emacs-lisp-intro.texi:13100
#, no-wrap
msgid "and"
msgstr "and"

#. type: table
#: emacs-lisp-intro.texi:6523
msgid ""
"Evaluate each argument in sequence, and if any are @code{nil}, return "
"@code{nil}; if none are @code{nil}, return the value of the last argument.  "
"In brief, return a true value only if all the arguments are true; return a "
"true value if one @emph{and} each of the others is true."
msgstr ""
"Eval@'ua cada argumento en secuencia, y si cualquiera es @code{nil},\n"
"devuelve @code{nil}; si ninguno es @code{nil}, devuelve el valor del\n"
"@'ultimo argumento. En breve, devuelve un valor cierto solo si todos\n"
"los argumentos cierto; devuelve un valor cierto si un @emph{and} cada\n"
"uno de los otros son ciertos."

#. type: item
#: emacs-lisp-intro.texi:6524
#, no-wrap
msgid "&optional"
msgstr "&optional"

#. type: table
#: emacs-lisp-intro.texi:6528
msgid ""
"A keyword used to indicate that an argument to a function definition is "
"optional; this means that the function can be evaluated without the "
"argument, if desired."
msgstr ""
"Una palabra clave usaba para indicar que un argumento a una\n"
"definici@'on de funci@'on es opcional; esto significa que la funci@'on\n"
"puede ser evaluado sin el argumento, si se desea."

#. type: item
#: emacs-lisp-intro.texi:6529
#, no-wrap
msgid "prefix-numeric-value"
msgstr "prefix-numeric-value"

#. type: table
#: emacs-lisp-intro.texi:6532
msgid ""
"Convert the `raw prefix argument' produced by @code{(interactive \"P\")} to "
"a numeric value."
msgstr ""
"Convierte el `argumento prefijo plano' producido por\n"
"@code{(interactive \"P\")} a un valor num@'erico."

#. type: item
#: emacs-lisp-intro.texi:6533
#, no-wrap
msgid "forward-line"
msgstr "forward-line"

#. type: table
#: emacs-lisp-intro.texi:6539
msgid ""
"Move point forward to the beginning of the next line, or if the argument is "
"greater than one, forward that many lines.  If it can't move as far forward "
"as it is supposed to, @code{forward-line} goes forward as far as it can and "
"then returns a count of the number of additional lines it was supposed to "
"move but couldn't."
msgstr ""
"Mueve el punto hacia delante al principio de la siguiente\n"
"l@'{@dotless{i}}nea, o si el argumento es m@'as de uno, hacia delante\n"
"varias l@'{@dotless{i}}neas. Si eso no se puede mover tan lejos\n"
"hacia delante como se puede, @code{forward-line} va hacia delante tan\n"
"lejos como se puede y entonces devuelve un contaje del n@'umero de\n"
"l@'{@dotless{i}}neas adicionales que no pudo moverse."

#. type: item
#: emacs-lisp-intro.texi:6540
#, no-wrap
msgid "erase-buffer"
msgstr "erase-buffer"

#. type: table
#: emacs-lisp-intro.texi:6542
msgid "Delete the entire contents of the current buffer."
msgstr "Borra todos los contenidos del b@'uffer actual."

#. type: item
#: emacs-lisp-intro.texi:6543
#, no-wrap
msgid "bufferp"
msgstr "bufferp"

#. type: table
#: emacs-lisp-intro.texi:6545
msgid ""
"Return @code{t} if its argument is a buffer; otherwise return @code{nil}."
msgstr ""
"Devuelve @code{t} si su argumento es un b@'uffer; de otro modo\n"
"devuelve @code{nil}."

#. type: section
#: emacs-lisp-intro.texi:6548
#, no-wrap
msgid "@code{optional} Argument Exercise"
msgstr "Ejercicio de argumento @code{opcional}"

#. type: Plain text
#: emacs-lisp-intro.texi:6555
msgid ""
"Write an interactive function with an optional argument that tests whether "
"its argument, a number, is greater than or equal to, or else, less than the "
"value of @code{fill-column}, and tells you which, in a message.  However, if "
"you do not pass an argument to the function, use 56 as a default value."
msgstr ""
"Escribe una funci@'on interactiva con un argumento opcional que\n"
"chequee si su argumento, un n@'umero, es mayor o igual, o al menos,\n"
"menos que el valor de @code{fill-column}, y lo escribe, en un\n"
"mensaje. Sin embargo, si no se pasa un argumento a la funci@'on, usa\n"
"56 como un valor por defecto."

#. type: cindex
#: emacs-lisp-intro.texi:6558
#, no-wrap
msgid "Focusing attention (narrowing)"
msgstr "Focalizando atenci@'on (encogiendo)"

#. type: cindex
#: emacs-lisp-intro.texi:6559
#, no-wrap
msgid "Narrowing"
msgstr "Encogiendo"

#. type: cindex
#: emacs-lisp-intro.texi:6560
#, no-wrap
msgid "Widening"
msgstr "Ampliando"

#. type: Plain text
#: emacs-lisp-intro.texi:6566
msgid ""
"Narrowing is a feature of Emacs that makes it possible for you to focus on a "
"specific part of a buffer, and work without accidentally changing other "
"parts.  Narrowing is normally disabled since it can confuse novices."
msgstr ""
"Encoger es una funcionalidad de Emacs que hace posible focalizar en\n"
"una parte espec@'{@dotless{i}}fica de un b@'uffer, y funcionar sin\n"
"cambiar accidentalmente otras partes. Encoger normalmente se\n"
"deshabilita puesto que puede confundir a novatos."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:6576
#, no-wrap
msgid "The Advantages of Narrowing"
msgstr "Las ventajas de encoger"

#. type: Plain text
#: emacs-lisp-intro.texi:6588
msgid ""
"With narrowing, the rest of a buffer is made invisible, as if it weren't "
"there.  This is an advantage if, for example, you want to replace a word in "
"one part of a buffer but not in another: you narrow to the part you want and "
"the replacement is carried out only in that section, not in the rest of the "
"buffer.  Searches will only work within a narrowed region, not outside of "
"one, so if you are fixing a part of a document, you can keep yourself from "
"accidentally finding parts you do not need to fix by narrowing just to the "
"region you want.  (The key binding for @code{narrow-to-region} is @kbd{C-x n "
"n}.)"
msgstr ""
"Con encoger, el resto del b@'uffer se hace invisible, como si no\n"
"estuviera. Esto es una ventaja si, por ejemplo, se quiere reemplazar\n"
"una palabra en una parte del b@'uffer pero no otro: se encoge la parte\n"
"que se quiere y el reemplazo se trae solo en esta secci@'on, no en\n"
"el resto del b@'uffer. Las b@'usquedas solo funcionar@'an con una\n"
"regi@'on encogida, no fuera de una, as@'{@dotless{i}} si tu est@'as\n"
"arreglando una parte de un documento, se puede guardar en\n"
"s@'{@dotless{i}} desde encontrar partes accidentalmente que no\n"
"necesitas arreglar encongiendo solo la regi@'on que quieres. (La tecla\n"
"asociada a @code{narrow-to-region} es @kbd{C-x n n}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6597
msgid ""
"However, narrowing does make the rest of the buffer invisible, which can "
"scare people who inadvertently invoke narrowing and think they have deleted "
"a part of their file.  Moreover, the @code{undo} command (which is usually "
"bound to @kbd{C-x u}) does not turn off narrowing (nor should it), so people "
"can become quite desperate if they do not know that they can return the rest "
"of a buffer to visibility with the @code{widen} command.  (The key binding "
"for @code{widen} is @kbd{C-x n w}.)"
msgstr ""
"Sin embargo, encoger hace que el resto del b@'uffer sea invisible,\n"
"esto puede asustar a gente quien inadvertidamente invoca a encoger y\n"
"pensar que se ha borrado una parte de su fichero. M@'as all@'a, el\n"
"comando @code{undo} (que es normalmente emparejado a @kbd{C-x u}) no\n"
"se deja encoger, as@'{@dotless{i}} las personas pueden llegar a estar\n"
"bastante desesperadas si no conocen que ellas pueden volver al resto\n"
"de un b@'uffer para visibilizarlo con el comando @code{widen}. (El\n"
"emparejamiento de la tecla para @code{widen} es @kbd{C-x n w}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6608
msgid ""
"Narrowing is just as useful to the Lisp interpreter as to a human.  Often, "
"an Emacs Lisp function is designed to work on just part of a buffer; or "
"conversely, an Emacs Lisp function needs to work on all of a buffer that has "
"been narrowed.  The @code{what-line} function, for example, removes the "
"narrowing from a buffer, if it has any narrowing and when it has finished "
"its job, restores the narrowing to what it was.  On the other hand, the "
"@code{count-lines} function uses narrowing to restrict itself to just that "
"portion of the buffer in which it is interested and then restores the "
"previous situation."
msgstr ""
"Encoger es tan @'util al int@'erprete Lisp como para las personas. Con\n"
"frecuencia, una funci@'on Emacs Lisp est@'a dise@~nada para trabajar\n"
"en solo parte de un b@'uffer; o de manera conversa, una funci@'on\n"
"Emacs Lisp necesita trabajar en todo un b@'uffer que ha sido\n"
"encogido. La funci@'on @code{what-line}, por ejemplo, borra el\n"
"encogimiento desde un b@'uffer, si eso tiene cualquier encogimiento y\n"
"cuando eso ha finalizado su trabajo, restaura el encogimiento\n"
"que haya. Por otro lado, la funci@'on @code{count-lines}, que es\n"
"llamada por @code{what-line}, usa el encogimiento para restringirse a\n"
"s@'{@dotless{i}} misma solo a la porci@'on del b@'uffer en el que\n"
"se est@'a interesado y entonces restaura la situaci@'on previa."

#. type: section
#: emacs-lisp-intro.texi:6610
#, no-wrap
msgid "The @code{save-restriction} Special Form"
msgstr "La forma especial @code{save-restriction}"

#. type: Plain text
#: emacs-lisp-intro.texi:6625
msgid ""
"In Emacs Lisp, you can use the @code{save-restriction} special form to keep "
"track of whatever narrowing is in effect, if any.  When the Lisp interpreter "
"meets with @code{save-restriction}, it executes the code in the body of the "
"@code{save-restriction} expression, and then undoes any changes to narrowing "
"that the code caused.  If, for example, the buffer is narrowed and the code "
"that follows @code{save-restriction} gets rid of the narrowing, @code{save-"
"restriction} returns the buffer to its narrowed region afterwards.  In the "
"@code{what-line} command, any narrowing the buffer may have is undone by the "
"@code{widen} command that immediately follows the @code{save-restriction} "
"command.  Any original narrowing is restored just before the completion of "
"the function."
msgstr ""
"En Emacs Lisp, se puede usar la forma especial @code{save-restriction}\n"
"para guardar la traza siempre que el encogimiento est@'e en\n"
"efecto. Cuando el int@'erprete Lisp se encuentra con\n"
"@code{save-restriction}, eso ejecuta el c@'odigo en el cuerpo de la\n"
"expresi@'on @code{save-restriction}, y entonces deshace cualquier\n"
"cambio para encoger lo que el c@'odigo caus@'o. Si, por ejemplo, el\n"
"b@'uffer est@'a encogido y el c@'odigo que sigue al comando\n"
"@code{save-restriction} devuelve el b@'uffer para su regi@'on\n"
"encogida. En el comando @code{what-line}, cualquier encogimiento del\n"
"b@'uffer que se puede tener se deshace por el comando @code{widen} que\n"
"inmediatamente sigue el comando @code{save-restriction}. Cualquier\n"
"encogimiento original es restaurado solo antes de la compleci@'on de\n"
"la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:6628
msgid "The template for a @code{save-restriction} expression is simple:"
msgstr "La plantilla para una expresi@'on @code{save-restriction} es simple:"

#. type: group
#: emacs-lisp-intro.texi:6633
#, no-wrap
msgid ""
"(save-restriction\n"
"  @var{body}@dots{} )\n"
msgstr ""
"(save-restriction\n"
"  @var{body}@dots{} )\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6639
msgid ""
"The body of the @code{save-restriction} is one or more expressions that will "
"be evaluated in sequence by the Lisp interpreter."
msgstr ""
"El cuerpo del @code{save-restriction} es una o m@'as expresiones que\n"
"ser@'an evaluadas en secuencia por el int@'erprete Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:6647
msgid ""
"Finally, a point to note: when you use both @code{save-excursion} and "
"@code{save-restriction}, one right after the other, you should use "
"@code{save-excursion} outermost.  If you write them in reverse order, you "
"may fail to record narrowing in the buffer to which Emacs switches after "
"calling @code{save-excursion}.  Thus, when written together, @code{save-"
"excursion} and @code{save-restriction} should be written like this:"
msgstr ""
"Finalmente, un punto a anotar: cuando se usa tanto\n"
"@code{save-excursion} y @code{save-restriction}, uno correcto\n"
"despu@'es del otro, deber@'{@dotless{i}}as usar @code{save-excursion}\n"
"fuera. Si se escribe en el orden inverso, se podr@'{@dotless{i}}a\n"
"fallar para grabar el encogimiento en el b@'uffer para el que Emacs\n"
"cambia despu@'es de llamar a @code{save-excursion}. De este modo, cuando\n"
"se escribe junto a @code{save-excursion} y @code{save-restriction}\n"
"ser@'{@dotless{i}}a escrito as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:6653
#, no-wrap
msgid ""
"(save-excursion\n"
"  (save-restriction\n"
"    @var{body}@dots{}))\n"
msgstr ""
"(save-excursion\n"
"  (save-restriction\n"
"    @var{body}@dots{}))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6659
msgid ""
"In other circumstances, when not written together, the @code{save-excursion} "
"and @code{save-restriction} special forms must be written in the order "
"appropriate to the function."
msgstr ""
"En otras circunstancias, cuando no se escribe junto, las formas\n"
"especiales @code{save-excursion} y @code{save-restriction} deben ser\n"
"escritas en el orden apropiado para la funci@'on."

#. type: group
#: emacs-lisp-intro.texi:6669
#, no-wrap
msgid ""
"  (save-restriction\n"
"    (widen)\n"
"    (save-excursion\n"
"    @var{body}@dots{}))\n"
msgstr ""
"  (save-restriction\n"
"    (widen)\n"
"    (save-excursion\n"
"    @var{body}@dots{}))\n"

#. type: cindex
#: emacs-lisp-intro.texi:6729
#, no-wrap
msgid "Widening, example of"
msgstr "Extendiendo, ejemplo de"

#. type: Plain text
#: emacs-lisp-intro.texi:6735
msgid ""
"The @code{what-line} command tells you the number of the line in which the "
"cursor is located.  The function illustrates the use of the @code{save-"
"restriction} and @code{save-excursion} commands.  Here is the original text "
"of the function:"
msgstr ""
"El comando @code{what-line} cuenta el n@'umero de la\n"
"l@'{@dotless{i}}nea en la que el cursor se ha localizado. La\n"
"funci@'on ilustra el uso de los comandos @code{save-restriction} y\n"
"@code{save-excursion}. Aqu@'{@dotless{i}} est@'a el texto original de\n"
"la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:6747
#, no-wrap
msgid ""
"(defun what-line ()\n"
"  \"Print the current line number (in the buffer) of point.\"\n"
"  (interactive)\n"
"  (save-restriction\n"
"    (widen)\n"
"    (save-excursion\n"
"      (beginning-of-line)\n"
"      (message \"Line %d\"\n"
"               (1+ (count-lines 1 (point)))))))\n"
msgstr ""
"(defun what-line ()\n"
"  \"Imprime el n@'umero de l@'{@dotless{i}}nea actual (en el b@'uffer)\n"
"  del punto.\"\n"
"  (interactive)\n"
"  (save-restriction\n"
"    (widen)\n"
"    (save-excursion\n"
"      (beginning-of-line)\n"
"      (message \"L@'{@dotless{i}}nea %d\"\n"
"               (1+ (count-lines 1 (point)))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6758
msgid ""
"(In recent versions of GNU Emacs, the @code{what-line} function has been "
"expanded to tell you your line number in a narrowed buffer as well as your "
"line number in a widened buffer.  The recent version is more complex than "
"the version shown here.  If you feel adventurous, you might want to look at "
"it after figuring out how this version works.  You will probably need to use "
"@kbd{C-h f} (@code{describe-function}).  The newer version uses a "
"conditional to determine whether the buffer has been narrowed."
msgstr ""
"(En versiones recientes de GNU Emacs, la funci@'on @code{what-line} se\n"
"ha expandido para contar el n@'umero de l@'{@dotless{i}}neas en un\n"
"b@'uffer encogido tan bien como el n@'umero de l@'{@dotless{i}}neas en\n"
"un b@'uffer ampliado. La versi@'on reciente es m@'as compleja que la\n"
"versi@'on que se muestra. Alguien sinti@'endose venturoso,\n"
"podr@'{@dotless{i}}a querer mirarla despu@'es de entender como esta\n"
"versi@'on funciona. Probablemente se necesitar@'a usar @kbd{C-h f}\n"
"(@code{describe-function}). La versi@'on nueva usa un condicional para\n"
"determinar si el b@'uffer se ha encogido."

#. type: Plain text
#: emacs-lisp-intro.texi:6763
msgid ""
"(Also, it uses @code{line-number-at-pos}, which among other simple "
"expressions, such as @code{(goto-char (point-min))}, moves point to the "
"beginning of the current line with @code{(forward-line 0)} rather than "
"@code{beginning-of-line}.)"
msgstr ""
"(Tambi@'en, eso usa @code{line-number-at-pos}, que otras expresiones\n"
"simples, tales como @code{(goto-char (point-min))}, mueve el punto al\n"
"principio de la l@'{@dotless{i}}nea actual con @code{(forward-line 0)}\n"
"en vez de @code{beginning-of-line}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6767
msgid ""
"The @code{what-line} function as shown here has a documentation line and is "
"interactive, as you would expect.  The next two lines use the functions "
"@code{save-restriction} and @code{widen}."
msgstr ""
"La funci@'on @code{what-line} como se muestra aqu@'{@dotless{i}} tiene\n"
"una l@'{@dotless{i}}nea de documentaci@'on y es interactiva, como se\n"
"esperar@'{@dotless{i}}a. Las dos l@'{@dotless{i}}neas siguientes usan\n"
"las funciones @code{save-restriction} y @code{widen}."

#. type: Plain text
#: emacs-lisp-intro.texi:6771
msgid ""
"The @code{save-restriction} special form notes whatever narrowing is in "
"effect, if any, in the current buffer and restores that narrowing after the "
"code in the body of the @code{save-restriction} has been evaluated."
msgstr ""
"La forma especial @code{save-restriction} nota que encogiendo es en\n"
"efecto, si cualquiera, en el buffer actual y restaura que encogiendo\n"
"despu@'es del c@'odigo en el cuerpo del @code{save-restriction} ha\n"
"sido evaluada."

#. type: Plain text
#: emacs-lisp-intro.texi:6781
msgid ""
"The @code{save-restriction} special form is followed by @code{widen}.  This "
"function undoes any narrowing the current buffer may have had when "
"@code{what-line} was called.  (The narrowing that was there is the narrowing "
"that @code{save-restriction} remembers.)  This widening makes it possible "
"for the line counting commands to count from the beginning of the buffer.  "
"Otherwise, they would have been limited to counting within the accessible "
"region.  Any original narrowing is restored just before the completion of "
"the function by the @code{save-restriction} special form."
msgstr ""
"La forma especial @code{save-restriction} es seguida por\n"
"@code{widen}. Esta funci@'on deshace cualquier distancia del actual\n"
"b@'uffer que puede haber tenido cuando @code{what-line} se llame. (La\n"
"distancia que hab@'{@dotless{i}}a es la distancia que\n"
"@code{save-restriction} recuerda.) Esta ampliaci@'on se hace posible\n"
"para la l@'{@dotless{i}}nea contando comandos a contar desde el\n"
"principio del b@'uffer. De otro modo, se habr@'{@dotless{i}}a\n"
"limitado para contar con la regi@'on accesible. Cualquier distancia\n"
"original se restaura solo antes de la compleci@'on de la funci@'on\n"
"por la forma especial @code{save-restriction}."

#. type: Plain text
#: emacs-lisp-intro.texi:6786
msgid ""
"The call to @code{widen} is followed by @code{save-excursion}, which saves "
"the location of the cursor (i.e., of point) and of the mark, and restores "
"them after the code in the body of the @code{save-excursion} uses the "
"@code{beginning-of-line} function to move point."
msgstr ""
"La llamada a @code{widen} es seguida por @code{save-excursion}, que\n"
"guarda la posici@'on del cursor (por ej., el punto) y de la marca, y\n"
"la restaura despu@'es el c@'odigo en el cuerpo del\n"
"@code{save-excursion} usa la funci@'on @code{beginning-of-line} para\n"
"mover el punto."

#. type: Plain text
#: emacs-lisp-intro.texi:6791
msgid ""
"(Note that the @code{(widen)} expression comes between the @code{save-"
"restriction} and @code{save-excursion} special forms.  When you write the "
"two @code{save- @dots{}} expressions in sequence, write @code{save-"
"excursion} outermost.)"
msgstr ""
"(N@'otese que la expresi@'on @code{(widen)} viene entre las formas\n"
"especiales @code{save-restriction} y @code{save-excursion}. Cuando se\n"
"escribe las dos expresiones @code{save- @dots{}} en secuencia, escribe\n"
"@code{save-excursion} finalmente.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6796
msgid ""
"The last two lines of the @code{what-line} function are functions to count "
"the number of lines in the buffer and then print the number in the echo area."
msgstr ""
"Las @'ultimas dos l@'{@dotless{i}}neas de la funci@'on\n"
"@code{what-line} son funciones para contar el n@'umero de\n"
"l@'{@dotless{i}}neas en el b@'uffer y entonces imprimir el n@'umero en\n"
"el @'area echo."

#. type: group
#: emacs-lisp-intro.texi:6801
#, no-wrap
msgid ""
"(message \"Line %d\"\n"
"         (1+ (count-lines 1 (point)))))))\n"
msgstr ""
"(message \"Line %d\"\n"
"         (1+ (count-lines 1 (point)))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6810
msgid ""
"The @code{message} function prints a one-line message at the bottom of the "
"Emacs screen.  The first argument is inside of quotation marks and is "
"printed as a string of characters.  However, it may contain a @samp{%d} "
"expression to print a following argument.  @samp{%d} prints the argument as "
"a decimal, so the message will say something such as @samp{Line 243}."
msgstr ""
"La funci@'on @code{message} imprime un mensaje de una\n"
"l@'{@dotless{i}}nea abajo de la pantalla Emacs. El primer argumento\n"
"est@'a dentro de marcas de cita y est@'a impreso como una cadena de\n"
"caracteres. Sin embargo, se puede contener una expresi@'on @samp{%d}\n"
"para imprimir un argumento siguiente. @samp{%d} imprime el argumento\n"
"como un decimal, as@'{@dotless{i}} el mensaje dir@'a alguna cosa tal\n"
"como @samp{L@'{@dotless{i}}nea 243}."

#. type: Plain text
#: emacs-lisp-intro.texi:6814
msgid ""
"The number that is printed in place of the @samp{%d} is computed by the last "
"line of the function:"
msgstr ""
"El n@'umero que est@'a impreso en lugar de @samp{%d} est@'a computada\n"
"por la @'ultima l@'{@dotless{i}}nea de la funci@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:6817
#, no-wrap
msgid "(1+ (count-lines 1 (point)))\n"
msgstr "(1+ (count-lines 1 (point)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6853
msgid ""
"What this does is count the lines from the first position of the buffer, "
"indicated by the @code{1}, up to @code{(point)}, and then add one to that "
"number.  (The @code{1+} function adds one to its argument.)  We add one to "
"it because line 2 has only one line before it, and @code{count-lines} counts "
"only the lines @emph{before} the current line."
msgstr ""
"Lo que esto hace es contar las l@'{@dotless{i}}neas entre la primera\n"
"posici@'on del b@'uffer indicada por el @code{1}, y el\n"
"@code{(point)}, y entonces se a@~nade uno a este n@'umero. (La funci@'on\n"
"@code{1+} a@~nade uno a su argumento.) Se a@~nade a eso porque\n"
"la l@'{@dotless{i}}nea 2 tiene solo una l@'{@dotless{i}}nea antes, y\n"
"@code{count-lines} cuenta solo las l@'{@dotless{i}}neas @emph{antes}\n"
"de la l@'{@dotless{i}}nea actual."

#. type: Plain text
#: emacs-lisp-intro.texi:6858
msgid ""
"After @code{count-lines} has done its job, and the message has been printed "
"in the echo area, the @code{save-excursion} restores point and mark to their "
"original positions; and @code{save-restriction} restores the original "
"narrowing, if any."
msgstr ""
"Despu@'es de que @code{count-lines} ha hecho su trabajo, y el mensaje\n"
"ha sido impreso en el @'area echo, la funci@'on @code{save-excursion}\n"
"restaura punto y marca a sus posiciones originales; y\n"
"@code{save-restriction} restaura la contracci@'on original, si la hay."

#. type: section
#: emacs-lisp-intro.texi:6860
#, no-wrap
msgid "Exercise with Narrowing"
msgstr "Ejercicio de encoger"

#. type: Plain text
#: emacs-lisp-intro.texi:6869
msgid ""
"Write a function that will display the first 60 characters of the current "
"buffer, even if you have narrowed the buffer to its latter half so that the "
"first line is inaccessible.  Restore point, mark, and narrowing.  For this "
"exercise, you need to use a whole potpourri of functions, including "
"@code{save-restriction}, @code{widen}, @code{goto-char}, @code{point-min}, "
"@code{message}, and @code{buffer-substring}."
msgstr ""
"Escribe una funci@'on que mostrar@'a los primeros 60 caracteres del\n"
"b@'uffer actual, incluso si se ha encogido el b@'uffer a su mitad\n"
"as@'{@dotless{i}} que la primera l@'{@dotless{i}}nea es\n"
"inaccesible. Restaura punto, marca y encogimiento. Para este\n"
"ejercicio, se necesita usa un popurri entero de funciones, incluyendo\n"
"@code{save-restriction}, @code{widen}, @code{goto-char},\n"
"@code{point-min}, @code{message}, y @code{buffer-substring}."

#. type: cindex
#: emacs-lisp-intro.texi:6870
#, no-wrap
msgid "Properties, mention of @code{buffer-substring-no-properties}"
msgstr "Propiedades, menci@'on de @code{buffer-substring-no-properties}"

#. type: Plain text
#: emacs-lisp-intro.texi:6878
msgid ""
"(@code{buffer-substring} is a previously unmentioned function you will have "
"to investigate yourself; or perhaps you will have to use @code{buffer-"
"substring-no-properties} or @code{filter-buffer-substring} @dots{}, yet "
"other functions.  Text properties are a feature otherwise not discussed "
"here.  @xref{Text Properties, , Text Properties, elisp, The GNU Emacs Lisp "
"Reference Manual}.)"
msgstr ""
"(@code{buffer-substring} es una funci@'on previamente no mencionada\n"
"que tendr@'a que investigarla cada cual por uno mismo; o quiz@'as\n"
"tendr@'a que usarse @code{buffer-substring-no-properties} o\n"
"@code{filter-buffer-substring} @dots{}, o todav@'{@dotless{i}}a otras\n"
"funciones. Las propiedades de texto son una funcionalidad que de otro\n"
"modo no ser@'{@dotless{i}}an discutidas aqu@'{@dotless{i}}. \n"
"@xref{Propiedades de Texto, , Propiedades de\n"
"Texto, elisp, El Manual de Referencia de Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6881
msgid ""
"Additionally, do you really need @code{goto-char} or @code{point-min}? Or "
"can you write the function without them?"
msgstr ""
"Adem@'as, @questiondown{}realmente se necesita @code{goto-char} o "
"@code{point-min}?\n"
"@questiondown{}O se puede escribir la funci@'on sin ellos?"

#. type: findex
#: emacs-lisp-intro.texi:6884
#, no-wrap
msgid "car, @r{introduced}"
msgstr "car, @r{introducido}"

#. type: findex
#: emacs-lisp-intro.texi:6885
#, no-wrap
msgid "cdr, @r{introduced}"
msgstr "cdr, @r{introducido}"

#. type: Plain text
#: emacs-lisp-intro.texi:6890
msgid ""
"In Lisp, @code{car}, @code{cdr}, and @code{cons} are fundamental functions.  "
"The @code{cons} function is used to construct lists, and the @code{car} and "
"@code{cdr} functions are used to take them apart."
msgstr ""
"En Lisp, @code{car}, @code{cdr}, y @code{cons} son funciones\n"
"fundamentales. La funci@'on @code{cons} es usada para construir\n"
"listas, y las funciones @code{car} y @code{cdr} son usadas para\n"
"tomarlas aparte."

#. type: Plain text
#: emacs-lisp-intro.texi:6894
msgid ""
"In the walk through of the @code{copy-region-as-kill} function, we will see "
"@code{cons} as well as two variants on @code{cdr}, namely, @code{setcdr} and "
"@code{nthcdr}.  (@xref{copy-region-as-kill}.)"
msgstr ""
"En el paseo guiado a trav@'es de la funci@'on\n"
"@code{copy-region-as-kill}, se ver@'a @code{cons} tan bien como dos\n"
"variantes de @code{cdr}, llamadas @code{setcdr} y\n"
"@code{nthcdr}. (@xref{copy-region-as-kill}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:6925
msgid ""
"The name of the @code{cons} function is not unreasonable: it is an "
"abbreviation of the word `construct'.  The origins of the names for "
"@code{car} and @code{cdr}, on the other hand, are esoteric: @code{car} is an "
"acronym from the phrase `Contents of the Address part of the Register'; and "
"@code{cdr} (pronounced `could-er') is an acronym from the phrase `Contents "
"of the Decrement part of the Register'.  These phrases refer to specific "
"pieces of hardware on the very early computer on which the original Lisp was "
"developed.  Besides being obsolete, the phrases have been completely "
"irrelevant for more than 25 years to anyone thinking about Lisp.  "
"Nonetheless, although a few brave scholars have begun to use more reasonable "
"names for these functions, the old terms are still in use.  In particular, "
"since the terms are used in the Emacs Lisp source code, we will use them in "
"this introduction."
msgstr ""
"El nombre de la funci@'on @code{cons} es razonable: es una\n"
"abreviaci@'on de la palabra `constructo'. Los or@'{@dotless{i}}genes\n"
"de los nombres @code{car} y @code{cdr}, por otro lado, son\n"
"esot@'ericos: @code{car} es un acr@'onimo de la frase `Contenidos de\n"
"la parte de la Direcci@'on del Registro'; y @code{cdr} (pronunciado\n"
"`could-er') es un acr@'onimo de la frase `Contenidos del Decremento\n"
"del Registro'. Estas frases se refieren a piezas\n"
"espec@'{@dotless{i}}ficas de hardware en el ordenador en el que el\n"
"Lisp original fu@'e desarrollado. El resto de frases han sido\n"
"completamente irrelevantes por m@'as de 25 a@~nos a cualquiera\n"
"pensando acerca de Lisp. Ninguno, excepto unos pocos acad@'emicos\n"
"valientes han empezado a usar nombres m@'as razonables para estas\n"
"funciones, los viejos t@'erminos est@'an todav@'{@dotless{i}}a en\n"
"uso. En particular, los t@'erminos usados en el c@'odigo fuente Emacs\n"
"Lisp, que usaremos en esta introducci@'on."

#. type: section
#: emacs-lisp-intro.texi:6927
#, no-wrap
msgid "@code{car} and @code{cdr}"
msgstr "@code{car} y @code{cdr}"

#. type: Plain text
#: emacs-lisp-intro.texi:6932
msgid ""
"The @sc{car} of a list is, quite simply, the first item in the list.  Thus "
"the @sc{car} of the list @code{(rose violet daisy buttercup)} is @code{rose}."
msgstr ""
"El @sc{car} de una lista es, bastante simple, el primer\n"
"@'{@dotless{i}}tem en la lista. De este modo, el @sc{car} de la lista\n"
"@code{(rosa violeta margarita bot@'ondeoro)} es @code{rosa}."

#. type: Plain text
#: emacs-lisp-intro.texi:6936
msgid ""
"If you are reading this in Info in GNU Emacs, you can see this by evaluating "
"the following:"
msgstr ""
"Si est@'a leyendo en Info y en GNU Emacs, se puede ver esto evaluando\n"
"lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:6939
#, no-wrap
msgid "(car '(rose violet daisy buttercup))\n"
msgstr "(car '(rosa violeta margarita bot@'ondeoro))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6944
msgid ""
"After evaluating the expression, @code{rose} will appear in the echo area."
msgstr ""
"Despu@'es de evaluar la expresi@'on, @code{rosa} aparecer@'a en el\n"
"@'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:6947
msgid ""
"Clearly, a more reasonable name for the @code{car} function would be "
"@code{first} and this is often suggested."
msgstr ""
"Claramente, un nombre m@'as razonable para la funci@'on @code{car}\n"
"ser@'{@dotless{i}}a @code{first} y esto es con frecuencia lo que se\n"
"sugiere."

#. type: Plain text
#: emacs-lisp-intro.texi:6952
msgid ""
"@code{car} does not remove the first item from the list; it only reports "
"what it is.  After @code{car} has been applied to a list, the list is still "
"the same as it was.  In the jargon, @code{car} is `non-destructive'.  This "
"feature turns out to be important."
msgstr ""
"@code{car} no elimina el primer @'{@dotless{i}}tem de la lista; solo\n"
"se informa de lo que hay. Despu@'es de que @code{car} se haya aplicado a\n"
"una lista, la lista es todav@'{@dotless{i}}a la misma que era. En la\n"
"jerga, @code{car} es `no-destructiva'. Esta funcionalidad deja de ser\n"
"importante."

#. type: Plain text
#: emacs-lisp-intro.texi:6959
msgid ""
"The @sc{cdr} of a list is the rest of the list, that is, the @code{cdr} "
"function returns the part of the list that follows the first item.  Thus, "
"while the @sc{car} of the list @code{'(rose violet daisy buttercup)} is "
"@code{rose}, the rest of the list, the value returned by the @code{cdr} "
"function, is @code{(violet daisy buttercup)}."
msgstr ""
"El @sc{cdr} de una lista es el resto de la lista, que es, la funci@'on\n"
"@code{cdr} que devuelve la parte de la lista que sigue el primer\n"
"@'{@dotless{i}}tem. De este modo, mientras el @sc{car} de la lista\n"
"@code{'(rosa violeta margarita bot@'ondeoro)} es @code{rosa}, el resto\n"
"de la lista, el valor devuelto por la funci@'on @code{cdr}, es\n"
"@code{(violeta margarita bot@'ondeoro)}."

#. type: Plain text
#: emacs-lisp-intro.texi:6962
msgid "You can see this by evaluating the following in the usual way:"
msgstr "Se puede ver esto evaluando lo siguiente del modo usual:"

#. type: smallexample
#: emacs-lisp-intro.texi:6965
#, no-wrap
msgid "(cdr '(rose violet daisy buttercup))\n"
msgstr "(cdr '(rosa violeta margarita bot@'ondeoro))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:6970
msgid ""
"When you evaluate this, @code{(violet daisy buttercup)} will appear in the "
"echo area."
msgstr ""
"Cuando se eval@'ua esto, @code{(violeta margarita bot@'ondeoro)}\n"
"aparecer@'a en el @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:6974
msgid ""
"Like @code{car}, @code{cdr} does not remove any elements from the list---it "
"just returns a report of what the second and subsequent elements are."
msgstr ""
"Al igual que @code{car}, @code{cdr} no elimina los elementos desde la\n"
"lista --- solo devuelve un informe de lo que el segundo y subsiguientes\n"
"elementos son."

#. type: Plain text
#: emacs-lisp-intro.texi:6978
msgid ""
"Incidentally, in the example, the list of flowers is quoted.  If it were "
"not, the Lisp interpreter would try to evaluate the list by calling "
"@code{rose} as a function.  In this example, we do not want to do that."
msgstr ""
"En el ejemplo, la lista de flores se cita. Si no, el int@'erprete Lisp\n"
"intentar@'{@dotless{i}}a evaluar la lista llamando a @code{rosa} como\n"
"una funci@'on. En este ejemplo, no queremos hacer esto."

#. type: Plain text
#: emacs-lisp-intro.texi:6980
msgid "Clearly, a more reasonable name for @code{cdr} would be @code{rest}."
msgstr ""
"Claramente, un nombre m@'as razonable para @code{cdr}\n"
"ser@'{@dotless{i}}a @code{rest}."

#. type: Plain text
#: emacs-lisp-intro.texi:6988
msgid ""
"(There is a lesson here: when you name new functions, consider very "
"carefully what you are doing, since you may be stuck with the names for far "
"longer than you expect.  The reason this document perpetuates these names is "
"that the Emacs Lisp source code uses them, and if I did not use them, you "
"would have a hard time reading the code; but do, please, try to avoid using "
"these terms yourself.  The people who come after you will be grateful to "
"you.)"
msgstr ""
"(Hay una lecci@'on aqu@'{@dotless{i}}: cuando se nombran nuevas\n"
"funciones, considere muy cuidadosamente lo que se est@'a haciendo, ya\n"
"que puede estar pegadas con los nombres largos que se esperan. La\n"
"raz@'on es que este documento perpet@'ua estos nombres que el\n"
"c@'odigo fuente de Emacs Lisp usa, y si no los usaba, se \n"
"estar@'{@dotless{i}}a un duro rato leyendo el c@'odigo; pero, por\n"
"favor, se debe intentar evitar usar estos t@'erminos por uno\n"
"mismo. Las personas que vengan despu@'es se lo agradecer@'an."

#. type: Plain text
#: emacs-lisp-intro.texi:6996
msgid ""
"When @code{car} and @code{cdr} are applied to a list made up of symbols, "
"such as the list @code{(pine fir oak maple)}, the element of the list "
"returned by the function @code{car} is the symbol @code{pine} without any "
"parentheses around it.  @code{pine} is the first element in the list.  "
"However, the @sc{cdr} of the list is a list itself, @code{(fir oak maple)}, "
"as you can see by evaluating the following expressions in the usual way:"
msgstr ""
"Cuando @code{car} y @code{cdr} se aplica a una lista hecha de\n"
"s@'{@dotless{i}}mbolos, tal como la lista @code{(pino roble abeto\n"
"arce)}, el elemento de la lista devuelta por la funci@'on @code{car}\n"
"es el s@'{@dotless{i}}mbolo @code{pino} sin cualquier par@'entesis\n"
"alrededor. @code{pino} es el primer elemento en la lista. Sin embargo,\n"
"el @sc{cdr} de la lista es una lista por s@'{@dotless{i}} misma,\n"
"@code{(roble abeto arce)}, como se puede ver evaluando las siguientes\n"
"expresiones en el modo usual:"

#. type: group
#: emacs-lisp-intro.texi:7000
#, no-wrap
msgid ""
"(car '(pine fir oak maple))\n"
"\n"
msgstr "(car '(pino roble abeto arce))\n\n"

#. type: group
#: emacs-lisp-intro.texi:7002
#, no-wrap
msgid "(cdr '(pine fir oak maple))\n"
msgstr "(cdr '(pino roble abeto arce))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7009
msgid ""
"On the other hand, in a list of lists, the first element is itself a list.  "
"@code{car} returns this first element as a list.  For example, the following "
"list contains three sub-lists, a list of carnivores, a list of herbivores "
"and a list of sea mammals:"
msgstr ""
"Por otro lado, en una lista de listas, el primer elemento es en\n"
"s@'{@dotless{i}} mismo una lista. @code{char} devuelve este primer\n"
"elemento como una lista. Por ejemplo, la siguiente lista contiene tres\n"
"sublistas, una lista de carn@'{@dotless{i}}voros, una lista de\n"
"herb@'{@dotless{i}}voros y una lista de mam@'{@dotless{i}}feros:"

#. type: group
#: emacs-lisp-intro.texi:7015
#, no-wrap
msgid ""
"(car '((lion tiger cheetah)\n"
"       (gazelle antelope zebra)\n"
"       (whale dolphin seal)))\n"
msgstr ""
"(car '((leon tigre leopardo)\n"
"       (gacela antilope cebra)\n"
"       (ballena delfin foca)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7022
msgid ""
"In this example, the first element or @sc{car} of the list is the list of "
"carnivores, @code{(lion tiger cheetah)}, and the rest of the list is "
"@code{((gazelle antelope zebra) (whale dolphin seal))}."
msgstr ""
"En este ejemplo, el primer elemento de @sc{car} de la lista es la\n"
"lista de carn@'{@dotless{i}}voros, @code{(leon tigre leopardo)}, y el\n"
"resto de la lista es @code{((gacela antilope cebra)\n"
"(ballena delfin foca))}."

#. type: group
#: emacs-lisp-intro.texi:7028
#, no-wrap
msgid ""
"(cdr '((lion tiger cheetah)\n"
"       (gazelle antelope zebra)\n"
"       (whale dolphin seal)))\n"
msgstr ""
"(cdr '((leon tigre leopardo)\n"
"       (gacela antilope cebra)\n"
"       (ballena delfin)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7034
msgid ""
"It is worth saying again that @code{car} and @code{cdr} are non-"
"destructive---that is, they do not modify or change lists to which they are "
"applied.  This is very important for how they are used."
msgstr ""
"Es un valor decir de nuevo que @code{car} y @code{cdr} son no\n"
"destructivos --- esto es, no se modifican o cambian listas para las\n"
"que ser aplicados. Esto es muy importante por c@'omo son usados."

#. type: Plain text
#: emacs-lisp-intro.texi:7047
msgid ""
"Also, in the first chapter, in the discussion about atoms, I said that in "
"Lisp, ``certain kinds of atom, such as an array, can be separated into "
"parts; but the mechanism for doing this is different from the mechanism for "
"splitting a list.  As far as Lisp is concerned, the atoms of a list are "
"unsplittable.'' (@xref{Lisp Atoms}.)  The @code{car} and @code{cdr} "
"functions are used for splitting lists and are considered fundamental to "
"Lisp.  Since they cannot split or gain access to the parts of an array, an "
"array is considered an atom.  Conversely, the other fundamental function, "
"@code{cons}, can put together or construct a list, but not an array.  "
"(Arrays are handled by array-specific functions.  @xref{Arrays, , Arrays, "
"elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"Tambi@'en, en el primer cap@'{@dotless{i}}tulo, en la discusi@'on\n"
"acerca de @'atomos, yo dije que en Lisp, ``ciertos tipos de @'atomos,\n"
"tales como un array, pueden separarse en partes; pero el mecanismo de\n"
"hacer esto es diferente del mecanismo de separar una lista. Desde\n"
"que Lisp se conoce, los @'atomos de una lista son indivisibles.''\n"
"(@xref{@'Atomos Lisp}.) El @code{car} y el @code{cdr} son funciones que\n"
"son usadas para dividir listas y son consideradas fundamentales para\n"
"Lisp. Puesto que no pueden dividir o ganar acceso a las partes de un array,\n"
"un array es considerado un @'atomo. De otro modo, la otra\n"
"funci@'on fundamental, @code{cons}, se puede poner cerca o construir\n"
"una lista, pero no un array. (Los arrays son manejados por funciones de\n"
"array espec@'{@dotless{i}}ficas. @xref{Arrays, , Arrays, elisp, El\n"
"Manual de Referencia de GNU Emacs Lisp}.)"

#. type: findex
#: emacs-lisp-intro.texi:7050
#, no-wrap
msgid "cons, @r{introduced}"
msgstr "cons, @r{introducido}"

#. type: Plain text
#: emacs-lisp-intro.texi:7055
msgid ""
"The @code{cons} function constructs lists; it is the inverse of @code{car} "
"and @code{cdr}.  For example, @code{cons} can be used to make a four element "
"list from the three element list, @code{(fir oak maple)}:"
msgstr ""
"La funci@'on @code{cons} construye listas; eso es lo inverso de\n"
"@code{car} y @code{cdr}. Por ejemplo, @code{cons} puede usarse para\n"
"crear una lista de cuatro elementos desde los tres elementos de la\n"
"lista, @code{(abeto roble arce)}:"

#. type: smallexample
#: emacs-lisp-intro.texi:7058
#, no-wrap
msgid "(cons 'pine '(fir oak maple))\n"
msgstr "(cons 'pino '(abeto roble arce))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7063
msgid "After evaluating this list, you will see"
msgstr "Despu@'es de evaluar esto, se ver@'a lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:7066
#, no-wrap
msgid "(pine fir oak maple)\n"
msgstr "(pino abeto roble arce)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7072
msgid ""
"appear in the echo area.  @code{cons} causes the creation of a new list in "
"which the element is followed by the elements of the original list."
msgstr ""
"aparece en el @'area echo. @code{cons} causa la creaci@'on de una\n"
"nueva lista en el que el elemento es seguido por los elementos de la\n"
"lista original."

#. type: Plain text
#: emacs-lisp-intro.texi:7077
msgid ""
"We often say that `@code{cons} puts a new element at the beginning of a "
"list; it attaches or pushes elements onto the list', but this phrasing can "
"be misleading, since @code{cons} does not change an existing list, but "
"creates a new one."
msgstr ""
"Con frecuencia decimos que `@code{cons} pone un nuevo elemento al\n"
"principio de una lista; adjunta o empuja el elemento dentro de la lista',\n"
"pero esta frase puede ser incorrecta, puesto que @code{cons} no cambia\n"
"a una lista existente, pero crea una nueva."

#. type: Plain text
#: emacs-lisp-intro.texi:7079
msgid "Like @code{car} and @code{cdr}, @code{cons} is non-destructive."
msgstr "Como @code{car} y @code{cdr}, @code{cons} es no destructivo."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:7086 emacs-lisp-intro.texi:7087
#, no-wrap
msgid "Build a list"
msgstr "Construir una lista"

#. type: Plain text
#: emacs-lisp-intro.texi:7100
msgid ""
"@code{cons} must have a list to attach to.@footnote{Actually, you can "
"@code{cons} an element to an atom to produce a dotted pair.  Dotted pairs "
"are not discussed here; see @ref{Dotted Pair Notation, , Dotted Pair "
"Notation, elisp, The GNU Emacs Lisp Reference Manual}.} You cannot start "
"from absolutely nothing.  If you are building a list, you need to provide at "
"least an empty list at the beginning.  Here is a series of @code{cons} "
"expressions that build up a list of flowers.  If you are reading this in "
"Info in GNU Emacs, you can evaluate each of the expressions in the usual "
"way; the value is printed in this text after @samp{@result{}}, which you may "
"read as `evaluates to'."
msgstr ""
"@code{cons} debe tener una lista para adjuntar a@footnote{Actualmente,\n"
"se puede @code{cons} un elemento para un @'atomo para producir a para\n"
"punteado. Los pares punteados no se discuten aqu@'{@dotless{i}}; ver\n"
"@ref{Notaci@'on de Pares Punteados, , Notaci@'on de Para Punteado,\n"
"elisp, El Manual de Referencia de GNU Emacs Lisp}.} No se puede\n"
"empezar desde absolutamente nada. Si se est@'a construyendo una lista,\n"
"se necesita proveer al menos una lista vac@'{@dotless{i}}a al\n"
"principio. Aqu@'{@dotless{i}} hay una serie de expresiones @code{cons}\n"
"que construyen una lista de flores. Si est@'a leyendo esto en Info en\n"
"GNU Emacs, se puede evaluar cada una de las expresiones en el camino\n"
"usual; el valor es impreso en este texto despu@'es de @samp{@result{}},\n"
"que puede leer como `eval@'uas para'."

#. type: group
#: emacs-lisp-intro.texi:7105
#, no-wrap
msgid ""
"(cons 'buttercup ())\n"
"     @result{} (buttercup)\n"
msgstr ""
"(cons 'bot@'ondeoro ())\n"
"     @result{} (bot@'ondeoro)\n"

#. type: group
#: emacs-lisp-intro.texi:7110
#, no-wrap
msgid ""
"(cons 'daisy '(buttercup))\n"
"     @result{} (daisy buttercup)\n"
msgstr ""
"(cons 'margarita '(bot@'ondeoro))\n"
"     @result{} (margarita bot@'ondeoro)\n"

#. type: group
#: emacs-lisp-intro.texi:7115
#, no-wrap
msgid ""
"(cons 'violet '(daisy buttercup))\n"
"     @result{} (violet daisy buttercup)\n"
msgstr ""
"(cons 'violeta '(margarita bot@'ondeoro))\n"
"     @result{} (violeta margarita bot@'ondeoro)\n"

#. type: group
#: emacs-lisp-intro.texi:7120
#, no-wrap
msgid ""
"(cons 'rose '(violet daisy buttercup))\n"
"     @result{} (rose violet daisy buttercup)\n"
msgstr ""
"(cons 'rosa '(violeta margarita bot@'ondeoro))\n"
"     @result{} (rosa violeta margarita bot@'ondeoro)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7130
msgid ""
"In the first example, the empty list is shown as @code{()} and a list made "
"up of @code{buttercup} followed by the empty list is constructed.  As you "
"can see, the empty list is not shown in the list that was constructed.  All "
"that you see is @code{(buttercup)}.  The empty list is not counted as an "
"element of a list because there is nothing in an empty list.  Generally "
"speaking, an empty list is invisible."
msgstr ""
"En el primer ejemplo, la lista vac@'{@dotless{i}}a se muestra como\n"
"@code{()} y despu@'es se construye una lista de @code{bot@'ondeoro}\n"
"seguida por la lista vac@'{@dotless{i}}a. Como se puede ver, la lista\n"
"vac@'{@dotless{i}}a no se muestra en la lista que fu@'e\n"
"construida. Todo lo que se ve es @code{(bot@'ondeoro)}. La lista\n"
"vac@'{@dotless{i}}a no cuenta como un elemento de una lista porque\n"
"no hay nada en una lista vac@'{@dotless{i}}a. Generalmente hablando,\n"
"una lista vac@'{@dotless{i}}a es invisible."

#. type: Plain text
#: emacs-lisp-intro.texi:7135
msgid ""
"The second example, @code{(cons 'daisy '(buttercup))} constructs a new, two "
"element list by putting @code{daisy} in front of @code{buttercup}; and the "
"third example constructs a three element list by putting @code{violet} in "
"front of @code{daisy} and @code{buttercup}."
msgstr ""
"El segundo ejemplo, @code{(cons 'margarita '(bot@'ondeoro))} construye\n"
"una nueva lista de dos elemento poniendo @code{margarita} en frente de\n"
"@code{bot@'ondeoro}; y el tercer ejemplo construye una lista de tres\n"
"elementos poniendo @code{violeta} en frente de @code{margarita} y\n"
"@code{bot@'ondeoro}."

#. type: subsection
#: emacs-lisp-intro.texi:7137
#, no-wrap
msgid "Find the Length of a List: @code{length}"
msgstr "Encuentra el tama@~no de una lista: @code{length}"

#. type: Plain text
#: emacs-lisp-intro.texi:7142
msgid ""
"You can find out how many elements there are in a list by using the Lisp "
"function @code{length}, as in the following examples:"
msgstr ""
"Se pueden encontrar cu@'antos elementos hay en una lista usando la\n"
"funci@'on Lisp @code{length}, como en los siguientes ejemplos:"

#. type: group
#: emacs-lisp-intro.texi:7147
#, no-wrap
msgid ""
"(length '(buttercup))\n"
"     @result{} 1\n"
msgstr ""
"(length '(bot@'ondeoro))\n"
"     @result{} 1\n"

#. type: group
#: emacs-lisp-intro.texi:7152
#, no-wrap
msgid ""
"(length '(daisy buttercup))\n"
"     @result{} 2\n"
msgstr ""
"(length '(margarita bot@'ondeoro))\n"
"     @result{} 2\n"

#. type: group
#: emacs-lisp-intro.texi:7157
#, no-wrap
msgid ""
"(length (cons 'violet '(daisy buttercup)))\n"
"     @result{} 3\n"
msgstr ""
"(length (cons 'violeta '(margarita bot@'ondeoro)))\n"
"     @result{} 3\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7164
msgid ""
"In the third example, the @code{cons} function is used to construct a three "
"element list which is then passed to the @code{length} function as its "
"argument."
msgstr ""
"En el tercer ejemplo, la funci@'on @code{cons} es usada para construir\n"
"una lista de tres elementos que entonces se pasa a la funci@'on\n"
"@code{length} como su argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:7168
msgid ""
"We can also use @code{length} to count the number of elements in an empty "
"list:"
msgstr ""
"Se puede tambi@'en usar @code{length} para contar el n@'umero de\n"
"elementos en una lista vac@'{@dotless{i}}a:"

#. type: group
#: emacs-lisp-intro.texi:7173
#, no-wrap
msgid ""
"(length ())\n"
"     @result{} 0\n"
msgstr ""
"(length ())\n"
"     @result{} 0\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7178
msgid "As you would expect, the number of elements in an empty list is zero."
msgstr ""
"Como se esperar@'{@dotless{i}}a, el n@'umero de elementos en una lista\n"
"vac@'{@dotless{i}}a es cero."

#. type: Plain text
#: emacs-lisp-intro.texi:7182
msgid ""
"An interesting experiment is to find out what happens if you try to find the "
"length of no list at all; that is, if you try to call @code{length} without "
"giving it an argument, not even an empty list:"
msgstr ""
"Un experimento interesante es encontrar qu@'e ocurre si se intenta\n"
"encontrar el tama@~no de una no lista en todo; que es, si se intenta\n"
"llamar a @code{length} sin darle un argumento, incluso una lista no\n"
"vac@'{@dotless{i}}a:"

#. type: smallexample
#: emacs-lisp-intro.texi:7185
#, no-wrap
msgid "(length )\n"
msgstr "(length )\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7190
msgid "What you see, if you evaluate this, is the error message"
msgstr "Lo que se ve, si se eval@'ua esto, es el mensaje de error"

#. type: smallexample
#: emacs-lisp-intro.texi:7193
#, no-wrap
msgid "Lisp error: (wrong-number-of-arguments length 0)\n"
msgstr "Lisp error: (wrong-number-of-arguments length 0)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7201
msgid ""
"This means that the function receives the wrong number of arguments, zero, "
"when it expects some other number of arguments.  In this case, one argument "
"is expected, the argument being a list whose length the function is "
"measuring.  (Note that @emph{one} list is @emph{one} argument, even if the "
"list has many elements inside it.)"
msgstr ""
"Esto significa que la funci@'on recibe el n@'umero incorrecto de\n"
"argumentos, cero, cuando se espera alg@'un otro n@'umero de\n"
"argumentos. En este caso, se espera un argumento, el argumento de una\n"
"lista cuyo tama@~no de la funci@'on se est@'a midiendo. (N@'otese que\n"
"@emph{una} lista es @emph{un} argumento, incluso si la lista tiene\n"
"muchos elementos dentro.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7204
msgid ""
"The part of the error message that says @samp{length} is the name of the "
"function."
msgstr ""
"La parte del mensaje de error que dice @samp{length} es el nombre de la\n"
"funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:7223
msgid ""
"The @code{nthcdr} function is associated with the @code{cdr} function.  What "
"it does is take the @sc{cdr} of a list repeatedly."
msgstr ""
"La funci@'on @code{nthcdr} est@'a asociada con la funci@'on\n"
"@code{cdr}. Que lo que hace es tomar la @sc{cdr} de una lista repetidamente."

#. type: Plain text
#: emacs-lisp-intro.texi:7233
msgid ""
"If you take the @sc{cdr} of the list @code{(pine fir oak maple)}, you will "
"be returned the list @code{(fir oak maple)}.  If you repeat this on what was "
"returned, you will be returned the list @code{(oak maple)}.  (Of course, "
"repeated @sc{cdr}ing on the original list will just give you the original "
"@sc{cdr} since the function does not change the list.  You need to evaluate "
"the @sc{cdr} of the @sc{cdr} and so on.)  If you continue this, eventually "
"you will be returned an empty list, which in this case, instead of being "
"shown as @code{()} is shown as @code{nil}."
msgstr ""
"Si se toma el @sc{cdr} de la lista @code{(pino roble abeto arce)},\n"
"ser@'a devuelta la lista @code{(roble abeto arce)}. Si se repite esto en\n"
"lo que se devolvi@'o, se devolver@'a lista lista @code{(abeto\n"
"arce)}. (De acuerdo, se repite @sc{cdr} en la lista original solo se\n"
"dar@'a @sc{cdr} desde la funci@'on que no cambia la lista. Se necesita\n"
"evaluar el @sc{cdr} del @sc{cdr} y as@'{@dotless{i}}.) Si se conti@'ua\n"
"esto, finalmente ser@'a devuelta una lista vac@'{@dotless{i}}a, que en\n"
"este caso, en vez de ser mostrada como @code{()} es mostrado como @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:7237
msgid ""
"For review, here is a series of repeated @sc{cdr}s, the text following the "
"@samp{@result{}} shows what is returned."
msgstr ""
"Para revisar, aqu@'{@dotless{i}} hay una serie de @sc{cdr}s repetidos,\n"
"el siguiente @samp{@result{}} muestra lo que se devuelve."

#. type: group
#: emacs-lisp-intro.texi:7242
#, no-wrap
msgid ""
"(cdr '(pine fir oak maple))\n"
"     @result{}(fir oak maple)\n"
msgstr ""
"(cdr '(pino roble abeto arce))\n"
"     @result{}(roble abeto arce)\n"

#. type: group
#: emacs-lisp-intro.texi:7247
#, no-wrap
msgid ""
"(cdr '(fir oak maple))\n"
"     @result{} (oak maple)\n"
msgstr ""
"(cdr '(roble abeto arce))\n"
"     @result{} (abeto arce)\n"

#. type: group
#: emacs-lisp-intro.texi:7252
#, no-wrap
msgid ""
"(cdr '(oak maple))\n"
"     @result{}(maple)\n"
msgstr ""
"(cdr '(abeto arce))\n"
"     @result{}(arce)\n"

#. type: group
#: emacs-lisp-intro.texi:7257
#, no-wrap
msgid ""
"(cdr '(maple))\n"
"     @result{} nil\n"
msgstr ""
"(cdr '(arce))\n"
"     @result{} nil\n"

#. type: group
#: emacs-lisp-intro.texi:7262
#, no-wrap
msgid ""
"(cdr 'nil)\n"
"     @result{} nil\n"
msgstr ""
"(cdr 'nil)\n"
"     @result{} nil\n"

#. type: group
#: emacs-lisp-intro.texi:7267
#, no-wrap
msgid ""
"(cdr ())\n"
"     @result{} nil\n"
msgstr ""
"(cdr ())\n"
"     @result{} nil\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7273
msgid ""
"You can also do several @sc{cdr}s without printing the values in between, "
"like this:"
msgstr ""
"Tambi@'en se pueden hacer varios @sc{cdr}s sin imprimir los valores\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:7278
#, no-wrap
msgid ""
"(cdr (cdr '(pine fir oak maple)))\n"
"     @result{} (oak maple)\n"
msgstr ""
"(cdr (cdr '(pino roble abeto arce)))\n"
"     @result{} (abeto arce)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7290
msgid ""
"In this example, the Lisp interpreter evaluates the innermost list first.  "
"The innermost list is quoted, so it just passes the list as it is to the "
"innermost @code{cdr}.  This @code{cdr} passes a list made up of the second "
"and subsequent elements of the list to the outermost @code{cdr}, which "
"produces a list composed of the third and subsequent elements of the "
"original list.  In this example, the @code{cdr} function is repeated and "
"returns a list that consists of the original list without its first two "
"elements."
msgstr ""
"En este ejemplo, el int@'erprete Lisp eval@'ua la lista propia\n"
"dentro. La lista de dentro est@'a entre comillas, as@'{@dotless{i}} solo\n"
"pasa la lista del @code{cdr} m@'as interno. Este @code{cdr}\n"
"pasa una lista hecho del segundo y subsiguientes elementos de la lista\n"
"al @code{cdr} m@'as externo, que produce una lista compuesta del tercer y\n"
"subsiguientes elementos de la lista original. En este ejemplo, la\n"
"funci@'on @code{cdr} se repite y devuelve una lista que consiste de\n"
"la lista original sin sus primeros dos elementos."

#. type: Plain text
#: emacs-lisp-intro.texi:7296
msgid ""
"The @code{nthcdr} function does the same as repeating the call to "
"@code{cdr}.  In the following example, the argument 2 is passed to the "
"function @code{nthcdr}, along with the list, and the value returned is the "
"list without its first two items, which is exactly the same as repeating "
"@code{cdr} twice on the list:"
msgstr ""
"La funci@'on @code{nthcdr} hace lo mismo que repitiendo la llamada a\n"
"@code{cdr}. En el siguiente ejemplo, el segundo argumento se pasa a la\n"
"funci@'on @code{nthcdr}, a trav@'es con la lista, y el valor devuelto\n"
"es la lista sin sus primeros dos @'{@dotless{i}}tems, que son\n"
"exactamente los mismos dos @code{cdr} en la lista:"

#. type: group
#: emacs-lisp-intro.texi:7301
#, no-wrap
msgid ""
"(nthcdr 2 '(pine fir oak maple))\n"
"     @result{} (oak maple)\n"
msgstr ""
"(nthcdr 2 '(pino roble abeto arce))\n"
"     @result{} (abeto arce)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7308
msgid ""
"Using the original four element list, we can see what happens when various "
"numeric arguments are passed to @code{nthcdr}, including 0, 1, and 5:"
msgstr ""
"Usando la lista original de cuatro elementos, se puede ver qu@'e\n"
"ocurre cuando varios argumentos num@'ericos son pasados a @code{nthcdr},\n"
"incluyendo 0, 1, y 5:"

#. type: group
#: emacs-lisp-intro.texi:7314
#, no-wrap
msgid ""
";; @r{Leave the list as it was.}\n"
"(nthcdr 0 '(pine fir oak maple))\n"
"     @result{} (pine fir oak maple)\n"
msgstr ""
";; @r{Deja la lista como estaba.}\n"
"(nthcdr 0 '(pine fir oak maple))\n"
"     @result{} (pino roble abeto arce)\n"

#. type: group
#: emacs-lisp-intro.texi:7320
#, no-wrap
msgid ""
";; @r{Return a copy without the first element.}\n"
"(nthcdr 1 '(pine fir oak maple))\n"
"     @result{} (fir oak maple)\n"
msgstr ""
";; @r{Devuelve una copia sin el primer elemento.}\n"
"(nthcdr 1 '(pine fir oak maple))\n"
"     @result{} (fir oak maple)\n"

#. type: group
#: emacs-lisp-intro.texi:7326
#, no-wrap
msgid ""
";; @r{Return a copy of the list without three elements.}\n"
"(nthcdr 3 '(pine fir oak maple))\n"
"     @result{} (maple)\n"
msgstr ""
";; @r{Devuelve una copia de la lista sin tres elementos.}\n"
"(nthcdr 3 '(pine fir oak maple))\n"
"     @result{} (maple)\n"

#. type: group
#: emacs-lisp-intro.texi:7332
#, no-wrap
msgid ""
";; @r{Return a copy lacking all four elements.}\n"
"(nthcdr 4 '(pine fir oak maple))\n"
"     @result{} nil\n"
msgstr ""
";; @r{Devuelve la lista faltando los cuatro elementos.}\n"
"(nthcdr 4 '(pine fir oak maple))\n"
"     @result{} nil\n"

#. type: group
#: emacs-lisp-intro.texi:7338
#, no-wrap
msgid ""
";; @r{Return a copy lacking all elements.}\n"
"(nthcdr 5 '(pine fir oak maple))\n"
"     @result{} nil\n"
msgstr ""
";; @r{Devuelve una copia sin los elementos.}\n"
"(nthcdr 5 '(pine fir oak maple))\n"
"     @result{} nil\n"

#. type: findex
#: emacs-lisp-intro.texi:7341 emacs-lisp-intro.texi:7342
#: emacs-lisp-intro.texi:7343
#, no-wrap
msgid "nth"
msgstr "nth"

#. type: Plain text
#: emacs-lisp-intro.texi:7348
msgid ""
"The @code{nthcdr} function takes the @sc{cdr} of a list repeatedly.  The "
"@code{nth} function takes the @sc{car} of the result returned by "
"@code{nthcdr}.  It returns the Nth element of the list."
msgstr ""
"La funci@'on @code{nthcdr} toma el @sc{cdr} de una lista\n"
"repetidamente. La funci@'on @code{nth} toma el @sc{car} del resultado\n"
"devuelto por @code{nthcdr}. Devuelve el elemento Nth de la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:7352
msgid ""
"Thus, if it were not defined in C for speed, the definition of @code{nth} "
"would be:"
msgstr ""
"De este modo, si no fuera definido en C para velocidad, la\n"
"definici@'on de @code{nth} ser@'{@dotless{i}}a:"

#. type: group
#: emacs-lisp-intro.texi:7359
#, no-wrap
msgid ""
"(defun nth (n list)\n"
"  \"Returns the Nth element of LIST.\n"
"N counts from zero.  If LIST is not that long, nil is returned.\"\n"
"  (car (nthcdr n list)))\n"
msgstr ""
"(defun nth (n list)\n"
"  \"Devuelve el elemento Nth de Lista.\n"
"N cuenta desde cero. Si Lista no es larga, nil es devuelto\".\n"
"  (car (nthcdr n list)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7365
msgid ""
"(Originally, @code{nth} was defined in Emacs Lisp in @file{subr.el}, but its "
"definition was redone in C in the 1980s.)"
msgstr ""
"(Originalmente, @code{nth} fu@'e definido en Emacs Lisp en\n"
"@file{subr.el}, pero su definici@'on fu@'e rehecha en C en los 1980s.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7368
msgid ""
"The @code{nth} function returns a single element of a list.  This can be "
"very convenient."
msgstr ""
"La funci@'on @code{nth} devuelve un elemento simple de una lista. Esto\n"
"puede ser muy conveniente."

#. type: Plain text
#: emacs-lisp-intro.texi:7374
msgid ""
"Note that the elements are numbered from zero, not one.  That is to say, the "
"first element of a list, its @sc{car} is the zeroth element.  This is called "
"`zero-based' counting and often bothers people who are accustomed to the "
"first element in a list being number one, which is `one-based'."
msgstr ""
"N@'otese que los elementos son numerados desde cero, no desde uno. Es\n"
"decir, el primer elemento de una lista, su @sc{car} es el elemento\n"
"cero. Esto se llama contar en `base cero' y con frecuencia las\n"
"personas tienen la costumbre del que el primer elemento en una lista\n"
"sea el n@'umero uno, eso es `basado en uno'."

#. type: table
#: emacs-lisp-intro.texi:7377 emacs-lisp-intro.texi:9408
#: emacs-lisp-intro.texi:9424 emacs-lisp-intro.texi:9449
#: emacs-lisp-intro.texi:9464 emacs-lisp-intro.texi:9487
#: emacs-lisp-intro.texi:13588 emacs-lisp-intro.texi:13640
msgid "For example:"
msgstr "Por ejemplo:"

#. type: group
#: emacs-lisp-intro.texi:7382
#, no-wrap
msgid ""
"(nth 0 '(\"one\" \"two\" \"three\"))\n"
"    @result{} \"one\"\n"
"\n"
msgstr ""
"(nth 0 '(\"uno\" \"dos\" \"tres\"))\n"
"    @result{} \"uno\"\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:7385
#, no-wrap
msgid ""
"(nth 1 '(\"one\" \"two\" \"three\"))\n"
"    @result{} \"two\"\n"
msgstr ""
"(nth 1 '(\"uno\" \"dos\" \"tres\"))\n"
"    @result{} \"dos\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7392
msgid ""
"It is worth mentioning that @code{nth}, like @code{nthcdr} and @code{cdr}, "
"does not change the original list---the function is non-destructive.  This "
"is in sharp contrast to the @code{setcar} and @code{setcdr} functions."
msgstr ""
"Es valorable mencionar que @code{nth}, como @code{nthcdr} y\n"
"@code{cdr}, no cambia la lista original --- la funci@'on no es\n"
"destructiva. En contraste con las funciones @code{setcar} y\n"
"@code{setcdr}."

#. type: Plain text
#: emacs-lisp-intro.texi:7402
msgid ""
"As you might guess from their names, the @code{setcar} and @code{setcdr} "
"functions set the @sc{car} or the @sc{cdr} of a list to a new value.  They "
"actually change the original list, unlike @code{car} and @code{cdr} which "
"leave the original list as it was.  One way to find out how this works is to "
"experiment.  We will start with the @code{setcar} function."
msgstr ""
"Como se podr@'{@dotless{i}}a adivinar desde sus nombres, las funciones\n"
"@code{setcar} y @code{setcdr} asignan el @sc{car} o la @sc{cdr} de una\n"
"lista a un nuevo valor. Ellos actualmente cambia la lista original, no\n"
"como @code{car} y @code{cdr} que deja la lista original como\n"
"estaba. Un camino para encontrar c@'omo esto funciona es\n"
"experimentar. Se comenzar@'a con la funci@'on @code{setcar}."

#. type: Plain text
#: emacs-lisp-intro.texi:7406
msgid ""
"First, we can make a list and then set the value of a variable to the list, "
"using the @code{setq} function.  Here is a list of animals:"
msgstr ""
"Primero, podemos crear una lista y entonces asignar el valor de una\n"
"variable a la lista usando la funci@'on\n"
"@code{setq}. Aqu@'{@dotless{i}} hay una lista de animales:"

#. type: smallexample
#: emacs-lisp-intro.texi:7409
#, no-wrap
msgid "(setq animals '(antelope giraffe lion tiger))\n"
msgstr "(setq animales '(antilope jirafa leon tigre))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7422
msgid ""
"If you are reading this in Info inside of GNU Emacs, you can evaluate this "
"expression in the usual fashion, by positioning the cursor after the "
"expression and typing @kbd{C-x C-e}.  (I'm doing this right here as I write "
"this.  This is one of the advantages of having the interpreter built into "
"the computing environment.  Incidentally, when there is nothing on the line "
"after the final parentheses, such as a comment, point can be on the next "
"line.  Thus, if your cursor is in the first column of the next line, you do "
"not need to move it.  Indeed, Emacs permits any amount of white space after "
"the final parenthesis.)"
msgstr ""
"Si est@'a leyendo esto en Info dentro de GNU Emacs, se puede evaluar\n"
"esta expresi@'on del modo usual, posicionando el cursor despu@'es de\n"
"la expresi@'on y escribiendo @kbd{C-x C-e}. Esto es una de las\n"
"ventajas de tener el int@'erprete construido dentro del entorno de\n"
"computaci@'on. Incidentalmente, cuando no hay nada en la\n"
"l@'{@dotless{i}}nea despu@'es del par@'entesis final, tal como un\n"
"comentario, el punto puede estar en la siguiente\n"
"l@'{@dotless{i}}nea. De este modo, si tu cursor est@'a en la primera\n"
"columna de la siguiente l@'{@dotless{i}}nea, no se necesita mover. En\n"
"realidad, Emacs permite cualquier cantidad de espacio en blanco\n"
"despu@'es del par@'entesis final.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7426
msgid ""
"When we evaluate the variable @code{animals}, we see that it is bound to the "
"list @code{(antelope giraffe lion tiger)}:"
msgstr ""
"Cuando se eval@'ua la variable @code{animal}, vemos que est@'a\n"
"asociada a la lista @code{(antelope giraffer lion tiger)}:"

#. type: group
#: emacs-lisp-intro.texi:7431
#, no-wrap
msgid ""
"animals\n"
"     @result{} (antelope giraffe lion tiger)\n"
msgstr ""
"animales\n"
"     @result{} (antilope jirafa leon tigre)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7437
msgid ""
"Put another way, the variable @code{animals} points to the list "
"@code{(antelope giraffe lion tiger)}."
msgstr ""
"Por otro lado, la variable @code{animales} apunta a la lista\n"
"@code{(antilope jirafa leon tigre)}."

#. type: Plain text
#: emacs-lisp-intro.texi:7443
msgid ""
"Next, evaluate the function @code{setcar} while passing it two arguments, "
"the variable @code{animals} and the quoted symbol @code{hippopotamus}; this "
"is done by writing the three element list @code{(setcar animals "
"'hippopotamus)} and then evaluating it in the usual fashion:"
msgstr ""
"Lo siguiente, es evaluar la funci@'on @code{setcar} mientras le pasa\n"
"dos argumentos, la variable @code{animales} y el s@'{@dotless{i}}mbolo\n"
"citado @code{hipopotamo}; esto se hace escribiendo la lista de tres\n"
"elementos @code{(setcar animales 'hipopotamo)} y entonces evaluando\n"
"en el modo usual:"

#. type: smallexample
#: emacs-lisp-intro.texi:7446
#, no-wrap
msgid "(setcar animals 'hippopotamus)\n"
msgstr "(setcar animales 'hipopotamo)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7452
msgid ""
"After evaluating this expression, evaluate the variable @code{animals} "
"again.  You will see that the list of animals has changed:"
msgstr ""
"Despu@'es de evaluar esta expresi@'on, eval@'ua la variable\n"
"@code{animales} de nuevo. Se puede ver que la lista de animales ha\n"
"cambiado:"

#. type: group
#: emacs-lisp-intro.texi:7457
#, no-wrap
msgid ""
"animals\n"
"     @result{} (hippopotamus giraffe lion tiger)\n"
msgstr ""
"animales\n"
"     @result{} (hipop@'otamo jirafa leon tigre)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7463
msgid ""
"The first element on the list, @code{antelope} is replaced by "
"@code{hippopotamus}."
msgstr ""
"El primer elemento en la lista, @code{antilope} se reemplaza por\n"
"@code{hipopotamo}."

#. type: Plain text
#: emacs-lisp-intro.texi:7467
msgid ""
"So we can see that @code{setcar} did not add a new element to the list as "
"@code{cons} would have; it replaced @code{antelope} with "
"@code{hippopotamus}; it @emph{changed} the list."
msgstr ""
"As@'{@dotless{i}} se puede ver que @code{setcar} no a@~nadi@'o un\n"
"nuevo elemento a la lista como @code{cons} tendr@'{@dotless{i}}a; eso\n"
"reemplaz@'o @code{ant@'{@dotless{i}}lope} con @code{hipop@'otamo}; eso\n"
"@emph{cambi@'o} la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:7475
msgid ""
"The @code{setcdr} function is similar to the @code{setcar} function, except "
"that the function replaces the second and subsequent elements of a list "
"rather than the first element."
msgstr ""
"La funci@'on @code{setcdr} es similar a la funci@'on @code{setcar},\n"
"excepto que la funci@'on reemplaza el segundo y subsiguientes\n"
"elementos de una lista en vez del primer elemento."

#. type: Plain text
#: emacs-lisp-intro.texi:7479
msgid ""
"(To see how to change the last element of a list, look ahead to @ref{kill-"
"new function, , The @code{kill-new} function}, which uses the @code{nthcdr} "
"and @code{setcdr} functions.)"
msgstr ""
"(Para ver c@'omo se cambia el @'ultimo elemento de una lista, mira hacia\n"
"delante a la @ref{Funci@'on kill-new, , La funci@'on @code{kill-new}},\n"
"que usa las funciones @code{nthcdr} y @code{setcdr}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7483
msgid ""
"To see how this works, set the value of the variable to a list of "
"domesticated animals by evaluating the following expression:"
msgstr ""
"Para ver c@'omo esto funciona, asigna el valor de la variable a una\n"
"lista de animales domesticados evaluando la siguiente expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:7486
#, no-wrap
msgid "(setq domesticated-animals '(horse cow sheep goat))\n"
msgstr "(setq animales-domesticos '(caballo vaca oveja cabra))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7492
msgid ""
"If you now evaluate the list, you will be returned the list @code{(horse cow "
"sheep goat)}:"
msgstr ""
"Si ahora se eval@'ua la lista, lo que se devuelve es @code{(caballo\n"
"vaca oveja cabra)}:"

#. type: group
#: emacs-lisp-intro.texi:7497
#, no-wrap
msgid ""
"domesticated-animals\n"
"     @result{} (horse cow sheep goat)\n"
msgstr ""
"animales-domesticos\n"
"     @result{} (caballo vaca oveja cabra)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7504
msgid ""
"Next, evaluate @code{setcdr} with two arguments, the name of the variable "
"which has a list as its value, and the list to which the @sc{cdr} of the "
"first list will be set;"
msgstr ""
"Lo siguiente, eval@'ua @code{setcdr} con dos argumentos, el nombre de la\n"
"variable que tiene una lista como su valor, y la lista para la que el\n"
"@sc{cdr} de la primera lista sea asignada;"

#. type: smallexample
#: emacs-lisp-intro.texi:7507
#, no-wrap
msgid "(setcdr domesticated-animals '(cat dog))\n"
msgstr "(setcdr animales-domesticos '(gato perro))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7514
msgid ""
"If you evaluate this expression, the list @code{(cat dog)} will appear in "
"the echo area.  This is the value returned by the function.  The result we "
"are interested in is the ``side effect'', which we can see by evaluating the "
"variable @code{domesticated-animals}:"
msgstr ""
"Si se eval@'ua esta expresi@'on, la lista @code{(gato perro)} aparecer@'a\n"
"en el @'area echo. Este es el valor devuelto por la funci@'on. El\n"
"resultado en el que estamos interesados es el ``efecto lateral'', que\n"
"se puede ver evaluando la variable @code{domesticated-animals}:"

#. type: group
#: emacs-lisp-intro.texi:7519
#, no-wrap
msgid ""
"domesticated-animals\n"
"     @result{} (horse cat dog)\n"
msgstr ""
"animales-domesticos\n"
"     @result{} (caballo gato perro)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7526
msgid ""
"Indeed, the list is changed from @code{(horse cow sheep goat)} to "
"@code{(horse cat dog)}.  The @sc{cdr} of the list is changed from @code{(cow "
"sheep goat)} to @code{(cat dog)}."
msgstr ""
"En realidad, la lista es cambiada desde @code{(caballo vaca oveja cabra)}\n"
"a @code{(caballo gato perro)}. El @sc{cdr} de la lista es cambiada desde\n"
"@code{(vaca oveja cabra)} a @code{(gato perro)}."

#. type: Plain text
#: emacs-lisp-intro.texi:7534
msgid ""
"Construct a list of four birds by evaluating several expressions with "
"@code{cons}.  Find out what happens when you @code{cons} a list onto "
"itself.  Replace the first element of the list of four birds with a fish.  "
"Replace the rest of that list with a list of other fish."
msgstr ""
"Construye una lista de cuatro p@'ajaros evaluando varias expresiones\n"
"con @code{cons}. Encuentra que ocurre cuando @code{cons} una lista\n"
"dentro de s@'{@dotless{i}}. Reemplaza el primer elemento de la lista\n"
"de cuatro p@'ajaros con un pez. Reemplaza el resto de esta lista con\n"
"una lista de otro pez."

#. type: cindex
#: emacs-lisp-intro.texi:7537
#, no-wrap
msgid "Cutting and storing text"
msgstr "Cortando y almacenando texto"

#. type: cindex
#: emacs-lisp-intro.texi:7538
#, no-wrap
msgid "Storing and cutting text"
msgstr "Almacenando y cortando texto"

#. type: cindex
#: emacs-lisp-intro.texi:7539
#, no-wrap
msgid "Killing text"
msgstr "Cortando texto"

#. type: cindex
#: emacs-lisp-intro.texi:7540
#, no-wrap
msgid "Clipping text"
msgstr "Copiando texto"

#. type: cindex
#: emacs-lisp-intro.texi:7541
#, no-wrap
msgid "Erasing text"
msgstr "Borrando texto"

#. type: cindex
#: emacs-lisp-intro.texi:7542
#, no-wrap
msgid "Deleting text"
msgstr "Borrando texto"

#. type: Plain text
#: emacs-lisp-intro.texi:7547
msgid ""
"Whenever you cut or clip text out of a buffer with a `kill' command in GNU "
"Emacs, it is stored in a list and you can bring it back with a `yank' "
"command."
msgstr ""
"Siempre y cuando se corte o pegue texto de un b@'uffer con un comando\n"
"`kill' en GNU Emacs, se almacenar@'a dentro de una lista que se puede\n"
"traer con un comando `yank'."

#. type: Plain text
#: emacs-lisp-intro.texi:7555
msgid ""
"(The use of the word `kill' in Emacs for processes which specifically "
"@emph{do not} destroy the values of the entities is an unfortunate "
"historical accident.  A much more appropriate word would be `clip' since "
"that is what the kill commands do; they clip text out of a buffer and put it "
"into storage from which it can be brought back.  I have often been tempted "
"to replace globally all occurrences of `kill' in the Emacs sources with "
"`clip' and all occurrences of `killed' with `clipped'.)"
msgstr ""
"(El uso de la palabra `kill' @emph{matar, cortar} en Emacs para\n"
"procesos que espec@'{@dotless{i}}ficamente @emph{no} destruyen los\n"
"valores de las entidades es un accidente hist@'orico desafortunado. Una\n"
"palabra mucho m@'as apropiada deber@'{@dotless{i}}a ser `clip'\n"
"@emph{cortar} puesto que es lo que los comandos de corte hacen; ellos\n"
"cortan texto fuera de un b@'uffer y lo ponen dentro del almacenamiento\n"
"desde el que puede traerse. Con frecuencia ha sido tentada de\n"
"reemplazar globalmente todas las ocurrencia de `kill' @emph{matar,\n"
"cortar} en las fuentes de Emacs con `clip' @emph{cortar} y todas las\n"
"ocurrencias de `killed' @emph{cortado, muerto} con `clipped'\n"
"@emph{cortado}.)"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:7569
#, no-wrap
msgid "Storing Text in a List"
msgstr "Almacenando texto en una lista"

#. type: Plain text
#: emacs-lisp-intro.texi:7575
msgid ""
"When text is cut out of a buffer, it is stored on a list.  Successive pieces "
"of text are stored on the list successively, so the list might look like "
"this:"
msgstr ""
"Cuando el texto se corta de un b@'uffer, es almacenado en una\n"
"lista. Piezas sucesivas de texto se almacenan en la lista\n"
"sucesivamente, as@'{@dotless{i}} la lista podr@'{@dotless{i}}a verse\n"
"as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:7578
#, no-wrap
msgid "(\"a piece of text\" \"previous piece\")\n"
msgstr "(\"una pieza de texto\" \"pieza previa\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7585
msgid ""
"The function @code{cons} can be used to create a new list from a piece of "
"text (an `atom', to use the jargon) and an existing list, like this:"
msgstr ""
"La funci@'on @code{cons} puede usarse para crear una nueva lista\n"
"desde una pieza de texto (un `@'atomo', para usar la jerga) y una\n"
"lista existente, como esta:"

#. type: group
#: emacs-lisp-intro.texi:7590
#, no-wrap
msgid ""
"(cons \"another piece\"\n"
"      '(\"a piece of text\" \"previous piece\"))\n"
msgstr ""
"(cons \"otra pieza\"\n"
"      '(\"una pieza de texto\" \"pieza previa\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7597
msgid ""
"If you evaluate this expression, a list of three elements will appear in the "
"echo area:"
msgstr ""
"Si se eval@'ua esta expresi@'on, una lista de tres elementos\n"
"aparecer@'a en el @'area echo:"

#. type: smallexample
#: emacs-lisp-intro.texi:7600
#, no-wrap
msgid "(\"another piece\" \"a piece of text\" \"previous piece\")\n"
msgstr "(\"otra pieza\" \"una pieza de texto\" \"pieza previa\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7607
msgid ""
"With the @code{car} and @code{nthcdr} functions, you can retrieve whichever "
"piece of text you want.  For example, in the following code, @code{nthcdr 1 "
"@dots{}} returns the list with the first item removed; and the @code{car} "
"returns the first element of that remainder---the second element of the "
"original list:"
msgstr ""
"Con las funciones @code{car} y @code{nthcdr}, se puede recuperar\n"
"siempre la pieza de texto que se quiere. Por ejemplo, en el siguiente\n"
"c@'odigo, @code{nthcdr 1 @dots{}} devuelve la lista con el primer\n"
"@'{@dotless{i}}tem eliminado; y el @code{car} devuelve el primer\n"
"elemento de este resto --- el segundo elemento de la lista\n"
"original:"

#. type: group
#: emacs-lisp-intro.texi:7614
#, no-wrap
msgid ""
"(car (nthcdr 1 '(\"another piece\"\n"
"                 \"a piece of text\"\n"
"                 \"previous piece\")))\n"
"     @result{} \"a piece of text\"\n"
msgstr ""
"(car (nthcdr 1 '(\"otra pieza\"\n"
"                 \"una pieza de texto\"\n"
"                 \"pieza previa\")))\n"
"     @result{} \"una pieza de texto\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7623
msgid ""
"The actual functions in Emacs are more complex than this, of course.  The "
"code for cutting and retrieving text has to be written so that Emacs can "
"figure out which element in the list you want---the first, second, third, or "
"whatever.  In addition, when you get to the end of the list, Emacs should "
"give you the first element of the list, rather than nothing at all."
msgstr ""
"Las funciones actuales en Emacs son m@'as complejas que esto, de\n"
"acuerdo. El c@'odigo para cortar y recuperar texto tiene que ser\n"
"escrito de modo que Emacs pueda ver qu@'e elemento en la lista se\n"
"quiere --- el primer, segundo, tercer o cualquier otro. Adem@'as,\n"
"cuando tiene el fin de la lista, Emacs dar@'{@dotless{i}}a el primer\n"
"elemento de la lista, en lugar de nada."

#. type: Plain text
#: emacs-lisp-intro.texi:7630
msgid ""
"The list that holds the pieces of text is called the @dfn{kill ring}.  This "
"chapter leads up to a description of the kill ring and how it is used by "
"first tracing how the @code{zap-to-char} function works.  This function uses "
"(or `calls') a function that invokes a function that manipulates the kill "
"ring.  Thus, before reaching the mountains, we climb the foothills."
msgstr ""
"La lista que maneja las piezas de texto se llama @dfn{kill ring}\n"
"(anillo de la muerte). Este cap@'{@dotless{i}}tulo lidera una\n"
"descripci@'on del anillo de la muerte y como eso se usa por la\n"
"primera traza de c@'omo la funci@'on @code{zap-to-char} funciona. Esta\n"
"funci@'on usa (o `llama') a una funci@'on que invoca a otra funci@'on\n"
"que manipula el anillo de la muerte. De este modo, antes de lograr las\n"
"monta@~nas, se escalan las colinas."

#. type: Plain text
#: emacs-lisp-intro.texi:7633
msgid ""
"A subsequent chapter describes how text that is cut from the buffer is "
"retrieved.  @xref{Yanking, , Yanking Text Back}."
msgstr ""
"Un cap@'{@dotless{i}}tulo subsiguiente describe c@'omo el texto que se\n"
"corta desde el b@'uffer se recupera. @xref{Pegando, , Pegando Texto}."

#. type: Plain text
#: emacs-lisp-intro.texi:7643
msgid ""
"The @code{zap-to-char} function changed little between GNU Emacs version 19 "
"and GNU Emacs version 22.  However, @code{zap-to-char} calls another "
"function, @code{kill-region}, which enjoyed a major rewrite."
msgstr ""
"La funci@'on @code{zap-to-char} cambi@'o poco entre GNU Emacs\n"
"versi@'on 19 y GNU Emacs versi@'on 22. Sin embargo, @code{zap-to-char}\n"
"llama a otra funci@'on, @code{kill-region}, que se reescribi@'o m@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:7646
msgid ""
"The @code{kill-region} function in Emacs 19 is complex, but does not use "
"code that is important at this time.  We will skip it."
msgstr ""
"La funci@'on @code{kill-region} en Emacs 19 es compleja, pero no usa\n"
"c@'odigo que es importante en este momento. Se obviar@'a."

#. type: Plain text
#: emacs-lisp-intro.texi:7650
msgid ""
"The @code{kill-region} function in Emacs 22 is easier to read than the same "
"function in Emacs 19 and introduces a very important concept, that of error "
"handling.  We will walk through the function."
msgstr ""
"La funci@'on @code{kill-region} en Emacs 22 es m@'as de f@'acil leer\n"
"que la misma funci@'on en Emacs 19 e introduce un concepto muy\n"
"importante, que el error maneja. Nosotros pasearemos a trav@'es de la\n"
"funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:7652
msgid "But first, let us look at the interactive @code{zap-to-char} function."
msgstr ""
"Pero primero, d@'ejanos ver en la funci@'on interactive @code{zap-to-char}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:7664
#, no-wrap
msgid "The Complete @code{zap-to-char} Implementation"
msgstr "La implementaci@'on completa @code{zap-to-char}"

#. type: Plain text
#: emacs-lisp-intro.texi:7677
msgid ""
"The @code{zap-to-char} function removes the text in the region between the "
"location of the cursor (i.e., of point) up to and including the next "
"occurrence of a specified character.  The text that @code{zap-to-char} "
"removes is put in the kill ring; and it can be retrieved from the kill ring "
"by typing @kbd{C-y} (@code{yank}).  If the command is given an argument, it "
"removes text through that number of occurrences.  Thus, if the cursor were "
"at the beginning of this sentence and the character were @samp{s}, "
"@samp{Thus} would be removed.  If the argument were two, @samp{Thus, if the "
"curs} would be removed, up to and including the @samp{s} in @samp{cursor}."
msgstr ""
"La funci@'on @code{zap-to-char} elimina el texto en la regi@'on entre\n"
"la localizaci@'on del curso (por ej. punto) para incluir la siguiente\n"
"ocurrencia de un caracter espec@'{@dotless{i}}fico. El texto que\n"
"@code{zap-to-char} borra es puesto en el kill ring @emph{anillo de la\n"
"muerte}; y puede ser recuperado desde el kill ring @emph{anillo de la\n"
"muerte} escribiendo @kbd{C-y} (@code{yank}). Si el comando dado es un\n"
"argumento, eso borra texto a trav@'es de este n@'umero de\n"
"ocurrencias. De este modo, si el cursor estuviera al principio de esta\n"
"frase y el car@'acter fuera @samp{s}, @samp{De este modo}\n"
"ser@'{@dotless{i}}a borrado. Si el argumento fueran dos, @samp{De este\n"
"modo, si el cursor} se borrase, y incluir@'{@dotless{i}}a la @samp{s}\n"
"en el @samp{cursor}."

#. type: Plain text
#: emacs-lisp-intro.texi:7681
msgid ""
"If the specified character is not found, @code{zap-to-char} will say "
"``Search failed'', tell you the character you typed, and not remove any text."
msgstr ""
"Si el car@'acter espec@'{@dotless{i}}fico no encuentra @code{zap-to-char}\n"
"dir@'a ``B@'usqueda fallida'', eso cuenta el car@'acter que se\n"
"escribi@'o, y no elimin@'o cualquier texto."

#. type: Plain text
#: emacs-lisp-intro.texi:7686
msgid ""
"In order to determine how much text to remove, @code{zap-to-char} uses a "
"search function.  Searches are used extensively in code that manipulates "
"text, and we will focus attention on them as well as on the deletion command."
msgstr ""
"En orden para determinar cu@'anto texto eliminar @code{zap-to-char} usa\n"
"una funci@'on de b@'usqueda. Las b@'usquedas son usadas extensivamente\n"
"en el c@'odigo que manipula texto, y focalizar@'a la atenci@'on en\n"
"ellos tan bien como el comando de borrado."

#. type: Plain text
#: emacs-lisp-intro.texi:7702
msgid ""
"Here is the complete text of the version 22 implementation of the function:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el texto completo de la versi@'on 22 de la "
"funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:7717
#, no-wrap
msgid ""
"(defun zap-to-char (arg char)\n"
"  \"Kill up to and including ARG'th occurrence of CHAR.\n"
"Case is ignored if `case-fold-search' is non-nil in the current buffer.\n"
"Goes backward if ARG is negative; error if CHAR not found.\"\n"
"  (interactive \"p\\ncZap to char: \")\n"
"  (if (char-table-p translation-table-for-input)\n"
"      (setq char (or (aref translation-table-for-input char) char)))\n"
"  (kill-region (point) (progn\n"
"                         (search-forward (char-to-string char)\n"
"                                         nil nil arg)\n"
"                         (point))))\n"
msgstr ""
"(defun zap-to-char (arg char)\n"
"  \"Corta e incluye ARG'th ocurrencia de CHAR\n"
"En caso de ser ignorada si `case-fold-search' es no nulo en el\n"
"  b@'uffer actual.\n"
"Para ir atr@'as si ARG es negativo; error si CHAR no se encuentra.\"\n"
"  (interactive \"p\\ncZap to char: \")\n"
"  (if (char-table-p translation-table-for-input)\n"
"      (setq char (or (aref translation-table-for-input char) char)))\n"
"  (kill-region (point) (progn\n"
"                         (search-forward (char-to-string char)\n"
"                                         nil nil arg)\n"
"                         (point))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7722
msgid ""
"The documentation is thorough.  You do need to know the jargon meaning of "
"the word `kill'."
msgstr ""
"La documentaci@'on es en l@'{@dotless{i}}nea. Se necesita conocer el\n"
"significado de la jerga de la palabra `kill'."

#. type: subsection
#: emacs-lisp-intro.texi:7724
#, no-wrap
msgid "The @code{interactive} Expression"
msgstr "La expresi@'on @code{interactive}"

#. type: Plain text
#: emacs-lisp-intro.texi:7729
msgid ""
"The interactive expression in the @code{zap-to-char} command looks like this:"
msgstr ""
"La expresi@'on interactiva en el comando @code{zap-to-char} se ve\n"
"as@'{@dotless{i}}:"

#. type: Plain text
#: emacs-lisp-intro.texi:7742
msgid ""
"The part within quotation marks, @code{\"p\\ncZap to char:@: \"}, specifies "
"two different things.  First, and most simply, is the @samp{p}.  This part "
"is separated from the next part by a newline, @samp{\\n}.  The @samp{p} "
"means that the first argument to the function will be passed the value of a "
"`processed prefix'.  The prefix argument is passed by typing @kbd{C-u} and a "
"number, or @kbd{M-} and a number.  If the function is called interactively "
"without a prefix, 1 is passed to this argument."
msgstr ""
"La parte con comillas, @code{\"p\\ncZap to char:@: \"} @emph{Cortar a\n"
"caracter}, especifica dos cosas diferentes. Primero, y m@'as simple es\n"
"el @samp{p}. Este parte se separa desde la siguiente parte por una\n"
"nueva l@'{@dotless{i}}nea, @samp{\\n}. El @samp{p} significa que la\n"
"parte del primero argumento a la funci@'on ser@'a pasando el valor de\n"
"un `prefijo procesado'. El argumento prefijo es pasado escribiendo\n"
"@kbd{C-u} y un n@'umero, o @kbd{M-} y un n@'umero. Si la funci@'on es\n"
"llamada interactivamente sin un prefijo, el n@'umero que se pasa es 1."

#. type: Plain text
#: emacs-lisp-intro.texi:7749
msgid ""
"The second part of @code{\"p\\ncZap to char:@: \"} is @samp{cZap to char:"
"@: }.  In this part, the lower case @samp{c} indicates that "
"@code{interactive} expects a prompt and that the argument will be a "
"character.  The prompt follows the @samp{c} and is the string @samp{Zap to "
"char:@: } (with a space after the colon to make it look good)."
msgstr ""
"La segunda parte de @code{\"p\\ncZap a caracter:@: \"} es @samp{cZap a\n"
"car@'acter:@:}. En esta parte, la tecla baja @samp{c} indica que\n"
"@code{interactive} espera una consola que el argumento ser@'a un\n"
"caracter. La consola sigue el @samp{c} y es la cadena @samp{Zap a\n"
"caracter:@: } (con un espacio despu@'es del punto y coma para hacerlo\n"
"bien)."

#. type: Plain text
#: emacs-lisp-intro.texi:7752
msgid ""
"What all this does is prepare the arguments to @code{zap-to-char} so they "
"are of the right type, and give the user a prompt."
msgstr ""
"Todo lo que se hace es preparar los argumentos para @code{zap-to-char}\n"
"as@'{@dotless{i}} est@'an en el tipo correcto, y dan al usuario un\n"
"prompt."

#. type: Plain text
#: emacs-lisp-intro.texi:7757
msgid ""
"In a read-only buffer, the @code{zap-to-char} function copies the text to "
"the kill ring, but does not remove it.  The echo area displays a message "
"saying that the buffer is read-only.  Also, the terminal may beep or blink "
"at you."
msgstr ""
"En un b@'uffer de solo lectura, la funci@'on @code{zap-to-char} copia\n"
"el texto al anillo de la muerte, no se elimina. El @'area echo muestra\n"
"un mensaje diciendo que el b@'uffer es de solo lectura. Tambi@'en, la\n"
"terminal avisa con un pitido."

#. type: subsection
#: emacs-lisp-intro.texi:7759
#, no-wrap
msgid "The Body of @code{zap-to-char}"
msgstr "El cuerpo de @code{zap-to-char}"

#. type: Plain text
#: emacs-lisp-intro.texi:7764
msgid ""
"The body of the @code{zap-to-char} function contains the code that kills "
"(that is, removes) the text in the region from the current position of the "
"cursor up to and including the specified character."
msgstr ""
"El cuerpo de la funci@'on @code{zap-to-char} contiene el c@'odigo que\n"
"mata (que se borra/corta) el texto en la regi@'on desde la posici@'on\n"
"actual del cursor e incluyendo el car@'acter especificado."

#. type: Plain text
#: emacs-lisp-intro.texi:7766
msgid "The first part of the code looks like this:"
msgstr "La primera parte del c@'odigo se ve como:"

#. type: smallexample
#: emacs-lisp-intro.texi:7773
#, no-wrap
msgid ""
"(if (char-table-p translation-table-for-input)\n"
"    (setq char (or (aref translation-table-for-input char) char)))\n"
"(kill-region (point) (progn\n"
"                       (search-forward (char-to-string char) nil nil arg)\n"
"                       (point)))\n"
msgstr ""
"(if (char-table-p translation-table-for-input)\n"
"    (setq char (or (aref translation-table-for-input char) char)))\n"
"(kill-region (point) (progn\n"
"                       (search-forward (char-to-string char) nil nil arg)\n"
"                       (point)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7784
msgid ""
"@code{char-table-p} is an hitherto unseen function.  It determines whether "
"its argument is a character table.  When it is, it sets the character passed "
"to @code{zap-to-char} to one of them, if that character exists, or to the "
"character itself.  (This becomes important for certain characters in non-"
"European languages.  The @code{aref} function extracts an element from an "
"array.  It is an array-specific function that is not described in this "
"document.  @xref{Arrays, , Arrays, elisp, The GNU Emacs Lisp Reference "
"Manual}.)"
msgstr ""
"@code{char-table-p} es una funci@'on prescrita no vista. Eso determina\n"
"si sus argumentos son una tabla de caracteres. As@'{@dotless{i}}, se\n"
"asigna el car@'acter pasado a @code{zap-to-char} a uno de ellos, si\n"
"este car@'acter existe, o al car@'acter en s@'{@dotless{i}}. (Esto\n"
"llega a ser importante para ciertos caracteres en lenguajes no\n"
"Europeos. La funci@'on @code{aref} extrae un elemento desde un\n"
"array. Eso es una funci@'on espec@'{@dotless{i}}fica de array que no\n"
"est@'a descrita en este documento. @xref{Array, , Arrays, elisp, El\n"
"Manual de Referencia de GNU Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7787
msgid "@code{(point)} is the current position of the cursor."
msgstr "Lo que devuelve @code{(point)} es la posici@'on actual del cursor."

#. type: Plain text
#: emacs-lisp-intro.texi:7791
msgid ""
"The next part of the code is an expression using @code{progn}.  The body of "
"the @code{progn} consists of calls to @code{search-forward} and @code{point}."
msgstr ""
"La siguiente parte del c@'odigo es una expresi@'on usando\n"
"@code{progn}. El cuerpo del @code{progn} se basa en llamadas a\n"
"@code{search-forward} y @code{point}."

#. type: Plain text
#: emacs-lisp-intro.texi:7795
msgid ""
"It is easier to understand how @code{progn} works after learning about "
"@code{search-forward}, so we will look at @code{search-forward} and then at "
"@code{progn}."
msgstr ""
"Es f@'acil comprender c@'omo @code{progn} funciona despu@'es de aprender\n"
"acerca de @code{search-forward}, as@'{@dotless{i}} se ver@'a en\n"
"@code{search-forward} y entonces en @code{progn}."

#. type: subsection
#: emacs-lisp-intro.texi:7797
#, no-wrap
msgid "The @code{search-forward} Function"
msgstr "La funci@'on @code{search-forward}"

#. type: Plain text
#: emacs-lisp-intro.texi:7810
msgid ""
"The @code{search-forward} function is used to locate the zapped-for-"
"character in @code{zap-to-char}.  If the search is successful, @code{search-"
"forward} leaves point immediately after the last character in the target "
"string.  (In @code{zap-to-char}, the target string is just one character "
"long.  @code{zap-to-char} uses the function @code{char-to-string} to ensure "
"that the computer treats that character as a string.)  If the search is "
"backwards, @code{search-forward} leaves point just before the first "
"character in the target.  Also, @code{search-forward} returns @code{t} for "
"true.  (Moving point is therefore a `side effect'.)"
msgstr ""
"La funci@'on @code{search-forward} se usa para localizar el\n"
"zapped-for-character en @code{zap-to-char}. Si la b@'usqueda es\n"
"exitosa, @code{search-forward} deja el punto inmediatamente despu@'es\n"
"del @'ultimo car@'acter en la cadena objetivo. (En @code{zap-to-char},\n"
"la cadena objetivo es solo un car@'acter largo. @code{zap-to-char} usa\n"
"la funci@'on @code{char-to-string} para asegurar que el ordenador\n"
"trata este car@'acter como una cadena). Si la b@'usqueda es hacia\n"
"atr@'as, @code{search-forward} deja el punto solo antes del primer\n"
"car@'acter en el objetivo. Tambi@'en, @code{search-forward} devuelve\n"
"@code{t} para verdad. (Moviendo el punto all@'{@dotless{i}} es un\n"
"`efecto lateral'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:7813
msgid ""
"In @code{zap-to-char}, the @code{search-forward} function looks like this:"
msgstr ""
"En @code{zap-to-char}, la funci@'on @code{search-forward} se ve "
"as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:7816
#, no-wrap
msgid "(search-forward (char-to-string char) nil nil arg)\n"
msgstr "(search-forward (char-to-string char) nil nil arg)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7819
msgid "The @code{search-forward} function takes four arguments:"
msgstr "La funci@'on @code{search-forward} toma cuatro argumentos:"

#. type: enumerate
#: emacs-lisp-intro.texi:7824
msgid ""
"The first argument is the target, what is searched for.  This must be a "
"string, such as @samp{\"z\"}."
msgstr ""
"El primer argumento es el objetivo, para el que es buscado. Esto debe\n"
"ser una cadena, tal como @samp{\"z\"}."

#. type: enumerate
#: emacs-lisp-intro.texi:7837
msgid ""
"As it happens, the argument passed to @code{zap-to-char} is a single "
"character.  Because of the way computers are built, the Lisp interpreter may "
"treat a single character as being different from a string of characters.  "
"Inside the computer, a single character has a different electronic format "
"than a string of one character.  (A single character can often be recorded "
"in the computer using exactly one byte; but a string may be longer, and the "
"computer needs to be ready for this.)  Since the @code{search-forward} "
"function searches for a string, the character that the @code{zap-to-char} "
"function receives as its argument must be converted inside the computer from "
"one format to the other; otherwise the @code{search-forward} function will "
"fail.  The @code{char-to-string} function is used to make this conversion."
msgstr ""
"Cuando eso ocurre, el argumento pasado a @code{zap-to-char} es un\n"
"caracter simple. Debido a la forma en la que los ordenadores son\n"
"construidos, el int@'erprete Lisp puede tratar un caracter simple\n"
"siendo diferente desde una cadena de caracteres. Dentro del ordenador,\n"
"un caracter simple tiene un formato electr@'onico en vez de una cadena\n"
"de un caracter. (Un caracter simple puede con frecuencia ser grabado\n"
"en el ordenador usando exactamente un byte; pero una cadena puede ser\n"
"larga, y el ordenador necesita estar listo para esto.) Desde que la\n"
"funci@'on @code{search-forward} busca una cadena, el caracter que la\n"
"funci@'on @code{zap-to-char} recibe como argumento debe ser\n"
"convertida dentro del ordenador de un formato a otro; de otro modo,\n"
"la funci@'on @code{search-forward} fallar@'a. La funci@'on\n"
"@code{char-to-string} es usada para hacer esta conversi@'on."

#. type: enumerate
#: emacs-lisp-intro.texi:7842
msgid ""
"The second argument bounds the search; it is specified as a position in the "
"buffer.  In this case, the search can go to the end of the buffer, so no "
"bound is set and the second argument is @code{nil}."
msgstr ""
"El segundo argumento asocia la b@'usqueda; eso se especifica como\n"
"una posici@'on en el b@'uffer. En este caso, la b@'usqueda puede ir al\n"
"final del b@'uffer, as@'{@dotless{i}} no se asigna y el segundo\n"
"argumento es @code{nil}."

#. type: enumerate
#: emacs-lisp-intro.texi:7848
msgid ""
"The third argument tells the function what it should do if the search "
"fails---it can signal an error (and print a message) or it can return "
"@code{nil}.  A @code{nil} as the third argument causes the function to "
"signal an error when the search fails."
msgstr ""
"El tercer argumento cuenta la funci@'on que har@'{@dotless{i}}a si la\n"
"b@'usqueda cae --- eso puede se@~nalar un error (e imprimir un\n"
"mensaje) o puede devolver @code{nil}. Un @code{nil} como tercer\n"
"argumento hace que la funci@'on se@~nale un error cuando la b@'usqueda\n"
"falla."

#. type: enumerate
#: emacs-lisp-intro.texi:7855
msgid ""
"The fourth argument to @code{search-forward} is the repeat count---how many "
"occurrences of the string to look for.  This argument is optional and if the "
"function is called without a repeat count, this argument is passed the value "
"1.  If this argument is negative, the search goes backwards."
msgstr ""
"El cuarto argumento @code{search-forward} es el contaje repetido ---\n"
"cu@'antas ocurrencias de la cadena para buscar. Este argumento es\n"
"opcional y si la funci@'on es llamada sin un contaje repetido, este\n"
"argumento pasa el valor 1. Si este argumento es negativo, la\n"
"b@'usqueda va hacia atr@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:7859
msgid "In template form, a @code{search-forward} expression looks like this:"
msgstr ""
"En la forma de plantilla, una expresi@'on @code{search-forward} se ve\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:7866
#, no-wrap
msgid ""
"(search-forward \"@var{target-string}\"\n"
"                @var{limit-of-search}\n"
"                @var{what-to-do-if-search-fails}\n"
"                @var{repeat-count})\n"
msgstr ""
"(search-forward \"@var{cadena-a-buscar}\"\n"
"                @var{limite-de-busqueda}\n"
"                @var{que-hacer-si-la-busqueda-falla}\n"
"                @var{repetir-contaje})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7870
msgid "We will look at @code{progn} next."
msgstr "Lo siguiente es echar un vistazo a @code{progn}."

#. type: subsection
#: emacs-lisp-intro.texi:7872
#, no-wrap
msgid "The @code{progn} Special Form"
msgstr "La forma especial @code{progn}"

#. type: Plain text
#: emacs-lisp-intro.texi:7879
msgid ""
"@code{progn} is a special form that causes each of its arguments to be "
"evaluated in sequence and then returns the value of the last one.  The "
"preceding expressions are evaluated only for the side effects they perform.  "
"The values produced by them are discarded."
msgstr ""
"@code{progn} es una forma especial que causa que cada uno de sus\n"
"argumentos puedan ser evaluados en secuencia y entonces devuelve el valor\n"
"del @'ultimo. Las expresiones precedentes son evaluadas solo por los\n"
"efectos laterales que ellos desarrollan. Los valores producidos por\n"
"ellos son descartados."

#. type: Plain text
#: emacs-lisp-intro.texi:7882
msgid "The template for a @code{progn} expression is very simple:"
msgstr "La plantilla para una expresi@'on @code{progn} es muy simple:"

#. type: group
#: emacs-lisp-intro.texi:7887
#, no-wrap
msgid ""
"(progn\n"
"  @var{body}@dots{})\n"
msgstr ""
"(progn\n"
"  @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:7893
msgid ""
"In @code{zap-to-char}, the @code{progn} expression has to do two things: put "
"point in exactly the right position; and return the location of point so "
"that @code{kill-region} will know how far to kill to."
msgstr ""
"En @code{zap-to-char}, la expresi@'on @code{progn} tiene que hacer dos\n"
"cosas: poner el punto en la posici@'on exacta; y devolver la\n"
"posici@'on del punto de modo que @code{kill-region} conoce c@'omo de\n"
"lejos se copia."

#. type: Plain text
#: emacs-lisp-intro.texi:7900
msgid ""
"The first argument to the @code{progn} is @code{search-forward}.  When "
"@code{search-forward} finds the string, the function leaves point "
"immediately after the last character in the target string.  (In this case "
"the target string is just one character long.)  If the search is backwards, "
"@code{search-forward} leaves point just before the first character in the "
"target.  The movement of point is a side effect."
msgstr ""
"El primer argumento de @code{progn} es @code{search-forward}. Cuando\n"
"@code{search-forward} encuentra la cadena, la funci@'on deja el punto\n"
"inmediatamente despu@'es del @'ultimo caracter en la cadena\n"
"objetivo. (En este caso la cadena objetivo es solo un car@'acter\n"
"largo.) Si la b@'usqueda es hacia atr@'as, @code{search-forward} deja\n"
"el punto justo antes del primer car@'acter en el objetivo. El\n"
"movimiento del punto es un efecto lateral."

#. type: Plain text
#: emacs-lisp-intro.texi:7910
msgid ""
"The second and last argument to @code{progn} is the expression "
"@code{(point)}.  This expression returns the value of point, which in this "
"case will be the location to which it has been moved by @code{search-"
"forward}.  (In the source, a line that tells the function to go to the "
"previous character, if it is going forward, was commented out in 1999; I "
"don't remember whether that feature or mis-feature was ever a part of the "
"distributed source.)  The value of @code{point} is returned by the "
"@code{progn} expression and is passed to @code{kill-region} as @code{kill-"
"region}'s second argument."
msgstr ""
"El segundo y @'ultimo argumento de @code{progn} es la expresi@'on\n"
"@code{(point)}. Esta expresi@'on devuelve el valor del punto, que en\n"
"este caso ser@'a la localizaci@'on para la que se ha movido por\n"
"@code{search-forward}. (En la fuente, una l@'{@dotless{i}}nea que\n"
"cuenta la funci@'on para ir al car@'acter previo, si se est@'a yendo\n"
"hacia delante, se coment@'o en 1999; yo no recuerdo si esta\n"
"funcionalidad o no funcionalidad era siempre parte de las fuentes\n"
"distribuidas.) El valor de @code{point} se devuelve por la expresi@'on\n"
"@code{progn} y se pasa a @code{kill-region} como el segundo argumento\n"
"de @code{kill-region} ."

#. type: subsection
#: emacs-lisp-intro.texi:7912
#, no-wrap
msgid "Summing up @code{zap-to-char}"
msgstr "Resumiendo @code{zap-to-char}"

#. type: Plain text
#: emacs-lisp-intro.texi:7916
msgid ""
"Now that we have seen how @code{search-forward} and @code{progn} work, we "
"can see how the @code{zap-to-char} function works as a whole."
msgstr ""
"Ahora que se ha visto c@'omo @code{search-forward} y @code{progn}\n"
"trabajan, se puede ver c@'omo la funci@'on @code{zap-to-char}\n"
"funciona como un todo."

#. type: Plain text
#: emacs-lisp-intro.texi:7924
msgid ""
"The first argument to @code{kill-region} is the position of the cursor when "
"the @code{zap-to-char} command is given---the value of point at that time.  "
"Within the @code{progn}, the search function then moves point to just after "
"the zapped-to-character and @code{point} returns the value of this "
"location.  The @code{kill-region} function puts together these two values of "
"point, the first one as the beginning of the region and the second one as "
"the end of the region, and removes the region."
msgstr ""
"El primer argumento de @code{kill-region} es la posici@'on del cursor\n"
"cuando el comando @code{zap-to-char} da --- el valor del punto en este\n"
"momento. Con el @code{progn}, la b@'usqueda de la funci@'on mueve el\n"
"punto a solo despu@'es del zapped-to-character y @code{point} devuelve\n"
"el valor de localizaci@'on. La funci@'on @code{kill-region} pone junto\n"
"a estos dos valores de punto, el primero como el principio de la\n"
"regi@'on y el segundo como el fin de la regi@'on, y borra la\n"
"regi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:7931
msgid ""
"The @code{progn} special form is necessary because the @code{kill-region} "
"command takes two arguments; and it would fail if @code{search-forward} and "
"@code{point} expressions were written in sequence as two additional "
"arguments.  The @code{progn} expression is a single argument to @code{kill-"
"region} and returns the one value that @code{kill-region} needs for its "
"second argument."
msgstr ""
"La forma especial @code{progn} se necesita porque el comando\n"
"@code{kill-region} toma dos argumentos; y fallar@'{@dotless{i}}a si\n"
"@code{search-forward} y expresiones @code{point} fueran escritas en\n"
"secuencia como dos argumentos adicionales. La expresi@'on @code{progn}\n"
"es un argumento simple para @code{kill-region} y devuelve un valor\n"
"para que @code{kill-region} se necesite por su segundo argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:7939
msgid ""
"The @code{zap-to-char} function uses the @code{kill-region} function.  This "
"function clips text from a region and copies that text to the kill ring, "
"from which it may be retrieved."
msgstr ""
"La funci@'on @code{zap-to-char} usa la funci@'on\n"
"@code{kill-region}. Esta funci@'on corta texto desde una regi@'on y\n"
"copia este texto al kill ring @emph{anillo de la muerte}, desde el que\n"
"puede ser recuperado."

#. type: Plain text
#: emacs-lisp-intro.texi:8003
msgid ""
"The Emacs 22 version of that function uses @code{condition-case} and "
"@code{copy-region-as-kill}, both of which we will explain.  @code{condition-"
"case} is an important special form."
msgstr ""
"Tanto la versi@'on de Emacs 22 de esta funci@'on usa\n"
"@code{condition-case} y @code{copy-region-as-kill}, ambas se\n"
"explicar@'an. @code{condition-case} es una forma especial importante."

#. type: Plain text
#: emacs-lisp-intro.texi:8009
msgid ""
"In essence, the @code{kill-region} function calls @code{condition-case}, "
"which takes three arguments.  In this function, the first argument does "
"nothing.  The second argument contains the code that does the work when all "
"goes well.  The third argument contains the code that is called in the event "
"of an error."
msgstr ""
"En esencia, la funci@'on @code{kill-region} llama a\n"
"@code{condition-case}, que toma tres argumentos. En esta funci@'on, el\n"
"primer argumento no hace nada. El segundo argumento contiene el\n"
"c@'odigo hace el trabajo cuando todo va bien. El tercer argumento\n"
"contiene el c@'odigo que se llama en el evento de un error."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:8018
#, no-wrap
msgid "The Complete @code{kill-region} Definition"
msgstr "La definici@'on completa @code{kill-region}"

#. type: Plain text
#: emacs-lisp-intro.texi:8025
msgid ""
"We will go through the @code{condition-case} code in a moment.  First, let "
"us look at the definition of @code{kill-region}, with comments added:"
msgstr ""
"Ahora se puede volver a trav@'es del c@'odigo @code{condition-case} en\n"
"un momento. Primero, se echa un vistazo a la definici@'on de\n"
"@code{kill-region}, con comentarios a@~nadidos:"

#. type: group
#: emacs-lisp-intro.texi:8033
#, no-wrap
msgid ""
"(defun kill-region (beg end)\n"
"  \"Kill (\\\"cut\\\") text between point and mark.\n"
"This deletes the text from the buffer and saves it in the kill ring.\n"
"The command \\\\[yank] can retrieve it from there. @dots{} \"\n"
msgstr ""
"(defun kill-region (beg end)\n"
"  \"Kill (\\\"corta\\\") texto entre punto y marca.\n"
"Esto borra el texto desde el b@'uffer y lo guarda en anillo de la\n"
"  muerte @emph{kill ring}.\n"
"El comando \\\\[yank] puede recuperarse desde all@'{@dotless{i}}. @dots{}\n"
" \"\n"

#. type: group
#: emacs-lisp-intro.texi:8042
#, no-wrap
msgid ""
"  ;; @bullet{} Since order matters, pass point first.\n"
"  (interactive (list (point) (mark)))\n"
"  ;; @bullet{} And tell us if we cannot cut the text.\n"
"  ;; `unless' is an `if' without a then-part.\n"
"  (unless (and beg end)\n"
"    (error \"The mark is not set now, so there is no region\"))\n"
msgstr ""
"  ;; @bullet{} Desde materias de orden, pasa el punto primero.\n"
"  (interactive (list (point) (mark)))\n"
"  ;; @bullet{} Y cu@'entanos si no podemos cortar el texto.\n"
"  ;; `a menos que' sea un `if' sin una then-part.\n"
"  (unless (and beg end)\n"
"    (error \"La marca no est@'a asignada ahora, as@'{@dotless{i}} que\n"
"  no hay regi@'on\"))\n"

#. type: group
#: emacs-lisp-intro.texi:8050
#, no-wrap
msgid ""
"  ;; @bullet{} `condition-case' takes three arguments.\n"
"  ;;    If the first argument is nil, as it is here,\n"
"  ;;    information about the error signal is not\n"
"  ;;    stored for use by another function.\n"
"  (condition-case nil\n"
msgstr ""
"  ;; @bullet{} `condition-case' toma tres argumentos\n"
"  ;;    Si el primer argumento es nulo, como aqu@'{@dotless{i}}\n"
"  ;;    la informaci@'on acerca del error no est@'a\n"
"  ;;    almacenada para ser usada por otra funci@'on\n"
"  (condition-case nil\n"

#. type: group
#: emacs-lisp-intro.texi:8055
#, no-wrap
msgid ""
"      ;; @bullet{} The second argument to `condition-case' tells the\n"
"      ;;    Lisp interpreter what to do when all goes well.\n"
msgstr ""
"      ;; @bullet{} El segundo argumento a `condition-case' cuenta lo que el\n"
"      ;;    int@'erprete que hace cuando todo va bien.\n"

#. type: group
#: emacs-lisp-intro.texi:8065
#, no-wrap
msgid ""
"      ;;    It starts with a `let' function that extracts the string\n"
"      ;;    and tests whether it exists.  If so (that is what the\n"
"      ;;    `when' checks), it calls an `if' function that determines\n"
"      ;;    whether the previous command was another call to\n"
"      ;;    `kill-region'; if it was, then the new text is appended to\n"
"      ;;    the previous text; if not, then a different function,\n"
"      ;;    `kill-new', is called.\n"
msgstr ""
"      ;;    Empieza con una funci@'on `let' que extrae la cadena\n"
"      ;;    y chequea si existe. Si es as@'{@dotless{i}} (esto es lo\n"
"      ;;    que `when' chequea), eso llama a una funci@'on `if' que\n"
"      ;;    determina si el comando previo que era otra llamada\n"
"      ;;    si el comando previo fu@'e otra llamada a `kill-region';\n"
"      ;;    si lo era, entonces el siguiente texto se a@~nade\n"
"      ;;    cuando se chequea), eso llama a una funci@'on `if' que\n"
"      ;;    determina si el comando previo era otra llamada a\n"
"      ;;    `kill-region'; si era eso, entonces el nuevo texto es\n"
"      ;;    a@~nadido al texto previo; si no, entonces una funci@'on \n"
"      ;;    diferente, `kill-new' se llama.\n"

#. type: group
#: emacs-lisp-intro.texi:8071
#, no-wrap
msgid ""
"      ;;    The `kill-append' function concatenates the new string and\n"
"      ;;    the old.  The `kill-new' function inserts text into a new\n"
"      ;;    item in the kill ring.\n"
msgstr ""
"      ;;    La funci@'on `kill-append' concatena la nueva cadena y\n"
"      ;;    la vieja.  La funci@'on `kill-new' inserta texto dentro de\n"
"      ;;    @'{@dotless{i}}tem en el kill ring @emph{anillo de la muerte}.\n"

#. type: group
#: emacs-lisp-intro.texi:8080
#, no-wrap
msgid ""
"      ;;    `when' is an `if' without an else-part.  The second `when'\n"
"      ;;    again checks whether the current string exists; in\n"
"      ;;    addition, it checks whether the previous command was\n"
"      ;;    another call to `kill-region'.  If one or the other\n"
"      ;;    condition is true, then it sets the current command to\n"
"      ;;    be `kill-region'.\n"
msgstr ""
"      ;;    `when' es un `if' sin una parte else.  El segundo `when'\n"
"      ;;    de nuevo chequea si la cadena actual existe; \n"
"      ;;    por a@~nadidura, eso chequea si el comando previo fuese\n"
"      ;;    otra llamada a `kill-region'. Si una u otra condici@'on\n"
"      ;;    es verdadero, entonces eso configura el actual comando a \n"
"      ;;    ser `kill-region'.\n"

#. type: group
#: emacs-lisp-intro.texi:8086
#, no-wrap
msgid ""
"      (let ((string (filter-buffer-substring beg end t)))\n"
"        (when string                    ;STRING is nil if BEG = END\n"
"          ;; Add that string to the kill ring, one way or another.\n"
"          (if (eq last-command 'kill-region)\n"
msgstr ""
"      (let ((string (filter-buffer-substring beg end t)))\n"
"        (when string                    ;STRING is nil if BEG = END\n"
"          ;; Add that string to the kill ring, one way or another.\n"
"          (if (eq last-command 'kill-region)\n"

#. type: group
#: emacs-lisp-intro.texi:8097
#, no-wrap
msgid ""
"              ;;    @minus{} `yank-handler' is an optional argument to\n"
"              ;;    `kill-region' that tells the `kill-append' and\n"
"              ;;    `kill-new' functions how deal with properties\n"
"              ;;    added to the text, such as `bold' or `italics'.\n"
"              (kill-append string (< end beg) yank-handler)\n"
"            (kill-new string nil yank-handler)))\n"
"        (when (or string (eq last-command 'kill-region))\n"
"          (setq this-command 'kill-region))\n"
"        nil)\n"
msgstr ""
"              ;;    @minus{} `yank-handler' es un argumento opcional para\n"
"              ;;    `kill-region' que cuenta el `kill-append' y funciones\n"
"              ;;    `kill-new' como tratan con propiedades a@~nadidas\n"
"              ;;    al texto, tal como `negrilla' o `it@'alica'\n"
"              (kill-append string (< end beg) yank-handler)\n"
"            (kill-new string nil yank-handler)))\n"
"        (when (or string (eq last-command 'kill-region))\n"
"          (setq this-command 'kill-region))\n"
"        nil)\n"

#. type: group
#: emacs-lisp-intro.texi:8102
#, no-wrap
msgid ""
"    ;;  @bullet{} The third argument to `condition-case' tells the interpreter\n"
"    ;;    what to do with an error.\n"
msgstr ""
"    ;;  @bullet{} El tercer argumento a `condition-case' cuenta el int@'erprete\n"
"    ;;  qu@'e hacer con un error.\n"

#. type: group
#: emacs-lisp-intro.texi:8108 emacs-lisp-intro.texi:8187
#, no-wrap
msgid ""
"    ;;    The third argument has a conditions part and a body part.\n"
"    ;;    If the conditions are met (in this case,\n"
"    ;;             if text or buffer are read-only)\n"
"    ;;    then the body is executed.\n"
msgstr ""
"    ;;    El tercer argumento tiene una parte de condiciones y una\n"
"    ;;    parte del cuerpo.\n"
"    ;;    Si las condiciones se encuentra (en este caso,\n"
"    ;;             si el texto o b@'uffer son de solo lectura)\n"
"    ;;    entonces el cuerpo es ejecutado.\n"

#. type: group
#: emacs-lisp-intro.texi:8114
#, no-wrap
msgid ""
"    ;;    The first part of the third argument is the following:\n"
"    ((buffer-read-only text-read-only) ;; the if-part\n"
"     ;; @dots{}  the then-part\n"
"     (copy-region-as-kill beg end)\n"
msgstr ""
"    ;;    La primera parte del tercer es el siguiente:\n"
"    ((buffer-read-only text-read-only) ;; parte if\n"
"     ;; @dots{}  parte then-part\n"
"     (copy-region-as-kill beg end)\n"

#. type: group
#: emacs-lisp-intro.texi:8122
#, no-wrap
msgid ""
"     ;;    Next, also as part of the then-part, set this-command, so\n"
"     ;;    it will be set in an error\n"
"     (setq this-command 'kill-region)\n"
"     ;;    Finally, in the then-part, send a message if you may copy\n"
"     ;;    the text to the kill ring without signaling an error, but\n"
"     ;;    don't if you may not.\n"
msgstr ""
"     ;;    Lo siguiente, tambi@'en como parte de la then-part, asigna this-command, as@'{@dotless{i}}\n"
"     ;;    ser@'a asignado en un error\n"
"     (setq this-command 'kill-region)\n"
"     ;;    Finalmente, en la then-part, env@'{@dotless{i}}a un mensaje\n"
"     ;;    si se puede copiar el texto al anillo de la muerte\n"
"     ;;    @emph{kill ring} sin se@~nalar un error, pero no si no se puede.\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:8129
#, no-wrap
msgid ""
"     (if kill-read-only-ok\n"
"         (progn (message \"Read only text copied to kill ring\") nil)\n"
"       (barf-if-buffer-read-only)\n"
"       ;; If the buffer isn't read-only, the text is.\n"
"       (signal 'text-read-only (list (current-buffer)))))\n"
msgstr ""
"     (if kill-read-only-ok\n"
"         (progn (message \"Lee solo texto copiado para el kill ring\") nil)\n"
"       (barf-if-buffer-read-only)\n"
"       ;; If the buffer isn't read-only, the text is.\n"
"       (signal 'text-read-only (list (current-buffer)))))\n"

#. type: group
#: emacs-lisp-intro.texi:8140
#, no-wrap
msgid ""
"(defun kill-region (beg end)\n"
"  \"Kill between point and mark.\n"
"The text is deleted but saved in the kill ring.\"\n"
"  (interactive \"r\")\n"
msgstr ""
"(defun kill-region (beg end)\n"
"  \"Corta entre punto y marca.\n"
"El texto es borrado, pero guardado en el kill ring.\"\n"
"  (interactive \"r\")\n"

#. type: group
#: emacs-lisp-intro.texi:8148
#, no-wrap
msgid ""
"  ;; 1. `condition-case' takes three arguments.\n"
"  ;;    If the first argument is nil, as it is here,\n"
"  ;;    information about the error signal is not\n"
"  ;;    stored for use by another function.\n"
"  (condition-case nil\n"
msgstr ""
"  ;; 1. `condition-case' tiene tres argumentos.\n"
"  ;;    Si el primer argumento es nil, como est@'a aqu@'{@dotless{i}}\n"
"  ;;    la informaci@'on acerca de la se@~nal de error no es\n"
"  ;;    almacenada para usarse por otra funci@'on.\n"
"  (condition-case nil\n"

#. type: group
#: emacs-lisp-intro.texi:8153
#, no-wrap
msgid ""
"      ;; 2. The second argument to `condition-case'\n"
"      ;;    tells the Lisp interpreter what to do when all goes well.\n"
msgstr ""
"      ;; 2. El segundo argumento a `condition-case'\n"
"      ;;    cuenta al int@'eprete Lisp que hacer cuando todo va bien.\n"

#. type: group
#: emacs-lisp-intro.texi:8160
#, no-wrap
msgid ""
"      ;;    The `delete-and-extract-region' function usually does the\n"
"      ;;    work.  If the beginning and ending of the region are both\n"
"      ;;    the same, then the variable `string' will be empty, or nil\n"
"      (let ((string (delete-and-extract-region beg end)))\n"
msgstr ""
"      ;;    La funci@'on `delete-and-extract-region' normalmente hace\n"
"      ;;    el trabajo. Si el principio y final de la regi@'on son lo\n"
"      ;;    mismo, entonces la varible `string' estar@'a\n"
"      ;;    vac@'{@dotless{i}}a, o nula\n"
"      (let ((string (delete-and-extract-region beg end)))\n"

#. type: group
#: emacs-lisp-intro.texi:8166
#, no-wrap
msgid ""
"        ;; `when' is an `if' clause that cannot take an `else-part'.\n"
"        ;; Emacs normally sets the value of `last-command' to the\n"
"        ;; previous command.\n"
msgstr ""
"        ;; `cuando' es una cl@'ausula `if' que no puede tomar `else-part'.\n"
"        ;; Emacs normalmente asigna el valor del `last-command' al\n"
"        ;; comando previo.\n"

#. type: group
#: emacs-lisp-intro.texi:8176
#, no-wrap
msgid ""
"        ;; `kill-append' concatenates the new string and the old.\n"
"        ;; `kill-new' inserts text into a new item in the kill ring.\n"
"        (when string\n"
"          (if (eq last-command 'kill-region)\n"
"              ;; if true, prepend string\n"
"              (kill-append string (< end beg))\n"
"            (kill-new string)))\n"
"        (setq this-command 'kill-region))\n"
msgstr ""
"        ;; `kill-append' concatena la nueva cadena y la vieja.\n"
"        ;; `kill-new' inserta texto dentro de un nuevo\n"
"        ;; @'{@dotless{i}}tem dentro de un nuevo @'{@dotless{i}} en\n"
"        ;; kill ring.\n"
"        (when string\n"
"          (if (eq last-command 'kill-region)\n"
"              ;; si verdadero, concatena la cadena\n"
"              (kill-append string (< end beg))\n"
"            (kill-new string)))\n"
"        (setq this-command 'kill-region))\n"

#. type: group
#: emacs-lisp-intro.texi:8181
#, no-wrap
msgid ""
"    ;; 3. The third argument to `condition-case' tells the interpreter\n"
"    ;;    what to do with an error.\n"
msgstr ""
"    ;; 3. El tercer argumento para `condition-case' cuenta el int@'erprete\n"
"    ;;    que hacer con un error.\n"

#. type: group
#: emacs-lisp-intro.texi:8192
#, no-wrap
msgid ""
"    ((buffer-read-only text-read-only) ;; this is the if-part\n"
"     ;; then...\n"
"     (copy-region-as-kill beg end)\n"
msgstr ""
"    ((buffer-read-only text-read-only) ;; esta el la parte if\n"
"     ;; entonces...\n"
"     (copy-region-as-kill beg end)\n"

#. type: group
#: emacs-lisp-intro.texi:8200
#, no-wrap
msgid ""
"     (if kill-read-only-ok            ;; usually this variable is nil\n"
"         (message \"Read only text copied to kill ring\")\n"
"       ;; or else, signal an error if the buffer is read-only;\n"
"       (barf-if-buffer-read-only)\n"
"       ;; and, in any case, signal that the text is read-only.\n"
"       (signal 'text-read-only (list (current-buffer)))))))\n"
msgstr ""
"     (if kill-read-only-ok            ;; normalmente esta variable es nula\n"
"         (message \"Lee el texto copiado al kill ring\")\n"
"       ;; o sino, se@~nala un error si el b@'uffer es de solo lectura;\n"
"       (barf-if-buffer-read-only)\n"
"       ;; y, en cualquier caso, se@~nala el texto de solo lectura.\n"
"       (signal 'text-read-only (list (current-buffer)))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8213
msgid ""
"As we have seen earlier (@pxref{Making Errors, , Generate an Error "
"Message}), when the Emacs Lisp interpreter has trouble evaluating an "
"expression, it provides you with help; in the jargon, this is called "
"``signaling an error''.  Usually, the computer stops the program and shows "
"you a message."
msgstr ""
"Como se ha visto antes (@pxref{Creando errores, , Genera un Mensaje de\n"
"Error}), cuando el int@'erprete Emacs Lisp tiene problemas evaluando\n"
"una expresi@'on, se provee de una ayuda; en jerga, se dice ``signaling an\n"
"error'' @emph{se@~nalando un error}. Normalmente, el ordenador para el\n"
"programa y te muestra un mensaje."

#. type: Plain text
#: emacs-lisp-intro.texi:8221
msgid ""
"However, some programs undertake complicated actions.  They should not "
"simply stop on an error.  In the @code{kill-region} function, the most "
"likely error is that you will try to kill text that is read-only and cannot "
"be removed.  So the @code{kill-region} function contains code to handle this "
"circumstance.  This code, which makes up the body of the @code{kill-region} "
"function, is inside of a @code{condition-case} special form."
msgstr ""
"Sin embargo, algunos programas garantizan acciones complicadas. Eso no\n"
"parar@'{@dotless{i}}a en un error. En la funci@'on @code{kill-region},\n"
"la mayor@'{@dotless{i}}a parece un error que intentar@'a cortar texto\n"
"que es de solo lectura y no puede ser eliminado. As@'{@dotless{i}} la\n"
"funci@'on @code{kill-region} contiene c@'odigo para manejar esta\n"
"circunstancia. Este c@'odigo, hace que el cuerpo de la funci@'on\n"
"@code{kill-region}, est@'e dentro de una forma especial\n"
"@code{condition-case}."

#. type: Plain text
#: emacs-lisp-intro.texi:8224
msgid "The template for @code{condition-case} looks like this:"
msgstr "La plantilla para @code{condition-case} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:8231
#, no-wrap
msgid ""
"(condition-case\n"
"  @var{var}\n"
"  @var{bodyform}\n"
"  @var{error-handler}@dots{})\n"
msgstr ""
"(condition-case\n"
"  @var{var}\n"
"  @var{bodyform}\n"
"  @var{error-handler}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8238
msgid ""
"The second argument, @var{bodyform}, is straightforward.  The "
"@code{condition-case} special form causes the Lisp interpreter to evaluate "
"the code in @var{bodyform}.  If no error occurs, the special form returns "
"the code's value and produces the side-effects, if any."
msgstr ""
"El segundo argumento, @var{bodyform} es sencillo. La forma especial\n"
"@code{condition-case} causa que el int@'erprete Lisp eval@'ue el\n"
"c@'odigo en @var{bodyform}. Si ning@'un error ocurre, la forma\n"
"especial devuelve el valor del c@'odigo y produce efectos laterales,\n"
"si hay."

#. type: Plain text
#: emacs-lisp-intro.texi:8242
msgid ""
"In short, the @var{bodyform} part of a @code{condition-case} expression "
"determines what should happen when everything works correctly."
msgstr ""
"En resumen, la parte @var{bodyform} de una expresi@'on\n"
"@code{condition-case} determina qu@'e ocurre cuando cualquier cosa\n"
"funciona correctamente."

#. type: Plain text
#: emacs-lisp-intro.texi:8246
msgid ""
"However, if an error occurs, among its other actions, the function "
"generating the error signal will define one or more error condition names."
msgstr ""
"Sin embargo, si un error ocurre, entre sus otras acciones, la\n"
"funci@'on genera la se@~nal de error que definir@'a uno o m@'as\n"
"errores de nombres de condici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:8252
msgid ""
"An error handler is the third argument to @code{condition case}.  An error "
"handler has two parts, a @var{condition-name} and a @var{body}.  If the "
"@var{condition-name} part of an error handler matches a condition name "
"generated by an error, then the @var{body} part of the error handler is run."
msgstr ""
"Un manejador de errores es el tercer argumento para\n"
"@code{condition-case}. Un manejador de errores tiene dos partes, un\n"
"@var{condition-name} y un @var{body}. Si la parte @var{condition-name}\n"
"tiene un manejador de errores encuentra un nombre de condici@'on generado\n"
"por un error, entonces la parte del @var{body} del manejador de errores\n"
"se ejecuta."

#. type: Plain text
#: emacs-lisp-intro.texi:8255
msgid ""
"As you will expect, the @var{condition-name} part of an error handler may be "
"either a single condition name or a list of condition names."
msgstr ""
"Como se esperar@'{@dotless{i}}a, la parte @var{condition-name} de un\n"
"manejador de errores puede ser as@'{@dotless{i}}, un nombre de\n"
"condici@'on simple o una lista de nombres de condici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:8259
msgid ""
"Also, a complete @code{condition-case} expression may contain more than one "
"error handler.  When an error occurs, the first applicable handler is run."
msgstr ""
"Tambi@'en, una expresi@'on completa @code{condition-case} puede\n"
"contener m@'as de un manejador de errores. Cuando un error ocurre, el\n"
"primer manejador aplicable se ejecuta."

#. type: Plain text
#: emacs-lisp-intro.texi:8265
msgid ""
"Lastly, the first argument to the @code{condition-case} expression, the "
"@var{var} argument, is sometimes bound to a variable that contains "
"information about the error.  However, if that argument is nil, as is the "
"case in @code{kill-region}, that information is discarded."
msgstr ""
"Finalmente, el primer argumento a la expresi@'on\n"
"@code{condition-case}, es el argumento @var{var}, que es algunas veces\n"
"asignado a una variable que contiene informaci@'on acerca del\n"
"error. Sin embargo, si este argumento es nulo, como es el caso en\n"
"@code{kill-region}, esta informaci@'on se descarta."

#. type: Plain text
#: emacs-lisp-intro.texi:8269
msgid ""
"In brief, in the @code{kill-region} function, the code @code{condition-case} "
"works like this:"
msgstr ""
"En breve, en la funci@'on @code{kill-region}, el c@'odigo\n"
"@code{condition-case} funciona as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:8274
#, no-wrap
msgid ""
"@var{If no errors}, @var{run only this code}\n"
"    @var{but}, @var{if errors}, @var{run this other code}.\n"
msgstr ""
"@var{Si no hay errores}, @var{ejecuta solo este c@'odigo}\n"
"    @var{pero}, @var{si hay errores}, @var{ejecuta este otro c@'odigo}.\n"

#. type: cindex
#: emacs-lisp-intro.texi:8292
#, no-wrap
msgid "Macro, lisp"
msgstr "Macro, lisp"

#. type: Plain text
#: emacs-lisp-intro.texi:8299
msgid ""
"The part of the @code{condition-case} expression that is evaluated in the "
"expectation that all goes well has a @code{when}.  The code uses @code{when} "
"to determine whether the @code{string} variable points to text that exists."
msgstr ""
"La parte de la expresi@'on @code{condition-case} que se eval@'ua en la\n"
"expectativa de que todo va bien si tiene un @code{when}. El c@'odigo usa\n"
"@code{when} para determinar si la variable @code{string} (@emph{cadena})\n"
"apunta al texto que existe."

#. type: Plain text
#: emacs-lisp-intro.texi:8304
msgid ""
"A @code{when} expression is simply a programmers' convenience.  It is an "
"@code{if} without the possibility of an else clause.  In your mind, you can "
"replace @code{when} with @code{if} and understand what goes on.  That is "
"what the Lisp interpreter does."
msgstr ""
"Una expresi@'on @code{when} es simplemente una conveniencia de\n"
"programadores. Eso es un @code{if} sin la posibilidad de una\n"
"cl@'ausula else. En tu mente, se puede reemplazar @code{when} con\n"
"@code{if} y comprender de que va. Esto es lo que el int@'erprete Lisp hace."

#. type: Plain text
#: emacs-lisp-intro.texi:8310
msgid ""
"Technically speaking, @code{when} is a Lisp macro.  A Lisp @dfn{macro} "
"enables you to define new control constructs and other language features.  "
"It tells the interpreter how to compute another Lisp expression which will "
"in turn compute the value.  In this case, the `other expression' is an "
"@code{if} expression."
msgstr ""
"T@'ecnicamente hablando, @code{when} es una macro Lisp. Una\n"
"@dfn{macro} Lisp permite definir una nueva construcci@'on de control y\n"
"otras funcionalidades del lenguaje. Eso cuenta al int@'erprete c@'omo\n"
"computar otra expresi@'on Lisp que dejar@'a de computar el valor. En\n"
"este caso, la `otra expresi@'on' es una expresi@'on @code{if}."

#. type: Plain text
#: emacs-lisp-intro.texi:8314
msgid ""
"The @code{kill-region} function definition also has an @code{unless} macro; "
"it is the converse of @code{when}.  The @code{unless} macro is an @code{if} "
"without a then clause"
msgstr ""
"La definici@'on de funci@'on tambi@'en tiene una macro @code{unless};\n"
"que acompa@~na a @code{when}. La macro @code{unless} es un\n"
"@code{if} sin una cl@'ausula then."

#. type: Plain text
#: emacs-lisp-intro.texi:8318
msgid ""
"For more about Lisp macros, see @ref{Macros, , Macros, elisp, The GNU Emacs "
"Lisp Reference Manual}.  The C programming language also provides macros.  "
"These are different, but also useful."
msgstr ""
"Para m@'as acerca de macros Lisp, ver @ref{Macros, , Macros, elisp, El\n"
"Manual de Referencia de Emacs Lisp}. El lenguaje de programaci@'on C\n"
"tambi@'en provee macros. Estos son diferentes, pero tambi@'en @'utiles."

#. type: Plain text
#: emacs-lisp-intro.texi:8329
msgid ""
"Regarding the @code{when} macro, in the @code{condition-case} expression, "
"when the string has content, then another conditional expression is "
"executed.  This is an @code{if} with both a then-part and an else-part."
msgstr ""
"Guardando la macro @code{when}, en la expresi@'on\n"
"@code{condition-case}, cuando la cadena tiene contenido, entonces otra\n"
"expresi@'on condicional se ejecuta. Esto es un @code{if} tanto con una\n"
"then-part y como con una else-part."

#. type: group
#: emacs-lisp-intro.texi:8335
#, no-wrap
msgid ""
"(if (eq last-command 'kill-region)\n"
"    (kill-append string (< end beg) yank-handler)\n"
"  (kill-new string nil yank-handler))\n"
msgstr ""
"(if (eq last-command 'kill-region)\n"
"    (kill-append string (< end beg) yank-handler)\n"
"  (kill-new string nil yank-handler))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8340
msgid ""
"The then-part is evaluated if the previous command was another call to "
"@code{kill-region}; if not, the else-part is evaluated."
msgstr ""
"La parte then (then-part) se eval@'ua si el comando previo fu@'e otra\n"
"llamada para @code{kill-region}; si no, se eval@'ua la parte else\n"
"(else-part)"

#. type: Plain text
#: emacs-lisp-intro.texi:8344
msgid ""
"@code{yank-handler} is an optional argument to @code{kill-region} that tells "
"the @code{kill-append} and @code{kill-new} functions how deal with "
"properties added to the text, such as `bold' or `italics'."
msgstr ""
"@code{yank-handler} es un argumento opcional para @code{kill-region}\n"
"que cuenta c@'omo las funciones @code{kill-append} y @code{kill-new} se\n"
"tratan con propiedades a@~nadidas al texto, tal como `negrilla' o\n"
"`it@'alica'.  "

#. type: Plain text
#: emacs-lisp-intro.texi:8348
msgid ""
"@code{last-command} is a variable that comes with Emacs that we have not "
"seen before.  Normally, whenever a function is executed, Emacs sets the "
"value of @code{last-command} to the previous command."
msgstr ""
"@code{last-command} es una variable que viene con Emacs y que no se ha\n"
"visto antes. Normalmente, siempre y cuando una funci@'on se ejecute,\n"
"Emacs asigna el valor de @code{last-command} al comando previo. "

#. type: Plain text
#: emacs-lisp-intro.texi:8352
msgid ""
"In this segment of the definition, the @code{if} expression checks whether "
"the previous command was @code{kill-region}.  If it was,"
msgstr ""
"En este segmento de la definici@'on, la expresi@'on @code{if} chequea\n"
"si el comando previo era @code{kill-region}. Si era eso,"

#. type: smallexample
#: emacs-lisp-intro.texi:8355
#, no-wrap
msgid "(kill-append string (< end beg) yank-handler)\n"
msgstr "(kill-append string (< end beg) yank-handler)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8360
msgid ""
"concatenates a copy of the newly clipped text to the just previously clipped "
"text in the kill ring."
msgstr ""
"Se concatena una copia del nuevo texto cortado al texto cortado\n"
"previamente en el kill ring @emph{anillo de la muerte}."

#. type: Plain text
#: emacs-lisp-intro.texi:8369
msgid ""
"The @code{copy-region-as-kill} function copies a region of text from a "
"buffer and (via either @code{kill-append} or @code{kill-new}) saves it in "
"the @code{kill-ring}."
msgstr ""
"La funci@'on @code{copy-region-as-kill} copia una regi@'on de texto\n"
"desde un b@'uffer y (via @code{kill-append} o @code{kill-new}) lo\n"
"guarda en el @code{kill-ring}."

#. type: Plain text
#: emacs-lisp-intro.texi:8376
msgid ""
"If you call @code{copy-region-as-kill} immediately after a @code{kill-"
"region} command, Emacs appends the newly copied text to the previously "
"copied text.  This means that if you yank back the text, you get it all, "
"from both this and the previous operation.  On the other hand, if some other "
"command precedes the @code{copy-region-as-kill}, the function copies the "
"text into a separate entry in the kill ring."
msgstr ""
"Si se llama a @code{copy-region-as-kill} inmediatamente despu@'es de\n"
"un comando @code{kill-region}, Emacs inserta el texto nuevamente\n"
"copiado al texto copiado previamente. Esto significa que si se pega el\n"
"texto, se obtiene todo, tanto esto, como la operaci@'on previa. Por\n"
"otro lado, si alg@'un otro comando precede la\n"
"@code{copy-region-as-kill}, la funci@'on copia el texto dentro de una\n"
"entrada separada el kill ring @emph{anillo de la muerte}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:8384
#, no-wrap
msgid "The complete @code{copy-region-as-kill} function definition"
msgstr "La definici@'on de la funci@'on completa @code{copy-region-as-kill}."

#. type: Plain text
#: emacs-lisp-intro.texi:8390
msgid ""
"Here is the complete text of the version 22 @code{copy-region-as-kill} "
"function:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el texto completo de la versi@'on 22\n"
"de la funci@'on @code{copy-region-as-kill}:"

#. type: group
#: emacs-lisp-intro.texi:8399
#, no-wrap
msgid ""
"(defun copy-region-as-kill (beg end)\n"
"  \"Save the region as if killed, but don't kill it.\n"
"In Transient Mark mode, deactivate the mark.\n"
"If `interprogram-cut-function' is non-nil, also save the text for a window\n"
"system cut and paste.\"\n"
"  (interactive \"r\")\n"
msgstr ""
"(defun copy-region-as-kill (beg end)\n"
"  \"Guarda la regi@'on como si estuviera cortada, pero no la cortes.\n"
"En el modo Marca de Tr@'ansito @emph{Transient Mark}, se desactiva la\n"
"  marca.\n"
"Si `interprogram-cut-function' es no nulo, tambi@'en se guarda el\n"
"  texto para una sistema de ventanas de cortar y pegar.\"\n"
"  (interactive \"r\")\n"

#. type: group
#: emacs-lisp-intro.texi:8404
#, no-wrap
msgid ""
"  (if (eq last-command 'kill-region)\n"
"      (kill-append (filter-buffer-substring beg end) (< end beg))\n"
"    (kill-new (filter-buffer-substring beg end)))\n"
msgstr ""
"  (if (eq last-command 'kill-region)\n"
"      (kill-append (filter-buffer-substring beg end) (< end beg))\n"
"    (kill-new (filter-buffer-substring beg end)))\n"

#. type: group
#: emacs-lisp-intro.texi:8409
#, no-wrap
msgid ""
"  (if transient-mark-mode\n"
"      (setq deactivate-mark t))\n"
"  nil)\n"
msgstr ""
"  (if transient-mark-mode\n"
"      (setq deactivate-mark t))\n"
"  nil)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8414
msgid "As usual, this function can be divided into its component parts:"
msgstr "De normal, esta funci@'on puede ser dividida dentro sus componentes:"

#. type: group
#: emacs-lisp-intro.texi:8421
#, no-wrap
msgid ""
"(defun copy-region-as-kill (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"r\")\n"
"  @var{body}@dots{})\n"
msgstr ""
"(defun copy-region-as-kill (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"r\")\n"
"  @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8429
msgid ""
"The arguments are @code{beg} and @code{end} and the function is interactive "
"with @code{\"r\"}, so the two arguments must refer to the beginning and end "
"of the region.  If you have been reading though this document from the "
"beginning, understanding these parts of a function is almost becoming "
"routine."
msgstr ""
"Los argumentos son @code{beg} y @code{end} y la funci@'on es\n"
"interactiva con @code{\"r\"}, as@'{@dotless{i}} los dos argumentos deben\n"
"referirse al principio y al final de la regi@'on. Si ha estado\n"
"leyendo a trav@'es de este documento desde el principio, comprendiendo\n"
"estas partes de una funci@'on casi llegar@'{@dotless{i}}a a ser rutina."

#. type: Plain text
#: emacs-lisp-intro.texi:8434
msgid ""
"The documentation is somewhat confusing unless you remember that the word "
"`kill' has a meaning different from usual.  The `Transient Mark' and "
"@code{interprogram-cut-function} comments explain certain side-effects."
msgstr ""
"La documentaci@'on es algo confusa a menos que se recuerde que la\n"
"palabra `kill' @emph{matar, cortar} tiene un significado diferente de la\n"
"usual. La `Marca Transitoria' y @code{interprogram-cut-function}\n"
"comenta explicar ciertos efectos laterales."

#. type: Plain text
#: emacs-lisp-intro.texi:8441
msgid ""
"After you once set a mark, a buffer always contains a region.  If you wish, "
"you can use Transient Mark mode to highlight the region temporarily.  (No "
"one wants to highlight the region all the time, so Transient Mark mode "
"highlights it only at appropriate times.  Many people turn off Transient "
"Mark mode, so the region is never highlighted.)"
msgstr ""
"Despu@'es de que se ha asignado una marca, un b@'uffer siempre\n"
"contiene una regi@'on. Si se desea se puede usar el modo Marca\n"
"Transitoria para iluminar la regi@'on temporalmente. (Nadie quiere\n"
"iluminar la regi@'on todo el rato, as@'{@dotless{i}} el modo Marca\n"
"Transitoria subrraya solo en el momento apropiado. Muchas personas\n"
"desactivan el modo Marca Transitoria, as@'{@dotless{i}} la regi@'on\n"
"nunca se ilumina.)"

#. type: Plain text
#: emacs-lisp-intro.texi:8447
msgid ""
"Also, a windowing system allows you to copy, cut, and paste among different "
"programs.  In the X windowing system, for example, the @code{interprogram-"
"cut-function} function is @code{x-select-text}, which works with the "
"windowing system's equivalent of the Emacs kill ring."
msgstr ""
"Tambi@'en, un sistema de ventanas permite copiar, cortar y pegar entre\n"
"programas diferentes. En el sistema de X windows, por ejemplo, la\n"
"funci@'on @code{interprogram-cut-function} es @code{x-select-text},\n"
"que funciona con el sistema de ventanas equivalente del kill ring de\n"
"Emacs."

#. type: Plain text
#: emacs-lisp-intro.texi:8455
msgid ""
"The body of the @code{copy-region-as-kill} function starts with an @code{if} "
"clause.  What this clause does is distinguish between two different "
"situations: whether or not this command is executed immediately after a "
"previous @code{kill-region} command.  In the first case, the new region is "
"appended to the previously copied text.  Otherwise, it is inserted into the "
"beginning of the kill ring as a separate piece of text from the previous "
"piece."
msgstr ""
"El cuerpo de la funci@'on @code{copy-region-as-kill} empieza con una\n"
"cl@'ausula @code{if}. Lo que esta cl@'ausula hace es distinguir entre\n"
"dos situaciones diferentes: si este comando se ejecuta o no\n"
"inmediatamente despu@'es de un comando previo @code{kill-region}. En\n"
"el primer caso, la nueva regi@'on se concatena al texto copiado\n"
"previamente. De otro modo, eso se inserta al principio del anillo de\n"
"la muerte @emph{kill ring} como una pieza separada de texto desde la\n"
"pieza previa."

#. type: Plain text
#: emacs-lisp-intro.texi:8458
msgid ""
"The last two lines of the function prevent the region from lighting up if "
"Transient Mark mode is turned on."
msgstr ""
"Las dos l@'{@dotless{i}}neas de la funci@'on previene la regi@'on\n"
"desde la iluminaci@'on si el modo Transient Mark @emph{Marca\n"
"Transitoria} est@'a activado."

#. type: Plain text
#: emacs-lisp-intro.texi:8460
msgid "The body of @code{copy-region-as-kill} merits discussion in detail."
msgstr "El cuerpo de @code{copy-region-as-kill} merece discusi@'on en detalle."

#. type: Plain text
#: emacs-lisp-intro.texi:8473
msgid ""
"The @code{copy-region-as-kill} function works in much the same way as the "
"@code{kill-region} function.  Both are written so that two or more kills in "
"a row combine their text into a single entry.  If you yank back the text "
"from the kill ring, you get it all in one piece.  Moreover, kills that kill "
"forward from the current position of the cursor are added to the end of the "
"previously copied text and commands that copy text backwards add it to the "
"beginning of the previously copied text.  This way, the words in the text "
"stay in the proper order."
msgstr ""
"La funci@'on @code{copy-region-as-kil} funciona de un modo parecido a\n"
"la funci@'on @code{kill-region}. Ambas est@'an escritas\n"
"de un modo que dos o m@'as textos cortados en una fila combinan\n"
"su texto en una entrada simple. Si se pega el texto desde el\n"
"anillo de la muerte @emph{kill ring}, se tiene todo en una\n"
"pieza. M@'as all@'a, los cortes de textos que se cortan hacia adelante\n"
"desde la posici@'on actual del cursor se a@~naden al fin del texto\n"
"copiado previamente y comanda este texto copiado vaya hacia atr@'as al\n"
"principio del texto copiado previamente. De este modo, las palabras en\n"
"el texto est@'an en el orden apropiado."

#. type: Plain text
#: emacs-lisp-intro.texi:8477
msgid ""
"Like @code{kill-region}, the @code{copy-region-as-kill} function makes use "
"of the @code{last-command} variable that keeps track of the previous Emacs "
"command."
msgstr ""
"Como @code{kill-region}, la funci@'on @code{copy-region-as-kill} hace\n"
"uso de la variable @code{last-command} que deja traza del comando de\n"
"Emacs previo."

#. type: node
#: emacs-lisp-intro.texi:8485
#, no-wrap
msgid "last-command & this-command"
msgstr "last-command & this-command"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:8486
#, no-wrap
msgid "@code{last-command} and @code{this-command}"
msgstr "@code{last-command} y @code{this-command}"

#. type: Plain text
#: emacs-lisp-intro.texi:8494
msgid ""
"Normally, whenever a function is executed, Emacs sets the value of "
"@code{this-command} to the function being executed (which in this case would "
"be @code{copy-region-as-kill}).  At the same time, Emacs sets the value of "
"@code{last-command} to the previous value of @code{this-command}."
msgstr ""
"Normalmente, siempre y cuando una funci@'on se ejecuta, Emacs asigna\n"
"el valor de @code{this-command} a la funci@'on que se ejecuta (que en\n"
"este caso ser@'{@dotless{i}}a @code{copy-region-as-kill}). Al mismo\n"
"tiempo, Emacs asigna el valor de @code{last-command} al valor previo\n"
"de @code{this-command}."

#. type: Plain text
#: emacs-lisp-intro.texi:8505
msgid ""
"In the first part of the body of the @code{copy-region-as-kill} function, an "
"@code{if} expression determines whether the value of @code{last-command} is "
"@code{kill-region}.  If so, the then-part of the @code{if} expression is "
"evaluated; it uses the @code{kill-append} function to concatenate the text "
"copied at this call to the function with the text already in the first "
"element (the @sc{car}) of the kill ring.  On the other hand, if the value of "
"@code{last-command} is not @code{kill-region}, then the @code{copy-region-as-"
"kill} function attaches a new element to the kill ring using the @code{kill-"
"new} function."
msgstr ""
"En la primera parte del cuerpo de la funci@'on\n"
"@code{copy-region-as-kill}, una expresi@'on @code{if} determina si el\n"
"valor de @code{last-command} es @code{kill-region}. Si es\n"
"as@'{@dotless{i}}, la then-part de la expresi@'on @code{if} se\n"
"eval@'ua; eso usa la funci@'on @code{kill-append} para concatenar el\n"
"texto copiado en esta llamada a la funci@'on con el texto ya en el\n"
"primer elemento (el @sc{car} del anillo de la muerte. Por otro lado,\n"
"si el valor de @code{last-command} no es @code{kill-region}, entonces\n"
"la funci@'on @code{copy-region-as-kill} adjunta un nuevo elemento al\n"
"anillo de la muerte @emph{kill ring} usando la funci@'on\n"
"@code{kill-new}."

#. type: Plain text
#: emacs-lisp-intro.texi:8508
msgid "The @code{if} expression reads as follows; it uses @code{eq}:"
msgstr "La expresi@'on @code{or} se ve as@'{@dotless{i}}; usa @code{eq}:"

#. type: group
#: emacs-lisp-intro.texi:8516
#, no-wrap
msgid ""
"  (if (eq last-command 'kill-region)\n"
"      ;; @r{then-part}\n"
"      (kill-append  (filter-buffer-substring beg end) (< end beg))\n"
"    ;; @r{else-part}\n"
"    (kill-new  (filter-buffer-substring beg end)))\n"
msgstr ""
"  (if (eq last-command 'kill-region)\n"
"      ;; @r{parte then}\n"
"      (kill-append  (filter-buffer-substring beg end) (< end beg))\n"
"    ;; @r{parte else}\n"
"    (kill-new  (filter-buffer-substring beg end)))\n"

#. type: findex
#: emacs-lisp-intro.texi:8519
#, no-wrap
msgid "filter-buffer-substring"
msgstr "filter-buffer-substring"

#. type: Plain text
#: emacs-lisp-intro.texi:8526
msgid ""
"(The @code{filter-buffer-substring} function returns a filtered substring of "
"the buffer, if any.  Optionally---the arguments are not here, so neither is "
"done---the function may delete the initial text or return the text without "
"its properties; this function is a replacement for the older @code{buffer-"
"substring} function, which came before text properties were implemented.)"
msgstr ""
"(La funci@'on @code{filter-buffer-substring} devuelve una subcadena\n"
"filtrada del b@'uffer, cualquiera. Opcionalmente --- los argumentos no\n"
"est@'an aqu@'{@dotless{i}}, as@'{@dotless{i}} nunca est@'a hecho ---\n"
"la funci@'on puede borrar el texto inicial o devolver el texto sin sus\n"
"propiedades; esta funci@'on es un reemplazo para la vieja funci@'on\n"
"@code{buffer-substring}, que viene antes que las propiedades del texto\n"
"fuesen implementadas.)"

#. type: findex
#: emacs-lisp-intro.texi:8527
#, no-wrap
msgid "eq @r{(example of use)}"
msgstr "eq @r{(ejemplo de uso)}"

#. type: Plain text
#: emacs-lisp-intro.texi:8536
msgid ""
"The @code{eq} function tests whether its first argument is the same Lisp "
"object as its second argument.  The @code{eq} function is similar to the "
"@code{equal} function in that it is used to test for equality, but differs "
"in that it determines whether two representations are actually the same "
"object inside the computer, but with different names.  @code{equal} "
"determines whether the structure and contents of two expressions are the "
"same."
msgstr ""
"La funci@'on @code{eq} chequea si su primer argumento es el mismo\n"
"objeto Lisp que su segundo argumento. La funci@'on @code{eq} es\n"
"similar a la funci@'on @code{equal} en esto que es usado para chequear\n"
"para igualdad, pero difiere en esto que determina si dos\n"
"representaciones son actualmente el mismo objeto dentro del ordenador,\n"
"pero con diferentes nombres. @code{equal} determina si la estructura y\n"
"contenidos de dos expresiones son la misma."

#. type: Plain text
#: emacs-lisp-intro.texi:8539
msgid ""
"If the previous command was @code{kill-region}, then the Emacs Lisp "
"interpreter calls the @code{kill-append} function"
msgstr ""
"Si el comando previo era @code{kill-region}, entonces el int@'erprete\n"
"Emacs Lisp llama a la funci@'on @code{kill-append}"

#. type: node
#: emacs-lisp-intro.texi:8540
#, no-wrap
msgid "kill-append function"
msgstr "Funci@'on kill-append"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:8541
#, no-wrap
msgid "The @code{kill-append} function"
msgstr "La funci@'on @code{kill-append}"

#. type: findex
#: emacs-lisp-intro.texi:8542
#, no-wrap
msgid "kill-append"
msgstr "kill-append"

#. type: Plain text
#: emacs-lisp-intro.texi:8546
msgid "The @code{kill-append} function looks like this:"
msgstr "La funci@'on @code{kill-new} se ve como as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:8560
#, no-wrap
msgid ""
"(defun kill-append (string before-p &optional yank-handler)\n"
"  \"Append STRING to the end of the latest kill in the kill ring.\n"
"If BEFORE-P is non-nil, prepend STRING to the kill.\n"
"@dots{} \"\n"
"  (let* ((cur (car kill-ring)))\n"
"    (kill-new (if before-p (concat string cur) (concat cur string))\n"
"              (or (= (length cur) 0)\n"
"                  (equal yank-handler\n"
"                         (get-text-property 0 'yank-handler cur)))\n"
"              yank-handler)))\n"
msgstr ""
"(defun kill-append (string before-p &optional yank-handler)\n"
"  \"Inserta STRING al fin del @'ultimo corte en el anillo de la muerte @emph{kill ring}.\n"
"Si BEFORE-P es no nulo, inserta STRING.\n"
"@dots{} \"\n"
"  (let* ((cur (car kill-ring)))\n"
"    (kill-new (if before-p (concat string cur) (concat cur string))\n"
"              (or (= (length cur) 0)\n"
"                  (equal yank-handler\n"
"                         (get-text-property 0 'yank-handler cur)))\n"
"              yank-handler)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8580
msgid ""
"The @code{kill-append} function is fairly straightforward.  It uses the "
"@code{kill-new} function, which we will discuss in more detail in a moment."
msgstr ""
"La funci@'on @code{kill-append} es limpia. Usa la funci@'on\n"
"@code{kill-new}, que discutiremos en m@'as detalle en un momento."

#. type: Plain text
#: emacs-lisp-intro.texi:8585
msgid ""
"(Also, the function provides an optional argument called @code{yank-"
"handler}; when invoked, this argument tells the function how to deal with "
"properties added to the text, such as `bold' or `italics'.)"
msgstr ""
"(Tambi@'en, la funci@'on provee un argumento opcional llamado\n"
"@code{yank-handler}; cuando se invoque, este argumento cuenta a la\n"
"funci@'on c@'omo tratar con la propiedades a@~nadidas al texto, tales\n"
"como `negrilla' o `it@'alicas'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:8591
msgid ""
"It has a @code{let*} function to set the value of the first element of the "
"kill ring to @code{cur}.  (I do not know why the function does not use "
"@code{let} instead; only one value is set in the expression.  Perhaps this "
"is a bug that produces no problems?)"
msgstr ""
"Eso tiene una funci@'on @code{let*} para asignar el valor del primer\n"
"elemento del kill ring a @code{cur}. (No se sabe por qu@'e la\n"
"funci@'on no usa @code{let}; solo un valor es asignado en la\n"
"expresi@'on. @questiondown{}Quiz@'as esto es un error que no produce\n"
"problemas?"

#. type: Plain text
#: emacs-lisp-intro.texi:8596
msgid ""
"Consider the conditional that is one of the two arguments to @code{kill-"
"new}.  It uses @code{concat} to concatenate the new text to the @sc{car} of "
"the kill ring.  Whether it prepends or appends the text depends on the "
"results of an @code{if} expression:"
msgstr ""
"Considera el condicional que es uno de los dos argumentos para\n"
"@code{kill-new}. Eso usa @code{concat} para concatenar el nuevo texto\n"
"al @sc{car} del anillo de la muerte @emph{kill ring}. Si eso se\n"
"concatena atr@'as o delante depende de los resultados de una\n"
"expresi@'on @code{if}:"

#. type: group
#: emacs-lisp-intro.texi:8602
#, no-wrap
msgid ""
"(if before-p                            ; @r{if-part}\n"
"    (concat string cur)                 ; @r{then-part}\n"
"  (concat cur string))                  ; @r{else-part}\n"
msgstr ""
"(if before-p                            ; @r{if-part}\n"
"    (concat string cur)                 ; @r{then-part}\n"
"  (concat cur string))                  ; @r{else-part}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8613
msgid ""
"If the region being killed is before the region that was killed in the last "
"command, then it should be prepended before the material that was saved in "
"the previous kill; and conversely, if the killed text follows what was just "
"killed, it should be appended after the previous text.  The @code{if} "
"expression depends on the predicate @code{before-p} to decide whether the "
"newly saved text should be put before or after the previously saved text."
msgstr ""
"Si la regi@'on cortada est@'a antes que la regi@'on que se cort@'o en\n"
"el @'ultimo comando, entonces deber@'{@dotless{i}}a ser puesto antes\n"
"que el material salvador en el anterior corte @emph{kill}; y de manera\n"
"contraria, si el texto cortado sigue lo que fu@'e cortado, eso\n"
"ser@'{@dotless{i}}a a@~nadido despu@'es del texto previo. La\n"
"expresi@'on @code{if} depende del predicado @code{before-p} para\n"
"decidir si el texto nuevamente salvado es puesto antes o despu@'es."

#. type: Plain text
#: emacs-lisp-intro.texi:8628
msgid ""
"The symbol @code{before-p} is the name of one of the arguments to @code{kill-"
"append}.  When the @code{kill-append} function is evaluated, it is bound to "
"the value returned by evaluating the actual argument.  In this case, this is "
"the expression @code{(< end beg)}.  This expression does not directly "
"determine whether the killed text in this command is located before or after "
"the kill text of the last command; what it does is determine whether the "
"value of the variable @code{end} is less than the value of the variable "
"@code{beg}.  If it is, it means that the user is most likely heading towards "
"the beginning of the buffer.  Also, the result of evaluating the predicate "
"expression, @code{(< end beg)}, will be true and the text will be prepended "
"before the previous text.  On the other hand, if the value of the variable "
"@code{end} is greater than the value of the variable @code{beg}, the text "
"will be appended after the previous text."
msgstr ""
"El s@'{@dotless{i}}mbolo @code{before-p} es el nombre de uno de los\n"
"argumentos a @code{kill-append}. Cuando la funci@'on\n"
"@code{kill-append} se eval@'ua, se asocia al valor devuelto evaluando\n"
"el argumento actual. En este caso, esta es la expresi@'on @code{(< end\n"
"beg)}. Esta expresi@'on no determina directamente si el texto cortado\n"
"en este comando se localiza antes o despu@'es del texto cortado del\n"
"@'ultimo comando; lo que hace es determinar si el valor de la variable\n"
"@code{end} es menor que el valor de la variable @code{beg}. Si es\n"
"as@'{@dotless{i}}, significa que el usuario se encara al principio del\n"
"b@'uffer. Tambi@'en, el resultado de evaluar la expresi@'on del\n"
"predicado. @code{(< end beg)}, ser@'a verdadero y el texto se\n"
"concatena antes del texto previo. Por otro lado, si el valor de la\n"
"variable @code{end} es mayor que el valor del la variable @code{beg},\n"
"el texto ser@'a concatenado despu@'es del texto previo."

#. type: Plain text
#: emacs-lisp-intro.texi:8632
msgid ""
"When the newly saved text will be prepended, then the string with the new "
"text will be concatenated before the old text:"
msgstr ""
"Cuando el texto nuevamente guardado se concatena, entonces la cadena\n"
"con el nuevo texto ser@'a concatenado antes del viejo texto:"

#. type: smallexample
#: emacs-lisp-intro.texi:8635
#, no-wrap
msgid "(concat string cur)\n"
msgstr "(concat string cur)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8641
msgid ""
"But if the text will be appended, it will be concatenated after the old text:"
msgstr ""
"Pero si el texto ser@'a a@~nadido, eso ser@'a concatenado despu@'es\n"
"del viejo texto:"

#. type: smallexample
#: emacs-lisp-intro.texi:8644
#, no-wrap
msgid "(concat cur string))\n"
msgstr "(concat cur string))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8649
msgid ""
"To understand how this works, we first need to review the @code{concat} "
"function.  The @code{concat} function links together or unites two strings "
"of text.  The result is a string.  For example:"
msgstr ""
"Para comprender c@'omo funciona esto, primero se necesita revisar la\n"
"funci@'on @code{concat}. La funci@'on @code{concat} enlaza junto o une\n"
"dos cadenas de texto. El resultado es una cadena. Por ejemplo:"

#. type: group
#: emacs-lisp-intro.texi:8654
#, no-wrap
msgid ""
"(concat \"abc\" \"def\")\n"
"     @result{} \"abcdef\"\n"
msgstr ""
"(concat \"abc\" \"def\")\n"
"     @result{} \"abcdef\"\n"

#. type: group
#: emacs-lisp-intro.texi:8660
#, no-wrap
msgid ""
"(concat \"new \"\n"
"        (car '(\"first element\" \"second element\")))\n"
"     @result{} \"new first element\"\n"
"\n"
msgstr ""
"(concat \"nuevo \"\n"
"        (car '(\"primer elemento\" \"segundo elemento\")))\n"
"     @result{} \"nuevo primer elemento\"\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:8664
#, no-wrap
msgid ""
"(concat (car\n"
"        '(\"first element\" \"second element\")) \" modified\")\n"
"     @result{} \"first element modified\"\n"
msgstr ""
"(concat (car\n"
"        '(\"primer elemento\" \"segundo elemento\")) \" modificado\")\n"
"     @result{} \"primer elemento modificado\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8671
msgid ""
"We can now make sense of @code{kill-append}: it modifies the contents of the "
"kill ring.  The kill ring is a list, each element of which is saved text.  "
"The @code{kill-append} function uses the @code{kill-new} function which in "
"turn uses the @code{setcar} function."
msgstr ""
"Ahora puede tener sentido @code{kill-append}: eso modifica los\n"
"contenidos del anillo de la muerte @emph{kill ring}. El anillo de la\n"
"muerte @emph{kill ring} es una lista, en la que cada elemento es texto\n"
"guardado. La funci@'on @code{kill-append} usa la funci@'on\n"
"@code{kill-new} que usa la funci@'on @code{setcar}."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:8673
#, no-wrap
msgid "The @code{kill-new} function"
msgstr "La funci@'on @code{kill-new}"

#. type: findex
#: emacs-lisp-intro.texi:8674
#, no-wrap
msgid "kill-new"
msgstr "kill-new"

#. type: Plain text
#: emacs-lisp-intro.texi:8690
msgid "The @code{kill-new} function looks like this:"
msgstr "La funci@'on @code{kill-new} se ve de esta manera:"

#. type: group
#: emacs-lisp-intro.texi:8696
#, no-wrap
msgid ""
"(defun kill-new (string &optional replace yank-handler)\n"
"  \"Make STRING the latest kill in the kill ring.\n"
"Set `kill-ring-yank-pointer' to point to it.\n"
"\n"
msgstr ""
"(defun kill-new (string &optional replace yank-handler)\n"
"  \"Crea STRING el @'ultimo corte en el anillo de la muerte @emph{kill\n"
"  ring}.\n"
"Asigna `kill-ring-yank-pointer' para apuntarlo.\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:8701
#, no-wrap
msgid ""
"If `interprogram-cut-function' is non-nil, apply it to STRING.\n"
"Optional second argument REPLACE non-nil means that STRING will replace\n"
"the front of the kill ring, rather than being added to the list.\n"
"@dots{}\"\n"
msgstr ""
"Si `interprogram-cut-function' es no nulo, apl@'{@dotless{i}}calo a su\n"
" STRING.\n"
"Segundo argumento opcional REPLACE no-nulo significa que STRING\n"
" reemplazar@'a el frente del kill ring, en vez de ser a@~andido a la lista.\n"
"@dots{}\"\n"

#. type: group
#: emacs-lisp-intro.texi:8710
#, no-wrap
msgid ""
"  (if (> (length string) 0)\n"
"      (if yank-handler\n"
"          (put-text-property 0 (length string)\n"
"                             'yank-handler yank-handler string))\n"
"    (if yank-handler\n"
"        (signal 'args-out-of-range\n"
"                (list string \"yank-handler specified for empty string\"))))\n"
msgstr ""
"  (if (> (length string) 0)\n"
"      (if yank-handler\n"
"          (put-text-property 0 (length string)\n"
"                             'yank-handler yank-handler string))\n"
"    (if yank-handler\n"
"        (signal 'args-out-of-range\n"
"                (list string \"yank-handler specified for empty string\"))))\n"

#. type: group
#: emacs-lisp-intro.texi:8714
#, no-wrap
msgid ""
"  (if (fboundp 'menu-bar-update-yank-menu)\n"
"      (menu-bar-update-yank-menu string (and replace (car kill-ring))))\n"
msgstr ""
"  (if (fboundp 'menu-bar-update-yank-menu)\n"
"      (menu-bar-update-yank-menu string (and replace (car kill-ring))))\n"

#. type: group
#: emacs-lisp-intro.texi:8721
#, no-wrap
msgid ""
"  (if (and replace kill-ring)\n"
"      (setcar kill-ring string)\n"
"    (push string kill-ring)\n"
"    (if (> (length kill-ring) kill-ring-max)\n"
"        (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))\n"
msgstr ""
"  (if (and replace kill-ring)\n"
"      (setcar kill-ring string)\n"
"    (push string kill-ring)\n"
"    (if (> (length kill-ring) kill-ring-max)\n"
"        (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))\n"

#. type: group
#: emacs-lisp-intro.texi:8726 emacs-lisp-intro.texi:8794
#, no-wrap
msgid ""
"  (setq kill-ring-yank-pointer kill-ring)\n"
"  (if interprogram-cut-function\n"
"      (funcall interprogram-cut-function string (not replace))))\n"
msgstr ""
"  (setq kill-ring-yank-pointer kill-ring)\n"
"  (if interprogram-cut-function\n"
"      (funcall interprogram-cut-function string (not replace))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8749
msgid "(Notice that the function is not interactive.)"
msgstr "(Vea que la funci@'on no es interactiva.)"

#. type: Plain text
#: emacs-lisp-intro.texi:8751
msgid "As usual, we can look at this function in parts."
msgstr "Normalmente, se mira a esta funci@'on en partes."

#. type: Plain text
#: emacs-lisp-intro.texi:8755
msgid ""
"The function definition has an optional @code{yank-handler} argument, which "
"when invoked tells the function how to deal with properties added to the "
"text, such as `bold' or `italics'.  We will skip that."
msgstr ""
"La definici@'on de la funci@'on tiene un argumento opcional\n"
"@code{yank-handler}, que cuando se invoca cuenta la funci@'on de c@'omo\n"
"tratar con propiedades a@~nadidas al texto, tal como `negrilla' o\n"
"`it@'alica'. Nosotros evitaremos esto."

#. type: Plain text
#: emacs-lisp-intro.texi:8758
msgid "The first line of the documentation makes sense:"
msgstr "La primer l@'{@dotless{i}}nea de la documentaci@'on tiene sentido:"

#. type: smallexample
#: emacs-lisp-intro.texi:8761
#, no-wrap
msgid "Make STRING the latest kill in the kill ring.\n"
msgstr ""
"Crea la CADENA la @'ultima copia en el anillo de la muerte @emph{kill\n"
"ring}.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8765
msgid "Let's skip over the rest of the documentation for the moment."
msgstr "Permite saltarse el resto de la documentaci@'on por el momento."

#. type: Plain text
#: emacs-lisp-intro.texi:8770
msgid ""
"Also, let's skip over the initial @code{if} expression and those lines of "
"code involving @code{menu-bar-update-yank-menu}.  We will explain them below."
msgstr ""
"Tambi@'en, permite salir de la expresi@'on inicial @code{if} y estas\n"
"l@'{@dotless{i}}neas de c@'odigo involucrando\n"
"@code{menu-bar-update-yank-menu}. Nosotros explicaremos debajo."

#. type: Plain text
#: emacs-lisp-intro.texi:8773
msgid "The critical lines are these:"
msgstr "Las l@'{@dotless{i}}neas cr@'{@dotless{i}}ticas son estas:"

#. type: group
#: emacs-lisp-intro.texi:8779
#, no-wrap
msgid ""
"  (if (and replace kill-ring)\n"
"      ;; @r{then}\n"
"      (setcar kill-ring string)\n"
msgstr ""
"  (if (and replace kill-ring)\n"
"      ;; @r{entonces}\n"
"      (setcar kill-ring string)\n"

#. type: group
#: emacs-lisp-intro.texi:8783
#, no-wrap
msgid ""
"    ;; @r{else}\n"
"  (push string kill-ring)\n"
msgstr ""
"    ;; @r{resto}\n"
"  (push string kill-ring)\n"

#. type: group
#: emacs-lisp-intro.texi:8789
#, no-wrap
msgid ""
"    (setq kill-ring (cons string kill-ring))\n"
"    (if (> (length kill-ring) kill-ring-max)\n"
"        ;; @r{avoid overly long kill ring}\n"
"        (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))\n"
msgstr ""
"    (setq kill-ring (cons string kill-ring))\n"
"    (if (> (length kill-ring) kill-ring-max)\n"
"        ;; @r{avoid overly long kill ring}\n"
"        (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8800
msgid ""
"The conditional test is @w{@code{(and replace kill-ring)}}.  This will be "
"true when two conditions are met: the kill ring has something in it, and the "
"@code{replace} variable is true."
msgstr ""
"El test condicional es @w{@code{(and replace kill-ring)}}. Esto ser@'a\n"
"verdad cuando dos condiciones se encuentran: el anillo de la muerte\n"
"@emph{kill ring} tiene alguna cosa dentro, y la variable\n"
"@code{replace} es verdad."

#. type: Plain text
#: emacs-lisp-intro.texi:8805
msgid ""
"When the @code{kill-append} function sets @code{replace} to be true and when "
"the kill ring has at least one item in it, the @code{setcar} expression is "
"executed:"
msgstr ""
"Cuando la funci@'on @code{kill-append} asigna @code{replace} para ser\n"
"cierto y cuando el anillo de la muerte @emph{kill ring} tiene al menos\n"
"un @'{@dotless{i}}tem en eso, la expresi@'on @code{setcar} es ejecutada."

#. type: smallexample
#: emacs-lisp-intro.texi:8808
#, no-wrap
msgid "(setcar kill-ring string)\n"
msgstr "(setcar kill-ring string)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8813
msgid ""
"The @code{setcar} function actually changes the first element of the "
"@code{kill-ring} list to the value of @code{string}.  It replaces the first "
"element."
msgstr ""
"La funci@'on @code{setcar} actualemten cambia el primer elemento del\n"
"anillo de la muerte (@code{kill-ring} lista al valor de\n"
"@code{string}. Eso reemplaza el primer elemento."

#. type: Plain text
#: emacs-lisp-intro.texi:8817
msgid ""
"On the other hand, if the kill ring is empty, or replace is false, the else-"
"part of the condition is executed:"
msgstr ""
"Por otro lado, si el kill ring est@'a vac@'{@dotless{i}}o, o\n"
"reemplazar es falso, la else-part de la condici@'on est@'a ejecutado:"

#. type: smallexample
#: emacs-lisp-intro.texi:8820
#, no-wrap
msgid "(push string kill-ring)\n"
msgstr "(push string kill-ring)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8826
msgid ""
"@code{push} puts its first argument onto the second.  It is similar to the "
"older"
msgstr ""
"@code{push} pone su primer argumento dentro del segundo. Es similar al viejo."

#. type: smallexample
#: emacs-lisp-intro.texi:8829
#, no-wrap
msgid "(setq kill-ring (cons string kill-ring))\n"
msgstr "(setq kill-ring (cons string kill-ring))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8834
msgid "or the newer"
msgstr "o el nuevo"

#. type: smallexample
#: emacs-lisp-intro.texi:8837
#, no-wrap
msgid "(add-to-list kill-ring string)\n"
msgstr "(add-to-list kill-ring string)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8845
msgid ""
"When it is false, the expression first constructs a new version of the kill "
"ring by prepending @code{string} to the existing kill ring as a new element "
"(that is what the @code{push} does).  Then it executes a second @code{if} "
"clause.  This second @code{if} clause keeps the kill ring from growing too "
"long."
msgstr ""
"Cuando eso es falso, la expresi@'on primero construye una nueva\n"
"versi@'on del anillo de la muerte @emph{kill ring} a@~nadiendo\n"
"@code{string} al anillo de la muerte @emph{kill ring} como un nuevo\n"
"elemento (que es lo que @code{push} hace). Entonces ejecuta un segundo\n"
"@code{if} cl@'ausula. Este segundo @code{if} cl@'ausula guarada el\n"
"anillo de la muerte @emph{kill ring} desde el creciente demasiado largo."

#. type: Plain text
#: emacs-lisp-intro.texi:8847
msgid "Let's look at these two expressions in order."
msgstr "D@'ejanos mirar estas dos expresiones en orden."

#. type: Plain text
#: emacs-lisp-intro.texi:8851
msgid ""
"The @code{push} line of the else-part sets the new value of the kill ring to "
"what results from adding the string being killed to the old kill ring."
msgstr ""
"La l@'{@dotless{i}}nea @code{push} de la parte else asigna el nuevo\n"
"valor del kill ring @emph{anillo de la muerte} a que resultados\n"
"a@~naden la cadena siendo cortada al viejo anillo de la muerte\n"
"@emph{kill ring}"

#. type: Plain text
#: emacs-lisp-intro.texi:8853
msgid "We can see how this works with an example."
msgstr "Nosotros podemos ver c@'omo esto funciona con un ejemplo."

#. type: Plain text
#: emacs-lisp-intro.texi:8856
msgid "First,"
msgstr "Primero,"

#. type: smallexample
#: emacs-lisp-intro.texi:8859
#, no-wrap
msgid "(setq example-list '(\"here is a clause\" \"another clause\"))\n"
msgstr "(setq example-list '(\"aqui una clausula\" \"otra clausula\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8865
msgid ""
"After evaluating this expression with @kbd{C-x C-e}, you can evaluate "
"@code{example-list} and see what it returns:"
msgstr ""
"Despu@'es de evaluar esta expresi@'on con @kbd{C-x C-e}, se puede\n"
"evaluar @code{example-list} y mira lo que devuelve:"

#. type: group
#: emacs-lisp-intro.texi:8870
#, no-wrap
msgid ""
"example-list\n"
"     @result{} (\"here is a clause\" \"another clause\")\n"
msgstr ""
"example-list\n"
"     @result{} (\"aqu@'{@dotless{i}} hay una cla@'usula\" \"otra cla@'usula\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8877
msgid ""
"Now, we can add a new element on to this list by evaluating the following "
"expression:"
msgstr ""
"Ahora, se puede a@~nadir un nuevo elemento en esta lista evaluando la\n"
"siguiente expresi@'on:"

#. type: findex
#: emacs-lisp-intro.texi:8877
#, no-wrap
msgid "push, @r{example}"
msgstr "push, @r{ejemplo}"

#. type: smallexample
#: emacs-lisp-intro.texi:8881
#, no-wrap
msgid "(push \"a third clause\" example-list)\n"
msgstr "(push \"una tercera cl@'ausula\" lista-de-ejemplo)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8886
msgid "When we evaluate @code{example-list}, we find its value is:"
msgstr "Cuando se eval@'ua @code{example-list}, se encuentra su valor es:"

#. type: group
#: emacs-lisp-intro.texi:8891
#, no-wrap
msgid ""
"example-list\n"
"     @result{} (\"a third clause\" \"here is a clause\" \"another clause\")\n"
msgstr ""
"example-list\n"
"     @result{} (\"una tercera cla@'usula\" \"aqu@'{@dotless{i}} hay una\n"
"     cla@'usula\" \"otra cla@'usula\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8896
msgid "Thus, the third clause is added to the list by @code{push}."
msgstr "De este modo, la tercera cla@'usula se a@~nade a la lista con @code{push}."

#. type: Plain text
#: emacs-lisp-intro.texi:8900
msgid ""
"Now for the second part of the @code{if} clause.  This expression keeps the "
"kill ring from growing too long.  It looks like this:"
msgstr ""
"Ahora para la segunda parte de la cla@'usula @code{if}. Esta\n"
"expresi@'on deja el kill ring desde lo creciente demasiado largo. Eso\n"
"se ve de la siguiente manera:"

#. type: group
#: emacs-lisp-intro.texi:8905
#, no-wrap
msgid ""
"(if (> (length kill-ring) kill-ring-max)\n"
"    (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))\n"
msgstr ""
"(if (> (length kill-ring) kill-ring-max)\n"
"    (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8914
msgid ""
"The code checks whether the length of the kill ring is greater than the "
"maximum permitted length.  This is the value of @code{kill-ring-max} (which "
"is 60, by default).  If the length of the kill ring is too long, then this "
"code sets the last element of the kill ring to @code{nil}.  It does this by "
"using two functions, @code{nthcdr} and @code{setcdr}."
msgstr ""
"El c@'odigo chequea si el tama@~no del anillo de la muerte @emph{kill\n"
"ring} es m@'as grande que el m@'aximo tama@~no permitido. Este es el\n"
"valor de @code{kill-ring-max} (que es 60, por defecto). Si el tama@~no\n"
"del anillo de la muerte @emph{kill ring} es demasiado largo, entonces\n"
"este c@'odigo asigna el @'ultimo elemento del anillo de la muerte\n"
"@emph{kill ring} a @code{nil}. Eso hace esto usando dos funciones,\n"
"@code{nthcdr} y @code{setcdr}."

#. type: Plain text
#: emacs-lisp-intro.texi:8923
msgid ""
"We looked at @code{setcdr} earlier (@pxref{setcdr, , @code{setcdr}}).  It "
"sets the @sc{cdr} of a list, just as @code{setcar} sets the @sc{car} of a "
"list.  In this case, however, @code{setcdr} will not be setting the @sc{cdr} "
"of the whole kill ring; the @code{nthcdr} function is used to cause it to "
"set the @sc{cdr} of the next to last element of the kill ring---this means "
"that since the @sc{cdr} of the next to last element is the last element of "
"the kill ring, it will set the last element of the kill ring."
msgstr ""
"Nosotros vemos que @code{setcdr} temprano (@pxref{setcdr, ,\n"
"@code{setcdr}}). Eso asigna el @sc{cdr} de una lista, solo como\n"
"@code{setcar} asigna el @sc{car} de una lista. En este caso, sin\n"
"embargo, @code{setcdr} no estar@'a configurando el @sc{cdr} del kill\n"
"ring completo; la funci@'on @code{nthcdr} es usada para causarlo para\n"
"asignar el @sc{cdr} del siguiente al @'ultimo elemento del kill ring\n"
"--- esto significa que desde el @sc{cdr} del siguiente al @'ultimo\n"
"elemnto del kill ring @emph{anillo de la muerte}, eso asignar@'a el\n"
"@'ultimo elemento del kill ring @emph{anillo de la muerte}."

#. type: findex
#: emacs-lisp-intro.texi:8924
#, no-wrap
msgid "nthcdr, @r{example}"
msgstr "nthcdr, @r{ejemplo}"

#. type: Plain text
#: emacs-lisp-intro.texi:8929
msgid ""
"The @code{nthcdr} function works by repeatedly taking the @sc{cdr} of a "
"list---it takes the @sc{cdr} of the @sc{cdr} of the @sc{cdr} @dots{} It does "
"this @var{N} times and returns the results.  (@xref{nthcdr, , "
"@code{nthcdr}}.)"
msgstr ""
"La funci@'on @code{nthcdr} funciona repetidamente tomando el @sc{cdr}\n"
"de una lista --- eso toma el @sc{cdr} del @sc{cdr} del @sc{cdr}\n"
"@dots{}. Eso hace esto @var{N} veces y devuelve los\n"
"resultados. (@xref{nthcdr, , @code{nthcdr}}.)"

#. type: findex
#: emacs-lisp-intro.texi:8930
#, no-wrap
msgid "setcdr, @r{example}"
msgstr "setcdr, @r{ejemplo}"

#. type: Plain text
#: emacs-lisp-intro.texi:8937
msgid ""
"Thus, if we had a four element list that was supposed to be three elements "
"long, we could set the @sc{cdr} of the next to last element to @code{nil}, "
"and thereby shorten the list.  (If you set the last element to some other "
"value than @code{nil}, which you could do, then you would not have shortened "
"the list.  @xref{setcdr, , @code{setcdr}}.)"
msgstr ""
"De este modo, si teniamos una lista de cuatro elemento que era\n"
"supuestamente de tres elementos, se podr@'{@dotless{i}}a asignar el\n"
"@sc{cdr} del siguiente al @'ultimo elemento a @code{nil}, y por eso se\n"
"ordena la lista. (Si se asigna el @'ultimo elemento a alg@'un otro\n"
"valor a @code{nil}, que se podr@'{@dotless{i}}a hacer, entonces no\n"
"se habr@'{@dotless{i}}a ordenado la lista. @xref{setcdr, ,\n"
"@code{setcdr}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:8942
msgid ""
"You can see shortening by evaluating the following three expressions in "
"turn.  First set the value of @code{trees} to @code{(maple oak pine birch)}, "
"then set the @sc{cdr} of its second @sc{cdr} to @code{nil} and then find the "
"value of @code{trees}:"
msgstr ""
"Se puede ver ordenando la evaluaci@'on de las siguientes tres\n"
"expresiones en turno. Primero asigna el valor de @code{arboles} a\n"
"@code{(arce encina pino abedul)} entonces asigna el @sc{cdr} de su\n"
"segundo @sc{cdr} y entonces encuentra el valor de @code{arboles}."

#. type: group
#: emacs-lisp-intro.texi:8947
#, no-wrap
msgid ""
"(setq trees '(maple oak pine birch))\n"
"     @result{} (maple oak pine birch)\n"
msgstr ""
"(setq arboles '(arce encina pino abedul))\n"
"     @result{} (arce encina pino abedul)\n"

#. type: group
#: emacs-lisp-intro.texi:8952
#, no-wrap
msgid ""
"(setcdr (nthcdr 2 trees) nil)\n"
"     @result{} nil\n"
"\n"
msgstr ""
"(setcdr (nthcdr 2 arboles) nil)\n"
"     @result{} nil\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:8955
#, no-wrap
msgid ""
"trees\n"
"     @result{} (maple oak pine)\n"
msgstr ""
"@'arboles\n"
"     @result{} (arce encina pino)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8961
msgid ""
"(The value returned by the @code{setcdr} expression is @code{nil} since that "
"is what the @sc{cdr} is set to.)"
msgstr ""
"(El valor devuelto por la expresi@'on @code{setcdr} es @code{nil}\n"
"desde que es que el @sc{cdr} es asignado.)"

#. type: Plain text
#: emacs-lisp-intro.texi:8967
msgid ""
"To repeat, in @code{kill-new}, the @code{nthcdr} function takes the @sc{cdr} "
"a number of times that is one less than the maximum permitted size of the "
"kill ring and @code{setcdr} sets the @sc{cdr} of that element (which will be "
"the rest of the elements in the kill ring) to @code{nil}.  This prevents the "
"kill ring from growing too long."
msgstr ""
"Para repetir, en @code{kill-new}, la funci@'on @code{nthcdr} toma el\n"
"@sc{cdr} un n@'umero de veces que es uno menos que el tama@~no\n"
"m@'aximo permitido del anillo de la muerte @emph{kill ring} y\n"
"@code{setcdr} asigna el @sc{cdr} de este elemento (que ser@'a el resto\n"
"de los elementos en el anillo muerte) para @code{nil}. Esto previene\n"
"el anillo de la muerte @emph{kill ring} desde lo que crece demasiado largo."

#. type: Plain text
#: emacs-lisp-intro.texi:8970
msgid "The next to last expression in the @code{kill-new} function is"
msgstr ""
"De la siguiente a la @'ultima expresi@'on en la funci@'on\n"
"@code{kill-new} es"

#. type: smallexample
#: emacs-lisp-intro.texi:8973 emacs-lisp-intro.texi:19180
#, no-wrap
msgid "(setq kill-ring-yank-pointer kill-ring)\n"
msgstr "(setq kill-ring-yank-pointer kill-ring)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8977
msgid ""
"The @code{kill-ring-yank-pointer} is a global variable that is set to be the "
"@code{kill-ring}."
msgstr ""
"El @code{kill-ring-yank-pointer} es una variable global que es\n"
"asignado para ser el @code{kill-ring}."

#. type: Plain text
#: emacs-lisp-intro.texi:8981
msgid ""
"Even though the @code{kill-ring-yank-pointer} is called a @samp{pointer}, it "
"is a variable just like the kill ring.  However, the name has been chosen to "
"help humans understand how the variable is used."
msgstr ""
"Incluso aunque el @code{kill-ring-yank-pointer} es llamado un\n"
"@samp{puntero}, eso es una variable solo como el anillo de la muerte\n"
"@emph{kill ring}. Sin embargo, el nombre que ha sido elegido para\n"
"ayudar a humanos a comprender c@'omo la variable se usa."

#. type: Plain text
#: emacs-lisp-intro.texi:8984
msgid "Now, to return to an early expression in the body of the function:"
msgstr ""
"Ahora, para devolver r@'apido una expresi@'on en el cuerpo de la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:8989
#, no-wrap
msgid ""
"  (if (fboundp 'menu-bar-update-yank-menu)\n"
"       (menu-bar-update-yank-menu string (and replace (car kill-ring))))\n"
msgstr ""
"  (if (fboundp 'menu-bar-update-yank-menu)\n"
"       (menu-bar-update-yank-menu string (and replace (car kill-ring))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:8994
msgid "It starts with an @code{if} expression"
msgstr "Empieza con una expresi@'on @code{if}"

#. type: Plain text
#: emacs-lisp-intro.texi:9002
msgid ""
"In this case, the expression tests first to see whether @code{menu-bar-"
"update-yank-menu} exists as a function, and if so, calls it.  The "
"@code{fboundp} function returns true if the symbol it is testing has a "
"function definition that `is not void'.  If the symbol's function definition "
"were void, we would receive an error message, as we did when we created "
"errors intentionally (@pxref{Making Errors, , Generate an Error Message})."
msgstr ""
"En este caso, la expresi@'on chequea primero si\n"
"@code{menu-bar-update-yank-menu} existe como una funci@'on, y si\n"
"as@'{@dotless{i}}, se llama. La funci@'on @code{fboundp} devuelve\n"
"cierto si el s@'{@dotless{i}}mbolo que se chequea tiene una\n"
"definici@'on de funci@'on que `no es vac@'{@dotless{i}}a'. Si el\n"
"s@'{@dotless{i}}mbolo de la definici@'on de funci@'on fuera\n"
"vac@'{@dotless{i}}o, recibir@'{@dotless{i}}a un mensaje de error, como\n"
"se hizo cuando se crearon errores intencionalmente (@pxref{Creando\n"
"errores, , Genera un Mensaje de Error})."

#. type: Plain text
#: emacs-lisp-intro.texi:9006
msgid ""
"The then-part contains an expression whose first element is the function "
"@code{and}."
msgstr ""
"La then-part contiene una expresi@'on cuyo primer elemento es la\n"
"funci@'on @code{and}."

#. type: Plain text
#: emacs-lisp-intro.texi:9016
msgid ""
"The @code{and} special form evaluates each of its arguments until one of the "
"arguments returns a value of @code{nil}, in which case the @code{and} "
"expression returns @code{nil}; however, if none of the arguments returns a "
"value of @code{nil}, the value resulting from evaluating the last argument "
"is returned.  (Since such a value is not @code{nil}, it is considered true "
"in Emacs Lisp.)  In other words, an @code{and} expression returns a true "
"value only if all its arguments are true.  (@xref{Second Buffer Related "
"Review}.)"
msgstr ""
"La forma especial @code{and} eval@'ua cada uno de sus argumentos hasta\n"
"que uno de los argumentos devuelva un valor de @code{nil}, en cuyo caso\n"
"la expresi@'on @code{and} devuelve @code{nil}; sin embargo, si\n"
"ninguno de los argumentos devuelve una valor de @code{nil}, el valor\n"
"resultante desde la evaluaci@'on el @'ultimo argumento es\n"
"devuelto. (Desde que tal valor no es @code{nil}, eso es considerado\n"
"cierto en Emacs Lisp.) En otras palabras, una expresi@'on @code{and}\n"
"devuelve un valor cierto solo si todos sus argumentos son\n"
"verdaderos. (@xref{Revisar el segundo b@'uffer relacionado}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9019
msgid ""
"The expression determines whether the second argument to @code{menu-bar-"
"update-yank-menu} is true or not."
msgstr ""
"La expresi@'on determina si el segundo argumento\n"
"@code{menu-bar-update-yank-menu} es verdadero o no."

#. type: Plain text
#: emacs-lisp-intro.texi:9028
msgid ""
"@code{menu-bar-update-yank-menu} is one of the functions that make it "
"possible to use the `Select and Paste' menu in the Edit item of a menu bar; "
"using a mouse, you can look at the various pieces of text you have saved and "
"select one piece to paste."
msgstr ""
"@code{menu-bar-update-yank-menu} es una de la funciones que lo hace\n"
"posible para usar el menu `Seleccionar y Pegar' en el\n"
"@'{@dotless{i}}tem Editar de una barra de menu; usando un rat@'on, se\n"
"pueden mirar varias piezas de texto que se han guardado y se\n"
"selecciona una pieza para pegar."

#. type: Plain text
#: emacs-lisp-intro.texi:9035
msgid ""
"The last expression in the @code{kill-new} function adds the newly copied "
"string to whatever facility exists for copying and pasting among different "
"programs running in a windowing system.  In the X Windowing system, for "
"example, the @code{x-select-text} function takes the string and stores it in "
"memory operated by X@.  You can paste the string in another program, such as "
"an Xterm."
msgstr ""
"La @'ultima expresi@'on en la funci@'on @code{kill-new} a@~nade las\n"
"cadenas nuevamente copiadas a aquella facilidad que existe copiando y\n"
"pegando entre diferentes programas ejecutando un sistema de\n"
"ventanas. En el Sistema de Ventanas de X, por ejemplo, la funci@'on\n"
"@code{x-select-text} toma la cadena y la almacena en memoria operada\n"
"por X@. Se puede pegar la cadena en otro programa, tal como un Xterm."

#. type: group
#: emacs-lisp-intro.texi:9043
#, no-wrap
msgid ""
"  (if interprogram-cut-function\n"
"      (funcall interprogram-cut-function string (not replace))))\n"
msgstr ""
"  (if interprogram-cut-function\n"
"      (funcall interprogram-cut-function string (not replace))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9051
msgid ""
"If an @code{interprogram-cut-function} exists, then Emacs executes "
"@code{funcall}, which in turn calls its first argument as a function and "
"passes the remaining arguments to it.  (Incidentally, as far as I can see, "
"this @code{if} expression could be replaced by an @code{and} expression "
"similar to the one in the first part of the function.)"
msgstr ""
"Si @code{interprogram-cut-function} existe, entonces Emacs ejecuta\n"
"@code{funcall}, que en vez de llamar a su primer argumento como una\n"
"funci@'on, pasa los argumentos que permanecen en\n"
"eso. (Incidentalmente, tan lejos como se puede ver, esta expresi@'on\n"
"@code{if} podr@'{@dotless{i}}a ser reemplazado por una expresi@'on\n"
"@code{and} similar a uno en la primera parte de la funci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9055
msgid ""
"We are not going to discuss windowing systems and other programs further, "
"but merely note that this is a mechanism that enables GNU Emacs to work "
"easily and well with other programs."
msgstr ""
"Estamos yendo a discutir sistemas de ventanas y otros programas m@'as\n"
"all@'a pero meramente nota que este es un mecanismo que habilita GNU\n"
"Emacs a trabajar f@'acilmente y bien con otros programas."

#. type: Plain text
#: emacs-lisp-intro.texi:9063
msgid ""
"This code for placing text in the kill ring, either concatenated with an "
"existing element or as a new element, leads us to the code for bringing back "
"text that has been cut out of the buffer---the yank commands.  However, "
"before discussing the yank commands, it is better to learn how lists are "
"implemented in a computer.  This will make clear such mysteries as the use "
"of the term `pointer'.  But before that, we will digress into C."
msgstr ""
"Este c@'odigo para emplazar texot en el anillo de la muerte @emph{kill\n"
"ring}, concatenado con un elemento existente o como un nuevo elemento,\n"
"nos lidera al c@'odigo para traer texto que ha sido cortado del\n"
"b@'uffer --- los comandos de corte. Sin embargo, antes de discutir los\n"
"comandos de corte, es mejor aprender c@'omo las listas son implementadas\n"
"en un ordenador. Esto dejar@'a claro tales misterios como el uso del\n"
"t@'ermino `puntero'. Pero antes de esto, nos desviaremos a C."

#. type: itemx
#: emacs-lisp-intro.texi:9103 emacs-lisp-intro.texi:9527
#, no-wrap
msgid "delete-and-extract-region"
msgstr "delete-and-extract-region"

#. type: cindex
#: emacs-lisp-intro.texi:9104
#, no-wrap
msgid "C, a digression into"
msgstr "C, una disgresi@'on dentro"

#. type: Plain text
#: emacs-lisp-intro.texi:9112
msgid ""
"The @code{copy-region-as-kill} function (@pxref{copy-region-as-kill, , "
"@code{copy-region-as-kill}}) uses the @code{filter-buffer-substring} "
"function, which in turn uses the @code{delete-and-extract-region} function.  "
"It removes the contents of a region and you cannot get them back."
msgstr ""
"La funci@'on @code{copy-region-as-kill} (@pxref{copy-region-as-kill, ,\n"
"@code{copy-region-as-kill}}) usa la funci@'on\n"
"@code{filter-buffer-substring}, que en vez de eso usa la funci@'on\n"
"@code{delete-and-extract-region}. Eso elimina los contenidos de una\n"
"regi@'on y no se puede volverlos a tener."

#. type: Plain text
#: emacs-lisp-intro.texi:9118
msgid ""
"Unlike the other code discussed here, the @code{delete-and-extract-region} "
"function is not written in Emacs Lisp; it is written in C and is one of the "
"primitives of the GNU Emacs system.  Since it is very simple, I will digress "
"briefly from Lisp and describe it here."
msgstr ""
"Al contrario que el otro c@'odigo discutido aqu@'{@dotless{i}}, la\n"
"funci@'on @code{delete-and-extract-region} no est@'a escrita en Emacs\n"
"Lisp; eso est@'a escrito en C y es una de las primitivas del sistema\n"
"GNU Emacs. Puesto que es muy simple, se har@'a la disgresi@'on\n"
"brevemente desde el Lisp y se describe aqu@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:9127
msgid ""
"Like many of the other Emacs primitives, @code{delete-and-extract-region} is "
"written as an instance of a C macro, a macro being a template for code.  The "
"complete macro looks like this:"
msgstr ""
"Como muchas de las otras primitivas Emacs,\n"
"@code{delete-and-extract-region} se escribe como una instancia de una\n"
"macro C, una macro es una plantilla para codificar. La macro completa\n"
"se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:9140
#, no-wrap
msgid ""
"DEFUN (\"delete-and-extract-region\", Fdelete_and_extract_region,\n"
"       Sdelete_and_extract_region, 2, 2, 0,\n"
"       doc: /* Delete the text between START and END and return it.  */)\n"
"       (Lisp_Object start, Lisp_Object end)\n"
"@{\n"
"  validate_region (&start, &end);\n"
"  if (XINT (start) == XINT (end))\n"
"    return empty_unibyte_string;\n"
"  return del_range_1 (XINT (start), XINT (end), 1, 1);\n"
"@}\n"
msgstr ""
"DEFUN (\"delete-and-extract-region\", Fdelete_and_extract_region,\n"
"       Sdelete_and_extract_region, 2, 2, 0,\n"
"       doc: /* Borra el texto entre START y END y lo devuelve.  */)\n"
"       (Lisp_Object start, Lisp_Object end)\n"
"@{\n"
"  validate_region (&start, &end);\n"
"  if (XINT (start) == XINT (end))\n"
"    return empty_unibyte_string;\n"
"  return del_range_1 (XINT (start), XINT (end), 1, 1);\n"
"@}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9148
msgid ""
"Without going into the details of the macro writing process, let me point "
"out that this macro starts with the word @code{DEFUN}.  The word "
"@code{DEFUN} was chosen since the code serves the same purpose as "
"@code{defun} does in Lisp.  (The @code{DEFUN} C macro is defined in "
"@file{emacs/src/lisp.h}.)"
msgstr ""
"Sin ir dentro de los detalles de la macro que escribe el proceso, se\n"
"har@'a un apunte de esta macro que empieza con la palabra\n"
"@code{DEFUN}. La palabra @code{DEFUN} fu@'e elegida puesto que el\n"
"c@'odigo sirve para el mismo prop@'osito que @code{defun} hace en\n"
"Lisp. (La macro C @code{DEFUN} definida en @file{emacs/src/lisp.h}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9151
msgid "The word @code{DEFUN} is followed by seven parts inside of parentheses:"
msgstr ""
"El palabra @code{DEFUN} tiene siete partes dentro de los\n"
"par@'entesis:"

#. type: itemize
#: emacs-lisp-intro.texi:9156
msgid ""
"The first part is the name given to the function in Lisp, @code{delete-and-"
"extract-region}."
msgstr ""
"La primera parte es el nombre dado a la funci@'on en Lisp,\n"
"@code{delete-and-extract-region}."

#. type: itemize
#: emacs-lisp-intro.texi:9162
msgid ""
"The second part is the name of the function in C, "
"@code{Fdelete_and_extract_region}.  By convention, it starts with @samp{F}.  "
"Since C does not use hyphens in names, underscores are used instead."
msgstr ""
"La segunda parte es el nombre de la funci@'on en C,\n"
"@code{Fdelete_and_extract_region}. Por convenci@'on, eso empieza con\n"
"@samp{F}. Puesto que C no usa guiones en nombres, los guiones bajos son\n"
"usados a su vez."

#. type: itemize
#: emacs-lisp-intro.texi:9167
msgid ""
"The third part is the name for the C constant structure that records "
"information on this function for internal use.  It is the name of the "
"function in C but begins with an @samp{S} instead of an @samp{F}."
msgstr ""
"La tercera parte es el nombre para la estructura constante C que\n"
"registra informaci@'on en esta funci@'on para uso interno. Es el\n"
"nombre de la funci@'on en C pero empieza con una @samp{S} en vez de\n"
"una @samp{F}."

#. type: itemize
#: emacs-lisp-intro.texi:9172
msgid ""
"The fourth and fifth parts specify the minimum and maximum number of "
"arguments the function can have.  This function demands exactly 2 arguments."
msgstr ""
"Las partes cuarta y quinta especifican el n@'umero\n"
"m@'{@dotless{i}}nimo y m@'aximo de argumentos que la funci@'on puede\n"
"tener. Esta funci@'on demanda exactamente 2 argumentos."

#. type: itemize
#: emacs-lisp-intro.texi:9179
msgid ""
"The sixth part is nearly like the argument that follows the "
"@code{interactive} declaration in a function written in Lisp: a letter "
"followed, perhaps, by a prompt.  The only difference from the Lisp is when "
"the macro is called with no arguments.  Then you write a @code{0} (which is "
"a `null string'), as in this macro."
msgstr ""
"La sexta parte est@'a cerca del argumento que sigue la declaraci@'on\n"
"@code{interactive} en una funci@'on escrita en Lisp: una carta\n"
"seguida, quiz@'as, por una consola. La @'unica diferencia con Lisp es\n"
"que si la macro se llama sin argumentos. Entonces se escribe un @code{0}\n"
"(que es una `cadena nula'), como en esta macro."

#. type: itemize
#: emacs-lisp-intro.texi:9185
msgid ""
"If you were to specify arguments, you would place them between quotation "
"marks.  The C macro for @code{goto-char} includes @code{\"NGoto char: \"} in "
"this position to indicate that the function expects a raw prefix, in this "
"case, a numerical location in a buffer, and provides a prompt."
msgstr ""
"Si se fueran a especificar argumentos, se emplazar@'{@dotless{i}}an\n"
"entre marcas de comillas. La macro C para @code{goto-char} incluye\n"
"@code{\\\"NGoto char \\\"} en esta posici@'on se indica que la funci@'on\n"
"espera un prefijo plano, en este caso, una localizaci@'on num@'erica\n"
"en un b@'uffer, y provee una consola."

#. type: itemize
#: emacs-lisp-intro.texi:9191
msgid ""
"The seventh part is a documentation string, just like the one for a function "
"written in Emacs Lisp.  This is written as a C comment.  (When you build "
"Emacs, the program @command{lib-src/make-docfile} extracts these comments "
"and uses them to make the ``real'' documentation.)"
msgstr ""
"La s@'eptima parte es una cadena de documentaci@'on, solo como la\n"
"@'unica para una funci@'on escrita en Emacs Lisp. Esto es escrito como\n"
"un comentario C. (Cuando se escribe Emacs, el programa\n"
"@command{lib-src/make-docfile} extrae estos comentarios y los usa para\n"
"crear la documentaci@'on ``real''.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9198
msgid ""
"In a C macro, the formal parameters come next, with a statement of what kind "
"of object they are, followed by what might be called the `body' of the "
"macro.  For @code{delete-and-extract-region} the `body' consists of the "
"following four lines:"
msgstr ""
"En una macro C, los par@'ametros son los siguientes, con una frase de\n"
"este tipo de objeto se siguen por lo que podr@'{@dotless{i}}a ser\n"
"llamado el `cuerpo' de la macro. Para @code{delete-and-extract-region}\n"
"el `cuerpo' consiste de las siguientes cuatro l@'{@dotless{i}}neas:"

#. type: group
#: emacs-lisp-intro.texi:9205
#, no-wrap
msgid ""
"validate_region (&start, &end);\n"
"if (XINT (start) == XINT (end))\n"
"  return empty_unibyte_string;\n"
"return del_range_1 (XINT (start), XINT (end), 1, 1);\n"
msgstr ""
"validate_region (&start, &end);\n"
"if (XINT (start) == XINT (end))\n"
"  return build_string (\"\");\n"
"return del_range_1 (XINT (start), XINT (end), 1, 1);\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9212
msgid ""
"The @code{validate_region} function checks whether the values passed as the "
"beginning and end of the region are the proper type and are within range.  "
"If the beginning and end positions are the same, then return an empty string."
msgstr ""
"La funci@'on @code{validate_region} chequea si los valores pasados\n"
"como el principio y fin de la regi@'on son el tipo apropiado y son del\n"
"mismo rango. Si las posiciones del principio y fin son las mismas, entonces\n"
"se devuelve una cadena vac@'{@dotless{i}}a."

#. type: Plain text
#: emacs-lisp-intro.texi:9218
msgid ""
"The @code{del_range_1} function actually deletes the text.  It is a complex "
"function we will not look into.  It updates the buffer and does other "
"things.  However, it is worth looking at the two arguments passed to "
"@code{del_range}.  These are @w{@code{XINT (start)}} and @w{@code{XINT "
"(end)}}."
msgstr ""
"La funci@'on @code{del_range_1} actualmente borra el texto. Eso es una\n"
"funci@'on compleja que no miraremos. Eso actualiza el b@'uffer y hace\n"
"otras cosas. Sin embargo, es el valorable mirar los dos argumentos\n"
"pasados para @code{del_range}. Estos son @w{@code{XINT (start)}} y\n"
"@w{@code{XINT (end)}}."

#. type: Plain text
#: emacs-lisp-intro.texi:9224
msgid ""
"As far as the C language is concerned, @code{start} and @code{end} are two "
"integers that mark the beginning and end of the region to be "
"deleted@footnote{More precisely, and requiring more expert knowledge to "
"understand, the two integers are of type `Lisp_Object', which can also be a "
"C union instead of an integer type.}."
msgstr ""
"Tan lejos como el lenguaje C es concebido, @code{start} y @code{end}\n"
"son dos enteros que marcan el principio y el fin de la regi@'on para\n"
"ser borrada@footnote{M@'as precisamente, y requiriendo conocimiento\n"
"m@'as experto para comprender, los dos enteros son del tipo\n"
"`Lisp_Object', que puede tambi@'en ser una uni@'on C en vez de un tipo\n"
"de entero.}."

#. type: Plain text
#: emacs-lisp-intro.texi:9229
msgid ""
"In early versions of Emacs, these two numbers were thirty-two bits long, but "
"the code is slowly being generalized to handle other lengths.  Three of the "
"available bits are used to specify the type of information; the remaining "
"bits are used as `content'."
msgstr ""
"En las primeras versiones de Emacs, estos dos n@'umeros fueron 32 bits\n"
"de longitud, pero el c@'odigo est@'a lentamente siendo generalizado\n"
"para manejar otras longitudes. Tres de los bits disponibles son usados\n"
"para especificar el tipo de informaci@'on; los bits permanecen ser\n"
"usados como `contenido'."

#. type: Plain text
#: emacs-lisp-intro.texi:9232
msgid ""
"@samp{XINT} is a C macro that extracts the relevant number from the longer "
"collection of bits; the three other bits are discarded."
msgstr ""
"@samp{XINT} es una macro C que extrae los n@'umeros relevantes desde\n"
"la colecci@'on larga de bits; los otros tres bits se descartan."

#. type: Plain text
#: emacs-lisp-intro.texi:9235
msgid "The command in @code{delete-and-extract-region} looks like this:"
msgstr "El comando en @code{delete-and-extract-region} se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:9238
#, no-wrap
msgid "del_range_1 (XINT (start), XINT (end), 1, 1);\n"
msgstr "del_range_1 (XINT (start), XINT (end), 1, 1);\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9243
msgid ""
"It deletes the region between the beginning position, @code{start}, and the "
"ending position, @code{end}."
msgstr ""
"Esto borra la regi@'on entre la posici@'on del principio,\n"
"@code{start}, y la posici@'on final, @code{end}."

#. type: Plain text
#: emacs-lisp-intro.texi:9247
msgid ""
"From the point of view of the person writing Lisp, Emacs is all very simple; "
"but hidden underneath is a great deal of complexity to make it all work."
msgstr ""
"Desde el punto de vista de la persona que escribe Lisp, Emacs es muy\n"
"simple; pero oculta en el fondo un gran trato de complejidad para\n"
"hacer todo el trabajo."

#. type: cindex
#: emacs-lisp-intro.texi:9251
#, no-wrap
msgid "Initializing a variable"
msgstr "Inicializando una variable"

#. type: cindex
#: emacs-lisp-intro.texi:9252
#, no-wrap
msgid "Variable initialization"
msgstr "Inicializaci@'on de Variable"

#. type: Plain text
#: emacs-lisp-intro.texi:9272
msgid ""
"The @code{copy-region-as-kill} function is written in Emacs Lisp.  Two "
"functions within it, @code{kill-append} and @code{kill-new}, copy a region "
"in a buffer and save it in a variable called the @code{kill-ring}.  This "
"section describes how the @code{kill-ring} variable is created and "
"initialized using the @code{defvar} special form."
msgstr ""
"La funci@'on @code{copy-region-as-kill} es escrita en Emacs Lisp. Dos\n"
"funciones con eso, @code{kill-append} y @code{kill-new}, copiar una\n"
"regi@'on en un b@'uffer y guardarlo en una variable llamada el\n"
"@code{kill-ring}. Esta secci@'on describe c@'omo la variable\n"
"@code{kill-ring} es creada e inicializada usando la forma especial @code{defvar}."

#. type: Plain text
#: emacs-lisp-intro.texi:9276
msgid ""
"(Again we note that the term @code{kill-ring} is a misnomer.  The text that "
"is clipped out of the buffer can be brought back; it is not a ring of "
"corpses, but a ring of resurrectable text.)"
msgstr ""
"(De nuevo se nota que el t@'ermino @code{kill-ring} es un sin\n"
"nombre. El texto que es cortado fuera del b@'uffer puede ser traido;\n"
"eso no es un corpus de anillo, pero un anillo de texto resucitable.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9280
msgid ""
"In Emacs Lisp, a variable such as the @code{kill-ring} is created and given "
"an initial value by using the @code{defvar} special form.  The name comes "
"from ``define variable''."
msgstr ""
"En Emacs Lisp, una variable tal como @code{kill-ring} es creada y dada\n"
"por un valor inicial usando la forma especial @code{defvar}. El nombre\n"
"viene de ``definir variable''."

#. type: Plain text
#: emacs-lisp-intro.texi:9287
msgid ""
"The @code{defvar} special form is similar to @code{setq} in that it sets the "
"value of a variable.  It is unlike @code{setq} in two ways: first, it only "
"sets the value of the variable if the variable does not already have a "
"value.  If the variable already has a value, @code{defvar} does not override "
"the existing value.  Second, @code{defvar} has a documentation string."
msgstr ""
"La forma especial @code{defvar} es similar a @code{setq} en este se\n"
"configura el valor de una variable. Eso no es @code{setq} en dos\n"
"modos; primero solo configura el valor de la variable si la variable\n"
"no tiene ya un valor. Si la variable ya tiene un valor, @code{defvar}\n"
"no sobreescribe el valor existente. Segundo, @code{defvar} tiene una\n"
"cadena de documentaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:9291
msgid ""
"(Another special form, @code{defcustom}, is designed for variables that "
"people customize.  It has more features than @code{defvar}.  "
"(@xref{defcustom, , Setting Variables with @code{defcustom}}.)"
msgstr ""
"(Otra forma especial, @code{defcustom}, est@'a dise@~nado para\n"
"variables que la gente personaliza. Eso tiene m@'as funcionalidades\n"
"que @code{defvar}. (@xref{defcustom, , Configurando Variables con "
"@code{defcustom}}.)"

#. type: node
#: emacs-lisp-intro.texi:9298
#, no-wrap
msgid "See variable current value"
msgstr "Mira el valor actual de la variable"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:9299
#, no-wrap
msgid "Seeing the Current Value of a Variable"
msgstr "Mirando el actual valor de una variable"

#. type: Plain text
#: emacs-lisp-intro.texi:9310
msgid ""
"You can see the current value of a variable, any variable, by using the "
"@code{describe-variable} function, which is usually invoked by typing @kbd{C-"
"h v}.  If you type @kbd{C-h v} and then @code{kill-ring} (followed by "
"@key{RET}) when prompted, you will see what is in your current kill ring---"
"this may be quite a lot! Conversely, if you have been doing nothing this "
"Emacs session except read this document, you may have nothing in it.  Also, "
"you will see the documentation for @code{kill-ring}:"
msgstr ""
"Se puede ver el actual valor de una variable, cualquier variable,\n"
"usando la funci@'on @code{describe-variable}, que es normalmente\n"
"invocado escribiendo @kbd{C-h v}. Si se escribe @kbd{C-h v} y\n"
"@code{kill-ring} (seguido por @key{RET}), se ver@'a que hay en tu\n"
"anillo de la muerte actual @emph{kill ring} al ser pulsado ---\n"
"@exclamdown{}esto puede ser bastante tranquilo! A la inversa, si no\n"
"has estado haciendo nada esta sesi@'on en Emacs, excepto leer este\n"
"documento, se puede no tener nada dentro. Tambi@'en, se ver@'a la\n"
"documentaci@'on para @code{kill-ring}:"

#. type: group
#: emacs-lisp-intro.texi:9317
#, no-wrap
msgid ""
"Documentation:\n"
"List of killed text sequences.\n"
"Since the kill ring is supposed to interact nicely with cut-and-paste\n"
"facilities offered by window systems, use of this variable should\n"
msgstr ""
"Documentaci@'on: \n"
"Lista de secuencias de texto muerto (guardado).\n"
"Desde que el (kill ring) se supone que interactua bien con\n"
"cut-and-paste facilita ofrecer por sistemas de ventanas,\n"
"deber@'{@dotless{i}}a usar esta variable\n"

#. type: group
#: emacs-lisp-intro.texi:9324
#, no-wrap
msgid ""
"interact nicely with `interprogram-cut-function' and\n"
"`interprogram-paste-function'.  The functions `kill-new',\n"
"`kill-append', and `current-kill' are supposed to implement this\n"
"interaction; you may want to use them instead of manipulating the kill\n"
"ring directly.\n"
msgstr ""
"interact@'ua bin con `interprogram-cut-function' y\n"
"`interprogram-paste-function'. Las funciones `kill-new',\n"
"`kill-append', y `current-kill' se suponen para implementar esta\n"
"interacci@'on; se puede querer usarlo en vez de manipular en anillo de\n"
"la muerte @emph{kill ring} directamente.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9329
msgid "The kill ring is defined by a @code{defvar} in the following way:"
msgstr ""
"El kill ring @emph{anillo de la muerte} est@'a definido por un\n"
"@code{defvar} del siguiente modo:"

#. type: group
#: emacs-lisp-intro.texi:9335
#, no-wrap
msgid ""
"(defvar kill-ring nil\n"
"  \"List of killed text sequences.\n"
"@dots{}\")\n"
msgstr ""
"(defvar kill-ring nil\n"
"  \"Lista de secuencia de textos cortados.\n"
"@dots{}\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9348
msgid ""
"In this variable definition, the variable is given an initial value of "
"@code{nil}, which makes sense, since if you have saved nothing, you want "
"nothing back if you give a @code{yank} command.  The documentation string is "
"written just like the documentation string of a @code{defun}.  As with the "
"documentation string of the @code{defun}, the first line of the "
"documentation should be a complete sentence, since some commands, like "
"@code{apropos}, print only the first line of documentation.  Succeeding "
"lines should not be indented; otherwise they look odd when you use @kbd{C-h "
"v} (@code{describe-variable})."
msgstr ""
"En esta definici@'on de variable, la variable es dada un valor inicial\n"
"de @code{nil}, que tiene sentido, desde que si no se ha guardado nada,\n"
"no se quiere nada si se da un comando @code{yank}. La cadena de\n"
"documentaci@'on es escrito solo como la cadena de documentaci@'on de\n"
"un @code{defun}. Como con la cadena de documentaci@'on\n"
"ser@'{@dotless{i}}a una frase completa, desde que algunos comandos,\n"
"como @code{apropos}, imprime solo la primera l@'{@dotless{i}}nea de\n"
"documentaci@'on. Las l@'{@dotless{i}}neas de exito no\n"
"ser@'{@dotless{i}}an indentadas; de otro modo se mira cuando se usa\n"
"@kbd{C-h v} (@code{describe-variable})."

#. type: subsection
#: emacs-lisp-intro.texi:9350
#, no-wrap
msgid "@code{defvar} and an asterisk"
msgstr "@code{defvar} y un asterisco"

#. type: findex
#: emacs-lisp-intro.texi:9351
#, no-wrap
msgid "defvar @r{for a user customizable variable}"
msgstr "defvar @r{para una variable personalizable}"

#. type: findex
#: emacs-lisp-intro.texi:9352
#, no-wrap
msgid "defvar @r{with an asterisk}"
msgstr "defvar @r{con un asterisco}"

#. type: Plain text
#: emacs-lisp-intro.texi:9361
msgid ""
"In the past, Emacs used the @code{defvar} special form both for internal "
"variables that you would not expect a user to change and for variables that "
"you do expect a user to change.  Although you can still use @code{defvar} "
"for user customizable variables, please use @code{defcustom} instead, since "
"that special form provides a path into the Customization commands.  "
"(@xref{defcustom, , Specifying Variables using @code{defcustom}}.)"
msgstr ""
"En el pasado, Emacs usaba la forma especial @code{defvar} tanto para\n"
"variables interna que no esperar@'{@dotless{i}}a que un usuario cambie\n"
"y para variables que espera un usuario cambie. Aunque se puede\n"
"todav@'{@dotless{i}}a usar @code{defvar} para variables\n"
"personalizadas, por favor, usa @code{defcustom} en vez, desde que la\n"
"forma especial provee una ruta dentro de los comando de\n"
"Personalizaci@'on. (@xref{defcustom, , Especificando Variables usando\n"
"@code{defcustom}}.)  "

#. type: Plain text
#: emacs-lisp-intro.texi:9366
msgid ""
"When you specified a variable using the @code{defvar} special form, you "
"could distinguish a variable that a user might want to change from others by "
"typing an asterisk, @samp{*}, in the first column of its documentation "
"string.  For example:"
msgstr ""
"Cuando se especifica una variable usando la forma especial\n"
"@code{defvar}, se podr@'{@dotless{i}}a distinguir una variable que un\n"
"usuario podr@'{@dotless{i}}a querer cambiar desde otros escribiendo,\n"
"@samp{*}, en la primera columna de su cadena de documentaci@'on. Por\n"
"ejemplo:"

#. type: group
#: emacs-lisp-intro.texi:9372
#, no-wrap
msgid ""
"(defvar shell-command-default-error-buffer nil\n"
"  \"*Buffer name for `shell-command' @dots{} error output.\n"
"@dots{} \")\n"
msgstr ""
"(defvar shell-command-default-error-buffer nil\n"
"  \"*Nombre de buffer para `shell-command' @dots{} salir del error.\n"
"@dots{} \")\n"

#. type: findex
#: emacs-lisp-intro.texi:9375
#, no-wrap
msgid "set-variable"
msgstr "set-variable"

#. type: Plain text
#: emacs-lisp-intro.texi:9385
msgid ""
"You could (and still can) use the @code{set-variable} command to change the "
"value of @code{shell-command-default-error-buffer} temporarily.  However, "
"options set using @code{set-variable} are set only for the duration of your "
"editing session.  The new values are not saved between sessions.  Each time "
"Emacs starts, it reads the original value, unless you change the value "
"within your @file{.emacs} file, either by setting it manually or by using "
"@code{customize}.  @xref{Emacs Initialization, , Your @file{.emacs} File}."
msgstr ""
"Tu podr@'{@dotless{i}}as (y todav@'{@dotless{i}}a puedes) usar el\n"
"comando @code{set-variable} para cambiar el valor de\n"
"@code{shell-command-default-error-buffer} temporalmente. Sin embargo,\n"
"las opciones configuradas usando @code{set-variable} no est@'an\n"
"asignadas solo por la duraci@'on de tu sesi@'on de edici@'on. Los\n"
"nuevos valores no est@'an guardados entre sesiones. Cada vez que Emacs\n"
"empieza, lee el valor original, a menos que tu cambia el valor con tu\n"
"fichero @file{.emacs}, si configur@'andolo manualmente o usando\n"
"@code{customize}. @xref{Inicializaci@'on de Emacs, , Tu Fichero @file{."
"emacs}}."

#. type: Plain text
#: emacs-lisp-intro.texi:9393
msgid ""
"For me, the major use of the @code{set-variable} command is to suggest "
"variables that I might want to set in my @file{.emacs} file.  There are now "
"more than 700 such variables, far too many to remember readily.  "
"Fortunately, you can press @key{TAB} after calling the @code{M-x set-"
"variable} command to see the list of variables.  (@xref{Examining, , "
"Examining and Setting Variables, emacs, The GNU Emacs Manual}.)"
msgstr ""
"Para m@'{@dotless{i}}, el mayor uso del comando @code{set-variable} es\n"
"sugerir variables que se podr@'{@dotless{i}}an querer asignar en mi\n"
"fichero @file{.emacs}. Ahora hay m@'as de 700 variables, demasiadas\n"
"para recordarlas f@'acilmente. Afortunadamente, se puede presionar\n"
"@key{TAB} despu@'es de llamar al comando @code{M-x set-variable} para\n"
"ver la lista de variables. (@xref{Examinando, , Examinando y\n"
"Configurando Variables, emacs, El Manual de GNU Emacs}.)"

#. type: node
#: emacs-lisp-intro.texi:9395
#, no-wrap
msgid "cons & search-fwd Review"
msgstr "Revisi@'on de cons y search-fwd"

#. type: Plain text
#: emacs-lisp-intro.texi:9399 emacs-lisp-intro.texi:13579
msgid "Here is a brief summary of some recently introduced functions."
msgstr ""
"Aqu@'{@dotless{i}} hay un breve resumen de algunas funciones\n"
"introducidas recientemente."

#. type: item
#: emacs-lisp-intro.texi:9401
#, no-wrap
msgid "car"
msgstr "car"

#. type: itemx
#: emacs-lisp-intro.texi:9402
#, no-wrap
msgid "cdr"
msgstr "cdr"

#. type: table
#: emacs-lisp-intro.texi:9405
msgid ""
"@code{car} returns the first element of a list; @code{cdr} returns the "
"second and subsequent elements of a list."
msgstr ""
"@code{car} devuelve el primer elemento de una lista; @code{cdr}\n"
"devuelve el segundo y subsiguientes elementos de una lista."

#. type: group
#: emacs-lisp-intro.texi:9415
#, no-wrap
msgid ""
"(car '(1 2 3 4 5 6 7))\n"
"     @result{} 1\n"
"(cdr '(1 2 3 4 5 6 7))\n"
"     @result{} (2 3 4 5 6 7)\n"
msgstr ""
"(car '(1 2 3 4 5 6 7))\n"
"     @result{} 1\n"
"(cdr '(1 2 3 4 5 6 7))\n"
"     @result{} (2 3 4 5 6 7)\n"

#. type: table
#: emacs-lisp-intro.texi:9421
msgid ""
"@code{cons} constructs a list by prepending its first argument to its second "
"argument."
msgstr ""
"@code{cons} construye una lista enlazando su primer argumento a su\n"
"segundo argumento."

#. type: group
#: emacs-lisp-intro.texi:9429
#, no-wrap
msgid ""
"(cons 1 '(2 3 4))\n"
"     @result{} (1 2 3 4)\n"
msgstr ""
"(cons 1 '(2 3 4))\n"
"     @result{} (1 2 3 4)\n"

#. type: item
#: emacs-lisp-intro.texi:9432
#, no-wrap
msgid "funcall"
msgstr "funcall"

#. type: table
#: emacs-lisp-intro.texi:9435
msgid ""
"@code{funcall} evaluates its first argument as a function.  It passes its "
"remaining arguments to its first argument."
msgstr ""
"@code{funcall} eval@'ua su primer argumento como una\n"
"funci@'on. As@'{@dotless{i}} pasa los argumentos que permanecen a su\n"
"primer argumento."

#. type: table
#: emacs-lisp-intro.texi:9438
msgid "Return the result of taking @sc{cdr} `n' times on a list."
msgstr "Devuelve el resultado de tomar @sc{cdr} `n' veces en una lista."

#. type: iftex
#: emacs-lisp-intro.texi:9440
msgid "The"
msgstr "The"

#. type: tex
#: emacs-lisp-intro.texi:9442
#, no-wrap
msgid "$n^{th}$\n"
msgstr "$n^{th}$\n"

#. type: iftex
#: emacs-lisp-intro.texi:9444
msgid "@code{cdr}."
msgstr "@code{cdr}."

#. type: table
#: emacs-lisp-intro.texi:9446
msgid "The `rest of the rest', as it were."
msgstr "El `resto del resto', como estaba"

#. type: group
#: emacs-lisp-intro.texi:9454
#, no-wrap
msgid ""
"(nthcdr 3 '(1 2 3 4 5 6 7))\n"
"     @result{} (4 5 6 7)\n"
msgstr ""
"(nthcdr 3 '(1 2 3 4 5 6 7))\n"
"     @result{} (4 5 6 7)\n"

#. type: table
#: emacs-lisp-intro.texi:9461
msgid ""
"@code{setcar} changes the first element of a list; @code{setcdr} changes the "
"second and subsequent elements of a list."
msgstr ""
"@code{setcar} cambia el primer elemento de una lista; @code{setcdr}\n"
"cambia el segundo y subsiguiente elementos de una lista."

#. type: group
#: emacs-lisp-intro.texi:9468
#, no-wrap
msgid ""
"(setq triple '(1 2 3))\n"
"\n"
msgstr ""
"(setq triple '(1 2 3))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:9470
#, no-wrap
msgid ""
"(setcar triple '37)\n"
"\n"
msgstr ""
"(setcar triple '37)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:9473
#, no-wrap
msgid ""
"triple\n"
"     @result{} (37 2 3)\n"
"\n"
msgstr ""
"triple\n"
"     @result{} (37 2 3)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:9475
#, no-wrap
msgid ""
"(setcdr triple '(\"foo\" \"bar\"))\n"
"\n"
msgstr ""
"(setcdr triple '(\"foo\" \"bar\"))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:9478
#, no-wrap
msgid ""
"triple\n"
"     @result{} (37 \"foo\" \"bar\")\n"
msgstr ""
"triple\n"
"     @result{} (37 \"foo\" \"bar\")\n"

#. type: table
#: emacs-lisp-intro.texi:9484
msgid ""
"Evaluate each argument in sequence and then return the value of the last."
msgstr ""
"Eval@'ua cada argumento en secuencia y entonces devuelve el valor del "
"@'ultimo."

#. type: group
#: emacs-lisp-intro.texi:9492
#, no-wrap
msgid ""
"(progn 1 2 3 4)\n"
"     @result{} 4\n"
msgstr ""
"(progn 1 2 3 4)\n"
"     @result{} 4\n"

#. type: table
#: emacs-lisp-intro.texi:9498
msgid ""
"Record whatever narrowing is in effect in the current buffer, if any, and "
"restore that narrowing after evaluating the arguments."
msgstr ""
"Graba siempre que encoger est@'e en efecto en el b@'uffer, si\n"
"cualquiera, restaura este encogimiento despu@'es de evaluar los argumentos."

#. type: table
#: emacs-lisp-intro.texi:9504
msgid ""
"Search for a string, and if the string is found, move point.  With a regular "
"expression, use the similar @code{re-search-forward}.  (@xref{Regexp "
"Search, , Regular Expression Searches}, for an explanation of regular "
"expression patterns and searches.)"
msgstr ""
"Buscar una cadena, y si la cadena es encontrada, mueve el punto. Con\n"
"una expresi@'on regular, usa algo similar a\n"
"@code{re-search-forward}. (@xref{Buscar regexp, B@'usquedas de\n"
"Expresiones Regulares}, para una explicaci@'on de expresiones\n"
"regulares patrones y b@'usquedas.)"

#. type: table
#: emacs-lisp-intro.texi:9509
msgid "@code{search-forward} and @code{re-search-forward} take four arguments:"
msgstr ""
"@code{search-forward} y @code{re-search-forward} tiene cuatro argumentos:"

#. type: enumerate
#: emacs-lisp-intro.texi:9513
msgid "The string or regular expression to search for."
msgstr "La cadena o la expresi@'on regular para buscar."

#. type: enumerate
#: emacs-lisp-intro.texi:9516 emacs-lisp-intro.texi:13622
msgid "Optionally, the limit of the search."
msgstr "Opcionalmente, el l@'{@dotless{i}}mite de la b@'usqueda."

#. type: enumerate
#: emacs-lisp-intro.texi:9520 emacs-lisp-intro.texi:13626
msgid ""
"Optionally, what to do if the search fails, return @code{nil} or an error "
"message."
msgstr ""
"Opcionalmente, que haces si la b@'usqueda falla, devuelve @code{nil} o\n"
"un mensaje de error."

#. type: enumerate
#: emacs-lisp-intro.texi:9524 emacs-lisp-intro.texi:13630
msgid ""
"Optionally, how many times to repeat the search; if negative, the search "
"goes backwards."
msgstr ""
"Opcionalmente, cu@'antas veces se puede repetir la b@'usqueda; si es\n"
"negativa, la b@'usqueda va hacia atr@'as."

#. type: table
#: emacs-lisp-intro.texi:9533
msgid ""
"@code{kill-region} cuts the text between point and mark from the buffer and "
"stores that text in the kill ring, so you can get it back by yanking."
msgstr ""
"@code{kill-region} corta el texto entre punto y marca desde el\n"
"b@'uffer y almacena ese texto en el anillo de la muerte @emph{kill\n"
"ring}, as@'{@dotless{i}} se puede obtener peg@'andolo."

#. type: table
#: emacs-lisp-intro.texi:9537
msgid ""
"@code{copy-region-as-kill} copies the text between point and mark into the "
"kill ring, from which you can get it by yanking.  The function does not cut "
"or remove the text from the buffer."
msgstr ""
"@code{copy-region-as-kill} copia el texto entre punto y marca dentro\n"
"del anillo de la muerte @emph{kill ring}, que se puede obtener\n"
"peg@'andolo. La funci@'on no corta o borra el texto desde el b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:9542
msgid ""
"@code{delete-and-extract-region} removes the text between point and mark "
"from the buffer and throws it away.  You cannot get it back.  (This is not "
"an interactive command.)"
msgstr ""
"@code{delete-and-extract-region} elimina el texto entre el punto y\n"
"marca desde el b@'uffer y a trav@'es. No se puede volver. Esto no es\n"
"un comando interactivo.)"

#. type: section
#: emacs-lisp-intro.texi:9545
#, no-wrap
msgid "Searching Exercises"
msgstr "Buscando ejercicios"

#. type: itemize
#: emacs-lisp-intro.texi:9555
msgid ""
"Write an interactive function that searches for a string.  If the search "
"finds the string, leave point after it and display a message that says "
"``Found!''.  (Do not use @code{search-forward} for the name of this "
"function; if you do, you will overwrite the existing version of @code{search-"
"forward} that comes with Emacs.  Use a name such as @code{test-search} "
"instead.)"
msgstr ""
"Escribe una funci@'on interactiva que busca una cadena. Si la\n"
"b@'usqueda encuentra la cadena, deja el punto despu@'es y muestra un\n"
"mensaje que dice ``@exclamdown{}Encontrado!''. (No use\n"
"@code{search-forward} como nombre de esta funci@'on; si se hace, se\n"
"sobreescribir@'a la versi@'on existente @code{search-forward} que\n"
"viene con Emacs. Use un nombre tal como @code{test-search} en vez de\n"
"eso."

#. type: itemize
#: emacs-lisp-intro.texi:9560
msgid ""
"Write a function that prints the third element of the kill ring in the echo "
"area, if any; if the kill ring does not contain a third element, print an "
"appropriate message."
msgstr ""
"Escribe una funci@'on que imprime el tercer elemento del kill ring\n"
"@emph{anillo de la muerte} en el @'area echo, si cualquiera; si el\n"
"kill ring @emph{anillo de la muerte} no contiene un tercer elemento,\n"
"imprime un mensaje apropiado. "

#. type: cindex
#: emacs-lisp-intro.texi:9564
#, no-wrap
msgid "Lists in a computer"
msgstr "Listas en un ordenador"

#. type: Plain text
#: emacs-lisp-intro.texi:9576
msgid ""
"In Lisp, atoms are recorded in a straightforward fashion; if the "
"implementation is not straightforward in practice, it is, nonetheless, "
"straightforward in theory.  The atom @samp{rose}, for example, is recorded "
"as the four contiguous letters @samp{r}, @samp{o}, @samp{s}, @samp{e}.  A "
"list, on the other hand, is kept differently.  The mechanism is equally "
"simple, but it takes a moment to get used to the idea.  A list is kept using "
"a series of pairs of pointers.  In the series, the first pointer in each "
"pair points to an atom or to another list, and the second pointer in each "
"pair points to the next pair, or to the symbol @code{nil}, which marks the "
"end of the list."
msgstr ""
"En Lisp, los @'atomos se graban de manera simple, si la\n"
"implementaci@'on no es sencilla en la pr@'actica, no es, nada sencilla\n"
"en la teor@'{@dotless{i}}a. El @'atomo @samp{rosa}, por ejemplo, se\n"
"graba como las cuatro letras contiguas @samp{r}, @samp{o}, @samp{s},\n"
"@samp{a}. Una lista, por otro lado, se guarda de manera diferente. El\n"
"mecanismo es igualmente simple, pero toma un momento para tener usada\n"
"la idea. Una lista se guarda usando una serie de pares de punteros. En\n"
"las series, el primer puntero en cada par de puntos a un @'atomo o a\n"
"otra lista, y el segundo puntero en cada par al siguiente par, o al\n"
"s@'{@dotless{i}}mbolo @code{nil}, que marca el fin de la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:9579
msgid ""
"A pointer itself is quite simply the electronic address of what is pointed "
"to.  Hence, a list is kept as a series of electronic addresses."
msgstr ""
"Un puntero por s@'{@dotless{i}} mismo es poco simple a la direcci@'on\n"
"electr@'onica de la que est@'a apuntada. Aqu@'{@dotless{i}}, una lista\n"
"se guarda como una serie de direcciones electr@'onicas."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:9587 emacs-lisp-intro.texi:9588
#, no-wrap
msgid "Lists diagrammed"
msgstr "Listas diagramadas"

#. type: Plain text
#: emacs-lisp-intro.texi:9598
msgid ""
"For example, the list @code{(rose violet buttercup)} has three elements, "
"@samp{rose}, @samp{violet}, and @samp{buttercup}.  In the computer, the "
"electronic address of @samp{rose} is recorded in a segment of computer "
"memory along with the address that gives the electronic address of where the "
"atom @samp{violet} is located; and that address (the one that tells where "
"@samp{violet} is located) is kept along with an address that tells where the "
"address for the atom @samp{buttercup} is located."
msgstr ""
"Por ejemplo, la lista @code{(rosa violeta bot@'ondeoro)} tiene tres\n"
"elementos, @samp{rosa}, @samp{violeta}, y @samp{bot@'ondeoro}. En el\n"
"ordenador, la direcci@'on electr@'onica de @samp{rosa} se graba en un\n"
"segmento de memoria del ordenador a trav@'es de la direcci@'on que da\n"
"la direcci@'on electr@'onica de donde el @'atomo @samp{violeta} est@'a\n"
"localizado; y esta direcci@'on (la que cuenta donde @samp{violeta}\n"
"est@'a se localiza) se guarda con una direcci@'on que cuenta donde la\n"
"direcci@'on para el @'atomo @samp{bot@'ondeoro} se localiza."

#. type: Plain text
#: emacs-lisp-intro.texi:9601
msgid ""
"This sounds more complicated than it is and is easier seen in a diagram:"
msgstr ""
"Esto parece m@'as complicado de lo que es y es m@'as f@'acil visto en\n"
"un diagrama:"

#. type: group
#: emacs-lisp-intro.texi:9612 emacs-lisp-intro.texi:9635
#, no-wrap
msgid ""
"    ___ ___      ___ ___      ___ ___\n"
"   |___|___|--> |___|___|--> |___|___|--> nil\n"
"     |            |            |\n"
"     |            |            |\n"
"      --> rose     --> violet   --> buttercup\n"
msgstr ""
"    ___ ___      ___ ___      ___ ___\n"
"   |___|___|--> |___|___|--> |___|___|--> nil\n"
"     |            |            |\n"
"     |            |            |\n"
"     ---> rosa    ---> violeta ---> bot@'ondeoro\n"

#. type: center
#: emacs-lisp-intro.texi:9618
#, no-wrap
msgid "@image{cons-1}"
msgstr "@image{cons-1}"

#. type: tex
#: emacs-lisp-intro.texi:9623
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-1.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-1.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9650
msgid ""
"In the diagram, each box represents a word of computer memory that holds a "
"Lisp object, usually in the form of a memory address.  The boxes, i.e., the "
"addresses, are in pairs.  Each arrow points to what the address is the "
"address of, either an atom or another pair of addresses.  The first box is "
"the electronic address of @samp{rose} and the arrow points to @samp{rose}; "
"the second box is the address of the next pair of boxes, the first part of "
"which is the address of @samp{violet} and the second part of which is the "
"address of the next pair.  The very last box points to the symbol "
"@code{nil}, which marks the end of the list."
msgstr ""
"En el diagrama, cada caja representa una palabra de memoria del\n"
"ordenador que maneja un objeto Lisp, normalmente en la forma de una\n"
"direcci@'on de memoria. Las cajas, por ej. las direcciones, est@'an en\n"
"pares. Cada flecha apunta a lo que la direcci@'on es la direcci@'on\n"
"de, si un @'atomo u otro par de direcciones. La primera caja es la\n"
"direcci@'on electr@'onica de @samp{rosa} y la flecha apunta a\n"
"@samp{rosa}; la segunda caja es la direcci@'on del siguiente par de\n"
"cajas, la primera parte de la que es la direcci@'on de @samp{violeta}\n"
"y la segunda parte es la direcci@'on del siguiente par. La @'ultima\n"
"caja apunta al s@'{@dotless{i}}mbolo @code{nil}, que marca el fin de\n"
"la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:9655
msgid ""
"When a variable is set to a list with a function such as @code{setq}, it "
"stores the address of the first box in the variable.  Thus, evaluation of "
"the expression"
msgstr ""
"Cuando una variable es configurado a una lista con una funci@'on tal\n"
"como @code{setq}, almacena la direcci@'on de la primera caja en la\n"
"variable. De este modo, la evaluaci@'on de la expresi@'on es:"

#. type: smallexample
#: emacs-lisp-intro.texi:9658
#, no-wrap
msgid "(setq bouquet '(rose violet buttercup))\n"
msgstr "(setq ramo '(rosa violeta bot@'ondeoro))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9663
msgid "creates a situation like this:"
msgstr "crea una situaci@'on como esta:"

#. type: group
#: emacs-lisp-intro.texi:9675 emacs-lisp-intro.texi:9700
#, no-wrap
msgid ""
"bouquet\n"
"     |\n"
"     |     ___ ___      ___ ___      ___ ___\n"
"      --> |___|___|--> |___|___|--> |___|___|--> nil\n"
"            |            |            |\n"
"            |            |            |\n"
"             --> rose     --> violet   --> buttercup\n"
msgstr ""
"ramo\n"
"     |\n"
"     |     ___ ___      ___ ___      ___ ___\n"
"      --> |___|___|--> |___|___|--> |___|___|--> nil\n"
"            |            |            |\n"
"            |            |            |\n"
"             --> rosa     --> violeta   --> bot@'ondeoro\n"

#. type: center
#: emacs-lisp-intro.texi:9681
#, no-wrap
msgid "@image{cons-2}"
msgstr "@image{cons-2}"

#. type: tex
#: emacs-lisp-intro.texi:9686
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-2.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-2.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9708
msgid ""
"In this example, the symbol @code{bouquet} holds the address of the first "
"pair of boxes."
msgstr ""
"En este ejemplo, el s@'{@dotless{i}}mbolo @code{ramo} maneja la\n"
"direcci@'on del primer par de cajas."

#. type: Plain text
#: emacs-lisp-intro.texi:9712
msgid ""
"This same list can be illustrated in a different sort of box notation like "
"this:"
msgstr ""
"Esta misma lista puede ser ilustrada en un modo diferente de\n"
"anotaci@'on de cajas como esta:"

#. type: group
#: emacs-lisp-intro.texi:9724 emacs-lisp-intro.texi:9749
#, no-wrap
msgid ""
"bouquet\n"
" |\n"
" |    --------------       ---------------       ----------------\n"
" |   | car   | cdr  |     | car    | cdr  |     | car     | cdr  |\n"
"  -->| rose  |   o------->| violet |   o------->| butter- |  nil |\n"
"     |       |      |     |        |      |     | cup     |      |\n"
"      --------------       ---------------       ----------------\n"
msgstr ""
"ramo\n"
" |\n"
" |    --------------       ----------------       --------------------\n"
" |   | car   | cdr  |     | car     | cdr  |     | car         | cdr  |\n"
"  -->| rosa  |   o------->| violeta |   o------->| bot@'ondeoro |  nil |\n"
"     |       |      |     |         |      |     |             |      |\n"
"      --------------       ----------------       --------------------\n"

#. type: center
#: emacs-lisp-intro.texi:9730
#, no-wrap
msgid "@image{cons-2a}"
msgstr "@image{cons-2a}"

#. type: tex
#: emacs-lisp-intro.texi:9735
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-2a.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-2a.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9763
msgid ""
"(Symbols consist of more than pairs of addresses, but the structure of a "
"symbol is made up of addresses.  Indeed, the symbol @code{bouquet} consists "
"of a group of address-boxes, one of which is the address of the printed word "
"@samp{bouquet}, a second of which is the address of a function definition "
"attached to the symbol, if any, a third of which is the address of the first "
"pair of address-boxes for the list @code{(rose violet buttercup)}, and so "
"on.  Here we are showing that the symbol's third address-box points to the "
"first pair of address-boxes for the list.)"
msgstr ""
"(Los s@'{@dotless{i}}mbolos consisten de m@'as pares de direcciones,\n"
"pero la estructura de un s@'{@dotless{i}}mbolo es hecha de\n"
"direcciones. De manera profunda, el s@'{@dotless{i}}mbolo @code{ramo}\n"
"consiste de un grupo de cajas-de-direcciones, una que es la\n"
"direcci@'on de la palabra impresa @samp{ramo}, una segunda de la que\n"
"es la direcci@'on de una definici@'on de funci@'on adjunta al\n"
"s@'{@dotless{i}}mbolo, si cualquiera, un tercero del que es la\n"
"direcci@'on del primer par de cajas-de-direccion para la lista\n"
"@code{(rosa violeta bot@'ondeoro)}, y\n"
"as@'{@dotless{i}}. Aqu@'{@dotless{i}} se est@'a mostrando que la\n"
"tercera caja de direcci@'on del s@'{@dotless{i}}mbolo apunta al primer\n"
"par de cajas-de-direccion para la lista.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9768
msgid ""
"If a symbol is set to the @sc{cdr} of a list, the list itself is not "
"changed; the symbol simply has an address further down the list.  (In the "
"jargon, @sc{car} and @sc{cdr} are `non-destructive'.)  Thus, evaluation of "
"the following expression"
msgstr ""
"Si un s@'{@dotless{i}}mbolo se asigna al @sc{cdr} de una lista, la\n"
"lista en s@'{@dotless{i}} no cambia; el s@'{@dotless{i}}mbolo\n"
"simplemente tiene una direcci@'on abajo de la lista. (En la jerga,\n"
"@sc{car} y @sc{cdr} son `no destructivos'.) De este modo, se eval@'ua\n"
"la siguiente expresi@'on"

#. type: smallexample
#: emacs-lisp-intro.texi:9771
#, no-wrap
msgid "(setq flowers (cdr bouquet))\n"
msgstr "(setq flores (cdr ramo))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9776 emacs-lisp-intro.texi:15544
msgid "produces this:"
msgstr "produce esto:"

#. type: group
#: emacs-lisp-intro.texi:9790 emacs-lisp-intro.texi:9818
#, no-wrap
msgid ""
"bouquet        flowers\n"
"  |              |\n"
"  |     ___ ___  |     ___ ___      ___ ___\n"
"   --> |   |   |  --> |   |   |    |   |   |\n"
"       |___|___|----> |___|___|--> |___|___|--> nil\n"
"         |              |            |\n"
"         |              |            |\n"
"          --> rose       --> violet   --> buttercup\n"
msgstr ""
"ramo        flores\n"
"  |              |\n"
"  |     ___ ___  |     ___ ___      ___ ___\n"
"   --> |   |   |  --> |   |   |    |   |   |\n"
"       |___|___|----> |___|___|--> |___|___|--> nil\n"
"         |              |            |\n"
"         |              |            |\n"
"          --> rosa       --> violeta  --> bot@'ondeoro\n"

#. type: center
#: emacs-lisp-intro.texi:9797
#, no-wrap
msgid "@image{cons-3}"
msgstr "@image{cons-3}"

#. type: tex
#: emacs-lisp-intro.texi:9802
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-3.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-3.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9829
msgid ""
"The value of @code{flowers} is @code{(violet buttercup)}, which is to say, "
"the symbol @code{flowers} holds the address of the pair of address-boxes, "
"the first of which holds the address of @code{violet}, and the second of "
"which holds the address of @code{buttercup}."
msgstr ""
"El valor de @code{flores} es @code{(violeta bot@'ondeoro)}, esto es\n"
"decir que el s@'{@dotless{i}}mbolo @code{flores} maneja la direcci@'on\n"
"del par address-boxes el primero que maneja la direcci@'on de\n"
"@code{violeta}, y el segundo que maneja la direcci@'on de\n"
"@code{bot@'ondeoro}."

#. type: Plain text
#: emacs-lisp-intro.texi:9835
msgid ""
"A pair of address-boxes is called a @dfn{cons cell} or @dfn{dotted pair}.  "
"@xref{Cons Cell Type, , Cons Cell and List Types, elisp, The GNU Emacs Lisp "
"Reference Manual}, and @ref{Dotted Pair Notation, , Dotted Pair Notation, "
"elisp, The GNU Emacs Lisp Reference Manual}, for more information about cons "
"cells and dotted pairs."
msgstr ""
"Un par de cajas-de-direcciones se llama una @dfn{cons cell} o @dfn{par\n"
"de puntos}. @xref{Tipo de C@'elula Cons, , la C@'elula Cons y los\n"
"Tipos Lista, elisp, El Manual de Referencia de Emacs Lisp}, y\n"
"@ref{Notaci@'on de Pares de Puntos, , Notaci@'on de Pares de Puntos,\n"
"elisp, El Manual de Referencia de GNU Emacs Lisp}, para m@'as\n"
"informaci@'on acerca de c@'elulas cons y pares de puntos."

#. type: Plain text
#: emacs-lisp-intro.texi:9840
msgid ""
"The function @code{cons} adds a new pair of addresses to the front of a "
"series of addresses like that shown above.  For example, evaluating the "
"expression"
msgstr ""
"La funci@'on @code{cons} a@~nade un nuevo par de direcciones al frente\n"
"de una serie de direcciones como son mostradas debajo. Por ejemplo,\n"
"evaluando la expresi@'on"

#. type: smallexample
#: emacs-lisp-intro.texi:9843
#, no-wrap
msgid "(setq bouquet (cons 'lily bouquet))\n"
msgstr "(setq ramo (cons 'lila ramo))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9848 emacs-lisp-intro.texi:15989
msgid "produces:"
msgstr "produce:"

#. type: group
#: emacs-lisp-intro.texi:9862 emacs-lisp-intro.texi:9890
#, no-wrap
msgid ""
"bouquet                       flowers\n"
"  |                             |\n"
"  |     ___ ___        ___ ___  |     ___ ___       ___ ___\n"
"   --> |   |   |      |   |   |  --> |   |   |     |   |   |\n"
"       |___|___|----> |___|___|----> |___|___|---->|___|___|--> nil\n"
"         |              |              |             |\n"
"         |              |              |             |\n"
"          --> lily      --> rose       --> violet    --> buttercup\n"
msgstr ""
"ramo                       flores\n"
"  |                             |\n"
"  |     ___ ___        ___ ___  |     ___ ___       ___ ___\n"
"   --> |   |   |      |   |   |  --> |   |   |     |   |   |\n"
"       |___|___|----> |___|___|----> |___|___|---->|___|___|--> nil\n"
"         |              |              |             |\n"
"         |              |              |             |\n"
"          --> lila      --> rosa       --> violeta    --> bot@'ondeoro\n"

#. type: center
#: emacs-lisp-intro.texi:9869
#, no-wrap
msgid "@image{cons-4}"
msgstr "@image{cons-4}"

#. type: tex
#: emacs-lisp-intro.texi:9874
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-4.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-4.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9900
msgid ""
"However, this does not change the value of the symbol @code{flowers}, as you "
"can see by evaluating the following,"
msgstr ""
"Sin embargo, esto no cambia el valor del s@'{@dotless{i}}mbolo\n"
"@code{flores}, as@'{@dotless{i}} puedes ver evaluando lo siguiente,"

#. type: smallexample
#: emacs-lisp-intro.texi:9903
#, no-wrap
msgid "(eq (cdr (cdr bouquet)) flowers)\n"
msgstr "(eq (cdr (cdr ramo)) flores)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:9907
msgid "which returns @code{t} for true."
msgstr "que devuelve @code{t} para verdad."

#. type: Plain text
#: emacs-lisp-intro.texi:9912
msgid ""
"Until it is reset, @code{flowers} still has the value @code{(violet "
"buttercup)}; that is, it has the address of the cons cell whose first "
"address is of @code{violet}.  Also, this does not alter any of the pre-"
"existing cons cells; they are all still there."
msgstr ""
"Hasta que se resetea, @code{flores} todav@'{@dotless{i}}a tiene el\n"
"valor de @code{(violeta bot@'ondeoro)}; que es, eso tiene la\n"
"direcci@'on de la celula cons cuya primera direcci@'on es\n"
"@code{violeta}. Tambi@'en, esto no altera cualquier c@'elula\n"
"prexistente cons; ellas est@'a todav@'{@dotless{i}}a all@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:9919
msgid ""
"Thus, in Lisp, to get the @sc{cdr} of a list, you just get the address of "
"the next cons cell in the series; to get the @sc{car} of a list, you get the "
"address of the first element of the list; to @code{cons} a new element on a "
"list, you add a new cons cell to the front of the list.  That is all there "
"is to it! The underlying structure of Lisp is brilliantly simple!"
msgstr ""
"De este modo, en Lisp, tiene el @sc{cdr} de una lista, se obtiene la\n"
"direcci@'on del siguiente cons en las serie; para tener el @sc{car} de\n"
"una lista, se obtiene la direcci@'on del primer elemento de la lista;\n"
"para @code{cons} un nuevo elemento en una lista, se a@~nade una nueva\n"
"c@'elula cons al frente de la lista. @exclamdown{}Esto es todo lo que\n"
"hay as@'{@dotless{i}}! @exclamdown{}La estructura subyacente de Lisp\n"
"es brillantemente simple!"

#. type: Plain text
#: emacs-lisp-intro.texi:9922
msgid ""
"And what does the last address in a series of cons cells refer to? It is the "
"address of the empty list, of @code{nil}."
msgstr ""
"@questiondown{}Y qu@'e hace la @'ultima direcci@'on en una serie de "
"c@'elulas cons\n"
"se refieren? Eso es la direcci@'on de la lista vac@'{@dotless{i}}a, de\n"
"@code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:9925
msgid ""
"In summary, when a Lisp variable is set to a value, it is provided with the "
"address of the list to which the variable refers."
msgstr ""
"En resumen, cuando una variable Lisp es asignada a un valor, eso\n"
"provee con la direcci@'on de la lista a la que la variable se refiere."

#. type: cindex
#: emacs-lisp-intro.texi:9927 emacs-lisp-intro.texi:9928
#, no-wrap
msgid "Symbols as a Chest of Drawers"
msgstr "S@'{@dotless{i}}mbolos como una caja con cajones"

#. type: cindex
#: emacs-lisp-intro.texi:9929
#, no-wrap
msgid "Chest of Drawers, metaphor for a symbol"
msgstr "Caja con cajones, met@'afora para su s@'{@dotless{i}}mbolo"

#. type: cindex
#: emacs-lisp-intro.texi:9930
#, no-wrap
msgid "Drawers, Chest of, metaphor for a symbol"
msgstr "Cajones, Caja de, met@'afora para un s@'{@dotless{i}}mbolo"

#. type: Plain text
#: emacs-lisp-intro.texi:9937
msgid ""
"In an earlier section, I suggested that you might imagine a symbol as being "
"a chest of drawers.  The function definition is put in one drawer, the value "
"in another, and so on.  What is put in the drawer holding the value can be "
"changed without affecting the contents of the drawer holding the function "
"definition, and vice-verse."
msgstr ""
"En una secci@'on temprana, se suger@'{@dotless{i}}a que se\n"
"podr@'{@dotless{i}}a imaginar un s@'{@dotless{i}}mbolo siendo una caja\n"
"con cajones. La definici@'on de funci@'on se pone en un caj@'on, el\n"
"valor en otro, y as@'{@dotless{i}}. Lo que se pone en el caj@'on\n"
"maneja el valor que puede cambiarse sin afectar a los contenidos del\n"
"caj@'on manejando la definici@'on de funci@'on, y viceversa."

#. type: Plain text
#: emacs-lisp-intro.texi:9942
msgid ""
"Actually, what is put in each drawer is the address of the value or function "
"definition.  It is as if you found an old chest in the attic, and in one of "
"its drawers you found a map giving you directions to where the buried "
"treasure lies."
msgstr ""
"Actualmente, lo que est@'a puesto en cada caj@'on es la direcci@'on\n"
"del valor o definici@'on de funci@'on. Eso es como si se encontrara un\n"
"viejo caj@'on en el @'atico, y en uno de sus cajones se encontrara un\n"
"mapa d@'andote direcciones a donde est@'a el tesoro escondido."

#. type: Plain text
#: emacs-lisp-intro.texi:9948
msgid ""
"(In addition to its name, symbol definition, and variable value, a symbol "
"has a `drawer' for a @dfn{property list} which can be used to record other "
"information.  Property lists are not discussed here; see @ref{Property "
"Lists, , Property Lists, elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"(Adem@'as de su nombre, la definici@'on del s@'{@dotless{i}}mbolo, y\n"
"un valor de la variable, un s@'{@dotless{i}}mbolo tiene un `caj@'on'\n"
"para una @dfn{lista de propiedades} que puede ser usada para grabar\n"
"otra informaci@'on. Las listas de propiedades no se discuten\n"
"aqu@'{@dotless{i}}; ver @ref{Listas de Propiedades, , Listas de\n"
"Propiedades, elisp, El Manual de Referencia de Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:9951
msgid "Here is a fanciful representation:"
msgstr "Aqu@'{@dotless{i}} hay una representaci@'on visionaria:"

#. type: group
#: emacs-lisp-intro.texi:9958 emacs-lisp-intro.texi:10000
#, no-wrap
msgid ""
"            Chest of Drawers            Contents of Drawers\n"
"\n"
msgstr ""
"            Caja de Cajones            Contenidos de Cajones\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:9979 emacs-lisp-intro.texi:10021
#, no-wrap
msgid ""
"            __   o0O0o   __\n"
"          /                 \\\n"
"         ---------------------\n"
"        |    directions to    |            [map to]\n"
"        |     symbol name     |             bouquet\n"
"        |                     |\n"
"        +---------------------+\n"
"        |    directions to    |\n"
"        |  symbol definition  |             [none]\n"
"        |                     |\n"
"        +---------------------+\n"
"        |    directions to    |            [map to]\n"
"        |    variable value   |             (rose violet buttercup)\n"
"        |                     |\n"
"        +---------------------+\n"
"        |    directions to    |\n"
"        |    property list    |             [not described here]\n"
"        |                     |\n"
"        +---------------------+\n"
"        |/                   \\|\n"
msgstr ""
"            __   o0O0o   __\n"
"          /                 \\\n"
"         ---------------------\n"
"        |    direcciones al   |            [mapeo a]\n"
"        | nombre del simbolo  |             ramo\n"
"        |                     |\n"
"        +---------------------+\n"
"        |  direcciones a la   |\n"
"        |  definici@'on del   |             [nunca]\n"
"        |    simbolo          |\n"
"        +---------------------+\n"
"        |    direcciones al   |            [mapeo a]\n"
"        |   valor de variable |       (rosa violeta bot@'ondeoro)\n"
"        |                     |\n"
"        +---------------------+\n"
"        |    direcciones a la |\n"
"        |lista de propiedades |             [no descrito aqu@'{@dotless{i}}]\n"
"        |                     |\n"
"        +---------------------+\n"
"        |/                   \\|\n"

#. type: center
#: emacs-lisp-intro.texi:9986
#, no-wrap
msgid "@image{drawers}"
msgstr "@image{drawers}"

#. type: tex
#: emacs-lisp-intro.texi:9991
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/drawers.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/drawers.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10034
msgid ""
"Set @code{flowers} to @code{violet} and @code{buttercup}.  Cons two more "
"flowers on to this list and set this new list to @code{more-flowers}.  Set "
"the @sc{car} of @code{flowers} to a fish.  What does the @code{more-flowers} "
"list now contain?"
msgstr ""
"Asignar @code{flores} a @code{violeta} y @code{bot@'ondeoro}. Asigna\n"
"dos flores m@'as en esta lista y asigna esta nueva lista a\n"
"@code{mas-flores}. Asigna el @sc{car} de @code{flores} a un\n"
"pez. @questiondown{}Qu@'e lista contiene ahora @code{mas-flores}?"

#. type: cindex
#: emacs-lisp-intro.texi:10038
#, no-wrap
msgid "Text retrieval"
msgstr "Recuperar Texto"

#. type: cindex
#: emacs-lisp-intro.texi:10039
#, no-wrap
msgid "Retrieving text"
msgstr "Recuperando Texto"

#. type: cindex
#: emacs-lisp-intro.texi:10040
#, no-wrap
msgid "Pasting text"
msgstr "Pegando Texto"

#. type: Plain text
#: emacs-lisp-intro.texi:10047
msgid ""
"Whenever you cut text out of a buffer with a `kill' command in GNU Emacs, "
"you can bring it back with a `yank' command.  The text that is cut out of "
"the buffer is put in the kill ring and the yank commands insert the "
"appropriate contents of the kill ring back into a buffer (not necessarily "
"the original buffer)."
msgstr ""
"Siempre y cuando se corta texto fuera de un b@'uffer con un comando\n"
"`kill' en GNU Emacs, se puede traer con un comando `pegar'. El texto\n"
"cortado del b@'uffer es puesto en el anillo de la muerte y en los\n"
"comandos pegar, se insertan los contenidos apropiados del kill ring\n"
"detr@'as de un b@'uffer (no necesariamente el b@'uffer original)."

#. type: Plain text
#: emacs-lisp-intro.texi:10059
msgid ""
"A simple @kbd{C-y} (@code{yank}) command inserts the first item from the "
"kill ring into the current buffer.  If the @kbd{C-y} command is followed "
"immediately by @kbd{M-y}, the first element is replaced by the second "
"element.  Successive @kbd{M-y} commands replace the second element with the "
"third, fourth, or fifth element, and so on.  When the last element in the "
"kill ring is reached, it is replaced by the first element and the cycle is "
"repeated.  (Thus the kill ring is called a `ring' rather than just a "
"`list'.  However, the actual data structure that holds the text is a list.  "
"@xref{Kill Ring, , Handling the Kill Ring}, for the details of how the list "
"is handled as a ring.)"
msgstr ""
"Un simple comando @kbd{C-y} (@code{yank}) inserta el primer\n"
"@'{@dotless{i}}tem desde el anillo de la muerte @emph{kill ring}\n"
"dentro del actual b@'uffer. Si el comando @kbd{C-y} es seguido\n"
"inmediatamente para @kbd{M-y}, el primer elemento se reemplaza por el\n"
"segundo elemento. Los sucesivos comandos @kbd{M-y} reemplazan el\n"
"segundo elemento con el tercer, cuarto, o quinto elemento, y\n"
"as@'{@dotless{i}}. Cuando se llega al @'ultimo elemento en el anillo\n"
"de la muerte @emph{kill ring}, se reemplaza por el primer elemento y\n"
"el ciclo se repite. (De este modo, el kill ring se llama un `anillo'\n"
"en vez de solo una `lista'. Sin embargo, la estructura de de datos\n"
"actual que maneja el texto es una lista. @xref{Qu@'e hace el anillo de\n"
"la muerte, , Manejando el anillo de la muerte @emph{kill ring}}, para\n"
"los detalles de c@'omo la lista es manejada como un anillo.)"

#. type: section
#: emacs-lisp-intro.texi:10066 emacs-lisp-intro.texi:10067
#, no-wrap
msgid "Kill Ring Overview"
msgstr "Resumen del anillo de la muerte"

#. type: cindex
#: emacs-lisp-intro.texi:10068
#, no-wrap
msgid "Kill ring overview"
msgstr "Resumen del Anillo de la Muerte @emph{Kill ring} "

#. type: Plain text
#: emacs-lisp-intro.texi:10071
msgid ""
"The kill ring is a list of textual strings.  This is what it looks like:"
msgstr ""
"El anillo de la muerte @emph{kill ring} es una lista de cadenas\n"
"textuales. Esto es lo que se ve:"

#. type: smallexample
#: emacs-lisp-intro.texi:10074 emacs-lisp-intro.texi:10121
#, no-wrap
msgid "(\"some text\" \"a different piece of text\" \"yet more text\")\n"
msgstr ""
"(\"alg@'un texto\" \"una pieza diferente pieza de texto\"\n"
"\"todav@'{@dotless{i}}a m@'as texto\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10079
msgid ""
"If this were the contents of my kill ring and I pressed @kbd{C-y}, the "
"string of characters saying @samp{some text} would be inserted in this "
"buffer where my cursor is located."
msgstr ""
"Si estos fueran los contenidos de mi anillo de la muerte @emph{kill\n"
"ring} y yo presionara @kbd{C-y}, la cadena de caracteres diciendo\n"
"@samp{alg@'un texto} ser@'{@dotless{i}}a insertado en este b@'uffer\n"
"donde mi cursor est@'a localizado. "

#. type: Plain text
#: emacs-lisp-intro.texi:10083
msgid ""
"The @code{yank} command is also used for duplicating text by copying it.  "
"The copied text is not cut from the buffer, but a copy of it is put on the "
"kill ring and is inserted by yanking it back."
msgstr ""
"El comando @code{yank} @emph{pegar} es tambi@'en usado para duplicar\n"
"texto copi@'andolo. El texto copiado no es cortado desde el b@'uffer,\n"
"pero una copia de eso se pone en el anillo de la muerte @emph{kill\n"
"ring} y se inserta peg@'andolo."

#. type: Plain text
#: emacs-lisp-intro.texi:10088
msgid ""
"Three functions are used for bringing text back from the kill ring: "
"@code{yank}, which is usually bound to @kbd{C-y}; @code{yank-pop}, which is "
"usually bound to @kbd{M-y}; and @code{rotate-yank-pointer}, which is used by "
"the two other functions."
msgstr ""
"Tres funciones se usan para atraer texto desde el anillo de la muerte\n"
"@emph{kill ring}: @code{yank} (@emph{pegar}), que normalmente se\n"
"asocian a @kbd{C-y}; @code{yank-pop}, que normalmente se asocia a\n"
"@kbd{M-y}; y @code{rotate-yank-pointer}, que se usa por las otras\n"
"dos funciones."

#. type: Plain text
#: emacs-lisp-intro.texi:10092
msgid ""
"These functions refer to the kill ring through a variable called the "
"@code{kill-ring-yank-pointer}.  Indeed, the insertion code for both the "
"@code{yank} and @code{yank-pop} functions is:"
msgstr ""
"Estas funciones se refieren al kill ring @emph{anillo de la muerte} a\n"
"trav@'es de una variable llamada el @code{kill-ring-yank-pointer}. En\n"
"vez de eso, la inserci@'on del c@'odigo para ambos son las funciones\n"
"@code{yank} y @code{yank-pop}:"

#. type: smallexample
#: emacs-lisp-intro.texi:10095
#, no-wrap
msgid "(insert (car kill-ring-yank-pointer))\n"
msgstr "(insert (car kill-ring-yank-pointer))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10105
msgid ""
"(Well, no more.  In GNU Emacs 22, the function has been replaced by "
"@code{insert-for-yank} which calls @code{insert-for-yank-1} repetitively for "
"each @code{yank-handler} segment.  In turn, @code{insert-for-yank-1} strips "
"text properties from the inserted text according to @code{yank-excluded-"
"properties}.  Otherwise, it is just like @code{insert}.  We will stick with "
"plain @code{insert} since it is easier to understand.)"
msgstr ""
"(Bien, no m@'as. En GNU Emacs 22, la funci@'on se ha reemplazado por\n"
"@code{insert-for-yank} que llama a @code{insert-for-yank-1}\n"
"repetitivamente para cada segmento @code{yank-handler}. En vez de eso,\n"
"@code{insert-for-yank-1} destituye las propiedades de texto desde el\n"
"texto insertado de acuerdo a @code{yank-excluded-properties}. De otro\n"
"modo, eso es como @code{insert}. Nosotros lo pegamos con un @code{insert}\n"
"plano puesto que sea f@'acil de comprender.)"

#. type: Plain text
#: emacs-lisp-intro.texi:10108
msgid ""
"To begin to understand how @code{yank} and @code{yank-pop} work, it is first "
"necessary to look at the @code{kill-ring-yank-pointer} variable."
msgstr ""
"Para empezar a comprender c@'omo @code{yank} y @code{yank-pop}\n"
"funcionan, primero es necesario mirar en la variable\n"
"@code{kill-ring-yank-pointer}."

#. type: section
#: emacs-lisp-intro.texi:10110
#, no-wrap
msgid "The @code{kill-ring-yank-pointer} Variable"
msgstr "La variable @code{kill-ring-yank-pointer}"

#. type: Plain text
#: emacs-lisp-intro.texi:10115
msgid ""
"@code{kill-ring-yank-pointer} is a variable, just as @code{kill-ring} is a "
"variable.  It points to something by being bound to the value of what it "
"points to, like any other Lisp variable."
msgstr ""
"@code{kill-ring-yank-pointer} es una variable, solo como\n"
"@code{kill-ring} es una variable. Eso apunta a alguna cosa siendo\n"
"asignada al valor de lo que apunta, como cualquier otra variable Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:10118
msgid "Thus, if the value of the kill ring is:"
msgstr "De este modo, si el valor del kill ring es:"

#. type: Plain text
#: emacs-lisp-intro.texi:10127
msgid ""
"and the @code{kill-ring-yank-pointer} points to the second clause, the value "
"of @code{kill-ring-yank-pointer} is:"
msgstr ""
"y el @code{kill-ring-yank-pointer} apunta a la segunda cl@'ausula, el\n"
"valor de @code{kill-ring-yank-pointer} es:"

#. type: smallexample
#: emacs-lisp-intro.texi:10130
#, no-wrap
msgid "(\"a different piece of text\" \"yet more text\")\n"
msgstr "(\"una pieza diferente de texto\" \"todav@'{@dotless{i}}a m@'as texto\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10138
msgid ""
"As explained in the previous chapter (@pxref{List Implementation}), the "
"computer does not keep two different copies of the text being pointed to by "
"both the @code{kill-ring} and the @code{kill-ring-yank-pointer}.  The words "
"``a different piece of text'' and ``yet more text'' are not duplicated.  "
"Instead, the two Lisp variables point to the same pieces of text.  Here is a "
"diagram:"
msgstr ""
"Como se explica en el cap@'{@dotless{i}}tulo previo\n"
"(@xref{Implementaci@'on de listas}), el ordenador no guarda dos copias\n"
"diferentes del texto siendo apuntado por ambos el @code{kill-ring} (el\n"
"@emph{anillo de la muerte}) y el @code{kill-ring-yank-pointer} (el\n"
"@emph{puntero de pegar el anillo de la muerte}). Las\n"
"palabras ``una pieza diferente de texto'' y ``todav@'{@dotless{i}}a\n"
"m@'as texto'' no est@'an duplicadas. En vez de eso, las dos variables\n"
"Lisp apuntan a las mismas piezas de texto. Aqu@'{@dotless{i}} hay un\n"
"diagrama:"

#. type: group
#: emacs-lisp-intro.texi:10155
#, no-wrap
msgid ""
"kill-ring     kill-ring-yank-pointer\n"
"    |               |\n"
"    |      ___ ___  |     ___ ___      ___ ___\n"
"     ---> |   |   |  --> |   |   |    |   |   |\n"
"          |___|___|----> |___|___|--> |___|___|--> nil\n"
"            |              |            |\n"
"            |              |            |\n"
"            |              |             --> \"yet more text\"\n"
"            |              |\n"
"            |               --> \"a different piece of text\"\n"
"            |\n"
"             --> \"some text\"\n"
msgstr ""
"kill-ring     kill-ring-yank-pointer\n"
"    |               |\n"
"    |      ___ ___  |     ___ ___      ___ ___\n"
"     ---> |   |   |  --> |   |   |    |   |   |\n"
"          |___|___|----> |___|___|--> |___|___|--> nil\n"
"            |              |            |\n"
"            |              |            |\n"
"            |              |             --> \"todav@'{@dotless{i}}a m@'as texto\"\n"
"            |              |\n"
"            |               --> \"una pieza diferente de texto\"\n"
"            |\n"
"             --> \"algo de texto\"\n"

#. type: center
#: emacs-lisp-intro.texi:10162
#, no-wrap
msgid "@image{cons-5}"
msgstr "@image{cons-5}"

#. type: tex
#: emacs-lisp-intro.texi:10167
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-5.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/cons-5.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: group
#: emacs-lisp-intro.texi:10186
#, no-wrap
msgid ""
"kill-ring     kill-ring-yank-pointer\n"
"    |               |\n"
"    |      ___ ___  |     ___ ___      ___ ___\n"
"     ---> |   |   |  --> |   |   |    |   |   |\n"
"          |___|___|----> |___|___|--> |___|___|--> nil\n"
"            |              |            |\n"
"            |              |            |\n"
"            |              |             --> \"yet more text\"\n"
"            |              |\n"
"            |               --> \"a different piece of text\n"
"            |\n"
"             --> \"some text\"\n"
msgstr ""
"kill-ring     kill-ring-yank-pointer\n"
"    |               |\n"
"    |      ___ ___  |     ___ ___      ___ ___\n"
"     ---> |   |   |  --> |   |   |    |   |   |\n"
"          |___|___|----> |___|___|--> |___|___|--> nil\n"
"            |              |            |\n"
"            |              |            |\n"
"            |              |             --> \"todav@'{@dotless{i}}a m@'as texto\"\n"
"            |              |\n"
"            |               --> \"una pieza diferente de texto\"\n"
"            |\n"
"             --> \"algo de texto\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10198
msgid ""
"Both the variable @code{kill-ring} and the variable @code{kill-ring-yank-"
"pointer} are pointers.  But the kill ring itself is usually described as if "
"it were actually what it is composed of.  The @code{kill-ring} is spoken of "
"as if it were the list rather than that it points to the list.  Conversely, "
"the @code{kill-ring-yank-pointer} is spoken of as pointing to a list."
msgstr ""
"Tanto la variable @code{kill-ring} y la variable\n"
"@code{kill-ring-yank-pointer} son punteros. Pero el kill ring\n"
"@emph{anillo de la muerte} en s@'{@dotless{i}} es normalmente descrito\n"
"como si fuera actualmente de lo que est@'a compuesto. El\n"
"@code{kill-ring} se refiere a lo que es la lista en vez de lo que\n"
"apunta a la lista. Conversando, el @code{kill-ring-yank-pointer} se\n"
"refiere a como se apunta a una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:10206
msgid ""
"These two ways of talking about the same thing sound confusing at first but "
"make sense on reflection.  The kill ring is generally thought of as the "
"complete structure of data that holds the information of what has recently "
"been cut out of the Emacs buffers.  The @code{kill-ring-yank-pointer} on the "
"other hand, serves to indicate---that is, to `point to'---that part of the "
"kill ring of which the first element (the @sc{car}) will be inserted."
msgstr ""
"Estas dos maneras hablar acerca de la misma cosa suena confuso al\n"
"principio pero tiene sentido para reflexionar. El kill ring\n"
"@emph{anillo de la muerte} es generalmente pensado como la estructura\n"
"completa de datos que manejan la informaci@'on de lo que se ha \n"
"cortado reci@'entemente de los b@'uffers de Emacs. El\n"
"@code{kill-ring-yank-pointer} en la otra mano, sirve para indicar ---\n"
"que es, para `apuntar a' --- esta parte del anillo de la muerte del\n"
"que el primer elemento (el @sc{car}) ser@'a insertado."

#. type: section
#: emacs-lisp-intro.texi:10249
#, no-wrap
msgid "Exercises with @code{yank} and @code{nthcdr}"
msgstr "Ejercicios con @code{yank} y @code{nthcdr}"

#. type: itemize
#: emacs-lisp-intro.texi:10259
msgid ""
"Using @kbd{C-h v} (@code{describe-variable}), look at the value of your kill "
"ring.  Add several items to your kill ring; look at its value again.  Using "
"@kbd{M-y} (@code{yank-pop)}, move all the way around the kill ring.  How "
"many items were in your kill ring? Find the value of @code{kill-ring-max}.  "
"Was your kill ring full, or could you have kept more blocks of text within "
"it?"
msgstr ""
"Usando @kbd{C-h v} (@code{describe-variable}), mira en el valor de tu\n"
"kill ring @emph{anillo de la muerte}. A@~nade varios\n"
"@'{@dotless{i}}tems a tu anillo de la muerte @emph{kill ring}; mira en\n"
"su valor de nuevo. Usando @kbd{M-y} (@code{yank-pop}, mueve todo el\n"
"camino alrededor del kill ring @emph{anillo de la\n"
"muerte}. @questiondown{}Cu@'antos @'{@dotless{i}}tems estaban en tu\n"
"kill ring @emph{anillo de la muerte}? Encuentra el valor de\n"
"@code{kill-ring-max}. @questiondown{}Estaba tu anillo de la muerte\n"
"@emph{kill ring} completo, o podr@'{@dotless{i}}as haber guardado\n"
"m@'as bloques de texto dentro?"

#. type: itemize
#: emacs-lisp-intro.texi:10263
msgid ""
"Using @code{nthcdr} and @code{car}, construct a series of expressions to "
"return the first, second, third, and fourth elements of a list."
msgstr ""
"Usando @code{nthcrd} y @code{car}, construye una serie de expresiones\n"
"para devolver, el primer, segundo, tercer y cuarto elemento de una lista."

#. type: cindex
#: emacs-lisp-intro.texi:10267
#, no-wrap
msgid "Loops and recursion"
msgstr "Bucles y recursi@'on"

#. type: cindex
#: emacs-lisp-intro.texi:10268
#, no-wrap
msgid "Recursion and loops"
msgstr "Recursi@'on y bucles"

#. type: cindex
#: emacs-lisp-intro.texi:10269
#, no-wrap
msgid "Repetition (loops)"
msgstr "Repetici@'on (bucles)"

#. type: Plain text
#: emacs-lisp-intro.texi:10274
msgid ""
"Emacs Lisp has two primary ways to cause an expression, or a series of "
"expressions, to be evaluated repeatedly: one uses a @code{while} loop, and "
"the other uses @dfn{recursion}."
msgstr ""
"Emacs Lisp tiene dos caminos primarios para causar una expresi@'on, o\n"
"una serie de expresiones, para ser evaluado repetidamente: uno usa un\n"
"bucle @code{while}, y el otro usa @dfn{recursi@'on}."

#. type: Plain text
#: emacs-lisp-intro.texi:10281
msgid ""
"Repetition can be very valuable.  For example, to move forward four "
"sentences, you need only write a program that will move forward one sentence "
"and then repeat the process four times.  Since a computer does not get bored "
"or tired, such repetitive action does not have the deleterious effects that "
"excessive or the wrong kinds of repetition can have on humans."
msgstr ""
"La repetici@'on puede ser valorable. Por ejemplo, para mover hacia\n"
"delante cuatro frases, tu solo necesitas escribir un programa que\n"
"mover@'a hacia delante una frase y entonces repite el proceso cuatro\n"
"veces. Ya que un ordenador no est@'a aburrido o cansado, tal acci@'on\n"
"repetitiva no tiene los efectos de borrado por equivocaci@'on o exceso\n"
"que pueden tener los humanos."

#. type: Plain text
#: emacs-lisp-intro.texi:10293
msgid ""
"People mostly write Emacs Lisp functions using @code{while} loops and their "
"kin; but you can use recursion, which provides a very powerful way to think "
"about and then to solve problems@footnote{You can write recursive functions "
"to be frugal or wasteful of mental or computer resources; as it happens, "
"methods that people find easy---that are frugal of `mental resources'---"
"sometimes use considerable computer resources.  Emacs was designed to run on "
"machines that we now consider limited and its default settings are "
"conservative.  You may want to increase the values of @code{max-specpdl-"
"size} and @code{max-lisp-eval-depth}.  In my @file{.emacs} file, I set them "
"to 15 and 30 times their default value.}."
msgstr ""
"La gente mayoritariamente escribe funciones de Emacs Lisp usando\n"
"bucles @code{while}; pero se puede usar recursi@'on, que provee un\n"
"poderoso camino mental para resolver problemas@footnote{Se pueden\n"
"escribir funciones recursivas para ser frugal o basura mental o\n"
"recursos de ordenador; como eso ocurre, los m@'etodos que la gente\n"
"encuentra f@'aciles --- son frugales de `recursos mentales' ---\n"
"algunas veces usan recursos de ordenador considerables. Emacs fu@'e\n"
"dise@~nado para ejecutarse en m@'aquinas que ahora se consideran\n"
"limitadas y sus configuraciones por defecto son conservadoras. Se puede\n"
"querer incrementar los valores de @code{max-specdl-size} y\n"
"@code{max-lisp-eval-depth}. En mi fichero @file{.emacs}, yo los asigno\n"
"a 15 o 30 veces su valor por defecto.}."

#. type: cindex
#: emacs-lisp-intro.texi:10303
#, no-wrap
msgid "Loops"
msgstr "Bucles"

#. type: Plain text
#: emacs-lisp-intro.texi:10310
msgid ""
"The @code{while} special form tests whether the value returned by evaluating "
"its first argument is true or false.  This is similar to what the Lisp "
"interpreter does with an @code{if}; what the interpreter does next, however, "
"is different."
msgstr ""
"La forma especial @code{while} chequea si el valor devuelto para\n"
"evaluar el primer argumento es verdadero o falso. Esto es parecido a\n"
"lo que el int@'erprete Lisp hace con un @code{if}; el int@'erprete\n"
"hace lo siguiente, sin embargo, es diferente."

#. type: Plain text
#: emacs-lisp-intro.texi:10319
msgid ""
"In a @code{while} expression, if the value returned by evaluating the first "
"argument is false, the Lisp interpreter skips the rest of the expression "
"(the @dfn{body} of the expression) and does not evaluate it.  However, if "
"the value is true, the Lisp interpreter evaluates the body of the expression "
"and then again tests whether the first argument to @code{while} is true or "
"false.  If the value returned by evaluating the first argument is again "
"true, the Lisp interpreter again evaluates the body of the expression."
msgstr ""
"En una expresi@'on @code{while}, si el valor devuelto por evaluar el\n"
"primer argumento es falso, el int@'erprete Lisp descarta el resto de la\n"
"expresi@'on (el @dfn{cuerpo} de la expresi@'on) y no la eval@'ua. Sin\n"
"embargo, si el valor es cierto, el int@'erprete Lisp eval@'ua el\n"
"cuerpo de la expresi@'on y entonces de nuevo chequea si el primer\n"
"argumento para @code{while} es cierto o falso. Si el valor devuelto de\n"
"evaluar el primer argumento es cierto de nuevo, el int@'erprete Lisp\n"
"eval@'ua el cuerpo de la expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:10322
msgid "The template for a @code{while} expression looks like this:"
msgstr ""
"La plantilla para una expresi@'on @code{while} se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:10327
#, no-wrap
msgid ""
"(while @var{true-or-false-test}\n"
"  @var{body}@dots{})\n"
msgstr ""
"(while @var{test-verdadero-o-falso}\n"
"  @var{cuerpo}@dots{})\n"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:10341
#, no-wrap
msgid "Looping with @code{while}"
msgstr "Bucles con @code{while}"

#. type: Plain text
#: emacs-lisp-intro.texi:10351
msgid ""
"So long as the true-or-false-test of the @code{while} expression returns a "
"true value when it is evaluated, the body is repeatedly evaluated.  This "
"process is called a loop since the Lisp interpreter repeats the same thing "
"again and again, like an airplane doing a loop.  When the result of "
"evaluating the true-or-false-test is false, the Lisp interpreter does not "
"evaluate the rest of the @code{while} expression and `exits the loop'."
msgstr ""
"En el momento en el que el true-or-false-test de la expresi@'on\n"
"@code{while} devuelve un valor cierto cuando eso se eval@'ua, el\n"
"cuerpo es repetidamente evaluado. Este proceso se llama bucle puesto\n"
"que el int@'erprete Lisp repite la misma cosa una y otra vez, como un\n"
"avi@'on haciendo un loop. Cuando el resultado de evaluar el\n"
"true-or-false-test es falso, el int@'erprete Lisp no eval@'ua el resto\n"
"de la expresi@'on @code{while} y `existe el bucle'."

#. type: Plain text
#: emacs-lisp-intro.texi:10360
msgid ""
"Clearly, if the value returned by evaluating the first argument to "
"@code{while} is always true, the body following will be evaluated again and "
"again @dots{} and again @dots{} forever.  Conversely, if the value returned "
"is never true, the expressions in the body will never be evaluated.  The "
"craft of writing a @code{while} loop consists of choosing a mechanism such "
"that the true-or-false-test returns true just the number of times that you "
"want the subsequent expressions to be evaluated, and then have the test "
"return false."
msgstr ""
"Claramente, si el valor devuelto evaluando el primer argumento para\n"
"@code{while} es siempre cierto, el cuerpo siguiente ser@'a evaluado\n"
"una y otra vez @dots{} y @dots{} para\n"
"siempre. Rec@'{@dotless{i}}procamente, si el valor devuelto nunca es\n"
"cierto, las expresiones en el cuerpo nunca ser@'an evaluadas. La\n"
"fortaleza de escribir un bucle @code{while} consiste de elegir un\n"
"mecanismo tal que el true-or-false-test devuelva cierto solo el\n"
"n@'umero de veces que requieren las subsiguientes expresiones para\n"
"ser evaluadas, y entonces tener el test devuelto a falso."

#. type: Plain text
#: emacs-lisp-intro.texi:10372
msgid ""
"The value returned by evaluating a @code{while} is the value of the true-or-"
"false-test.  An interesting consequence of this is that a @code{while} loop "
"that evaluates without error will return @code{nil} or false regardless of "
"whether it has looped 1 or 100 times or none at all.  A @code{while} "
"expression that evaluates successfully never returns a true value! What this "
"means is that @code{while} is always evaluated for its side effects, which "
"is to say, the consequences of evaluating the expressions within the body of "
"the @code{while} loop.  This makes sense.  It is not the mere act of looping "
"that is desired, but the consequences of what happens when the expressions "
"in the loop are repeatedly evaluated."
msgstr ""
"El valor devuelto evaluando @code{while} es el valor del\n"
"true-or-false-test. Una consecuencia interesante de esto es que un\n"
"bucle @code{while} que eval@'ua sin errores devolver@'a @code{nil} o\n"
"falso sin dignidad de si eso ha girado 1 o 100 veces o\n"
"ninguna. @exclamdown{}Una expresi@'on @code{while} que se eval@'ua de\n"
"manera exitosa nunca devuelve un valor cierto! Lo que esto significa\n"
"es que @code{while} es siempre evaluado por sus efectos laterales, que\n"
"es decir, las consecuencias de evaluar las expresiones con el cuerpo\n"
"del bucle @code{while}. Esto tiene sentido. Eso no es el mero acto del\n"
"bucle que es deseado, pero las consecuencias de lo que ocurre cuando\n"
"las expresiones en el bucle son repetidamente evaluadas."

#. type: subsection
#: emacs-lisp-intro.texi:10374
#, no-wrap
msgid "A @code{while} Loop and a List"
msgstr "Un bucle @code{while} y una lista"

#. type: Plain text
#: emacs-lisp-intro.texi:10380
msgid ""
"A common way to control a @code{while} loop is to test whether a list has "
"any elements.  If it does, the loop is repeated; but if it does not, the "
"repetition is ended.  Since this is an important technique, we will create a "
"short example to illustrate it."
msgstr ""
"Un camino com@'un para controlar un bucle @code{while} es chequear si\n"
"una lista tiene cualquier elemento. Si eso se hace, el bucle se\n"
"repite; pero si no, la repetici@'on se finaliza. Puesto que esto es\n"
"una t@'ecnica importante, se crear@'a un breve ejemplo para\n"
"ilustrarlo."

#. type: Plain text
#: emacs-lisp-intro.texi:10388
msgid ""
"A simple way to test whether a list has elements is to evaluate the list: if "
"it has no elements, it is an empty list and will return the empty list, "
"@code{()}, which is a synonym for @code{nil} or false.  On the other hand, a "
"list with elements will return those elements when it is evaluated.  Since "
"Emacs Lisp considers as true any value that is not @code{nil}, a list that "
"returns elements will test true in a @code{while} loop."
msgstr ""
"Un camino simple para chequear si una lista tiene elementos es evaluar\n"
"la lista: si eso no tiene elementos, si es una lista\n"
"vac@'{@dotless{i}}a y devuelve la lista vac@'{@dotless{i}}a,\n"
"@code{()}, que es un sin@'onimo para @code{nil} o falso. Por otro\n"
"lado, una lista con elementos devolver@'a estos elementos cuando eso\n"
"se eval@'ua. Puesto que Emacs Lisp considera como cierto cualquier\n"
"valor que no es @code{nil}, una lista que devuelve elementos\n"
"chequear@'a cierto en un bucle @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:10392
msgid ""
"For example, you can set the variable @code{empty-list} to @code{nil} by "
"evaluating the following @code{setq} expression:"
msgstr ""
"Por ejemplo, se puede asignar la variable @code{empty-list} a\n"
"@code{nil} para evaluar la siguiente expresi@'on @code{setq}:"

#. type: smallexample
#: emacs-lisp-intro.texi:10395
#, no-wrap
msgid "(setq empty-list ())\n"
msgstr "(setq lista-vacia ())\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10402
msgid ""
"After evaluating the @code{setq} expression, you can evaluate the variable "
"@code{empty-list} in the usual way, by placing the cursor after the symbol "
"and typing @kbd{C-x C-e}; @code{nil} will appear in your echo area:"
msgstr ""
"Despu@'es de evaluar la expresi@'on @code{setq}, se puede evaluar la\n"
"variable @code{lista-vacia} es el camino normal, posicionando el cursor\n"
"despu@'es del s@'{@dotless{i}}mbolo y escribiendo @kbd{C-x C-e};\n"
"@code{nil} aparecer@'a en tu @'area echo:"

#. type: smallexample
#: emacs-lisp-intro.texi:10405
#, no-wrap
msgid "empty-list\n"
msgstr "lista-vacia\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10410
msgid ""
"On the other hand, if you set a variable to be a list with elements, the "
"list will appear when you evaluate the variable, as you can see by "
"evaluating the following two expressions:"
msgstr ""
"Por otro lado, si se asigna una variable para ser una lista con\n"
"elementos, la lista aparecer@'a cuando se eval@'ue la variable, como\n"
"se puede ver evaluando las siguientes dos expresiones:"

#. type: group
#: emacs-lisp-intro.texi:10414 emacs-lisp-intro.texi:10521
#: emacs-lisp-intro.texi:11105 emacs-lisp-intro.texi:11117
#: emacs-lisp-intro.texi:11137 emacs-lisp-intro.texi:11396
#, no-wrap
msgid ""
"(setq animals '(gazelle giraffe lion tiger))\n"
"\n"
msgstr ""
"(setq animales '(gacela jirafa leon tigre))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10416
#, no-wrap
msgid "animals\n"
msgstr "animales\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10422
msgid ""
"Thus, to create a @code{while} loop that tests whether there are any items "
"in the list @code{animals}, the first part of the loop will be written like "
"this:"
msgstr ""
"De este modo, para un bucle @code{while} que chequea si hay cualquier\n"
"@'{@dotless{i}}tem en la lista @code{animales}, la primera parte del\n"
"bucle ser@'a escrito as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:10427
#, no-wrap
msgid ""
"(while animals\n"
"       @dots{}\n"
msgstr ""
"(while animales\n"
"       @dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10436
msgid ""
"When the @code{while} tests its first argument, the variable @code{animals} "
"is evaluated.  It returns a list.  So long as the list has elements, the "
"@code{while} considers the results of the test to be true; but when the list "
"is empty, it considers the results of the test to be false."
msgstr ""
"Cuando el @code{while} chequea su primer argumento, la variable\n"
"@code{animales} se eval@'ua. Eso devuelve una lista. Mientras la\n"
"lista tiene elementos, el @code{while} considera los resultados del\n"
"test para ser verdadero; pero cuando la lista es vac@'{@dotless{i}}a,\n"
"eso considera los resultados del test para ser falso."

#. type: Plain text
#: emacs-lisp-intro.texi:10445
msgid ""
"To prevent the @code{while} loop from running forever, some mechanism needs "
"to be provided to empty the list eventually.  An oft-used technique is to "
"have one of the subsequent forms in the @code{while} expression set the "
"value of the list to be the @sc{cdr} of the list.  Each time the @code{cdr} "
"function is evaluated, the list will be made shorter, until eventually only "
"the empty list will be left.  At this point, the test of the @code{while} "
"loop will return false, and the arguments to the @code{while} will no longer "
"be evaluated."
msgstr ""
"Para prevenir que el bucle @code{while} se ejecute siempre, se\n"
"necesita proporcionar alg@'un mecanismo. Una t@'ecnica usada con\n"
"frecuencia es tener una de las subsiguientes formas en la expresi@'on\n"
"@code{while} que asigna el valor de la lista para ser el @sc{cdr} de\n"
"la lista. Cada vez que la funci@'on @code{cdr} se eval@'ua, se va\n"
"reduciendo, hasta que finalmente solo queda la lista\n"
"vac@'{@dotless{i}}a. En este punto, el test del bucle @code{while}\n"
"devolver@'a falso, y los argumentos para el @code{while} no se\n"
"evaluar@'an."

#. type: Plain text
#: emacs-lisp-intro.texi:10449
msgid ""
"For example, the list of animals bound to the variable @code{animals} can be "
"set to be the @sc{cdr} of the original list with the following expression:"
msgstr ""
"Por ejemplo, la lista de animales asociada a la variable\n"
"@code{animals} se puede asignar a ser el @sc{cdr} de la lista original\n"
"con la siguiente expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:10452
#, no-wrap
msgid "(setq animals (cdr animals))\n"
msgstr "(setq animals (cdr animals))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10460
msgid ""
"If you have evaluated the previous expressions and then evaluate this "
"expression, you will see @code{(giraffe lion tiger)} appear in the echo "
"area.  If you evaluate the expression again, @code{(lion tiger)} will appear "
"in the echo area.  If you evaluate it again and yet again, @code{(tiger)} "
"appears and then the empty list, shown by @code{nil}."
msgstr ""
"Si se han evaluado las expresiones previas y entonces se eval@'ua esta\n"
"expresi@'on, se ver@'a @code{(jirafa leon tigre)} que aparecer@'a en\n"
"el @'area echo. Si se eval@'ua la expresi@'n de nuevo, @code{(leon\n"
"tigre)} aparecer@'a en el @'area echo. Si se eval@'ua de nuevo,\n"
"@code{(tigre)} y todav@'{@dotless{i}}a de nuevo aparecer@'a la lista\n"
"vac@'{@dotless{i}}a y se mostrar@'a como @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:10464
msgid ""
"A template for a @code{while} loop that uses the @code{cdr} function "
"repeatedly to cause the true-or-false-test eventually to test false looks "
"like this:"
msgstr ""
"Una plantilla para un bucle @code{while} usa la funci@'on @code{cdr}\n"
"repetidamente para causar el true-or-false-test finalmente para\n"
"chequear la veracidad y se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:10470 emacs-lisp-intro.texi:15283
#, no-wrap
msgid ""
"(while @var{test-whether-list-is-empty}\n"
"  @var{body}@dots{}\n"
"  @var{set-list-to-cdr-of-list})\n"
msgstr ""
"(while @var{test-whether-list-is-empty}\n"
"  @var{body}@dots{}\n"
"  @var{set-list-to-cdr-of-list})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10476
msgid ""
"This test and use of @code{cdr} can be put together in a function that goes "
"through a list and prints each element of the list on a line of its own."
msgstr ""
"Este chequeo y uso de @code{cdr} puede ser puesto junto a una\n"
"funci@'on que va a trav@'es de una lista e imprime cada elemento de la\n"
"lista en una l@'{@dotless{i}}nea de s@'{@dotless{i}} misma."

#. type: subsection
#: emacs-lisp-intro.texi:10478
#, no-wrap
msgid "An Example: @code{print-elements-of-list}"
msgstr "Un ejemplo: @code{imprimir-elementos-de-la-lista}"

#. type: Plain text
#: emacs-lisp-intro.texi:10483
msgid ""
"The @code{print-elements-of-list} function illustrates a @code{while} loop "
"with a list."
msgstr ""
"La funci@'on @code{imprimir-elementos-de-la-lista} ilustra un bucle\n"
"@code{while} con una lista."

#. type: cindex
#: emacs-lisp-intro.texi:10484
#, no-wrap
msgid "@file{*scratch*} buffer"
msgstr "@file{*scratch*} buffer"

#. type: Plain text
#: emacs-lisp-intro.texi:10489
msgid ""
"The function requires several lines for its output.  If you are reading this "
"in a recent instance of GNU Emacs, you can evaluate the following expression "
"inside of Info, as usual."
msgstr ""
"La funci@'on requiere varias l@'{@dotless{i}}neas por su salida. Si\n"
"est@'as leyendo esto en una instancia reciente de GNU Emacs, se puede\n"
"evaluar la siguiente expresi@'on dentro de Info, de normal."

#. type: Plain text
#: emacs-lisp-intro.texi:10494
msgid ""
"If you are using an earlier version of Emacs, you need to copy the necessary "
"expressions to your @file{*scratch*} buffer and evaluate them there.  This "
"is because the echo area had only one line in the earlier versions."
msgstr ""
"Si se est@'a usando una versi@'on antigua de Emacs, es necesario\n"
"copiar las expresiones necesarias para el b@'uffer @file{*scratch*} y\n"
"evaluarlas all@'{@dotless{i}}. Esto es porque el @'area echo\n"
"ten@'{@dotless{i}}a solo una l@'{@dotless{i}}nea en las versiones\n"
"antiguas."

#. type: Plain text
#: emacs-lisp-intro.texi:10502
msgid ""
"You can copy the expressions by marking the beginning of the region with "
"@kbd{C-@key{SPC}} (@code{set-mark-command}), moving the cursor to the end of "
"the region and then copying the region using @kbd{M-w} (@code{kill-ring-"
"save}, which calls @code{copy-region-as-kill} and then provides visual "
"feedback).  In the @file{*scratch*} buffer, you can yank the expressions "
"back by typing @kbd{C-y} (@code{yank})."
msgstr ""
"Se pueden copiar las expresiones marcando el principio de la regi@'on\n"
"con @kbd{C-@key{SPC}} (@code{set-mark-command}), moviendo el cursor al\n"
"fin de la regi@'on y entonces copiando la regi@'on usando @kbd{M-w}\n"
"(@code{kill-ring-save}, que llama a @code{copy-region-as-kill} y\n"
"entonces provee realimentaci@'on visual). En el b@'uffer\n"
"@file{*scratch*}, se pueden copiar las expresiones escribiendo\n"
"@kbd{C-y} (@code{yank})."

#. type: Plain text
#: emacs-lisp-intro.texi:10512
msgid ""
"After you have copied the expressions to the @file{*scratch*} buffer, "
"evaluate each expression in turn.  Be sure to evaluate the last expression, "
"@code{(print-elements-of-list animals)}, by typing @kbd{C-u C-x C-e}, that "
"is, by giving an argument to @code{eval-last-sexp}.  This will cause the "
"result of the evaluation to be printed in the @file{*scratch*} buffer "
"instead of being printed in the echo area.  (Otherwise you will see "
"something like this in your echo area: "
"@code{^Jgazelle^J^Jgiraffe^J^Jlion^J^Jtiger^Jnil}, in which each @samp{^J} "
"stands for a `newline'.)"
msgstr ""
"Despu@'es de haber copiado las expresiones al b@'uffer\n"
"@file{*scratch*}, se eval@'ua cada expresi@'on en orden. Aseg@'urese\n"
"de evaluar la @'ultima expresi@'on, @code{(imprimir-elementos-de-la-lista\n"
"animales)}, escribiendo @kbd{C-u C-x C-e}, que es, dando un argumento\n"
"para @code{eval-last-sexp}. Esto causar@'a el resultado de la\n"
"evaluaci@'on para ser impreso en el b@'uffer @file{*scratch*} en vez\n"
"de siendo impreso en el @'area echo. (De otro modo se ver@'a alguna\n"
"cosa como esto en tu @'area echo:\n"
"@code{^Jgacela^J^Jjirafa^J^Jleon^J^Jtigre^Jnulo}, en cada @samp{^J} se\n"
"estructura una `nueva l@'{@dotless{i}}nea'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:10517
msgid ""
"In a recent instance of GNU Emacs, you can evaluate these expressions "
"directly in the Info buffer, and the echo area will grow to show the results."
msgstr ""
"En una instancia de GNU Emacs reciente, se pueden evaluar estas\n"
"expresiones directamente en el b@'uffer Info, y el @'area echo crecer@'a\n"
"para mostrar los resultados."

#. type: group
#: emacs-lisp-intro.texi:10527
#, no-wrap
msgid ""
"(defun print-elements-of-list (list)\n"
"  \"Print each element of LIST on a line of its own.\"\n"
"  (while list\n"
"    (print (car list))\n"
"    (setq list (cdr list))))\n"
"\n"
msgstr ""
"(defun imprimir-elementos-de-la-lista (list)\n"
"  \"Imprime cada elemento de LIST en una l@'{@dotless{i}}nea.\"\n"
"  (while list\n"
"    (print (car list))\n"
"    (setq list (cdr list))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10529
#, no-wrap
msgid "(print-elements-of-list animals)\n"
msgstr "(imprimir-elementos-de-la-lista animales)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10536
msgid "When you evaluate the three expressions in sequence, you will see this:"
msgstr "Cuando se eval@'uan las tres expresiones en secuencia, se ver@'a esto:"

#. type: group
#: emacs-lisp-intro.texi:10540 emacs-lisp-intro.texi:11454
#, no-wrap
msgid ""
"gazelle\n"
"\n"
msgstr ""
"gacela\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10542 emacs-lisp-intro.texi:11456
#, no-wrap
msgid ""
"giraffe\n"
"\n"
msgstr ""
"jirafa\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10544 emacs-lisp-intro.texi:11458
#, no-wrap
msgid ""
"lion\n"
"\n"
msgstr ""
"leon\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10547 emacs-lisp-intro.texi:11461
#, no-wrap
msgid ""
"tiger\n"
"nil\n"
msgstr ""
"tigre\n"
"nil\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10555
msgid ""
"Each element of the list is printed on a line of its own (that is what the "
"function @code{print} does) and then the value returned by the function is "
"printed.  Since the last expression in the function is the @code{while} "
"loop, and since @code{while} loops always return @code{nil}, a @code{nil} is "
"printed after the last element of the list."
msgstr ""
"Cada elemento de la lista se imprime en una l@'{@dotless{i}}nea en\n"
"s@'{@dotless{i}} (que es lo que la funci@'on @code{print} hace) y\n"
"entonces el valor devuelto por la funci@'on se imprime. Desde que la\n"
"@'ultima expresi@'on en la funci@'on es el bucle @code{while}, y\n"
"desde que el bucle @code{while} siempre devuelve @code{nil}, un\n"
"@code{nil} se imprime despu@'es del @'ultimo elemento de la lista."

#. type: subsection
#: emacs-lisp-intro.texi:10557
#, no-wrap
msgid "A Loop with an Incrementing Counter"
msgstr "Un bucle con un contaje incremental"

#. type: Plain text
#: emacs-lisp-intro.texi:10565
msgid ""
"A loop is not useful unless it stops when it ought.  Besides controlling a "
"loop with a list, a common way of stopping a loop is to write the first "
"argument as a test that returns false when the correct number of repetitions "
"are complete.  This means that the loop must have a counter---an expression "
"that counts how many times the loop repeats itself."
msgstr ""
"Un bucle no es @'util a menos que pare cuando debe. Bajo el control de\n"
"un bucle con una lista, un camino com@'un de parar un bucle es\n"
"escribir el primer argumento como un test que devuelve falso cuando el\n"
"n@'umero correcto de repeticiones es completo. Esto significa que el\n"
"bucle debe tener un contador --- una expresi@'on que cuenta cu@'antas\n"
"veces el bucle se repite a s@'{@dotless{i}} mismo."

#. type: node
#: emacs-lisp-intro.texi:10567
#, no-wrap
msgid "Incrementing Loop Details"
msgstr "Incrementando los detalles de los bucles"

#. type: Plain text
#: emacs-lisp-intro.texi:10581
msgid ""
"The test for a loop with an incrementing counter can be an expression such "
"as @code{(< count desired-number)} which returns @code{t} for true if the "
"value of @code{count} is less than the @code{desired-number} of repetitions "
"and @code{nil} for false if the value of @code{count} is equal to or is "
"greater than the @code{desired-number}.  The expression that increments the "
"count can be a simple @code{setq} such as @code{(setq count (1+ count))}, "
"where @code{1+} is a built-in function in Emacs Lisp that adds 1 to its "
"argument.  (The expression @w{@code{(1+ count)}} has the same result as "
"@w{@code{(+ count 1)}}, but is easier for a human to read.)"
msgstr ""
"El test para un bucle con un contador de incremento puede ser una\n"
"expresi@'on tal como @code{(< contador numero-deseado)} que devuelve\n"
"@code{t} para verdad si el valor de @code{contador} es menor que el\n"
"@code{numero-deseado} de repeticiones y @code{nil} para falso si el\n"
"valor de @code{contador} es igual a o es mayor que el\n"
"@code{numero-deseado}. La expresi@'on que incrementa el contador puede\n"
"ser un simple @code{setq} tal como @code{(setq contador (1+ contador))},\n"
"donde @code{1+} es una funci@'on construida en Emacs Lisp que a@~nade\n"
"1 a su argumento. (La expresi@'on @w{@code{(1+ contador)}} tiene el mismo\n"
"resultado que @w{@code{(+ contador 1)}}, que es f@'acil de leer para un\n"
"humano.)"

#. type: Plain text
#: emacs-lisp-intro.texi:10585
msgid ""
"The template for a @code{while} loop controlled by an incrementing counter "
"looks like this:"
msgstr ""
"La plantilla para un bucle @code{while} controlado por un contador\n"
"que se incrementa se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:10592
#, no-wrap
msgid ""
"@var{set-count-to-initial-value}\n"
"(while (< count desired-number)         ; @r{true-or-false-test}\n"
"  @var{body}@dots{}\n"
"  (setq count (1+ count)))              ; @r{incrementer}\n"
msgstr ""
"@var{asignar-contador-al-valor-inicial}\n"
"(while (< contador numero-deseado)         ; @r{true-or-false-test}\n"
"  @var{body}@dots{}\n"
"  (setq contador (1+ contador)))              ; @r{incremento}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10598
msgid ""
"Note that you need to set the initial value of @code{count}; usually it is "
"set to 1."
msgstr ""
"Note que se necesita asignar el valor inicial de @code{contador};\n"
"normalmente asignado a 1."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:10606
#, no-wrap
msgid "Example with incrementing counter"
msgstr "Ejemplo con contador incremental"

#. type: Plain text
#: emacs-lisp-intro.texi:10611
msgid ""
"Suppose you are playing on the beach and decide to make a triangle of "
"pebbles, putting one pebble in the first row, two in the second row, three "
"in the third row and so on, like this:"
msgstr ""
"Sup@'on que est@'as jugando en la playa y decides crear un tri@'angulo\n"
"de asteriscos, poniendo un asterisco en la primera fila, dos en la\n"
"segunda fila, tres en la tercera fila y as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:10621
#, no-wrap
msgid ""
"               *\n"
"              * *\n"
"             * * *\n"
"            * * * *\n"
msgstr ""
"               *\n"
"              * *\n"
"             * * *\n"
"            * * * *\n"

#. type: group
#: emacs-lisp-intro.texi:10631
#, no-wrap
msgid ""
"               @bullet{}\n"
"              @bullet{} @bullet{}\n"
"             @bullet{} @bullet{} @bullet{}\n"
"            @bullet{} @bullet{} @bullet{} @bullet{}\n"
msgstr ""
"               @bullet{}\n"
"              @bullet{} @bullet{}\n"
"             @bullet{} @bullet{} @bullet{}\n"
"            @bullet{} @bullet{} @bullet{} @bullet{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10639
msgid ""
"(About 2500 years ago, Pythagoras and others developed the beginnings of "
"number theory by considering questions such as this.)"
msgstr ""
"(Hace 2500 a@~nos, Pit@'agoras y otras desarrollaron los principios de\n"
"la teor@'{@dotless{i}}a de n@'umeros considerando preguntas como esta.)"

#. type: Plain text
#: emacs-lisp-intro.texi:10642
msgid ""
"Suppose you want to know how many pebbles you will need to make a triangle "
"with 7 rows?"
msgstr ""
"Sup@'on que quieres saber cu@'antos asteriscos necesitar@'as crear para un\n"
"tri@'angulo con 7 filas"

#. type: Plain text
#: emacs-lisp-intro.texi:10650
msgid ""
"Clearly, what you need to do is add up the numbers from 1 to 7.  There are "
"two ways to do this; start with the smallest number, one, and add up the "
"list in sequence, 1, 2, 3, 4 and so on; or start with the largest number and "
"add the list going down: 7, 6, 5, 4 and so on.  Because both mechanisms "
"illustrate common ways of writing @code{while} loops, we will create two "
"examples, one counting up and the other counting down.  In this first "
"example, we will start with 1 and add 2, 3, 4 and so on."
msgstr ""
"Claramente, lo que necesitas hacer es a@~nadir los n@'umeros de 1 a\n"
"7. Hay dos caminos para hacer esto; se puede comenzar con los\n"
"n@'umeros m@'as peque@~nos, uno, y a@~nadir la lista en secuencia, 1,\n"
"2, 3, 4 y as@'{@dotless{i}}; o empieza con el n@'umero m@'as largo y\n"
"a@~nade la lista bajando: 7, 6, 5, 4 y as@'{@dotless{i}}. Porque ambos\n"
"mecanismos ilustran caminos comunes de escribir el bucle @code{while},\n"
"crearemos dos ejemplos, uno contando hacia arriba y el otro contando\n"
"hacia abajo. En este primer ejemplo, empezaremos con 1 y a@~nadimos 2,\n"
"3, 4 y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:10657
msgid ""
"If you are just adding up a short list of numbers, the easiest way to do it "
"is to add up all the numbers at once.  However, if you do not know ahead of "
"time how many numbers your list will have, or if you want to be prepared for "
"a very long list, then you need to design your addition so that what you do "
"is repeat a simple process many times instead of doing a more complex "
"process once."
msgstr ""
"Si se quiere sumar toda una lista de n@'umeros, el camino m@'as\n"
"f@'acil para hacer eso es sumar todos los n@'umeros a la vez. Sin\n"
"embargo, si no se sabe cu@'antos n@'umeros tendr@'a la lista, o si se\n"
"requiere estar preparado para una lista muy larga, entonces se\n"
"necesita dise@~nar la adici@'on, esto es, repetir un proceso simple\n"
"muchas veces en vez de hacer un proceso m@'as complejo."

#. type: Plain text
#: emacs-lisp-intro.texi:10663
msgid ""
"For example, instead of adding up all the pebbles all at once, what you can "
"do is add the number of pebbles in the first row, 1, to the number in the "
"second row, 2, and then add the total of those two rows to the third row, "
"3.  Then you can add the number in the fourth row, 4, to the total of the "
"first three rows; and so on."
msgstr ""
"Por ejemplo, en vez de a@~nadir todos los asteriscos a la vez, lo que\n"
"se puede hacer es a@~nadir el n@'umero de asteriscos en la primera\n"
"fila, 1, para el n@'umero en la segunda fila, 2, y entonces a@~nadir\n"
"el total de estas dos filas a la tercera fila, 3. Entonces se puede\n"
"a@~nadir el n@'umero en la cuarta fila, 4, al total de las primeras\n"
"tres filas; y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:10671
msgid ""
"The critical characteristic of the process is that each repetitive action is "
"simple.  In this case, at each step we add only two numbers, the number of "
"pebbles in the row and the total already found.  This process of adding two "
"numbers is repeated again and again until the last row has been added to the "
"total of all the preceding rows.  In a more complex loop the repetitive "
"action might not be so simple, but it will be simpler than doing everything "
"all at once."
msgstr ""
"La caracter@'{@dotless{i}}stica cr@'{@dotless{i}}tica del proceso es\n"
"que cada acci@'on repetitiva sea simple. En este caso, en cada paso\n"
"nosotros a@~nadimos solo dos n@'umeros, el n@'umero de asteriscos en\n"
"la fila y el total ya encontrado. Este proceso de a@~nadir dos\n"
"n@'umeros es repetido de nuevo y de nuevo hasta la @'ultima fila que\n"
"ha sido a@~nadida al total de todas las filas precedentes. En un\n"
"bucle m@'as complejo la acci@'on repetitiva podr@'{@dotless{i}}a no\n"
"ser tan simple, pero ser@'a tan simple como hacer todo a la vez."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:10673 emacs-lisp-intro.texi:10940
#, no-wrap
msgid "The parts of the function definition"
msgstr "Las partes de la definici@'on de funci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:10679
msgid ""
"The preceding analysis gives us the bones of our function definition: first, "
"we will need a variable that we can call @code{total} that will be the total "
"number of pebbles.  This will be the value returned by the function."
msgstr ""
"El an@'alisis precedente nos da los bonos de nuestra definici@'on de\n"
"funci@'on: primero, necesitaremos una variable que podemos llamar\n"
"@code{total} que ser@'a el n@'umero total de asteriscos. Esto ser@'a\n"
"el valor devuelto por la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:10683
msgid ""
"Second, we know that the function will require an argument: this argument "
"will be the total number of rows in the triangle.  It can be called "
"@code{number-of-rows}."
msgstr ""
"Segundo, sabemos que la funci@'on requerir@'a un argumento: este\n"
"argumento ser@'a el n@'umero de filas en el tri@'angulo. Eso puede\n"
"llamarse @code{number-of-rows}."

#. type: Plain text
#: emacs-lisp-intro.texi:10688
msgid ""
"Finally, we need a variable to use as a counter.  We could call this "
"variable @code{counter}, but a better name is @code{row-number}.  That is "
"because what the counter does in this function is count rows, and a program "
"should be written to be as understandable as possible."
msgstr ""
"Finalmente, se necesita una variable para usarse como contador. Se\n"
"podr@'{@dotless{i}}a llamar a esta variable @code{counter}, pero un\n"
"nombre mejor es @code{row-number}. Debido a que lo que el contador hace\n"
"en esta funci@'on es contar filas, y un programa deber@'{@dotless{i}}a\n"
"escribirse para ser comprendido en la medida de lo posible."

#. type: Plain text
#: emacs-lisp-intro.texi:10696
msgid ""
"When the Lisp interpreter first starts evaluating the expressions in the "
"function, the value of @code{total} should be set to zero, since we have not "
"added anything to it.  Then the function should add the number of pebbles in "
"the first row to the total, and then add the number of pebbles in the second "
"to the total, and then add the number of pebbles in the third row to the "
"total, and so on, until there are no more rows left to add."
msgstr ""
"Cuando el int@'erprete Lisp primero empieza evaluando las expresiones\n"
"de la funci@'on, el valor de @code{total} estar@'{@dotless{i}}a\n"
"asignado a cero, ya que no hemos a@~nadido cualquier cosa a\n"
"eso. Entonces la funci@'on a@~nadir@'{@dotless{i}}a el n@'umero de\n"
"asteriscos en la primera fila al total, y entonces a@~nade el n@'umero\n"
"de asteriscos en la segunda al total, y entonces a@~nade el n@'umero\n"
"de asteriscos a la tercera fila al total, y as@'{@dotless{i}}, hasta\n"
"que no hay m@'as filas a la izquierda para a@~nadir."

#. type: Plain text
#: emacs-lisp-intro.texi:10703
msgid ""
"Both @code{total} and @code{row-number} are used only inside the function, "
"so they can be declared as local variables with @code{let} and given initial "
"values.  Clearly, the initial value for @code{total} should be 0.  The "
"initial value of @code{row-number} should be 1, since we start with the "
"first row.  This means that the @code{let} statement will look like this:"
msgstr ""
"Ambos @code{total} y @code{row-number} se usan solo dentro de la\n"
"funci@'on, as@'{@dotless{i}} ellos pueden ser declarados como\n"
"variables locales con @code{let} y valores iniciales\n"
"dados. Claramente, el valor inicial para total ser@'{@dotless{i}}a\n"
"0. El valor inicial de @code{row-number} ser@'{@dotless{i}}a 1, desde\n"
"que se comienza con la primera fila. Esto significa que la frase\n"
"@code{let} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:10709
#, no-wrap
msgid ""
"  (let ((total 0)\n"
"        (row-number 1))\n"
"    @var{body}@dots{})\n"
msgstr ""
"  (let ((total 0)\n"
"        (row-number 1))\n"
"    @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10720
msgid ""
"After the internal variables are declared and bound to their initial values, "
"we can begin the @code{while} loop.  The expression that serves as the test "
"should return a value of @code{t} for true so long as the @code{row-number} "
"is less than or equal to the @code{number-of-rows}.  (If the expression "
"tests true only so long as the row number is less than the number of rows in "
"the triangle, the last row will never be added to the total; hence the row "
"number has to be either less than or equal to the number of rows.)"
msgstr ""
"Despu@'es de que las variables internas se declaran y se asignan a\n"
"sus valores iniciales se podr@'{@dotless{i}}a empezar el bucle\n"
"@code{while}. La expresi@'on que sirve como el test\n"
"devolver@'{@dotless{i}}a un valor de @code{t} para la verdad tan\n"
"grande como el @code{row-number} que es menor o igual al\n"
"@code{number-of-rows}. (La expresi@'on devuelve cierto solo si el\n"
"n@'umero de fila es menor que el n@'umero de filas en el tri@'angulo,\n"
"la @'ultima fila nunca ser@'a a@~nadida al total; aqu@'{@dotless{i}}\n"
"el n@'umero de fila tiene que ser menor o igual el n@'umero de\n"
"filas.))"

#. type: findex
#: emacs-lisp-intro.texi:10722
#, no-wrap
msgid "<= @r{(less than or equal)}"
msgstr "<= @r{(menos que igual)}"

#. type: Plain text
#: emacs-lisp-intro.texi:10727
msgid ""
"Lisp provides the @code{<=} function that returns true if the value of its "
"first argument is less than or equal to the value of its second argument and "
"false otherwise.  So the expression that the @code{while} will evaluate as "
"its test should look like this:"
msgstr ""
"Lisp provee la funci@'on @code{<=} que devuelve cierto si el valor de\n"
"su primer argumento es menor o igual al valor de su segundo argumento\n"
"y falso de otro modo. As@'{@dotless{i}} la expresi@'on que el\n"
"@code{while} evaluar@'a como si su test se ver@'{@dotless{i}}a como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:10730
#, no-wrap
msgid "(<= row-number number-of-rows)\n"
msgstr "(<= row-number number-of-rows)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10739
msgid ""
"The total number of pebbles can be found by repeatedly adding the number of "
"pebbles in a row to the total already found.  Since the number of pebbles in "
"the row is equal to the row number, the total can be found by adding the row "
"number to the total.  (Clearly, in a more complex situation, the number of "
"pebbles in the row might be related to the row number in a more complicated "
"way; if this were the case, the row number would be replaced by the "
"appropriate expression.)"
msgstr ""
"El n@'umero de asteriscos puede encontrarse repetidamente a@~nadiendo\n"
"el n@'umero de asteriscos en una fila al total ya encontrado. Puesto\n"
"que el n@'umero de asteriscos en la fila es igual al n@'umero de la\n"
"fila, el total puede encontrarse a@~nadiendo el n@'umero de filas\n"
"al total. (Claramente, en una situaci@'on m@'as compleja, el n@'umero\n"
"de asteriscos en la fila podr@'{@dotless{i}}a ser relacionada al\n"
"n@'umero de la fila en un camino m@'as complicado; si este fuera el\n"
"caso, el n@'umero de fila ser@'{@dotless{i}}a reemplazado por la\n"
"expresi@'on apropiada.)"

#. type: smallexample
#: emacs-lisp-intro.texi:10742
#, no-wrap
msgid "(setq total (+ total row-number))\n"
msgstr "(setq total (+ total row-number))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10747
msgid ""
"What this does is set the new value of @code{total} to be equal to the sum "
"of adding the number of pebbles in the row to the previous total."
msgstr ""
"Lo que esto hace es asignar el nuevo valor de @code{total} a ser igual a\n"
"la suma de a@~nadiendo el n@'umero de asteriscos en la fila al total previo."

#. type: Plain text
#: emacs-lisp-intro.texi:10757
msgid ""
"After setting the value of @code{total}, the conditions need to be "
"established for the next repetition of the loop, if there is one.  This is "
"done by incrementing the value of the @code{row-number} variable, which "
"serves as a counter.  After the @code{row-number} variable has been "
"incremented, the true-or-false-test at the beginning of the @code{while} "
"loop tests whether its value is still less than or equal to the value of the "
"@code{number-of-rows} and if it is, adds the new value of the @code{row-"
"number} variable to the @code{total} of the previous repetition of the loop."
msgstr ""
"Despu@'es de configurar el valor de @code{total}, las condiciones\n"
"deben ser establecidas para la siguiente repetici@'on del bucle,\n"
"si hay alguna. Esto se hace incrementando el valor de la variable\n"
"@code{row-number}, que sirve como un contador. Despu@'es que la\n"
"variable @code{row-number} ha sido incrementada, el true-or-false-test\n"
"al principio del bucle @code{while} chequea si su valor es\n"
"todav@'{@dotless{i}}a menor o igual al valor del @code{number-of-rows}\n"
"y si eso es, a@~nade el nuevo valor de la variable @code{row-number}\n"
"al @code{total} de la repetici@'on del bucle."

#. type: Plain text
#: emacs-lisp-intro.texi:10761
msgid ""
"The built-in Emacs Lisp function @code{1+} adds 1 to a number, so the "
"@code{row-number} variable can be incremented with this expression:"
msgstr ""
"La funci@'on construida en Emacs Lisp @code{1+} a@~nade 1 a un\n"
"n@'umero, as@'{@dotless{i}} la variable @code{row-number} puede ser\n"
"incrementado con esta expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:10764
#, no-wrap
msgid "(setq row-number (1+ row-number))\n"
msgstr "(setq row-number (1+ row-number))\n"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:10767 emacs-lisp-intro.texi:11002
#, no-wrap
msgid "Putting the function definition together"
msgstr "Poniendo la definici@'on de la funci@'on junta"

#. type: Plain text
#: emacs-lisp-intro.texi:10771
msgid ""
"We have created the parts for the function definition; now we need to put "
"them together."
msgstr ""
"Nosotros hemos creado las partes para la definici@'on de la funci@'on;\n"
"ahora necesitamos ponerlas juntas."

#. type: Plain text
#: emacs-lisp-intro.texi:10774
msgid "First, the contents of the @code{while} expression:"
msgstr "Primero, los contenidos de la expresi@'on @code{while}:"

#. type: group
#: emacs-lisp-intro.texi:10780
#, no-wrap
msgid ""
"(while (<= row-number number-of-rows)   ; @r{true-or-false-test}\n"
"  (setq total (+ total row-number))\n"
"  (setq row-number (1+ row-number)))    ; @r{incrementer}\n"
msgstr ""
"(while (<= row-number number-of-rows)   ; @r{true-or-false-test}\n"
"  (setq total (+ total row-number))\n"
"  (setq row-number (1+ row-number)))    ; @r{incremento}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10786
msgid ""
"Along with the @code{let} expression varlist, this very nearly completes the "
"body of the function definition.  However, it requires one final element, "
"the need for which is somewhat subtle."
msgstr ""
"Tener la expresi@'on @code{let} de varlist, se acerca a completar el\n"
"cuerpo de la definici@'on de funci@'on. Sin embargo, eso requiere un\n"
"elemento final, la necesidad para la que es alguna cosa peque@~na."

#. type: Plain text
#: emacs-lisp-intro.texi:10792
msgid ""
"The final touch is to place the variable @code{total} on a line by itself "
"after the @code{while} expression.  Otherwise, the value returned by the "
"whole function is the value of the last expression that is evaluated in the "
"body of the @code{let}, and this is the value returned by the @code{while}, "
"which is always @code{nil}."
msgstr ""
"El toque final es emplazar la variable @code{total} en una\n"
"l@'{@dotless{i}}nea por s@'{@dotless{i}} misma despu@'es de la\n"
"expresi@'on @code{while}. De otro modo, el valor devuelto por la\n"
"funci@'on completa es el valor de la @'ultima expresi@'on que es\n"
"evaluada en el cuerpo del @code{let}, y este es el valor devuelto por\n"
"el @code{while} que es siempre @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:10799
msgid ""
"This may not be evident at first sight.  It almost looks as if the "
"incrementing expression is the last expression of the whole function.  But "
"that expression is part of the body of the @code{while}; it is the last "
"element of the list that starts with the symbol @code{while}.  Moreover, the "
"whole of the @code{while} loop is a list within the body of the @code{let}."
msgstr ""
"Esto puede no ser evidente a primera vista. Eso casi se ve como si la\n"
"expresi@'on de incremento es la @'ultima expresi@'on de la funci@'on\n"
"completa. Pero esta expresi@'on es parte del cuerpo del @code{while};\n"
"eso es el @'ultimo elemento de la lista que empieza con el\n"
"s@'{@dotless{i}}mbolo @code{while}. M@'as all@'a, el bucle\n"
"@code{while} completo es una lista con el cuerpo del @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:10802
msgid "In outline, the function will look like this:"
msgstr ""
"En l@'{@dotless{i}}nea (@emph{outline}), la funci@'on se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:10811
#, no-wrap
msgid ""
"(defun @var{name-of-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let (@var{varlist})\n"
"    (while (@var{true-or-false-test})\n"
"      @var{body-of-while}@dots{} )\n"
"    @dots{} ))                    ; @r{Need final expression here.}\n"
msgstr ""
"(defun @var{name-of-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let (@var{varlist})\n"
"    (while (@var{true-or-false-test})\n"
"      @var{body-of-while}@dots{} )\n"
"    @dots{} ))                    ; @r{Necesita la expresi@'on final aqu@'{@dotless{i}}.}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10824
msgid ""
"The result of evaluating the @code{let} is what is going to be returned by "
"the @code{defun} since the @code{let} is not embedded within any containing "
"list, except for the @code{defun} as a whole.  However, if the @code{while} "
"is the last element of the @code{let} expression, the function will always "
"return @code{nil}.  This is not what we want! Instead, what we want is the "
"value of the variable @code{total}.  This is returned by simply placing the "
"symbol as the last element of the list starting with @code{let}.  It gets "
"evaluated after the preceding elements of the list are evaluated, which "
"means it gets evaluated after it has been assigned the correct value for the "
"total."
msgstr ""
"El resultado de evaluar el @code{let} es que lo que est@'a yendo para\n"
"devolver el @code{defun} desde el @code{let} que no est@'a embebido\n"
"con cualquier lista que contiene, excepto para la @code{defun} como un\n"
"todo. Sin embargo, si el @code{while} es el @'ultimo elemento de la\n"
"expresi@'on @code{let}, la funci@'on siempre devolver@'a\n"
"@code{nil}. @exclamdown{}Esto no es lo que quiero! En vez de eso, lo\n"
"que queremos es el valor de la variable @code{total}. Eso devuelve\n"
"simplemente emplazando el s@'{@dotless{i}}mbolo como el @'ultimo\n"
"elemento de la lista empezando con @code{let}. Eso se eval@'ua\n"
"despu@'es de los elementos precedentes de la lista evaluada, que\n"
"significa que eso se evalu@'o despu@'es de haber sido asignado el\n"
"valor correcto para el total."

#. type: Plain text
#: emacs-lisp-intro.texi:10830
msgid ""
"It may be easier to see this by printing the list starting with @code{let} "
"all on one line.  This format makes it evident that the @var{varlist} and "
"@code{while} expressions are the second and third elements of the list "
"starting with @code{let}, and the @code{total} is the last element:"
msgstr ""
"Eso puede ser f@'acil de ver imprimiendo la lista empezando con\n"
"@code{let} todo en una l@'{@dotless{i}}nea. Este formato hace evidente\n"
"que las expresiones @var{varlist} y @code{while} son el segundo el\n"
"tercer elementos de la lista empezando con @code{let}, y el\n"
"@code{total} es el @'ultimo elemento:"

#. type: group
#: emacs-lisp-intro.texi:10834
#, no-wrap
msgid "(let (@var{varlist}) (while (@var{true-or-false-test}) @var{body-of-while}@dots{} ) total)\n"
msgstr ""
"(let (@var{varlist}) (while (@var{true-or-false-test}) \n"
"@var{body-of-while}@dots{} ) total)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10840
msgid ""
"Putting everything together, the @code{triangle} function definition looks "
"like this:"
msgstr ""
"Poniendo cualquier cosa junta, la definici@'on de funci@'on\n"
"@code{triangle} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:10849
#, no-wrap
msgid ""
"(defun triangle (number-of-rows)    ; @r{Version with}\n"
"                                    ; @r{  incrementing counter.}\n"
"  \"Add up the number of pebbles in a triangle.\n"
"The first row has one pebble, the second row two pebbles,\n"
"the third row three pebbles, and so on.\n"
"The argument is NUMBER-OF-ROWS.\"\n"
msgstr ""
"(defun triangle (number-of-rows)    ; @r{Versi@'on con}\n"
"                                    ; @r{ contador de incremento.}\n"
"  \"A@~nade el n@'umero de asteriscos en un tri@'angulo.\n"
"La primera fila tiene un asterisco, la segunda fila dos asteriscos,\n"
"la tercera fila tres asteriscos, y as@'{@dotless{i}}.\n"
"El argumento es NUMBER-OF-ROWS.\"\n"

#. type: group
#: emacs-lisp-intro.texi:10857
#, no-wrap
msgid ""
"  (let ((total 0)\n"
"        (row-number 1))\n"
"    (while (<= row-number number-of-rows)\n"
"      (setq total (+ total row-number))\n"
"      (setq row-number (1+ row-number)))\n"
"    total))\n"
msgstr ""
"  (let ((total 0)\n"
"        (row-number 1))\n"
"    (while (<= row-number number-of-rows)\n"
"      (setq total (+ total row-number))\n"
"      (setq row-number (1+ row-number)))\n"
"    total))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10863
msgid ""
"After you have installed @code{triangle} by evaluating the function, you can "
"try it out.  Here are two examples:"
msgstr ""
"Despu@'es de haber instalado @code{triangle} para evaluar la funci@'on,\n"
"se puede probar. Aqu@'{@dotless{i}} hay dos ejemplos:"

#. type: group
#: emacs-lisp-intro.texi:10867
#, no-wrap
msgid ""
"(triangle 4)\n"
"\n"
msgstr ""
"(triangle 4)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:10869
#, no-wrap
msgid "(triangle 7)\n"
msgstr "(triangle 7)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10875
msgid ""
"The sum of the first four numbers is 10 and the sum of the first seven "
"numbers is 28."
msgstr ""
"La suma del primero de cuatro n@'umeros es 10 y la suma de los primeros\n"
"siete n@'umeros es 28."

#. type: Plain text
#: emacs-lisp-intro.texi:10886
msgid ""
"Another common way to write a @code{while} loop is to write the test so that "
"it determines whether a counter is greater than zero.  So long as the "
"counter is greater than zero, the loop is repeated.  But when the counter is "
"equal to or less than zero, the loop is stopped.  For this to work, the "
"counter has to start out greater than zero and then be made smaller and "
"smaller by a form that is evaluated repeatedly."
msgstr ""
"Otro camino com@'un para escribir un bucle @code{while} es escribir el\n"
"test as@'{@dotless{i}} que determina si un contador es mayor que\n"
"cero. As@'{@dotless{i}} tan largo es el contador mayor que cero, el\n"
"bucle se repite. Pero cuando el contador es igual o menor que cero,\n"
"el bucle se para. Para este trabajo, el contador tiene que empezar\n"
"mayor que cero y entonces se hace m@'as peque@~no y peque@~no por una\n"
"forma que es evaluada repetidamente."

#. type: Plain text
#: emacs-lisp-intro.texi:10894
msgid ""
"The test will be an expression such as @code{(> counter 0)} which returns "
"@code{t} for true if the value of @code{counter} is greater than zero, and "
"@code{nil} for false if the value of @code{counter} is equal to or less than "
"zero.  The expression that makes the number smaller and smaller can be a "
"simple @code{setq} such as @code{(setq counter (1- counter))}, where "
"@code{1-} is a built-in function in Emacs Lisp that subtracts 1 from its "
"argument."
msgstr ""
"El test ser@'a una expresi@'on tal como @code{(> counter 0)} que\n"
"devuelve @code{t} @emph{cierto} si el valor de @code{counter} es mayor\n"
"que cero, y @code{nil} @emph{falso} si el valor de @code{counter} es\n"
"igual a o menor que cero. La expresi@'on hace que el n@'umero menor y\n"
"menor puede ser un simple @code{setq} tal como @code{(setq counter (1-\n"
"counter)}, donde @code{1-} es una funci@'on construida en Emacs Lisp\n"
"que sustrae 1 de su argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:10897
msgid "The template for a decrementing @code{while} loop looks like this:"
msgstr ""
"La plantilla para decrementar el bucle @code{while} se ve\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:10903
#, no-wrap
msgid ""
"(while (> counter 0)                    ; @r{true-or-false-test}\n"
"  @var{body}@dots{}\n"
"  (setq counter (1- counter)))          ; @r{decrementer}\n"
msgstr ""
"(while (> counter 0)                    ; @r{test-verdadero-o-falso}\n"
"  @var{body}@dots{}\n"
"  (setq counter (1- counter)))          ; @r{decremento}\n"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:10913
#, no-wrap
msgid "Example with decrementing counter"
msgstr "Ejemplo con el contador que se decrementa"

#. type: Plain text
#: emacs-lisp-intro.texi:10917
msgid ""
"To illustrate a loop with a decrementing counter, we will rewrite the "
"@code{triangle} function so the counter decreases to zero."
msgstr ""
"Para ilustrar un bucle con un contador de decremento, reescribir@'a la\n"
"funci@'on @code{triangle} as@'{@dotless{i}} como el contador se\n"
"decrementa a cero."

#. type: Plain text
#: emacs-lisp-intro.texi:10923
msgid ""
"This is the reverse of the earlier version of the function.  In this case, "
"to find out how many pebbles are needed to make a triangle with 3 rows, add "
"the number of pebbles in the third row, 3, to the number in the preceding "
"row, 2, and then add the total of those two rows to the row that precedes "
"them, which is 1."
msgstr ""
"Esto es lo inverso de la versi@'on temprana de la funci@'on. En este\n"
"caso, para encontrar cu@'antos asteriscos son necesarios para crear un\n"
"tri@'angulo con 3 filas, a@~nade el n@'umero de asteriscos en la\n"
"tercera fila, 3, para el n@'umero en la fila precedente, 2, y entonces\n"
"a@~nade el total de estas dos filas a la fila que lo precede, 1."

#. type: Plain text
#: emacs-lisp-intro.texi:10932
msgid ""
"Likewise, to find the number of pebbles in a triangle with 7 rows, add the "
"number of pebbles in the seventh row, 7, to the number in the preceding row, "
"which is 6, and then add the total of those two rows to the row that "
"precedes them, which is 5, and so on.  As in the previous example, each "
"addition only involves adding two numbers, the total of the rows already "
"added up and the number of pebbles in the row that is being added to the "
"total.  This process of adding two numbers is repeated again and again until "
"there are no more pebbles to add."
msgstr ""
"M@'as all@'a, para encontrar el n@'umero de asteriscos en un\n"
"tri@'angulo con 7 filas, a@~nade el n@'umero de asteriscos en la fila\n"
"siete, 7, al n@'umero en la fila precedente, que es 6, y entonces\n"
"a@~nade el total de estas dos filas a la fila esta que lo precede,\n"
"que es 5, y as@'{@dotless{i}}. Como en el ejemplo previo, cada\n"
"adici@'on solo involucra la adici@'on de dos n@'umeros, el total de\n"
"las filas ya se a@~nadi@'o y el n@'umero de asteriscos en la fila que\n"
"est@'a siendo a@~nadida al total. Este proceso de a@~nadir dos\n"
"n@'umeros se repite de nuevo y de nuevo hasta que no haya m@'as\n"
"asteriscos que a@~nadir."

#. type: Plain text
#: emacs-lisp-intro.texi:10938
msgid ""
"We know how many pebbles to start with: the number of pebbles in the last "
"row is equal to the number of rows.  If the triangle has seven rows, the "
"number of pebbles in the last row is 7.  Likewise, we know how many pebbles "
"are in the preceding row: it is one less than the number in the row."
msgstr ""
"Sabemos con cu@'antos asteriscos empezar: el n@'umero de asteriscos en\n"
"la @'ultima fila es igual al n@'umero de filas. Si el tri@'angulo\n"
"tiene siete filas, el n@'umero de asteriscos en la @'ultima fila es\n"
"7. M@'as all@'a, sabemos cu@'antos asteriscos est@'an en la fila\n"
"precedente: eso es uno menos que el n@'umero en la fila."

#. type: Plain text
#: emacs-lisp-intro.texi:10947
msgid ""
"We start with three variables: the total number of rows in the triangle; the "
"number of pebbles in a row; and the total number of pebbles, which is what "
"we want to calculate.  These variables can be named @code{number-of-rows}, "
"@code{number-of-pebbles-in-row}, and @code{total}, respectively."
msgstr ""
"Empezamos con tres variables: el n@'umero total de filas en el\n"
"tri@'angulo; el n@'umero de asteriscos en una fila; y el n@'umero\n"
"total de asteriscos, que es lo que queremos calcular. Estas variables\n"
"pueden llamarse @code{number-of-rows},\n"
"@code{number-of-pebbles-in-row}, y @code{total}, respectivamente."

#. type: Plain text
#: emacs-lisp-intro.texi:10954
msgid ""
"Both @code{total} and @code{number-of-pebbles-in-row} are used only inside "
"the function and are declared with @code{let}.  The initial value of "
"@code{total} should, of course, be zero.  However, the initial value of "
"@code{number-of-pebbles-in-row} should be equal to the number of rows in the "
"triangle, since the addition will start with the longest row."
msgstr ""
"Ambos @code{total} y @code{number-of-pebbles-in-row} se usan solo\n"
"dentro de la funci@'on y se declaran con @code{let}. El valor\n"
"inicial de @code{total} ser@'{@dotless{i}}a cero. Sin embargo, el\n"
"valor inicial de @code{number-of-pebbles-in-row} ser@'{@dotless{i}}a\n"
"igual al n@'umero de filas en el tri@'angulo, desde la adici@'on\n"
"empezar@'a con la fila m@'as larga."

#. type: Plain text
#: emacs-lisp-intro.texi:10958
msgid ""
"This means that the beginning of the @code{let} expression will look like "
"this:"
msgstr ""
"Esto significa que el principio de la expresi@'on @code{let} se ver@'a\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:10964
#, no-wrap
msgid ""
"(let ((total 0)\n"
"      (number-of-pebbles-in-row number-of-rows))\n"
"  @var{body}@dots{})\n"
msgstr ""
"(let ((total 0)\n"
"      (number-of-pebbles-in-row number-of-rows))\n"
"  @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10970
msgid ""
"The total number of pebbles can be found by repeatedly adding the number of "
"pebbles in a row to the total already found, that is, by repeatedly "
"evaluating the following expression:"
msgstr ""
"El n@'umero total de asteriscos puede encontrarse repetidamente\n"
"a@~nadiendo el n@'umero de asteriscos en una fila para el total ya\n"
"encontrado, que, se eval@'ua repetidamente en la siguiente\n"
"expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:10973
#, no-wrap
msgid "(setq total (+ total number-of-pebbles-in-row))\n"
msgstr "(setq total (+ total number-of-pebbles-in-row))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10980
msgid ""
"After the @code{number-of-pebbles-in-row} is added to the @code{total}, the "
"@code{number-of-pebbles-in-row} should be decremented by one, since the next "
"time the loop repeats, the preceding row will be added to the total."
msgstr ""
"Despu@'es el @code{number-of-pebbles-in-row} se a@~nade al\n"
"@code{total}, el @code{number-of-pebbles-in-row} ser@'{@dotless{i}}a\n"
"decrementado por uno, desde que la siguiente vez el bucle repite, la\n"
"fila precedente ser@'a a@~nadida al total."

#. type: Plain text
#: emacs-lisp-intro.texi:10985
msgid ""
"The number of pebbles in a preceding row is one less than the number of "
"pebbles in a row, so the built-in Emacs Lisp function @code{1-} can be used "
"to compute the number of pebbles in the preceding row.  This can be done "
"with the following expression:"
msgstr ""
"El n@'umero de asteriscos en una fila precedente es uno menos que el\n"
"n@'umero de asteriscos en una fila, as@'{@dotless{i}} la funci@'on\n"
"Emacs Lisp construida @code{1-} puede usarse para computar el n@'umero\n"
"de asteriscos de la fila precedente. Esto puede ser hecho con la\n"
"siguiente expresi@'on:"

#. type: group
#: emacs-lisp-intro.texi:10990
#, no-wrap
msgid ""
"(setq number-of-pebbles-in-row\n"
"      (1- number-of-pebbles-in-row))\n"
msgstr ""
"(setq number-of-pebbles-in-row\n"
"      (1- number-of-pebbles-in-row))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:10996
msgid ""
"Finally, we know that the @code{while} loop should stop making repeated "
"additions when there are no pebbles in a row.  So the test for the "
"@code{while} loop is simply:"
msgstr ""
"Finalmente, sabemos que el bucle @code{while} parar@'{@dotless{i}}a\n"
"creando repetidas adiciones cuando no hay asteriscos en una\n"
"fila. As@'{@dotless{i}} el test para el bucle @code{while} es simple:"

#. type: smallexample
#: emacs-lisp-intro.texi:10999
#, no-wrap
msgid "(while (> number-of-pebbles-in-row 0)\n"
msgstr "(while (> number-of-pebbles-in-row 0)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11007
msgid ""
"We can put these expressions together to create a function definition that "
"works.  However, on examination, we find that one of the local variables is "
"unneeded!"
msgstr ""
"Se pueden poner estas expresiones juntas para crear una definici@'on de\n"
"funci@'on que funcione. Sin embargo, al examinarlas, encontraremos que\n"
"una de la variables locales @exclamdown{}es innecesaria!"

#. type: Plain text
#: emacs-lisp-intro.texi:11010
msgid "The function definition looks like this:"
msgstr "La definici@'on de funci@'on se ve como esto:"

#. type: group
#: emacs-lisp-intro.texi:11023
#, no-wrap
msgid ""
";;; @r{First subtractive version.}\n"
"(defun triangle (number-of-rows)\n"
"  \"Add up the number of pebbles in a triangle.\"\n"
"  (let ((total 0)\n"
"        (number-of-pebbles-in-row number-of-rows))\n"
"    (while (> number-of-pebbles-in-row 0)\n"
"      (setq total (+ total number-of-pebbles-in-row))\n"
"      (setq number-of-pebbles-in-row\n"
"            (1- number-of-pebbles-in-row)))\n"
"    total))\n"
msgstr ""
";;; @r{Primero la versi@'on substractiva.}\n"
"(defun triangle (number-of-rows)\n"
"  \"A@~nade el n@'umero de asteriscos en un tri@'angulo.\"\n"
"  (let ((total 0)\n"
"        (number-of-pebbles-in-row number-of-rows))\n"
"    (while (> number-of-pebbles-in-row 0)\n"
"      (setq total (+ total number-of-pebbles-in-row))\n"
"      (setq number-of-pebbles-in-row\n"
"            (1- number-of-pebbles-in-row)))\n"
"    total))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11027
msgid "As written, this function works."
msgstr "Como se dijo, esta funci@'on funciona."

#. type: Plain text
#: emacs-lisp-intro.texi:11029
msgid "However, we do not need @code{number-of-pebbles-in-row}."
msgstr "Sin embargo, no se necesita @code{number-of-pebbles-in-row}."

#. type: cindex
#: emacs-lisp-intro.texi:11030
#, no-wrap
msgid "Argument as local variable"
msgstr "Argumento como variable local"

#. type: Plain text
#: emacs-lisp-intro.texi:11039
msgid ""
"When the @code{triangle} function is evaluated, the symbol @code{number-of-"
"rows} will be bound to a number, giving it an initial value.  That number "
"can be changed in the body of the function as if it were a local variable, "
"without any fear that such a change will effect the value of the variable "
"outside of the function.  This is a very useful characteristic of Lisp; it "
"means that the variable @code{number-of-rows} can be used anywhere in the "
"function where @code{number-of-pebbles-in-row} is used."
msgstr ""
"Cuando la funci@'on @code{triangle} se eval@'ua, el\n"
"s@'{@dotless{i}}mbolo @code{number-of-rows} ser@'a asociado al\n"
"n@'umero, dando un valor inicial. Este n@'umero puede ser cambiado en\n"
"el cuerpo de la funci@'on si hubiera una variable local, sin miedo\n"
"de que tal cambio se efectuar@'a el valor de la variable fuera de la\n"
"funci@'on. Esto es una caracter@'{@dotless{i}}stica muy @'util de Lisp;\n"
"eso significa que la variable @code{number-of-rows} puede ser usada en\n"
"cualquier lugar en la funci@'on donde @code{number-of-pebbles-in-row}\n"
"se usa."

#. type: Plain text
#: emacs-lisp-intro.texi:11042
msgid "Here is a second version of the function written a bit more cleanly:"
msgstr ""
"Aqu@'{@dotless{i}} hay una segunda versi@'on de la funci@'on escrita un\n"
"poco m@'as limpiamente:"

#. type: group
#: emacs-lisp-intro.texi:11052
#, no-wrap
msgid ""
"(defun triangle (number)                ; @r{Second version.}\n"
"  \"Return sum of numbers 1 through NUMBER inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (setq number (1- number)))\n"
"    total))\n"
msgstr ""
"(defun triangle (number)                ; @r{Segunda versi@'on.}\n"
"  \"Devuelve la suma de n@'umeros 1 a trav@'es de NUMBER inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (setq number (1- number)))\n"
"    total))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11056
msgid ""
"In brief, a properly written @code{while} loop will consist of three parts:"
msgstr ""
"En breve, un bucle @code{while} apropiadamente escrito consistir@'a de\n"
"tres partes:"

#. type: enumerate
#: emacs-lisp-intro.texi:11061
msgid ""
"A test that will return false after the loop has repeated itself the correct "
"number of times."
msgstr ""
"Un test que devuelva falso despu@'es de que el bucle ha repetido por\n"
"s@'{@dotless{i}} mismo el n@'umero de veces correcto."

#. type: enumerate
#: emacs-lisp-intro.texi:11065
msgid ""
"An expression the evaluation of which will return the value desired after "
"being repeatedly evaluated."
msgstr ""
"Una expresi@'on de la evaluaci@'on de que devolver@'a el valor deseado\n"
"despu@'es de ser repetidamente evaluado."

#. type: enumerate
#: emacs-lisp-intro.texi:11070
msgid ""
"An expression to change the value passed to the true-or-false-test so that "
"the test returns false after the loop has repeated itself the right number "
"of times."
msgstr ""
"Una expresi@'on para cambiar el valor pasado al true-or-false-test\n"
"as@'{@dotless{i}} el test devuelve falso despu@'es de que el bucle\n"
"se ha repetido por s@'{@dotless{i}} mismo el n@'umero de veces\n"
"correcto."

#. type: node
#: emacs-lisp-intro.texi:11072
#, no-wrap
msgid "dolist dotimes"
msgstr "Dolist y dotimes"

#. type: Plain text
#: emacs-lisp-intro.texi:11079
msgid ""
"In addition to @code{while}, both @code{dolist} and @code{dotimes} provide "
"for looping.  Sometimes these are quicker to write than the equivalent "
"@code{while} loop.  Both are Lisp macros.  (@xref{Macros, , Macros, elisp, "
"The GNU Emacs Lisp Reference Manual}. )"
msgstr ""
"Adem@'as de @code{while}, tanto @code{dolist} como @code{dotimes}\n"
"proveen un bucle. Algunas veces estos son r@'apidos para escribir \n"
"el bucle equivalente @code{while}. Ambos son macros\n"
"Lisp. (@xref{Macros, , Macros, elisp, El Manual de Referencia GNU\n"
"Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:11084
msgid ""
"@code{dolist} works like a @code{while} loop that `@sc{cdr}s down a list': "
"@code{dolist} automatically shortens the list each time it loops---takes the "
"@sc{cdr} of the list---and binds the @sc{car} of each shorter version of the "
"list to the first of its arguments."
msgstr ""
"@code{dolist} funciona como un bucle @code{while} con `@sc{cdr}s que\n"
"bajan la lista': @code{dolist} autom@'aticamente ordena la lista cada\n"
"vez que la lista hace bucles --- toma la @sc{cdr} de la lista --- y\n"
"asocia el @sc{car} de cada versi@'on ordenada de la lista al primero\n"
"de sus argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:11086
msgid ""
"@code{dotimes} loops a specific number of times: you specify the number."
msgstr ""
"@code{dotimes} repite el bucle un n@'umero espec@'{@dotless{i}}fico de\n"
"veces: tu especificas el n@'umero."

#. type: findex
#: emacs-lisp-intro.texi:11092 emacs-lisp-intro.texi:11094
#, no-wrap
msgid "dolist"
msgstr "dolist"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:11093
#, no-wrap
msgid "The @code{dolist} Macro"
msgstr "La macro @code{dolist}"

#. type: Plain text
#: emacs-lisp-intro.texi:11098
msgid ""
"Suppose, for example, you want to reverse a list, so that ``first'' "
"``second'' ``third'' becomes ``third'' ``second'' ``first''."
msgstr ""
"Sup@'on, por ejemplo, que quieres invertir una lista,\n"
"as@'{@dotless{i}} que ``primero'', ``segundo'', ``tercero'' llega a\n"
"ser ``tercero'', ``segundo'', ``primero''."

#. type: Plain text
#: emacs-lisp-intro.texi:11101
msgid "In practice, you would use the @code{reverse} function, like this:"
msgstr ""
"En la pr@'actica, usar@'{@dotless{i}}as la funci@'on @code{reverse},\n"
"como esta:"

#. type: group
#: emacs-lisp-intro.texi:11107
#, no-wrap
msgid "(reverse animals)\n"
msgstr "(reverse animales)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11113
msgid "Here is how you could reverse the list using a @code{while} loop:"
msgstr ""
"Aqu@'{@dotless{i}} se ve c@'omo se podr@'{@dotless{i}}a invertir la\n"
"lista usando un bucle @code{while}:"

#. type: group
#: emacs-lisp-intro.texi:11125
#, no-wrap
msgid ""
"(defun reverse-list-with-while (list)\n"
"  \"Using while, reverse the order of LIST.\"\n"
"  (let (value)  ; make sure list starts empty\n"
"    (while list\n"
"      (setq value (cons (car list) value))\n"
"      (setq list (cdr list)))\n"
"    value))\n"
"\n"
msgstr ""
"(defun reverse-list-with-while (list)\n"
"  \"Usando while, invierte el orden de LIST.\"\n"
"  (let (value)  ; asegura que la lista comienza vac@'{@dotless{i}}a\n"
"    (while list\n"
"      (setq value (cons (car list) value))\n"
"      (setq list (cdr list)))\n"
"    value))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11127
#, no-wrap
msgid "(reverse-list-with-while animals)\n"
msgstr "(reverse-list-with-while animales)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11133
msgid "And here is how you could use the @code{dolist} macro:"
msgstr ""
"Y aqu@'{@dotless{i}} se ve c@'omo podr@'{@dotless{i}}a usarse la macro\n"
"@code{dolist}:"

#. type: group
#: emacs-lisp-intro.texi:11143
#, no-wrap
msgid ""
"(defun reverse-list-with-dolist (list)\n"
"  \"Using dolist, reverse the order of LIST.\"\n"
"  (let (value)  ; make sure list starts empty\n"
"    (dolist (element list value)\n"
"      (setq value (cons element value)))))\n"
"\n"
msgstr ""
"(defun reverse-list-with-dolist (list)\n"
"  \"Usando dolist, reverse, la orden de la LISTA.\"\n"
"  (let (value)  ; asegura que la lista empieza vac@'{@dotless{i}}a\n"
"    (dolist (element list value)\n"
"      (setq value (cons element value)))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11145
#, no-wrap
msgid "(reverse-list-with-dolist animals)\n"
msgstr "(reverse-list-with-dolist animals)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11152
msgid ""
"In Info, you can place your cursor after the closing parenthesis of each "
"expression and type @kbd{C-x C-e}; in each case, you should see"
msgstr ""
"En Info, se puede localizar su cursor despu@'es de cerrar par@'entesis\n"
"de cada expresi@'on y escribir @kbd{C-x C-e}; en cada caso, se "
"ver@'{@dotless{i}}a"

#. type: smallexample
#: emacs-lisp-intro.texi:11155
#, no-wrap
msgid "(tiger lion giraffe gazelle)\n"
msgstr "(tigre leon jirafa gacela)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11159
msgid "in the echo area."
msgstr "en el @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:11168
msgid ""
"For this example, the existing @code{reverse} function is obviously best.  "
"The @code{while} loop is just like our first example (@pxref{Loop Example, , "
"A @code{while} Loop and a List}).  The @code{while} first checks whether the "
"list has elements; if so, it constructs a new list by adding the first "
"element of the list to the existing list (which in the first iteration of "
"the loop is @code{nil}).  Since the second element is prepended in front of "
"the first element, and the third element is prepended in front of the second "
"element, the list is reversed."
msgstr ""
"Para este ejemplo, la funci@'on @code{reverse} existente es obviamente\n"
"la mejor. El bucle @code{while} es solo como nuestro primer ejemplo\n"
"(@pxref{Ejemplo de bucle, , Un bucle @code{while} y una lista}). El\n"
"@code{while} primero chequea si la lista tiene elementos; si es\n"
"as@'{@dotless{i}}, eso construye una nueva lista a@~nadiendo el primer\n"
"elemento de la lista a la lista existente (que en la primera\n"
"iteraci@'on del bucle es @code{nil}). Puesto que el segundo elemento\n"
"est@'a asignado en frente del segundo elemento, la lista es inversa."

#. type: Plain text
#: emacs-lisp-intro.texi:11175
msgid ""
"In the expression using a @code{while} loop, the @w{@code{(setq list (cdr "
"list))}} expression shortens the list, so the @code{while} loop eventually "
"stops.  In addition, it provides the @code{cons} expression with a new first "
"element by creating a new and shorter list at each repetition of the loop."
msgstr ""
"En la expresi@'on que usa el bucle @code{while}, la expresi@'on\n"
"@w{@code{(setq list (cdr list))}} ordena la lista, as@'{@dotless{i}}\n"
"el bucle @code{while} finalmente para. Adem@'as, se proporciona la\n"
"expresi@'on @code{cons} con un nuevo primer elemento creando una nueva\n"
"lista y se ordena en cada repetici@'on del bucle."

#. type: Plain text
#: emacs-lisp-intro.texi:11179
msgid ""
"The @code{dolist} expression does very much the same as the @code{while} "
"expression, except that the @code{dolist} macro does some of the work you "
"have to do when writing a @code{while} expression."
msgstr ""
"La expresi@'on @code{dolist} hace lo mismo que la expresi@'on\n"
"@code{while}, excepto que la macro @code{dolist} hace algo del trabajo\n"
"que se tiene que hacer cuando se escribe una expresi@'on @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:11185
msgid ""
"Like a @code{while} loop, a @code{dolist} loops.  What is different is that "
"it automatically shortens the list each time it loops---it `@sc{cdr}s down "
"the list' on its own---and it automatically binds the @sc{car} of each "
"shorter version of the list to the first of its arguments."
msgstr ""
"Al igual que el bucle @code{while}, tenemos el bucle @code{dolist}. Lo\n"
"que es diferente es que autom@'aticamente ordena la lista cada vez que\n"
"se repite --- eso es `recorrer los @sc{cdr}s de la lista' en\n"
"s@'{@dotless{i}} --- y eso autom@'aticamente asocia el @sc{car} de\n"
"cada versi@'on ordenada de la lista al primero de sus argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:11190
msgid ""
"In the example, the @sc{car} of each shorter version of the list is referred "
"to using the symbol @samp{element}, the list itself is called @samp{list}, "
"and the value returned is called @samp{value}.  The remainder of the "
"@code{dolist} expression is the body."
msgstr ""
"En el ejemplo, el @sc{car} de cada versi@'on ordenada de la lista se\n"
"refiere a usar el s@'{@dotless{i}}mbolo @samp{element}, la lista en\n"
"s@'{@dotless{i}} se llama @samp{list}, y el valor devuelto se llama\n"
"@samp{value}. El resto de la expresi@'on @code{dolist} es el cuerpo."

#. type: Plain text
#: emacs-lisp-intro.texi:11195
msgid ""
"The @code{dolist} expression binds the @sc{car} of each shorter version of "
"the list to @code{element} and then evaluates the body of the expression; "
"and repeats the loop.  The result is returned in @code{value}."
msgstr ""
"La expresi@'on @code{dolist} asocia el @sc{car} de cada versi@'on\n"
"ordenada de la lista al @code{element} y entonces eval@'ua el cuerpo\n"
"de la expresi@'on y repite el bucle. El resultado es devuelto en "
"@code{value}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:11197
#, no-wrap
msgid "The @code{dotimes} Macro"
msgstr "La macro @code{dotimes}"

#. type: Plain text
#: emacs-lisp-intro.texi:11202
msgid ""
"The @code{dotimes} macro is similar to @code{dolist}, except that it loops a "
"specific number of times."
msgstr ""
"La macro @code{dotimes} es similar a @code{dolist}, excepto que el\n"
"bucle se repite un n@'umero espec@'{@dotless{i}}fico de veces."

#. type: Plain text
#: emacs-lisp-intro.texi:11207
msgid ""
"The first argument to @code{dotimes} is assigned the numbers 0, 1, 2 and so "
"forth each time around the loop, and the value of the third argument is "
"returned.  You need to provide the value of the second argument, which is "
"how many times the macro loops."
msgstr ""
"El primer argumento @code{dotimes} se asigna a los n@'umeros 0, 1, 2 y\n"
"as@'{@dotless{i}} vuelve al bucle, y el valor del tercer argumento se\n"
"devuelve. Se necesita proveer el valor del segundo argumento, que es\n"
"cu@'antas veces la macro hace el bucle."

#. type: Plain text
#: emacs-lisp-intro.texi:11214
msgid ""
"For example, the following binds the numbers from 0 up to, but not "
"including, the number 3 to the first argument, @var{number}, and then "
"constructs a list of the three numbers.  (The first number is 0, the second "
"number is 1, and the third number is 2; this makes a total of three numbers "
"in all, starting with zero as the first number.)"
msgstr ""
"Por ejemplo, lo siguiente asocia los n@'umeros de 0 en adelante, pero\n"
"no incluyendo, el n@'umero 3 al primer argumento, @var{n@'umero}, y\n"
"entonces construye una lista de los tres n@'umeros. (El primer\n"
"n@'umero es 0, el segundo n@'umero es 1, y el tercer n@'umero es 2;\n"
"esto crea un total de tres n@'umeros en todo, empezando con cero como\n"
"el primer n@'umero.)"

#. type: group
#: emacs-lisp-intro.texi:11220
#, no-wrap
msgid ""
"(let (value)      ; otherwise a value is a void variable\n"
"  (dotimes (number 3 value)\n"
"    (setq value (cons number value))))\n"
"\n"
msgstr ""
"(let (value)      ; de otro modo un valor es una variable vac@'{@dotless{i}}a\n"
"  (dotimes (number 3 value)\n"
"    (setq value (cons number value))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11222
#, no-wrap
msgid "@result{} (2 1 0)\n"
msgstr "@result{} (2 1 0)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11229
msgid ""
"@code{dotimes} returns @code{value}, so the way to use @code{dotimes} is to "
"operate on some expression @var{number} number of times and then return the "
"result, either as a list or an atom."
msgstr ""
"@code{dotimes} devuelve @code{value}, as@'{@dotless{i}} el camino para\n"
"usar @code{dotimes} es para operar en alguna expresi@'on el n@'umero\n"
"de veces @var{number} y entonces devolver el resultado, como una lista\n"
"o un @'atomo."

#. type: Plain text
#: emacs-lisp-intro.texi:11233
msgid ""
"Here is an example of a @code{defun} that uses @code{dotimes} to add up the "
"number of pebbles in a triangle."
msgstr ""
"Aqu@'{@dotless{i}} hay un ejemplo de una @code{defun} que usa\n"
"@code{dotimes} para a@~nadir el n@'umero de asteriscos en un tri@'angulo."

#. type: group
#: emacs-lisp-intro.texi:11241
#, no-wrap
msgid ""
"(defun triangle-using-dotimes (number-of-rows)\n"
"  \"Using dotimes, add up the number of pebbles in a triangle.\"\n"
"(let ((total 0))  ; otherwise a total is a void variable\n"
"  (dotimes (number number-of-rows total)\n"
"    (setq total (+ total (1+ number))))))\n"
"\n"
msgstr ""
"(defun triangle-using-dotimes (number-of-rows)\n"
"  \"Usando dotimes, a@~nade el n@'umero de asteriscos en un tri@'angulo.\"\n"
"(let ((total 0))  ; de otro modo un total es una variable vac@'{@dotless{i}}a\n"
"  (dotimes (number number-of-rows total)\n"
"    (setq total (+ total (1+ number))))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11243
#, no-wrap
msgid "(triangle-using-dotimes 4)\n"
msgstr "(triangle-using-dotimes 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11256
msgid ""
"A recursive function contains code that tells the Lisp interpreter to call a "
"program that runs exactly like itself, but with slightly different "
"arguments.  The code runs exactly the same because it has the same name.  "
"However, even though the program has the same name, it is not the same "
"entity.  It is different.  In the jargon, it is a different `instance'."
msgstr ""
"Una funci@'on recursiva contiene c@'odigo que hace que el int@'erprete\n"
"Lisp llame a un programa que ejecute el c@'odigo en s@'{@dotless{i}},\n"
"pero con argumentos ligeramente diferentes. El c@'odigo ejecuta\n"
"exactamente lo mismo porque eso tiene el mismo nombre. Sin embargo,\n"
"incluso aunque el programa tenga el mismo nombre, no es la misma\n"
"entidad. Eso es diferente. En la jerga, se dice es una `instancia'\n"
"diferente."

#. type: Plain text
#: emacs-lisp-intro.texi:11260
msgid ""
"Eventually, if the program is written correctly, the `slightly different "
"arguments' will become sufficiently different from the first arguments that "
"the final instance will stop."
msgstr ""
"Finalmente, si el programa se escribe correctamente, los `argumentos\n"
"ligeramente diferentes' llegan a ser suficientemente diferentes puesto\n"
"que los primeros argumentos de la instancia final se parar@'an."

#. type: subsection
#: emacs-lisp-intro.texi:11273
#, no-wrap
msgid "Building Robots: Extending the Metaphor"
msgstr "Construyendo robots: Extendiendo la met@'afora"

#. type: cindex
#: emacs-lisp-intro.texi:11274
#, no-wrap
msgid "Building robots"
msgstr "Construyendo robots"

#. type: cindex
#: emacs-lisp-intro.texi:11275
#, no-wrap
msgid "Robots, building"
msgstr "Robots, construyendo"

#. type: Plain text
#: emacs-lisp-intro.texi:11282
msgid ""
"It is sometimes helpful to think of a running program as a robot that does a "
"job.  In doing its job, a recursive function calls on a second robot to help "
"it.  The second robot is identical to the first in every way, except that "
"the second robot helps the first and has been passed different arguments "
"than the first."
msgstr ""
"Algunas veces es @'util pensar en un programa en ejecuci@'on como un\n"
"robot que hace un trabajo. Haciendo su trabajo, una funci@'on\n"
"recursiva llama a un segundo robot para que le ayude. El segundo robot es\n"
"id@'entico al primero en cada paso, excepto que el segundo robot\n"
"ayuda al primero y se han pasado diferentes argumentos en vez del primero."

#. type: Plain text
#: emacs-lisp-intro.texi:11286
msgid ""
"In a recursive function, the second robot may call a third; and the third "
"may call a fourth, and so on.  Each of these is a different entity; but all "
"are clones."
msgstr ""
"En una funci@'on recursiva, el segundo robot puede llamar a un\n"
"tercero; y el tercero puede llamar a un cuarto, y\n"
"as@'{@dotless{i}}. Cada una de estos es una entidad diferente; pero\n"
"todos son clones."

#. type: Plain text
#: emacs-lisp-intro.texi:11290
msgid ""
"Since each robot has slightly different instructions---the arguments will "
"differ from one robot to the next---the last robot should know when to stop."
msgstr ""
"Desde que cada robot tiene instrucciones ligeramente diferentes ---\n"
"los argumentos diferir@'an desde un robot al siguiente --- el @'ultimo\n"
"robot conocer@'{@dotless{i}}a cuando pare."

#. type: Plain text
#: emacs-lisp-intro.texi:11292
msgid "Let's expand on the metaphor in which a computer program is a robot."
msgstr ""
"Permite expandir la met@'afora en el que un programa de ordenador\n"
"es un robot."

#. type: Plain text
#: emacs-lisp-intro.texi:11300
msgid ""
"A function definition provides the blueprints for a robot.  When you install "
"a function definition, that is, when you evaluate a @code{defun} special "
"form, you install the necessary equipment to build robots.  It is as if you "
"were in a factory, setting up an assembly line.  Robots with the same name "
"are built according to the same blueprints.  So they have, as it were, the "
"same `model number', but a different `serial number'."
msgstr ""
"Una definici@'on de funci@'on provee impresiones para un robot. Cuando\n"
"se instala una definici@'on de funci@'on, que es, cuando se eval@'ua\n"
"una forma especial @code{defun}, se instala el equipamiento para\n"
"construir robots. Eso es como si tu estuvieras en una f@'abrica,\n"
"configurando una l@'{@dotless{i}}nea de ensamblaje. Los robots con el\n"
"mismo nombre son construidos de acuerdo a las mismas\n"
"impresiones. As@'{@dotless{i}} ellos tienen, como estaban, el mismo\n"
"`n@'umero de modelo', pero un diferente `n@'umero de serie'."

#. type: Plain text
#: emacs-lisp-intro.texi:11305
msgid ""
"We often say that a recursive function `calls itself'.  What we mean is that "
"the instructions in a recursive function cause the Lisp interpreter to run a "
"different function that has the same name and does the same job as the "
"first, but with different arguments."
msgstr ""
"Nosotros con frecuencia decimos que una funci@'on recursiva `se llama\n"
"as@'{@dotless{i}} misma'. Esto significa que las instrucciones en una\n"
"funci@'on recursiva causa que el int@'erprete de Lisp ejecute una\n"
"funci@'on diferente que tiene el mismo nombre y hace el mismo trabajo\n"
"que el primero, pero con diferentes argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:11308
msgid ""
"It is important that the arguments differ from one instance to the next; "
"otherwise, the process will never stop."
msgstr ""
"Es importante que los argumentos difieran desde una instancia a la\n"
"siguiente; de otro modo, el proceso nunca parar@'a."

#. type: subsection
#: emacs-lisp-intro.texi:11310
#, no-wrap
msgid "The Parts of a Recursive Definition"
msgstr "Las partes de una definici@'on recursiva"

#. type: cindex
#: emacs-lisp-intro.texi:11311
#, no-wrap
msgid "Parts of a Recursive Definition"
msgstr "Partes de una Definici@'on Recursiva"

#. type: Plain text
#: emacs-lisp-intro.texi:11316
msgid ""
"A recursive function typically contains a conditional expression which has "
"three parts:"
msgstr ""
"Una funci@'on recursiva t@'{@dotless{i}}picamente contiene una\n"
"expresi@'on condicional que tiene tres partes:"

#. type: enumerate
#: emacs-lisp-intro.texi:11321
msgid ""
"A true-or-false-test that determines whether the function is called again, "
"here called the @dfn{do-again-test}."
msgstr ""
"Un true-or-false-test que determina si la funci@'on se llama de\n"
"nuevo, aqu@'{@dotless{i}} se llama el @dfn{do-again-test}."

#. type: enumerate
#: emacs-lisp-intro.texi:11325
msgid ""
"The name of the function.  When this name is called, a new instance of the "
"function---a new robot, as it were---is created and told what to do."
msgstr ""
"El nombre de la funci@'on. Cuando este nombre se llama, es una nueva\n"
"instancia de la funci@'on --- un nuevo robot, as@'{@dotless{i}} --- se\n"
"crea y se dice qu@'e hacer."

#. type: enumerate
#: emacs-lisp-intro.texi:11333
msgid ""
"An expression that returns a different value each time the function is "
"called, here called the @dfn{next-step-expression}.  Consequently, the "
"argument (or arguments) passed to the new instance of the function will be "
"different from that passed to the previous instance.  This causes the "
"conditional expression, the @dfn{do-again-test}, to test false after the "
"correct number of repetitions."
msgstr ""
"Una expresi@'on que devuelve un valor diferente cada vez que la\n"
"funci@'on se llama, aqu@'{@dotless{i}} llamada la\n"
"@dfn{next-step-expression}. Consecuentemente, el argumento (o\n"
"argumentos) pasados a la nueva instancia de la funci@'on ser@'an\n"
"diferentes puesto que se pasa a la instancia previa. Esto causa la\n"
"expresi@'on condicional, que el @dfn{do-again-test}, devuelva\n"
"falso despu@'es del n@'umero correcto de repeticiones."

#. type: Plain text
#: emacs-lisp-intro.texi:11340
msgid ""
"Recursive functions can be much simpler than any other kind of function.  "
"Indeed, when people first start to use them, they often look so mysteriously "
"simple as to be incomprehensible.  Like riding a bicycle, reading a "
"recursive function definition takes a certain knack which is hard at first "
"but then seems simple."
msgstr ""
"Las funciones recursivas pueden ser m@'as simples que cualquier otro\n"
"tipo de funciones. De manera profunda, cuando la gente empieza a\n"
"usarlas, con frecuencia se miran as@'{@dotless{i}} misteriosamente\n"
"de manera tan simple como incompresible. Como montar en bicicleta, leer una\n"
"funci@'on recursiva es duro al principio, pero despu@'es es simple."

#. type: Plain text
#: emacs-lisp-intro.texi:11344
msgid ""
"There are several different common recursive patterns.  A very simple "
"pattern looks like this:"
msgstr ""
"Hay varios patrones recursivos diferentes. Un patr@'on muy simple se\n"
"parece a:"

#. type: group
#: emacs-lisp-intro.texi:11353
#, no-wrap
msgid ""
"(defun @var{name-of-recursive-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (if @var{do-again-test}\n"
"    @var{body}@dots{}\n"
"    (@var{name-of-recursive-function}\n"
"         @var{next-step-expression})))\n"
msgstr ""
"(defun @var{name-of-recursive-function} (@var{argument-list})\n"
"  \"@var{documentation}@dots{}\"\n"
"  (if @var{do-again-test}\n"
"    @var{body}@dots{}\n"
"    (@var{name-of-recursive-function}\n"
"         @var{next-step-expression})))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11358
msgid ""
"Each time a recursive function is evaluated, a new instance of it is created "
"and told what to do.  The arguments tell the instance what to do."
msgstr ""
"Cada vez que una funci@'on recursiva es evaluada, una nueva instancia \n"
"se crea y se dice qu@'e hacer. Los argumentos le dicen a la instancia\n"
"qu@'e hacer."

#. type: Plain text
#: emacs-lisp-intro.texi:11361
msgid ""
"An argument is bound to the value of the next-step-expression.  Each "
"instance runs with a different value of the next-step-expression."
msgstr ""
"Un argumento se empareja al valor de la next-step-expresion. Cada\n"
"instancia se ejecuta con un valor diferente de la next-step-expression."

#. type: Plain text
#: emacs-lisp-intro.texi:11363
msgid "The value in the next-step-expression is used in the do-again-test."
msgstr "El valor en la next-step-expression es usado en la do-again-test."

#. type: Plain text
#: emacs-lisp-intro.texi:11369
msgid ""
"The value returned by the next-step-expression is passed to the new instance "
"of the function, which evaluates it (or some transmogrification of it) to "
"determine whether to continue or stop.  The next-step-expression is designed "
"so that the do-again-test returns false when the function should no longer "
"be repeated."
msgstr ""
"El valor devuelto por la next-step-expression es pasada a las nuevas\n"
"instancias de la funci@'on, que lo eval@'ua (o alguna transformaci@'on\n"
"de eso) para determinar si continuar o parar. El next-step-expression\n"
"est@'a dise@~nado as@'{@dotless{i}} que el do-again-test devuelve\n"
"falso cuando la funci@'on no se repetir@'{@dotless{i}}a mucho."

#. type: Plain text
#: emacs-lisp-intro.texi:11372
msgid ""
"The do-again-test is sometimes called the @dfn{stop condition}, since it "
"stops the repetitions when it tests false."
msgstr ""
"El do-again-test es algunas veces llamado la @dfn{condici@'on de\n"
"parar}, puesto que sirve para parar las repeticiones cuando se devuelve\n"
"falso."

#. type: subsection
#: emacs-lisp-intro.texi:11374
#, no-wrap
msgid "Recursion with a List"
msgstr "Recursi@'on con una lista"

#. type: Plain text
#: emacs-lisp-intro.texi:11379
msgid ""
"The example of a @code{while} loop that printed the elements of a list of "
"numbers can be written recursively.  Here is the code, including an "
"expression to set the value of the variable @code{animals} to a list."
msgstr ""
"El ejemplo de un bucle @code{while} que imprimi@'o los elementos de\n"
"una lista de n@'umeros puede ser escrito\n"
"recursivamente. Aqu@'{@dotless{i}} est@'a el c@'odigo, incluyendo una\n"
"expresi@'on para asignar el valor de la variable @code{animales} a una\n"
"lista."

#. type: Plain text
#: emacs-lisp-intro.texi:11387
msgid ""
"If you are reading this in Info in Emacs, you can evaluate this expression "
"directly in Info.  Otherwise, you must copy the example to the "
"@file{*scratch*} buffer and evaluate each expression there.  Use @kbd{C-u C-"
"x C-e} to evaluate the @code{(print-elements-recursively animals)} "
"expression so that the results are printed in the buffer; otherwise the Lisp "
"interpreter will try to squeeze the results into the one line of the echo "
"area."
msgstr ""
"Si est@'a leyendo esto en el Info de Emacs, se puede evaluar esta\n"
"expresi@'on directamente en Info. De otro modo, se debe copiar el\n"
"ejemplo al b@'uffer @file{*scratch*} y eval@'ua cada expresi@'on\n"
"aqu@'{@dotless{i}}. Usa @kbd{C-u C-x C-e} para evaluar la expresi@'on\n"
"@code{(print-elements-recursively animals)} as@'{@dotless{i}} que los\n"
"resultado se imprimen en el b@'uffer; de otro modo el int@'erprete\n"
"Lisp intentar@'a presionar los resultados dentro de una\n"
"l@'{@dotless{i}}nea del @'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:11391
msgid ""
"Also, place your cursor immediately after the last closing parenthesis of "
"the @code{print-elements-recursively} function, before the comment.  "
"Otherwise, the Lisp interpreter will try to evaluate the comment."
msgstr ""
"Tambi@'en, posiciona tu cursor inmediatamente despu@'es del @'ultimo\n"
"par@'entesis que cierra la funci@'on\n"
"@code{print-elements-recursively}, antes del comentario. De otro modo,\n"
"el int@'erprete Lisp intentar@'a evaluar el comentario."

#. type: findex
#: emacs-lisp-intro.texi:11392
#, no-wrap
msgid "print-elements-recursively"
msgstr "print-elements-recursively"

#. type: group
#: emacs-lisp-intro.texi:11404 emacs-lisp-intro.texi:11824
#, no-wrap
msgid ""
"(defun print-elements-recursively (list)\n"
"  \"Print each element of LIST on a line of its own.\n"
"Uses recursion.\"\n"
"  (when list                            ; @r{do-again-test}\n"
"        (print (car list))              ; @r{body}\n"
"        (print-elements-recursively     ; @r{recursive call}\n"
"         (cdr list))))                  ; @r{next-step-expression}\n"
"\n"
msgstr ""
"(defun print-elements-recursively (list)\n"
"  \"Imprime cada elemento de la LISTA de la l@'{@dotless{i}}nea en\n"
"  s@'{@dotless{i}}. Usa recursi@'on.\"\n"
"  (when list                            ; @r{do-again-test}\n"
"        (print (car list))              ; @r{body}\n"
"        (print-elements-recursively     ; @r{recursive call}\n"
"         (cdr list))))                  ; @r{next-step-expression}\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11406 emacs-lisp-intro.texi:11826
#, no-wrap
msgid "(print-elements-recursively animals)\n"
msgstr "(print-elements-recursively animales)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11415
msgid ""
"The @code{print-elements-recursively} function first tests whether there is "
"any content in the list; if there is, the function prints the first element "
"of the list, the @sc{car} of the list.  Then the function `invokes itself', "
"but gives itself as its argument, not the whole list, but the second and "
"subsequent elements of the list, the @sc{cdr} of the list."
msgstr ""
"La funci@'on @code{print-elements-recursively} primero chequea si hay\n"
"cualquier contenido en la lista; si lo hay, la funci@'on imprime el\n"
"primer elemento de la lista, el @sc{car} de la lista. Entonces la\n"
"funci@'on se `invoca en s@'{@dotless{i}}', pero da a s@'{@dotless{i}}\n"
"mismo como su argumento, no la lista completa, pero el segundo y\n"
"subsiguientes elementos de la lista, el @sc{cdr} de la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:11420
msgid ""
"Put another way, if the list is not empty, the function invokes another "
"instance of code that is similar to the initial code, but is a different "
"thread of execution, with different arguments than the first instance."
msgstr ""
"Pon otro camino, si la lista no est@'a vac@'{@dotless{i}}a, la\n"
"funci@'on invoca otra instancia de c@'odigo que es similar al c@'odigo\n"
"inicial, pero es un hilo diferente de ejecuci@'on, con diferentes\n"
"argumentos a la primera instancia."

#. type: Plain text
#: emacs-lisp-intro.texi:11424
msgid ""
"Put in yet another way, if the list is not empty, the first robot assembles "
"a second robot and tells it what to do; the second robot is a different "
"individual from the first, but is the same model."
msgstr ""
"Veamos una manera m@'as, si la lista no est@'a vac@'{@dotless{i}}a, el\n"
"primer robot ensambla un segundo robot que cuenta qu@'e hacer; el\n"
"segundo robot es un individuo diferente desde el principio, pero es el\n"
"mismo modelo."

#. type: Plain text
#: emacs-lisp-intro.texi:11431
msgid ""
"When the second evaluation occurs, the @code{when} expression is evaluated "
"and if true, prints the first element of the list it receives as its "
"argument (which is the second element of the original list).  Then the "
"function `calls itself' with the @sc{cdr} of the list it is invoked with, "
"which (the second time around) is the @sc{cdr} of the @sc{cdr} of the "
"original list."
msgstr ""
"Cuando la segunda evaluaci@'on ocurre, la expresi@'on @code{when} se\n"
"eval@'ua y si es verdad, se imprime el primer elemento de la lista que\n"
"recibe como su argumento (que es el segundo elemento de la lista\n"
"original). Entonces la funci@'on `llamarse a s@'{@dotless{i}} mismo'\n"
"con la @sc{cdr} del @sc{cdr} de la lista original."

#. type: Plain text
#: emacs-lisp-intro.texi:11436
msgid ""
"Note that although we say that the function `calls itself', what we mean is "
"that the Lisp interpreter assembles and instructs a new instance of the "
"program.  The new instance is a clone of the first, but is a separate "
"individual."
msgstr ""
"Note que aunque nosotros decimos que la funci@'on `se llama a\n"
"s@'{@dotless{i}} misma', lo que significa es que el int@'erprete Lisp\n"
"ensambla e instruye una nueva instancia del programa. La nueva\n"
"instancia es un clon del primero, pero es un individuo separado."

#. type: Plain text
#: emacs-lisp-intro.texi:11440
msgid ""
"Each time the function `invokes itself', it invokes itself on a shorter "
"version of the original list.  It creates a new instance that works on a "
"shorter list."
msgstr ""
"Cada vez que la funci@'on `se invoca a s@'{@dotless{i}} misma', se\n"
"invoca a s@'{@dotless{i}} misma en una versi@'on de la lista\n"
"original. Eso crea una nueva instancia que funciona como una lista\n"
"ordenada."

#. type: Plain text
#: emacs-lisp-intro.texi:11446
msgid ""
"Eventually, the function invokes itself on an empty list.  It creates a new "
"instance whose argument is @code{nil}.  The conditional expression tests the "
"value of @code{list}.  Since the value of @code{list} is @code{nil}, the "
"@code{when} expression tests false so the then-part is not evaluated.  The "
"function as a whole then returns @code{nil}."
msgstr ""
"Finalmente, la funci@'on se invoca a s@'{@dotless{i}} misma en una\n"
"lista vac@'{@dotless{i}}a. Eso crea una nueva instancia cuyo argumento\n"
"es @code{nil}. La expresi@'on condicional chequea el valor de\n"
"@code{lista}. Desde el valor de @code{lista} a @code{nil}, la\n"
"expresi@'on @code{when} devuelve falso as@'{@dotless{i}} la then-part\n"
"no est@'a evaluada. La funci@'on es como un todo que entonces devuelve\n"
"@code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:11450
msgid ""
"When you evaluate the expression @code{(print-elements-recursively animals)} "
"in the @file{*scratch*} buffer, you see this result:"
msgstr ""
"Cuando se eval@'ua la expresi@'on @code{(print-elements-recursively\n"
"animals)} en el b@'uffer @file{*scratch*}, se ver@'a este resultado:"

#. type: node
#: emacs-lisp-intro.texi:11465
#, no-wrap
msgid "Recursive triangle function"
msgstr "Funci@'on recursiva tri@'angulo"

#. type: findex
#: emacs-lisp-intro.texi:11467
#, no-wrap
msgid "triangle-recursively"
msgstr "triangle-recursively"

#. type: Plain text
#: emacs-lisp-intro.texi:11472
msgid ""
"The @code{triangle} function described in a previous section can also be "
"written recursively.  It looks like this:"
msgstr ""
"La funci@'on @code{triangle} describe en una secci@'on previa si puede\n"
"ser escrita recursivamente. Se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:11483
#, no-wrap
msgid ""
"(defun triangle-recursively (number)\n"
"  \"Return the sum of the numbers 1 through NUMBER inclusive.\n"
"Uses recursion.\"\n"
"  (if (= number 1)                    ; @r{do-again-test}\n"
"      1                               ; @r{then-part}\n"
"    (+ number                         ; @r{else-part}\n"
"       (triangle-recursively          ; @r{recursive call}\n"
"        (1- number)))))               ; @r{next-step-expression}\n"
"\n"
msgstr ""
"(defun triangle-recursively (number)\n"
"  \"Return the sum of the numbers 1 through NUMBER inclusive.\n"
"Uses recursion.\"\n"
"  (if (= number 1)                    ; @r{do-again-test}\n"
"      1                               ; @r{then-part}\n"
"    (+ number                         ; @r{else-part}\n"
"       (triangle-recursively          ; @r{recursive call}\n"
"        (1- number)))))               ; @r{next-step-expression}\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11485
#, no-wrap
msgid "(triangle-recursively 7)\n"
msgstr "(triangle-recursively 7)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11493
msgid ""
"You can install this function by evaluating it and then try it by evaluating "
"@code{(triangle-recursively 7)}.  (Remember to put your cursor immediately "
"after the last parenthesis of the function definition, before the comment.)  "
"The function evaluates to 28."
msgstr ""
"Se puede instalar esta funci@'on evaluando y entonces se intenta\n"
"evaluar @code{(triangle-recursively 7)}. (Recuerda poner tu cursor\n"
"inmediatamente despu@'es de los @'ultimos par@'entesis de la\n"
"definici@'on de la funci@'on, antes del comentario.) La funci@'on\n"
"se eval@'ua a 28."

#. type: Plain text
#: emacs-lisp-intro.texi:11497
msgid ""
"To understand how this function works, let's consider what happens in the "
"various cases when the function is passed 1, 2, 3, or 4 as the value of its "
"argument."
msgstr ""
"Para comprender c@'omo funciona la funci@'on, hay que considerar qu@'e\n"
"ocurre en varios casos cuando la funci@'on se le pasa 1, 2, 3, o 4\n"
"como el valor a su argumento."

#. type: node
#: emacs-lisp-intro.texi:11504
#, no-wrap
msgid "Recursive Example arg of 1 or 2"
msgstr "Ejemplo recursivo y argumento con valor 1 o 2"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:11505
#, no-wrap
msgid "An argument of 1 or 2"
msgstr "Un argumento de 1 o 2"

#. type: Plain text
#: emacs-lisp-intro.texi:11509
msgid "First, what happens if the value of the argument is 1?"
msgstr "Primero, veamos qu@'e ocurre si el valor del argumento es 1."

#. type: Plain text
#: emacs-lisp-intro.texi:11515
msgid ""
"The function has an @code{if} expression after the documentation string.  It "
"tests whether the value of @code{number} is equal to 1; if so, Emacs "
"evaluates the then-part of the @code{if} expression, which returns the "
"number 1 as the value of the function.  (A triangle with one row has one "
"pebble in it.)"
msgstr ""
"La funci@'on tiene una expresi@'on @code{if} despu@'es de la cadena de\n"
"documentaci@'on. Esto chequea si el valor de @code{number} es igual a\n"
"1; si es as@'{@dotless{i}}, Emacs eval@'ua la then-part de la\n"
"expresi@'on @code{if}, que devuelve el n@'umero 1 como el valor de la\n"
"funci@'on. (Un tri@'angulo con una fila tiene un asterisco dentro.)"

#. type: Plain text
#: emacs-lisp-intro.texi:11518
msgid ""
"Suppose, however, that the value of the argument is 2.  In this case, Emacs "
"evaluates the else-part of the @code{if} expression."
msgstr ""
"Sup@'on, sin embargo, que el valor del argumento es 2. En este caso,\n"
"Emacs eval@'ua la parte else de la expresi@'on @code{if}."

#. type: Plain text
#: emacs-lisp-intro.texi:11523
msgid ""
"The else-part consists of an addition, the recursive call to @code{triangle-"
"recursively} and a decrementing action; and it looks like this:"
msgstr ""
"La parte else consiste de una adici@'on, la llamada recursiva para\n"
"@code{triangle-recursively} y una acci@'on de decremento; y se ve "
"as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:11526
#, no-wrap
msgid "(+ number (triangle-recursively (1- number)))\n"
msgstr "(+ number (triangle-recursively (1- number)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11531
msgid ""
"When Emacs evaluates this expression, the innermost expression is evaluated "
"first; then the other parts in sequence.  Here are the steps in detail:"
msgstr ""
"Cuando Emacs eval@'ua esta expresi@'on, la expresi@'on interna es\n"
"evaluada primero; entonces las otras partes en\n"
"secuencia. Aqu@'{@dotless{i}} est@'an los pasos en detalle:"

#. type: item
#: emacs-lisp-intro.texi:11533
#, no-wrap
msgid "Step 1 @w{  } Evaluate the innermost expression."
msgstr "Paso 1 @w{ } Eval@'ua la expresi@'on interna."

#. type: table
#: emacs-lisp-intro.texi:11537
msgid ""
"The innermost expression is @code{(1- number)} so Emacs decrements the value "
"of @code{number} from 2 to 1."
msgstr ""
"La expresi@'on interna es @code{(1- number)} as@'{@dotless{i}} Emacs\n"
"decrementa el valor de @code{number} desde 2 a 1."

#. type: item
#: emacs-lisp-intro.texi:11538
#, no-wrap
msgid "Step 2 @w{  } Evaluate the @code{triangle-recursively} function."
msgstr "Paso 2 @w{ } Eval@'ua la funci@'on @code{triangle-recursively}."

#. type: table
#: emacs-lisp-intro.texi:11545
msgid ""
"The Lisp interpreter creates an individual instance of @code{triangle-"
"recursively}.  It does not matter that this function is contained within "
"itself.  Emacs passes the result Step 1 as the argument used by this "
"instance of the @code{triangle-recursively} function"
msgstr ""
"El int@'erprete Lisp crea una instancia individual de\n"
"@code{triangle-recursively}. Eso no importa que esta funci@'on est@'a\n"
"contenida con s@'{@dotless{i}} misma. Emacs pasa el resultado Paso 1\n"
"como el argumento usado por esta instancia de la funci@'on\n"
"@code{triangle-recursively}"

#. type: table
#: emacs-lisp-intro.texi:11549
msgid ""
"In this case, Emacs evaluates @code{triangle-recursively} with an argument "
"of 1.  This means that this evaluation of @code{triangle-recursively} "
"returns 1."
msgstr ""
"En este caso, Emacs eval@'ua @code{triangle-recursively} con un\n"
"argumento de 1. Esto significa que esta evaluaci@'on de\n"
"@code{triangle-recursively} devuelve 1."

#. type: item
#: emacs-lisp-intro.texi:11550
#, no-wrap
msgid "Step 3 @w{  } Evaluate the value of @code{number}."
msgstr "Paso 3 @w{ } Eval@'ua el valor de @code{number}."

#. type: table
#: emacs-lisp-intro.texi:11554
msgid ""
"The variable @code{number} is the second element of the list that starts "
"with @code{+}; its value is 2."
msgstr ""
"La variable @code{number} es el segundo elemento de la lista que\n"
"empieza con @code{+}; su valor es 2."

#. type: item
#: emacs-lisp-intro.texi:11555
#, no-wrap
msgid "Step 4 @w{  } Evaluate the @code{+} expression."
msgstr "Paso 4 @w{  } Eval@'ua la expresi@'on @code{+}."

#. type: table
#: emacs-lisp-intro.texi:11560
msgid ""
"The @code{+} expression receives two arguments, the first from the "
"evaluation of @code{number} (Step 3) and the second from the evaluation of "
"@code{triangle-recursively} (Step 2)."
msgstr ""
"La expresi@'on @code{+} recibe dos argumentos, el primero desde la\n"
"evaluaci@'on de @code{number} (Paso 3) y el segundo desde la\n"
"evaluaci@'on de @code{triangle-recursively} (Paso 2)."

#. type: table
#: emacs-lisp-intro.texi:11564
msgid ""
"The result of the addition is the sum of 2 plus 1, and the number 3 is "
"returned, which is correct.  A triangle with two rows has three pebbles in "
"it."
msgstr ""
"El resultado de la adici@'on es la suma de 2 + 1, y el n@'umero 3 es\n"
"devuelto, que es correcto. Un tri@'angulo con dos filas tiene tres\n"
"asteriscos ah@'{@dotless{i}}."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:11567
#, no-wrap
msgid "An argument of 3 or 4"
msgstr "Un argumento de 3 o 4"

#. type: Plain text
#: emacs-lisp-intro.texi:11571
msgid ""
"Suppose that @code{triangle-recursively} is called with an argument of 3."
msgstr ""
"Sup@'on que @code{triangle-recursively} es llamado con un argumento de\n"
"3."

#. type: item
#: emacs-lisp-intro.texi:11573
#, no-wrap
msgid "Step 1 @w{  } Evaluate the do-again-test."
msgstr "Paso 1 @w{ } Eval@'ua la do-again-test."

#. type: table
#: emacs-lisp-intro.texi:11580
msgid ""
"The @code{if} expression is evaluated first.  This is the do-again test and "
"returns false, so the else-part of the @code{if} expression is evaluated.  "
"(Note that in this example, the do-again-test causes the function to call "
"itself when it tests false, not when it tests true.)"
msgstr ""
"La expresi@'on @code{if} se eval@'ua primero. Esto es el test do-again\n"
"y devuelve falso, as@'{@dotless{i}} la parte else de la expresi@'on\n"
"@code{if} es evaluada. (Note que en este ejemplo, el do-again-test\n"
"causa la funci@'on para llamarse a s@'{@dotless{i}} misma cuando eso\n"
"se chequea como falso, no cuando eso se chequea como verdadero.)"

#. type: item
#: emacs-lisp-intro.texi:11581
#, no-wrap
msgid "Step 2 @w{  } Evaluate the innermost expression of the else-part."
msgstr "Paso 2 @w{ } Eval@'ua la expresi@'on propia de la parte else."

#. type: table
#: emacs-lisp-intro.texi:11585
msgid ""
"The innermost expression of the else-part is evaluated, which decrements 3 "
"to 2.  This is the next-step-expression."
msgstr ""
"La expresi@'on propia de la parte que es evaluada, decrementa 3 a\n"
"2. Esta la next-step-expression."

#. type: item
#: emacs-lisp-intro.texi:11586
#, no-wrap
msgid "Step 3 @w{  } Evaluate the @code{triangle-recursively} function."
msgstr "Paso 3 @w{ } Eval@'ua la funci@'on @code{triangle-recursively}."

#. type: table
#: emacs-lisp-intro.texi:11589
msgid "The number 2 is passed to the @code{triangle-recursively} function."
msgstr "El n@'umero 2 es pasado a la funci@'on @code{triangle-recursively}."

#. type: table
#: emacs-lisp-intro.texi:11593
msgid ""
"We already know what happens when Emacs evaluates @code{triangle-"
"recursively} with an argument of 2.  After going through the sequence of "
"actions described earlier, it returns a value of 3.  So that is what will "
"happen here."
msgstr ""
"Nosotros ya sabemos qu@'e ocurre cuando Emacs eval@'ua\n"
"@code{triangle-recursively} con un argumento de 2. Despu@'es de ir a\n"
"trav@'es de la secuencia de acciones descritas temprano, eso devuelve\n"
"un valor de 3. As@'{@dotless{i}} que es lo que ocurrir@'a aqu@'{@dotless{i}}."

#. type: item
#: emacs-lisp-intro.texi:11594
#, no-wrap
msgid "Step 4 @w{  } Evaluate the addition."
msgstr "Paso 4 @w{ } Eval@'ua la adici@'on."

#. type: table
#: emacs-lisp-intro.texi:11598
msgid ""
"3 will be passed as an argument to the addition and will be added to the "
"number with which the function was called, which is 3."
msgstr ""
"3 ser@'a pasado como un argumento para la adici@'on y ser@'a a@~nadido\n"
"al n@'umero con el que la funci@'on se llam@'o, que es 3."

#. type: Plain text
#: emacs-lisp-intro.texi:11602
msgid "The value returned by the function as a whole will be 6."
msgstr "El valor devuelto por la funci@'on como un todo ser@'a 6."

#. type: Plain text
#: emacs-lisp-intro.texi:11606
msgid ""
"Now that we know what will happen when @code{triangle-recursively} is called "
"with an argument of 3, it is evident what will happen if it is called with "
"an argument of 4:"
msgstr ""
"Ahora que sabemos qu@'e ocurrir@'a cuando @code{triangle-recursively}\n"
"llama con un argumento 3, es evidente lo que ocurrir@'a si se llama\n"
"con el argumento 4:"

#. type: quotation
#: emacs-lisp-intro.texi:11610
msgid "In the recursive call, the evaluation of"
msgstr "En la llamada recursiva, la evaluaci@'on de"

#. type: smallexample
#: emacs-lisp-intro.texi:11613
#, no-wrap
msgid "(triangle-recursively (1- 4))\n"
msgstr "(triangle-recursively (1- 4))\n"

#. type: quotation
#: emacs-lisp-intro.texi:11618
msgid "will return the value of evaluating"
msgstr "devuelve el valor de evaluar"

#. type: smallexample
#: emacs-lisp-intro.texi:11621
#, no-wrap
msgid "(triangle-recursively 3)\n"
msgstr "(triangle-recursively 3)\n"

#. type: quotation
#: emacs-lisp-intro.texi:11626
msgid ""
"which is 6 and this value will be added to 4 by the addition in the third "
"line."
msgstr ""
"que es 6 este valor ser@'a a@~nadido a 4 por la adici@'on en la\n"
"tercera l@'{@dotless{i}}nea."

#. type: Plain text
#: emacs-lisp-intro.texi:11630
msgid "The value returned by the function as a whole will be 10."
msgstr "El valor devuelto por la funci@'on como un todo ser@'a 10."

#. type: Plain text
#: emacs-lisp-intro.texi:11635
msgid ""
"Each time @code{triangle-recursively} is evaluated, it evaluates a version "
"of itself---a different instance of itself---with a smaller argument, until "
"the argument is small enough so that it does not evaluate itself."
msgstr ""
"Cada vez que @code{triangle-recursively} se eval@'ua, se interpreta\n"
"una versi@'on de s@'{@dotless{i}} misma --- una instancia diferente en\n"
"s@'{@dotless{i}} --- con un peque@~no argumento, hasta que el\n"
"argumento es suficientemente peque@~no as@'{@dotless{i}} que no se\n"
"eval@'ua en s@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:11638
msgid ""
"Note that this particular design for a recursive function requires that "
"operations be deferred."
msgstr ""
"Note que este particular dise@~no para una funci@'on recursiva\n"
"requiere que las operaciones sean diferidas."

#. type: Plain text
#: emacs-lisp-intro.texi:11647
msgid ""
"Before @code{(triangle-recursively 7)} can calculate its answer, it must "
"call @code{(triangle-recursively 6)}; and before @code{(triangle-recursively "
"6)} can calculate its answer, it must call @code{(triangle-recursively 5)}; "
"and so on.  That is to say, the calculation that @code{(triangle-recursively "
"7)} makes must be deferred until @code{(triangle-recursively 6)} makes its "
"calculation; and @code{(triangle-recursively 6)} must defer until "
"@code{(triangle-recursively 5)} completes; and so on."
msgstr ""
"Antes de que @code{(triangle-recursively 7)} pueda calcular su\n"
"respuesta, debe llamarse a @code{(triangle-recursively 6)}; y antes a\n"
"@code{(triangle-recursively 5)}; y as@'{@dotless{i}}. Esto es decir,\n"
"que el c@'alculo de @code{(triangle-recursively 7)} a crear debe ser\n"
"diferido hasta que @code{(triangle-recursively 6)} haga su c@'alculo;\n"
"y @code{(triangle-recursively 5)} lo complete; y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:11652
msgid ""
"If each of these instances of @code{triangle-recursively} are thought of as "
"different robots, the first robot must wait for the second to complete its "
"job, which must wait until the third completes, and so on."
msgstr ""
"Si cada una de estas instancias de @code{triangle-recursively} son\n"
"pensadas como diferentes robots, el primer robot debe esperar por el\n"
"segundo para completar su trabajo, que debe esperar hasta los terceros\n"
"completos, y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:11655
msgid ""
"There is a way around this kind of waiting, which we will discuss in @ref{No "
"Deferment, , Recursion without Deferments}."
msgstr ""
"Hay un camino alrededor de este tipo de espera, que se discutir@'a en\n"
"@ref{Sin Aplazar, , Recursi@'on sin Defermentos.}"

#. type: node
#: emacs-lisp-intro.texi:11656
#, no-wrap
msgid "Recursion with cond"
msgstr "Recursi@'on con cond"

#. type: subsection
#: emacs-lisp-intro.texi:11657
#, no-wrap
msgid "Recursion Example Using @code{cond}"
msgstr "Ejemplo de recursi@'on usando @code{cond}"

#. type: findex
#: emacs-lisp-intro.texi:11658
#, no-wrap
msgid "cond"
msgstr "cond"

#. type: Plain text
#: emacs-lisp-intro.texi:11664
msgid ""
"The version of @code{triangle-recursively} described earlier is written with "
"the @code{if} special form.  It can also be written using another special "
"form called @code{cond}.  The name of the special form @code{cond} is an "
"abbreviation of the word @samp{conditional}."
msgstr ""
"La versi@'on de @code{triangle-recursively} antes descrita se escribi@'o\n"
"con la forma especial @code{if}. Eso puede tambi@'en ser escrita\n"
"usando otra forma especial llamada @code{cond}. El nombre de la forma\n"
"especial @code{cond} es una abreviaci@'on de la palabra @samp{conditional}."

#. type: Plain text
#: emacs-lisp-intro.texi:11668
msgid ""
"Although the @code{cond} special form is not used as often in the Emacs Lisp "
"sources as @code{if}, it is used often enough to justify explaining it."
msgstr ""
"Aunque la forma especial @code{cond} no se usa con frecuencia en las\n"
"fuentes de Emacs como @code{if}, se usa con suficiente frecuencia para\n"
"justificarse explicando."

#. type: Plain text
#: emacs-lisp-intro.texi:11671
msgid "The template for a @code{cond} expression looks like this:"
msgstr "La plantilla para una expresi@'on @code{cond} se parece a:"

#. type: group
#: emacs-lisp-intro.texi:11676
#, no-wrap
msgid ""
"(cond\n"
" @var{body}@dots{})\n"
msgstr ""
"(cond\n"
" @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11681
msgid "where the @var{body} is a series of lists."
msgstr "donde el @var{body} es una serie de listas."

#. type: Plain text
#: emacs-lisp-intro.texi:11684
msgid "Written out more fully, the template looks like this:"
msgstr "Escrito de manera m@'as completa, la plantilla se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:11692
#, no-wrap
msgid ""
"(cond\n"
" (@var{first-true-or-false-test} @var{first-consequent})\n"
" (@var{second-true-or-false-test} @var{second-consequent})\n"
" (@var{third-true-or-false-test} @var{third-consequent})\n"
"  @dots{})\n"
msgstr ""
"(cond\n"
" (@var{first-true-or-false-test} @var{first-consequent})\n"
" (@var{second-true-or-false-test} @var{second-consequent})\n"
" (@var{third-true-or-false-test} @var{third-consequent})\n"
"  @dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11699
msgid ""
"When the Lisp interpreter evaluates the @code{cond} expression, it evaluates "
"the first element (the @sc{car} or true-or-false-test) of the first "
"expression in a series of expressions within the body of the @code{cond}."
msgstr ""
"Cuando el int@'erprete Lisp eval@'ua la expresi@'on @code{cond},\n"
"eval@'ua el primer elemento (el @sc{car} o true-or-false-test) de la\n"
"primera expresi@'on en una serie de expresiones con el cuerpo del\n"
"@code{cond}."

#. type: Plain text
#: emacs-lisp-intro.texi:11709
msgid ""
"If the true-or-false-test returns @code{nil} the rest of that expression, "
"the consequent, is skipped and the true-or-false-test of the next expression "
"is evaluated.  When an expression is found whose true-or-false-test returns "
"a value that is not @code{nil}, the consequent of that expression is "
"evaluated.  The consequent can be one or more expressions.  If the "
"consequent consists of more than one expression, the expressions are "
"evaluated in sequence and the value of the last one is returned.  If the "
"expression does not have a consequent, the value of the true-or-false-test "
"is returned."
msgstr ""
"Si el true-or-false-test devuelve @code{nil} el resto de esta\n"
"expresi@'on, el consecuente, se descarta y el true-or-false-test de la\n"
"siguiente expresi@'on se eval@'ua. Cuando una expresi@'on encuentra un\n"
"true-or-false-test cuyo valor no es @code{nil}, el consecuente de esta\n"
"expresi@'on se eval@'ua. El consecuente puede ser una o m@'as\n"
"expresiones. Si el consecuente consiste de m@'as de una expresi@'on,\n"
"las expresiones son evaluadas en secuencia y el valor del @'ultimo se\n"
"devuelve. Si la expresi@'on no tiene un consecuente, se devuelve el\n"
"valor del true-or-false-test."

#. type: Plain text
#: emacs-lisp-intro.texi:11712
msgid ""
"If none of the true-or-false-tests test true, the @code{cond} expression "
"returns @code{nil}."
msgstr ""
"Si ninguno del test true-or-false-tests es cierto, la expresi@'on\n"
"@code{cond} devuelve @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:11715
msgid ""
"Written using @code{cond}, the @code{triangle} function looks like this:"
msgstr ""
"Escrito usando @code{cond}, la funci@'on @code{triangle} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:11723
#, no-wrap
msgid ""
"(defun triangle-using-cond (number)\n"
"  (cond ((<= number 0) 0)\n"
"        ((= number 1) 1)\n"
"        ((> number 1)\n"
"         (+ number (triangle-using-cond (1- number))))))\n"
msgstr ""
"(defun triangle-using-cond (number)\n"
"  (cond ((<= number 0) 0)\n"
"        ((= number 1) 1)\n"
"        ((> number 1)\n"
"         (+ number (triangle-using-cond (1- number))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11731
msgid ""
"In this example, the @code{cond} returns 0 if the number is less than or "
"equal to 0, it returns 1 if the number is 1 and it evaluates @code{(+ number "
"(triangle-using-cond (1- number)))} if the number is greater than 1."
msgstr ""
"En este ejemplo, el @code{cond} devuelve 0 si el n@'umero es menor o\n"
"igual a 0, eso devuelve 1 si el n@'umero es 1 y eso eval@'ua @code{(+\n"
"number (triangle-using-cond (1- number)))} si el n@'umero es m@'as\n"
"grandes que 1."

#. type: Plain text
#: emacs-lisp-intro.texi:11739
msgid ""
"Here are three common recursive patterns.  Each involves a list.  Recursion "
"does not need to involve lists, but Lisp is designed for lists and this "
"provides a sense of its primal capabilities."
msgstr ""
"Aqu@'{@dotless{i}} hay tres patrones recursivos. Cada uno involucra\n"
"una lista. La recursi@'on no se necesita para involucrar listas, pero\n"
"Lisp se dise@~na para listas y esto provee un sentido de sus\n"
"capacidades primarias."

#. type: node
#: emacs-lisp-intro.texi:11746
#, no-wrap
msgid "Every"
msgstr "Cada"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:11747
#, no-wrap
msgid "Recursive Pattern: @emph{every}"
msgstr "Patr@'on recursivo: @emph{every}"

#. type: cindex
#: emacs-lisp-intro.texi:11748
#, no-wrap
msgid "Every, type of recursive pattern"
msgstr "Every, tipo de patr@'on recursivo"

#. type: cindex
#: emacs-lisp-intro.texi:11749
#, no-wrap
msgid "Recursive pattern: every"
msgstr "Patr@'on recursivo: every"

#. type: Plain text
#: emacs-lisp-intro.texi:11753
msgid ""
"In the @code{every} recursive pattern, an action is performed on every "
"element of a list."
msgstr ""
"En el patr@'on recursivo @code{every}, se desarrolla una acci@'on por\n"
"cada elemento de una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:11756
msgid "The basic pattern is:"
msgstr "El patr@'on b@'asico es:"

#. type: itemize
#: emacs-lisp-intro.texi:11760 emacs-lisp-intro.texi:11915
msgid "If a list be empty, return @code{nil}."
msgstr "Si una lista es vac@'{@dotless{i}}a, devuelve @code{nil}."

#. type: itemize
#: emacs-lisp-intro.texi:11770
msgid ""
"Else, act on the beginning of the list (the @sc{car} of the list)  @itemize "
"@minus @item through a recursive call by the function on the rest (the "
"@sc{cdr}) of the list, @item and, optionally, combine the acted-on element, "
"using @code{cons}, with the results of acting on the rest.  @end itemize"
msgstr ""
"Si no, se va al principio de la lista (el @sc{car} de la lista) actuando\n"
"@itemize \n"
"@item a trav@'es de una llamada recursiva por la funci@'on en el resto\n"
"(el @sc{cdr}) de la lista,\n"
"@item y, opcionalmente, se combina el elemento sobre el que act@'ua,\n"
"usando @code{cons}, con los resultados de actuar en el resto.\n"
"@end itemize "

#. type: Plain text
#: emacs-lisp-intro.texi:11774
msgid "Here is example:"
msgstr "Aqu@'{@dotless{i}} est@'a el ejemplo:"

#. type: group
#: emacs-lisp-intro.texi:11784
#, no-wrap
msgid ""
"(defun square-each (numbers-list)\n"
"  \"Square each of a NUMBERS LIST, recursively.\"\n"
"  (if (not numbers-list)                ; do-again-test\n"
"      nil\n"
"    (cons\n"
"     (* (car numbers-list) (car numbers-list))\n"
"     (square-each (cdr numbers-list))))) ; next-step-expression\n"
msgstr ""
"(defun square-each (numbers-list)\n"
"  \"El cuadrado de cada LISTA DE NUMEROS, recursivamente.\"\n"
"  (if (not numbers-list)                ; test-hazlo-de-nuevo\n"
"      nil\n"
"    (cons\n"
"     (* (car numbers-list) (car numbers-list))\n"
"     (square-each (cdr numbers-list))))) ; expresion-siguiente-paso\n"

#. type: group
#: emacs-lisp-intro.texi:11789
#, no-wrap
msgid ""
"(square-each '(1 2 3))\n"
"    @result{} (1 4 9)\n"
msgstr ""
"(square-each '(1 2 3))\n"
"    @result{} (1 4 9)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11797
msgid ""
"If @code{numbers-list} is empty, do nothing.  But if it has content, "
"construct a list combining the square of the first number in the list with "
"the result of the recursive call."
msgstr ""
"Si @code{numbers-list} est@'a vac@'{@dotless{i}}o, no hay que hacer\n"
"nada. Pero si tiene contenido, se construye una lista combinando el\n"
"cuadrado del primer n@'umero en la lista con el resultado de la\n"
"llamada recursiva."

#. type: Plain text
#: emacs-lisp-intro.texi:11802
msgid ""
"(The example follows the pattern exactly: @code{nil} is returned if the "
"numbers' list is empty.  In practice, you would write the conditional so it "
"carries out the action when the numbers' list is not empty.)"
msgstr ""
"(El ejemplo sigue el patr@'on exactamente: se devuelve @code{nil} si\n"
"la lista de n@'umeros es vac@'{@dotless{i}}a. En la pr@'actica, se\n"
"escribir@'{@dotless{i}}a el condicional, as@'{@dotless{i}} se ejecuta\n"
"la acci@'on cuando la lista de n@'umeros no es vac@'{@dotless{i}}a.)"

#. type: Plain text
#: emacs-lisp-intro.texi:11807
msgid ""
"The @code{print-elements-recursively} function (@pxref{Recursion with "
"list, , Recursion with a List}) is another example of an @code{every} "
"pattern, except in this case, rather than bring the results together using "
"@code{cons}, we print each element of output."
msgstr ""
"La funci@'on @code{print-elements-recursively} (@pxref{Recursi@'on con\n"
"lista, , Recursi@'on con una Lista}) es otro ejemplo de un patr@'on\n"
"@code{every}, excepto en este caso, en vez de traer los resultados\n"
"juntos usando @code{cons}, se imprime cada elemento de salida."

#. type: Plain text
#: emacs-lisp-intro.texi:11810
msgid "The @code{print-elements-recursively} function looks like this:"
msgstr "La funci@'on @code{print-elements-recursively} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:11814
#, no-wrap
msgid "(setq animals '(gazelle giraffe lion tiger))\n"
msgstr "(setq animales '(gacela jirafa leon tigre))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11831
msgid "The pattern for @code{print-elements-recursively} is:"
msgstr "El patr@'on para @code{print-elements-recursively} es:"

#. type: itemize
#: emacs-lisp-intro.texi:11835
msgid "When the list is empty, do nothing."
msgstr "Cuando la lista est@'a vac@'{@dotless{i}}a, no hacer nada."

#. type: itemize
#: emacs-lisp-intro.texi:11843
msgid ""
"But when the list has at least one element, @itemize @minus @item act on the "
"beginning of the list (the @sc{car} of the list), @item and make a recursive "
"call on the rest (the @sc{cdr}) of the list.  @end itemize"
msgstr ""
"Pero cuando la lista tiene al menos un elemento, \n"
"@itemize \n"
"@item act@'ua al principio de la lista (el @sc{car} de la lista), \n"
"@item y crea una llamada recursiva en el resto (el @sc{cdr} de la lista).\n"
"@end itemize "

#. type: node
#: emacs-lisp-intro.texi:11845
#, no-wrap
msgid "Accumulate"
msgstr "Acumular"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:11846
#, no-wrap
msgid "Recursive Pattern: @emph{accumulate}"
msgstr "Patr@'on recursivo: @emph{accumulate}"

#. type: cindex
#: emacs-lisp-intro.texi:11847
#, no-wrap
msgid "Accumulate, type of recursive pattern"
msgstr "Acumular, tipo de patr@'on recursivo"

#. type: cindex
#: emacs-lisp-intro.texi:11848
#, no-wrap
msgid "Recursive pattern: accumulate"
msgstr "Patr@'on recursivo: acumular"

#. type: Plain text
#: emacs-lisp-intro.texi:11854
msgid ""
"Another recursive pattern is called the @code{accumulate} pattern.  In the "
"@code{accumulate} recursive pattern, an action is performed on every element "
"of a list and the result of that action is accumulated with the results of "
"performing the action on the other elements."
msgstr ""
"Otro patr@'on recursivo es llamado el patr@'on @code{accumulate}. En\n"
"el patr@'on recursivo @code{accumulate}, se realiza una acci@'on en\n"
"cada elemento de una lista y el resultado de esta acci@'on se acumula\n"
"con los resultados de desarrollar la acci@'on en otros elementos."

#. type: Plain text
#: emacs-lisp-intro.texi:11857
msgid ""
"This is very like the `every' pattern using @code{cons}, except that "
"@code{cons} is not used, but some other combiner."
msgstr ""
"Esto es como `cada' patr@'on usando @code{cons}, excepto que este\n"
"@code{cons} no se est@'e usando, pero que alg@'un otro combine."

#. type: Plain text
#: emacs-lisp-intro.texi:11860
msgid "The pattern is:"
msgstr "El patr@'on es:"

#. type: itemize
#: emacs-lisp-intro.texi:11864
msgid "If a list be empty, return zero or some other constant."
msgstr ""
"Si una lista est@'a vac@'{@dotless{i}}a, devuelve cero o alguna otra "
"constante."

#. type: itemize
#: emacs-lisp-intro.texi:11873
msgid ""
"Else, act on the beginning of the list (the @sc{car} of the list), @itemize "
"@minus @item and combine that acted-on element, using @code{+} or some other "
"combining function, with @item a recursive call by the function on the rest "
"(the @sc{cdr}) of the list.  @end itemize"
msgstr ""
"Lo dem@'as, act@'ua al principio de la lista (el @sc{car} de la\n"
"lista), \n"
"@itemize \n"
"@item y combinar este elemento que act@'ua, usando @code{+} o alguna\n"
"otra funci@'on de combinaci@'on, con @item una llamada recursiva por\n"
"la funci@'on en el resto (el @sc{cdr}) de la lista.\n"
"@end itemize "

#. type: Plain text
#: emacs-lisp-intro.texi:11877
msgid "Here is an example:"
msgstr "Aqu@'{@dotless{i}} hay un ejemplo:"

#. type: group
#: emacs-lisp-intro.texi:11885
#, no-wrap
msgid ""
"(defun add-elements (numbers-list)\n"
"  \"Add the elements of NUMBERS-LIST together.\"\n"
"  (if (not numbers-list)\n"
"      0\n"
"    (+ (car numbers-list) (add-elements (cdr numbers-list)))))\n"
msgstr ""
"(defun add-elements (numbers-list)\n"
"  \"A@~nade los elementos de NUMBERS-LIST juntos.\"\n"
"  (if (not numbers-list)\n"
"      0\n"
"    (+ (car numbers-list) (add-elements (cdr numbers-list)))))\n"

#. type: group
#: emacs-lisp-intro.texi:11890
#, no-wrap
msgid ""
"(add-elements '(1 2 3 4))\n"
"    @result{} 10\n"
msgstr ""
"(add-elements '(1 2 3 4))\n"
"    @result{} 10\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11895
msgid ""
"@xref{Files List, , Making a List of Files}, for an example of the "
"accumulate pattern."
msgstr ""
"@xref{Listar ficheros, , Creando una lista de ficheros}, para un ejemplo\n"
"del patr@'on acumulado."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:11897
#, no-wrap
msgid "Recursive Pattern: @emph{keep}"
msgstr "Patr@'on recursivo: @emph{keep}"

#. type: cindex
#: emacs-lisp-intro.texi:11898
#, no-wrap
msgid "Keep, type of recursive pattern"
msgstr "Keep, el tipo de patr@'on recursivo"

#. type: cindex
#: emacs-lisp-intro.texi:11899
#, no-wrap
msgid "Recursive pattern: keep"
msgstr "Patr@'on recursivo: keep"

#. type: Plain text
#: emacs-lisp-intro.texi:11905
msgid ""
"A third recursive pattern is called the @code{keep} pattern.  In the "
"@code{keep} recursive pattern, each element of a list is tested; the element "
"is acted on and the results are kept only if the element meets a criterion."
msgstr ""
"Un tercer patr@'on es llamado el patr@'on @code{keep}. En el patr@'on\n"
"recursivo @code{keep}, se chequea cada elemento de una lista; se\n"
"act@'ua en el elemento y los resultados se guardan solo si el elemento\n"
"encuentra un criterio."

#. type: Plain text
#: emacs-lisp-intro.texi:11908
msgid ""
"Again, this is very like the `every' pattern, except the element is skipped "
"unless it meets a criterion."
msgstr ""
"De nuevo, esto se parece al patr@'on `every', excepto que el elemento\n"
"se descarta a menos que se encuentre un criterio."

#. type: Plain text
#: emacs-lisp-intro.texi:11911
msgid "The pattern has three parts:"
msgstr "El patr@'on tiene tres partes:"

#. type: itemize
#: emacs-lisp-intro.texi:11924
msgid ""
"Else, if the beginning of the list (the @sc{car} of the list) passes a test "
"@itemize @minus @item act on that element and combine it, using @code{cons} "
"with @item a recursive call by the function on the rest (the @sc{cdr}) of "
"the list.  @end itemize"
msgstr ""
"Lo dem@'as, si el principio de la lista (el @sc{car} de la lista) pasa\n"
"un test \n"
"@itemize \n"
"@item actua en este elemento y lo combina, usando @code{cons} con\n"
"@item una llamada recursiva por la funci@'on en el resto (el @sc{cdr}\n"
"de la lista.\n"
"@end itemize "

#. type: itemize
#: emacs-lisp-intro.texi:11933
msgid ""
"Otherwise, if the beginning of the list (the @sc{car} of the list) fails the "
"test @itemize @minus @item skip on that element, @item and, recursively call "
"the function on the rest (the @sc{cdr}) of the list.  @end itemize"
msgstr ""
"De otro modo, si el principio de la lista (el @sc{car} de la lista)\n"
"falla el test \n"
"@itemize \n"
"@item para en este elemento, \n"
"@item y, recursivamente llama la funci@'on al resto (el @sc{cdr}) de\n"
"la lista. \n"
"@end itemize "

#. type: Plain text
#: emacs-lisp-intro.texi:11937
msgid "Here is an example that uses @code{cond}:"
msgstr "Aqu@'{@dotless{i}} hay un ejemplo que usa @code{cond}:"

#. type: group
#: emacs-lisp-intro.texi:11945
#, no-wrap
msgid ""
"(defun keep-three-letter-words (word-list)\n"
"  \"Keep three letter words in WORD-LIST.\"\n"
"  (cond\n"
"   ;; First do-again-test: stop-condition\n"
"   ((not word-list) nil)\n"
"\n"
msgstr ""
"(defun manten-tres-letras (lista-palabras)\n"
"  \"Guarda 3 palabras en WORD-LIST.\"\n"
"  (cond\n"
"   ;; Primero do-again-test: stop-condition\n"
"   ((not lista-palabras) nil)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11950
#, no-wrap
msgid ""
"   ;; Second do-again-test: when to act\n"
"   ((eq 3 (length (symbol-name (car word-list))))\n"
"    ;; combine acted-on element with recursive call on shorter list\n"
"    (cons (car word-list) (keep-three-letter-words (cdr word-list))))\n"
"\n"
msgstr ""
"   ;; Segundo do-again-test: cuando actuar\n"
"   ((eq 3 (length (symbol-name (car lista-palabras))))\n"
"    ;; combina el elemento que act@'ua con la llamada recursiva en la\n"
"    ;; lista ordenada\n"
"    (cons (car lista-palabras) (manten-tres-letras (cdr lista-palabras))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:11954
#, no-wrap
msgid ""
"   ;; Third do-again-test: when to skip element;\n"
"   ;;   recursively call shorter list with next-step expression\n"
"   (t (keep-three-letter-words (cdr word-list)))))\n"
msgstr ""
"   ;; Tercero do-again-test: cuando se descarte el elemento;\n"
"   ;; llama recursivamente a la lista ordenada con la next-step expression\n"
"   (t (manten-tres-letras (cdr lista-palabras)))))\n"

#. type: group
#: emacs-lisp-intro.texi:11959
#, no-wrap
msgid ""
"(keep-three-letter-words '(one two three four five six))\n"
"    @result{} (one two six)\n"
msgstr ""
"(manten-tres-letras '(uno dos tres cuatro cinco seis))\n"
"    @result{} (uno dos)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11964
msgid ""
"It goes without saying that you need not use @code{nil} as the test for when "
"to stop; and you can, of course, combine these patterns."
msgstr ""
"Eso va sin decir que no se necesita usar @code{nil} como si el test\n"
"para cuando para; y se puede, de acuerdo, combinar estos patrones."

#. type: cindex
#: emacs-lisp-intro.texi:11966 emacs-lisp-intro.texi:11968
#, no-wrap
msgid "Recursion without Deferments"
msgstr "Recursi@'on sin diferir"

#. type: cindex
#: emacs-lisp-intro.texi:11967
#, no-wrap
msgid "Deferment in recursion"
msgstr "Diferir en recursi@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:11973
msgid ""
"Let's consider again what happens with the @code{triangle-recursively} "
"function.  We will find that the intermediate calculations are deferred "
"until all can be done."
msgstr ""
"Permita considerar de nuevo qu@'e ocurre con la funci@'on\n"
"@code{triangle-recursively}. Nosotros encontraremos que los c@'alculos\n"
"difieran hasta que todo pueda ser hecho."

#. type: Plain text
#: emacs-lisp-intro.texi:11976
msgid "Here is the function definition:"
msgstr "Aqu@'{@dotless{i}} est@'a la definici@'on de funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:11987
#, no-wrap
msgid ""
"(defun triangle-recursively (number)\n"
"  \"Return the sum of the numbers 1 through NUMBER inclusive.\n"
"Uses recursion.\"\n"
"  (if (= number 1)                    ; @r{do-again-test}\n"
"      1                               ; @r{then-part}\n"
"    (+ number                         ; @r{else-part}\n"
"       (triangle-recursively          ; @r{recursive call}\n"
"        (1- number)))))               ; @r{next-step-expression}\n"
msgstr ""
"(defun triangle-recursively (number)\n"
"  \"Devuelve la suma de los n@'umeros 1 a trav@'es de NUMBER inclusive\n"
"Usa recursi@'on.\"\n"
"  (if (= number 1)                    ; @r{do-again-test}\n"
"      1                               ; @r{then-part}\n"
"    (+ number                         ; @r{else-part}\n"
"       (triangle-recursively          ; @r{recursive call}\n"
"        (1- number)))))               ; @r{next-step-expression}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:11991
msgid "What happens when we call this function with a argument of 7?"
msgstr ""
"@questiondown{}Qu@'e ocurre cuando se llama a esta funci@'on con un "
"argumento de 7?"

#. type: Plain text
#: emacs-lisp-intro.texi:11996
msgid ""
"The first instance of the @code{triangle-recursively} function adds the "
"number 7 to the value returned by a second instance of @code{triangle-"
"recursively}, an instance that has been passed an argument of 6.  That is to "
"say, the first calculation is:"
msgstr ""
"La primera instancia de la funci@'on @code{triangle-recursively}\n"
"a@~nade el n@'umero 7 al valor devuelto por una segunda instancia de\n"
"@code{triangle-recursively}, una instancia que ha pasado un argumento\n"
"de 6. As@'{@dotless{i}}, el primer c@'alculo es:"

#. type: smallexample
#: emacs-lisp-intro.texi:11999
#, no-wrap
msgid "(+ 7 (triangle-recursively 6))\n"
msgstr "(+ 7 (triangle-recursively 6))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12010
msgid ""
"The first instance of @code{triangle-recursively}---you may want to think of "
"it as a little robot---cannot complete its job.  It must hand off the "
"calculation for @code{(triangle-recursively 6)} to a second instance of the "
"program, to a second robot.  This second individual is completely different "
"from the first one; it is, in the jargon, a `different instantiation'.  Or, "
"put another way, it is a different robot.  It is the same model as the "
"first; it calculates triangle numbers recursively; but it has a different "
"serial number."
msgstr ""
"La primera instancia de @code{triangle-recursively} --- se puede\n"
"querer pensar como un peque@~no robot --- no puede completar su\n"
"trabajo. Eso debe manejar el c@'alculo para\n"
"@code{(triangle-recursively 6)} a una segunda instancia del programa,\n"
"a un segundo robot. Este segundo individuo es completamente diferente\n"
"desde el primero; eso es, en la jerga, una `diferente\n"
"instanciaci@'on'. O, poner otro camino, eso es un diferente robot. Eso\n"
"es el mismo modelo como el primero; eso calcula n@'umeros de\n"
"tri@'angulo recursivamente; pero eso tiene un n@'umero de serie diferente."

#. type: Plain text
#: emacs-lisp-intro.texi:12015
msgid ""
"And what does @code{(triangle-recursively 6)} return? It returns the number "
"6 added to the value returned by evaluating @code{triangle-recursively} with "
"an argument of 5.  Using the robot metaphor, it asks yet another robot to "
"help it."
msgstr ""
"@questiondown{}Y qu@'e hace @code{(triangle-recursively 6)}\n"
"devuelve? Eso devuelve el n@'umero 6 a@~nadido al valor devuelto para\n"
"evaluar @code{triangle-recursively} con un argumento de 5. Usando la\n"
"met@'afora del robot, eso cuestiona todav@'{@dotless{i}}a otro robot\n"
"para ayudarle."

#. type: Plain text
#: emacs-lisp-intro.texi:12018
msgid "Now the total is:"
msgstr "Ahora el total es:"

#. type: smallexample
#: emacs-lisp-intro.texi:12021
#, no-wrap
msgid "(+ 7 6 (triangle-recursively 5))\n"
msgstr "(+ 7 6 (triangle-recursively 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12025
msgid "And what happens next?"
msgstr "@questiondown{}Y qu@'e ocurre despu@'es?"

#. type: smallexample
#: emacs-lisp-intro.texi:12028
#, no-wrap
msgid "(+ 7 6 5 (triangle-recursively 4))\n"
msgstr "(+ 7 6 5 (triangle-recursively 4))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12033
msgid ""
"Each time @code{triangle-recursively} is called, except for the last time, "
"it creates another instance of the program---another robot---and asks it to "
"make a calculation."
msgstr ""
"Cada vez que @code{triangle-recursively} es llamado, excepto por la\n"
"@'ultima vez, eso crea otra instancia del programa --- otro robot ---\n"
"y pregunta para crear un c@'alculo."

#. type: Plain text
#: emacs-lisp-intro.texi:12036
msgid "Eventually, the full addition is set up and performed:"
msgstr "Finalmente, la adici@'on completa es de la siguiente manera:"

#. type: smallexample
#: emacs-lisp-intro.texi:12039
#, no-wrap
msgid "(+ 7 6 5 4 3 2 1)\n"
msgstr "(+ 7 6 5 4 3 2 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12047
msgid ""
"This design for the function defers the calculation of the first step until "
"the second can be done, and defers that until the third can be done, and so "
"on.  Each deferment means the computer must remember what is being waited "
"on.  This is not a problem when there are only a few steps, as in this "
"example.  But it can be a problem when there are more steps."
msgstr ""
"Este dise@~no para la funci@'on difiere el c@'alculo del primer paso\n"
"hasta el segundo puede ser hecho, y difiere esto hasta que el tercero\n"
"puede ser hecho, y as@'{@dotless{i}}. Cada defermento significa el\n"
"ordenador debe recordar que est@'a siendo esperado dentro. Esto no es\n"
"un problema cuando hay solo unos pocos pasos, como en este\n"
"ejemplo. Pero eso puede ser un problema cuando hay m@'as pasos."

#. type: subsection
#: emacs-lisp-intro.texi:12049
#, no-wrap
msgid "No Deferment Solution"
msgstr "No hay soluci@'on pospuesta"

#. type: cindex
#: emacs-lisp-intro.texi:12051
#, no-wrap
msgid "Defermentless solution"
msgstr "Sin posponer la soluci@'on"

#. type: cindex
#: emacs-lisp-intro.texi:12052
#, no-wrap
msgid "Solution without deferment"
msgstr "Soluci@'on no pospuesta"

#. type: Plain text
#: emacs-lisp-intro.texi:12061
msgid ""
"The solution to the problem of deferred operations is to write in a manner "
"that does not defer operations@footnote{The phrase @dfn{tail recursive} is "
"used to describe such a process, one that uses `constant space'.}.  This "
"requires writing to a different pattern, often one that involves writing two "
"function definitions, an `initialization' function and a `helper' function."
msgstr ""
"La soluci@'on al problema de operaciones pospuestas es para escribir\n"
"en una manera que no posponga operaciones@footnote{La frase @dfn{cola\n"
"recursiva} es usado para describir tal proceso, uno que usa `espacio\n"
"constante'.}. Esto requiere escribir a un patr@'on diferente, con\n"
"frecuencia uno que involucra escribiendo dos definiciones de\n"
"funci@'on, una funci@'on de `inicializaci@'on' y una funci@'on `ayuda'."

#. type: Plain text
#: emacs-lisp-intro.texi:12064
msgid ""
"The `initialization' function sets up the job; the `helper' function does "
"the work."
msgstr ""
"La funci@'on `inicializacion' configura el trabajo; la funci@'on\n"
"`ayudante' hace el trabajo."

#. type: Plain text
#: emacs-lisp-intro.texi:12068
msgid ""
"Here are the two function definitions for adding up numbers.  They are so "
"simple, I find them hard to understand."
msgstr ""
"Aqu@'{@dotless{i}} hay dos definiciones para a@~nadir n@'umeros. Son\n"
"as@'{@dotless{i}} de simple, aunque se encuentre duro de comprender."

#. type: group
#: emacs-lisp-intro.texi:12076
#, no-wrap
msgid ""
"(defun triangle-initialization (number)\n"
"  \"Return the sum of the numbers 1 through NUMBER inclusive.\n"
"This is the `initialization' component of a two function\n"
"duo that uses recursion.\"\n"
"  (triangle-recursive-helper 0 0 number))\n"
msgstr ""
"(defun triangle-initialization (number)\n"
"  \"Devuelve la suma de los n@'umeros 1 a trav@'es de NUMBER inclusive.\n"
"Este es el componente de `inicializaci@'on' de una funci@'on d@'uo que \n"
"usa recursi@'on\"\n"
"  (triangle-recursive-helper 0 0 number))\n"

#. type: group
#: emacs-lisp-intro.texi:12090
#, no-wrap
msgid ""
"(defun triangle-recursive-helper (sum counter number)\n"
"  \"Return SUM, using COUNTER, through NUMBER inclusive.\n"
"This is the `helper' component of a two function duo\n"
"that uses recursion.\"\n"
"  (if (> counter number)\n"
"      sum\n"
"    (triangle-recursive-helper (+ sum counter)  ; @r{sum}\n"
"                               (1+ counter)     ; @r{counter}\n"
"                               number)))        ; @r{number}\n"
msgstr ""
"(defun triangle-recursive-helper (sum counter number)\n"
"  \"Devuelve SUM, usando COUNTER, a trav@'es de NUMBER inclusive.\n"
"Este es el componente `helper' de unas dos funciones\n"
"que usan recursi@'on.\"\n"
"  (if (> counter number)\n"
"      sum\n"
"    (triangle-recursive-helper (+ sum counter)  ; @r{suma}\n"
"                               (1+ counter)     ; @r{contador}\n"
"                               number)))        ; @r{n@'umero}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12096
msgid ""
"Install both function definitions by evaluating them, then call "
"@code{triangle-initialization} with 2 rows:"
msgstr ""
"Instalar ambas definiciones de funci@'on por evaluarlo, entonces llama\n"
"a @code{triangle-initialization} con 2 filas:"

#. type: group
#: emacs-lisp-intro.texi:12101
#, no-wrap
msgid ""
"(triangle-initialization 2)\n"
"    @result{} 3\n"
msgstr ""
"(triangle-initialization 2)\n"
"    @result{} 3\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12107
msgid ""
"The `initialization' function calls the first instance of the `helper' "
"function with three arguments: zero, zero, and a number which is the number "
"of rows in the triangle."
msgstr ""
"La funci@'on `inicializaci@'on' llama la primera instancia de la\n"
"funci@'on `ayudante' con tres argumentos: cero, cero, y un n@'umero\n"
"que es el n@'umero de filas en el tri@'angulo."

#. type: Plain text
#: emacs-lisp-intro.texi:12119
msgid ""
"The first two arguments passed to the `helper' function are initialization "
"values.  These values are changed when @code{triangle-recursive-helper} "
"invokes new instances.@footnote{The jargon is mildly confusing: "
"@code{triangle-recursive-helper} uses a process that is iterative in a "
"procedure that is recursive.  The process is called iterative because the "
"computer need only record the three values, @code{sum}, @code{counter}, and "
"@code{number}; the procedure is recursive because the function `calls "
"itself'.  On the other hand, both the process and the procedure used by "
"@code{triangle-recursively} are called recursive.  The word `recursive' has "
"different meanings in the two contexts.}"
msgstr ""
"Los primeros dos argumentos pasaron a la funci@'on `ayuda' son valores\n"
"de inicializaci@'on. Estos valores son cambiados cuando\n"
"@code{triangle-recursive-helper} invocan nuevas\n"
"instancias.@footnote{La jerga es medianamente confusa:\n"
"@code{triangle-recursive-helper} usa un proceso que es iterativo en un\n"
"procedimiento que es recursivo. El proceso se llama iterativo porque\n"
"el ordenador necesita solo grabar los tres valores, @code{suma},\n"
"@code{contador}, y @code{n@'umero}: el procedimiento es recursivo\n"
"porque la funci@'on `llama a s@'{@dotless{i}} mismo'. Por otro lado,\n"
"ambos el proceso y el procedimiento usado por\n"
"@code{triangle-recursively} son llamados recursivos. La palabra\n"
"`recursivo' tiene diferentes significados en los dos contextos.}"

#. type: Plain text
#: emacs-lisp-intro.texi:12122
msgid ""
"Let's see what happens when we have a triangle that has one row.  (This "
"triangle will have one pebble in it!)"
msgstr ""
"Perm@'{@dotless{i}}tase ver que ocurre cuando tenemos un tri@'angulo\n"
"que tiene una fila. (@exclamdown{}Este tri@'angulo tendr@'a un\n"
"asterisco dentro!)"

#. type: Plain text
#: emacs-lisp-intro.texi:12127
msgid ""
"@code{triangle-initialization} will call its helper with the arguments "
"@w{@code{0 0 1}}.  That function will run the conditional test whether "
"@code{(> counter number)}:"
msgstr ""
"@code{triangle-initialization} llamar@'a su ayudante con los\n"
"argumentos @w{@code{0 0 1}}. Esta funci@'on ejecutar@'a el test\n"
"condicional si @code{(> counter number)}:"

#. type: smallexample
#: emacs-lisp-intro.texi:12130
#, no-wrap
msgid "(> 0 1)\n"
msgstr "(> 0 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12136
msgid ""
"and find that the result is false, so it will invoke the else-part of the "
"@code{if} clause:"
msgstr ""
"y encuentra que el resultado es falso, as@'{@dotless{i}} invocar@'a la\n"
"else-part de la cla@'usula @code{if}:"

#. type: group
#: emacs-lisp-intro.texi:12143
#, no-wrap
msgid ""
"    (triangle-recursive-helper\n"
"     (+ sum counter)  ; @r{sum plus counter} @result{} @r{sum}\n"
"     (1+ counter)     ; @r{increment counter} @result{} @r{counter}\n"
"     number)          ; @r{number stays the same}\n"
msgstr ""
"    (triangle-recursive-helper\n"
"     (+ sum counter)  ; @r{sum m@'as counter} @result{} @r{sum}\n"
"     (1+ counter)     ; @r{incrementa counter} @result{} @r{counter}\n"
"     number)          ; @r{number parece lo mismo}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12149
msgid "which will first compute:"
msgstr "que computar@'a primero:"

#. type: group
#: emacs-lisp-intro.texi:12155
#, no-wrap
msgid ""
"(triangle-recursive-helper (+ 0 0)  ; @r{sum}\n"
"                           (1+ 0)   ; @r{counter}\n"
"                           1)       ; @r{number}\n"
msgstr ""
"(triangle-recursive-helper (+ 0 0)  ; @r{sum}\n"
"                           (1+ 0)   ; @r{counter}\n"
"                           1)       ; @r{number}\n"

#. type: exdent
#: emacs-lisp-intro.texi:12155 emacs-lisp-intro.texi:12175
#, no-wrap
msgid "which is:"
msgstr "que es:"

#. type: group
#: emacs-lisp-intro.texi:12158
#, no-wrap
msgid "(triangle-recursive-helper 0 1 1)\n"
msgstr "(triangle-recursive-helper 0 1 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12164
msgid ""
"Again, @code{(> counter number)} will be false, so again, the Lisp "
"interpreter will evaluate @code{triangle-recursive-helper}, creating a new "
"instance with new arguments."
msgstr ""
"De nuevo, @code{(> counter number)} ser@'a falso, as@'{@dotless{i}} de\n"
"nuevo, el int@'erprete Lisp evaluar@'a\n"
"@code{triangle-recursive-helper}, creando una nueva instancia con\n"
"nuevos argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:12167
msgid "This new instance will be;"
msgstr "Esta nueva instancia ser@'a;"

#. type: group
#: emacs-lisp-intro.texi:12174
#, no-wrap
msgid ""
"    (triangle-recursive-helper\n"
"     (+ sum counter)  ; @r{sum plus counter} @result{} @r{sum}\n"
"     (1+ counter)     ; @r{increment counter} @result{} @r{counter}\n"
"     number)          ; @r{number stays the same}\n"
"\n"
msgstr ""
"    (triangle-recursive-helper\n"
"     (+ sum counter)  ; @r{suma m@'as contador} @result{} @r{sum}\n"
"     (1+ counter)     ; @r{incrementar contador} @result{} @r{contador}\n"
"     number)          ; @r{n@'umero empieza lo mismo}\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:12178
#, no-wrap
msgid "(triangle-recursive-helper 1 2 1)\n"
msgstr "(triangle-recursive-helper 1 2 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12184
msgid ""
"In this case, the @code{(> counter number)} test will be true! So the "
"instance will return the value of the sum, which will be 1, as expected."
msgstr ""
"En este caso, el test @code{(> counter number)} @exclamdown{}ser@'a\n"
"cierto!  As@'{@dotless{i}} la instancia devolver@'a el valor de la\n"
"suma, que ser@'a 1, como se espera."

#. type: Plain text
#: emacs-lisp-intro.texi:12187
msgid ""
"Now, let's pass @code{triangle-initialization} an argument of 2, to find out "
"how many pebbles there are in a triangle with two rows."
msgstr ""
"Ahora, permite pasar @code{triangle-initialization} un argumento de 2,\n"
"para encontrar cu@'antos asterisco hay en un tri@'angulo con dos filas."

#. type: Plain text
#: emacs-lisp-intro.texi:12189
msgid "That function calls @code{(triangle-recursive-helper 0 0 2)}."
msgstr "Esta funci@'on llama @code{(triangle-recursive-helper 0 0 2)}."

#. type: Plain text
#: emacs-lisp-intro.texi:12192
msgid "In stages, the instances called will be:"
msgstr "En fases, las instancias llamadas ser@'an:"

#. type: group
#: emacs-lisp-intro.texi:12197
#, no-wrap
msgid ""
"                          @r{sum counter number}\n"
"(triangle-recursive-helper 0    1       2)\n"
"\n"
msgstr ""
"                          @r{suma contador n@'umero}\n"
"(triangle-recursive-helper 0    1       2)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:12199
#, no-wrap
msgid ""
"(triangle-recursive-helper 1    2       2)\n"
"\n"
msgstr ""
"(triangle-recursive-helper 1    2       2)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:12201
#, no-wrap
msgid "(triangle-recursive-helper 3    3       2)\n"
msgstr "(triangle-recursive-helper 3    3       2)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12207
msgid ""
"When the last instance is called, the @code{(> counter number)} test will be "
"true, so the instance will return the value of @code{sum}, which will be 3."
msgstr ""
"Cuando la @'ultima instancia se llama, el @code{(> counter number)} se\n"
"chequea si ser@'a cierto, as@'{@dotless{i}} la instancia devolver@'a\n"
"el valor de @code{sum}, que ser@'a 3."

#. type: Plain text
#: emacs-lisp-intro.texi:12210
msgid ""
"This kind of pattern helps when you are writing functions that can use many "
"resources in a computer."
msgstr ""
"Este tipo de patr@'on ayuda cuando est@'as escribiendo funciones que\n"
"puede usar recursos en un ordenador."

#. type: section
#: emacs-lisp-intro.texi:12213
#, no-wrap
msgid "Looping Exercise"
msgstr "Ejercicio de bucles"

#. type: itemize
#: emacs-lisp-intro.texi:12219
msgid ""
"Write a function similar to @code{triangle} in which each row has a value "
"which is the square of the row number.  Use a @code{while} loop."
msgstr ""
"Escribe una funci@'on similar a @code{triangle} en el que cada fila\n"
"tiene un valor que es la ra@'{@dotless{i}}z del n@'umero de la\n"
"fila. Usa un bucle @code{while}."

#. type: itemize
#: emacs-lisp-intro.texi:12223
msgid ""
"Write a function similar to @code{triangle} that multiplies instead of adds "
"the values."
msgstr ""
"Escribe una funci@'on similar para @code{triangle} que multiplique en vez\n"
"de a@~nadir los valores."

#. type: itemize
#: emacs-lisp-intro.texi:12227
msgid ""
"Rewrite these two functions recursively.  Rewrite these functions using "
"@code{cond}."
msgstr ""
"Reescribe estas dos funciones recursivamente. Reescribe estas\n"
"funciones usando @code{cond}."

#. type: itemize
#: emacs-lisp-intro.texi:12234
msgid ""
"Write a function for Texinfo mode that creates an index entry at the "
"beginning of a paragraph for every @samp{@@dfn} within the paragraph.  (In a "
"Texinfo file, @samp{@@dfn} marks a definition.  This book is written in "
"Texinfo.)"
msgstr ""
"Escribe una funci@'on para el modo Texinfo que crea una entrada\n"
"@'{@dotless{i}}ndice al principio de un p@'arrafo para cada\n"
"@samp{@@dfn} con el p@'arrafo. (En un fichero Texinfo, @samp{@@dfn}\n"
"marca una definici@'on. El libro es escrito en Texinfo.)"

#. type: itemize
#: emacs-lisp-intro.texi:12242
msgid ""
"Many of the functions you will need are described in two of the previous "
"chapters, @ref{Cutting & Storing Text, , Cutting and Storing Text}, and "
"@ref{Yanking, , Yanking Text Back}.  If you use @code{forward-paragraph} to "
"put the index entry at the beginning of the paragraph, you will have to use "
"@w{@kbd{C-h f}} (@code{describe-function}) to find out how to make the "
"command go backwards."
msgstr ""
"Muchas de las funciones necesitar@'an ser descritas en dos de los\n"
"cap@'{@dotless{i}}tulos, @ref{Cortando y almacenando texto, , Cortando\n"
"y almacenando texto} y @ref{Pegando, , Pegando texto}. Si usas\n"
"@code{forward-paragraph} para poner la entrada @'{@dotless{i}}ndice al\n"
"principio del p@'arrafo, tendr@'a que usar @w{@kbd{C-h f}}\n"
"(@code{describe-function}) para encontrar c@'omo conseguir que el comando\n"
"vaya hacia atr@'as."

#. type: itemize
#: emacs-lisp-intro.texi:12244
msgid "For more information, see"
msgstr "Para m@'as informaci@'on, ver"

#. type: ifinfo
#: emacs-lisp-intro.texi:12246
msgid "@ref{Indicating, , Indicating Definitions, texinfo}."
msgstr "@ref{Indicando Definiciones, texinfo}."

#. type: ifhtml
#: emacs-lisp-intro.texi:12252
msgid ""
"@ref{Indicating, , Indicating, texinfo, Texinfo Manual}, which goes to a "
"Texinfo manual in the current directory.  Or, if you are on the Internet, "
"see @uref{http://www.gnu.org/software/texinfo/manual/texinfo/}"
msgstr ""
"@ref{Indicando, , Indicando, texinfo, Manual de Texinfo}, que va al\n"
"manual Texinfo en el actual directorio. O, si est@'as en Internet,\n"
"mira @uref{http://www.gnu.org/software/texinfo/manual/texinfo/}"

#. type: iftex
#: emacs-lisp-intro.texi:12256
msgid ""
"``Indicating Definitions, Commands, etc.'' in @cite{Texinfo, The GNU "
"Documentation Format}."
msgstr ""
"``Indicando Definiciones, Comandos, etc.'' en @cite{Texinfo, el\n"
"Formato de Documentaci@'on de GNU}."

#. type: cindex
#: emacs-lisp-intro.texi:12261
#, no-wrap
msgid "Searches, illustrating"
msgstr "B@'usquedas, ilustrando"

#. type: cindex
#: emacs-lisp-intro.texi:12262
#, no-wrap
msgid "Regular expression searches"
msgstr "B@'usquedas de expresiones regulares"

#. type: cindex
#: emacs-lisp-intro.texi:12263
#, no-wrap
msgid "Patterns, searching for"
msgstr "Patrones, buscando por"

#. type: cindex
#: emacs-lisp-intro.texi:12264
#, no-wrap
msgid "Motion by sentence and paragraph"
msgstr "Mover frase y p@'arrafo"

#. type: cindex
#: emacs-lisp-intro.texi:12265
#, no-wrap
msgid "Sentences, movement by"
msgstr "Frases, movimiento por"

#. type: cindex
#: emacs-lisp-intro.texi:12266
#, no-wrap
msgid "Paragraphs, movement by"
msgstr "P@'arrafos, movimiento por"

#. type: Plain text
#: emacs-lisp-intro.texi:12273
msgid ""
"Regular expression searches are used extensively in GNU Emacs.  The two "
"functions, @code{forward-sentence} and @code{forward-paragraph}, illustrate "
"these searches well.  They use regular expressions to find where to move "
"point.  The phrase `regular expression' is often written as `regexp'."
msgstr ""
"Las b@'usquedas expresiones regulares son usadas extensivamente en GNU\n"
"Emacs. Las dos funciones @code{forward-sentence} y\n"
"@code{forward-paragraph}, ilustran estas b@'usquedas bien. Usan\n"
"expresiones regulares para encontrar donde mover el punto. La frase\n"
"`expresi@'on regular' es con frecuencia escrita como `regexp'."

#. type: Plain text
#: emacs-lisp-intro.texi:12284
msgid ""
"Regular expression searches are described in @ref{Regexp Search, , Regular "
"Expression Search, emacs, The GNU Emacs Manual}, as well as in @ref{Regular "
"Expressions, , , elisp, The GNU Emacs Lisp Reference Manual}.  In writing "
"this chapter, I am presuming that you have at least a mild acquaintance with "
"them.  The major point to remember is that regular expressions permit you to "
"search for patterns as well as for literal strings of characters.  For "
"example, the code in @code{forward-sentence} searches for the pattern of "
"possible characters that could mark the end of a sentence, and moves point "
"to that spot."
msgstr ""
"Las b@'usquedas de expresiones regulares son descritas en\n"
"@ref{B@'usqueda de Regexp, , B@'usqueda de Expresi@'on Regular, emacs,\n"
"El Manual de GNU Emacs}, tan bien como en @ref{Expresiones Regulares,\n"
", , elisp, El Manual de Referencia de GNU Emacs Lisp}. Escribiendo\n"
"este cap@'{@dotless{i}}tulo, estoy presuponiendo que tiene al menos una\n"
"familiaridad con esto. El mayor punto para recordar es que las\n"
"expresiones regulares te permiten buscar patrones tan bien como para\n"
"cadenas literales de caracteres. Por ejemplo, el c@'odigo en\n"
"@code{forward-sentence} busca para el patr@'on de posibles caracteres\n"
"que podr@'{@dotless{i}}an marcar el fin de una frase, y mueve el punto\n"
"al otro lado."

#. type: Plain text
#: emacs-lisp-intro.texi:12294
msgid ""
"Before looking at the code for the @code{forward-sentence} function, it is "
"worth considering what the pattern that marks the end of a sentence must "
"be.  The pattern is discussed in the next section; following that is a "
"description of the regular expression search function, @code{re-search-"
"forward}.  The @code{forward-sentence} function is described in the section "
"following.  Finally, the @code{forward-paragraph} function is described in "
"the last section of this chapter.  @code{forward-paragraph} is a complex "
"function that introduces several new features."
msgstr ""
"Antes de mirar en el c@'odigo la funci@'on @code{forward-sentence}, es\n"
"valorable considerar que el patr@'on que marca el fin de una frase\n"
"debe estar. El patr@'on se discute en la siguiente secci@'on;\n"
"siguiendo que es una descripci@'on de la expresi@'on regular de\n"
"b@'usqueda, @code{re-search-forward}. La funci@'on\n"
"@code{forward-sentence} es descrito en la secci@'on\n"
"siguiente. Finalmente, la funci@'on @code{forward-paragraph} es\n"
"descrito en la @'ultima secci@'on de este\n"
"cap@'{@dotless{i}}tulo. @code{forward-paragraph} es una funci@'on\n"
"compleja que introduce varias funcionalidades."

#. type: section
#: emacs-lisp-intro.texi:12306
#, no-wrap
msgid "The Regular Expression for @code{sentence-end}"
msgstr "La expresi@'on regular para @code{sentence-end}"

#. type: Plain text
#: emacs-lisp-intro.texi:12311
msgid ""
"The symbol @code{sentence-end} is bound to the pattern that marks the end of "
"a sentence.  What should this regular expression be?"
msgstr ""
"El s@'{@dotless{i}}mbolo @code{sentence-end} se asocia al patr@'on que\n"
"marca el fin de una frase. @questiondown{}Cu@'al ser@'{@dotless{i}}a\n"
"esta expresi@'on regular?"

#. type: Plain text
#: emacs-lisp-intro.texi:12316
msgid ""
"Clearly, a sentence may be ended by a period, a question mark, or an "
"exclamation mark.  Indeed, in English, only clauses that end with one of "
"those three characters should be considered the end of a sentence.  This "
"means that the pattern should include the character set:"
msgstr ""
"Claramente, una frase puede ser finalizada por un periodo, una marca\n"
"de inicio de interrogaci@'on, o una marca de exclamaci@'on. Puesto que\n"
"viene del ingl@'es, solo las cla@'usulas que finalizan con uno de\n"
"estos tres caracteres deber@'{@dotless{i}}an ser consideradas al fin de\n"
"una frase. Esto significa que el patr@'on incluir@'{@dotless{i}}a el\n"
"conjunto de caracteres:"

#. type: smallexample
#: emacs-lisp-intro.texi:12319
#, no-wrap
msgid "[.?!]\n"
msgstr "[.?!]\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12325
msgid ""
"However, we do not want @code{forward-sentence} merely to jump to a period, "
"a question mark, or an exclamation mark, because such a character might be "
"used in the middle of a sentence.  A period, for example, is used after "
"abbreviations.  So other information is needed."
msgstr ""
"Sin embargo, no queremos que @code{forward-sentence} salte a un\n"
"periodo, una marca de pregunta, o una marca de exclamaci@'on, porque\n"
"tal car@'acter podr@'{@dotless{i}}a ser usado en el medio de una\n"
"frase. Un periodo, por ejemplo, se usa despu@'es de\n"
"abreviaciones. As@'{@dotless{i}}, otra informaci@'on es necesaria."

#. type: Plain text
#: emacs-lisp-intro.texi:12333
msgid ""
"According to convention, you type two spaces after every sentence, but only "
"one space after a period, a question mark, or an exclamation mark in the "
"body of a sentence.  So a period, a question mark, or an exclamation mark "
"followed by two spaces is a good indicator of an end of sentence.  However, "
"in a file, the two spaces may instead be a tab or the end of a line.  This "
"means that the regular expression should include these three items as "
"alternatives."
msgstr ""
"De acuerdo a la convenci@'on, escribe dos espacios despu@'es de cada\n"
"frase, pero solo un espacio despu@'es de un periodo, una marca de\n"
"pregunta, o una marca de exclamaci@'on seguida por dos espacios es un\n"
"buen indicador de un fin de frase. Sin embargo, en un fichero, los dos\n"
"espacios pueden ser un tabulador o el fin de una\n"
"l@'{@dotless{i}}nea. Esto significa que la expresi@'on regular\n"
"incluir@'{@dotless{i}}a estos tres @'{@dotless{i}}tems como\n"
"alternativas."

#. type: Plain text
#: emacs-lisp-intro.texi:12336
msgid "This group of alternatives will look like this:"
msgstr "Este grupo de alternativas se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:12342
#, no-wrap
msgid ""
"\\\\($\\\\| \\\\|  \\\\)\n"
"       ^   ^^\n"
"      TAB  SPC\n"
msgstr ""
"\\\\($\\\\| \\\\|  \\\\)\n"
"       ^   ^^\n"
"      TAB  SPC\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12349
msgid ""
"Here, @samp{$} indicates the end of the line, and I have pointed out where "
"the tab and two spaces are inserted in the expression.  Both are inserted by "
"putting the actual characters into the expression."
msgstr ""
"Aqu@'{@dotless{i}}, @samp{$} indica el fin de la l@'{@dotless{i}}nea, y\n"
"yo he apuntado donde el tab y dos espacios est@'an insertados en la\n"
"expresi@'on. Ambos est@'an insertados poniendo los caracteres actuales\n"
"dentro de la expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:12354
msgid ""
"Two backslashes, @samp{\\\\}, are required before the parentheses and "
"vertical bars: the first backslash quotes the following backslash in Emacs; "
"and the second indicates that the following character, the parenthesis or "
"the vertical bar, is special."
msgstr ""
"Dos barras invertidas, @samp{\\\\}, se requiere antes de los\n"
"par@'entesis y barras verticales: la primera barra invertida cita la\n"
"siguiente barra invertida en Emacs; y el segundo indica que el\n"
"siguiente caracter, el par@'entesis o la barra vertical, es especial."

#. type: Plain text
#: emacs-lisp-intro.texi:12358
msgid ""
"Also, a sentence may be followed by one or more carriage returns, like this:"
msgstr ""
"Tambi@'en, una frase puede ser seguida por uno o m@'as retornos de\n"
"carro, como este:"

#. type: group
#: emacs-lisp-intro.texi:12363
#, no-wrap
msgid ""
"[\n"
"]*\n"
msgstr ""
"[\n"
"]*\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12370
msgid ""
"Like tabs and spaces, a carriage return is inserted into a regular "
"expression by inserting it literally.  The asterisk indicates that the "
"@key{RET} is repeated zero or more times."
msgstr ""
"Como en los tabuladores y espacios, un retorno de carro se inserta\n"
"dentro de una expresi@'on regular insert@'andolo literalmente. El\n"
"asterisco indica que el @key{RET} se repite cero o m@'as veces."

#. type: Plain text
#: emacs-lisp-intro.texi:12376
msgid ""
"But a sentence end does not consist only of a period, a question mark or an "
"exclamation mark followed by appropriate space: a closing quotation mark or "
"a closing brace of some kind may precede the space.  Indeed more than one "
"such mark or brace may precede the space.  These require a expression that "
"looks like this:"
msgstr ""
"Pero una frase no consiste solo en un periodo, una marca de pregunta o\n"
"una marca de exclamaci@'on seguida por espacios apropiados: una marca\n"
"de cerrar comillas o cerrar un par@'entesis de alg@'un tipo puede\n"
"preceder el espacio. En realidad m@'as de una marca o par@'entesis\n"
"pueden preceder el espacio. Estas requieren una expresi@'on que se\n"
"parezca a:"

#. type: smallexample
#: emacs-lisp-intro.texi:12379
#, no-wrap
msgid "[]\\\"')@}]*\n"
msgstr "[]\\\"')@}]*\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12385
msgid ""
"In this expression, the first @samp{]} is the first character in the "
"expression; the second character is @samp{\"}, which is preceded by a "
"@samp{\\} to tell Emacs the @samp{\"} is @emph{not} special.  The last three "
"characters are @samp{'}, @samp{)}, and @samp{@}}."
msgstr ""
"En esta expresi@'on, el primer @samp{]} es el primer caracter en la\n"
"expresi@'on; el segundo caracter es @samp{\"}, que est@'a precedido\n"
"por un @samp{\\} para contar Emacs el @samp{\"} @emph{no} es\n"
"especial. Los @'ultimos tres caracteres son @samp{'}, @samp{)}, y\n"
"@samp{@}}."

#. type: Plain text
#: emacs-lisp-intro.texi:12389
msgid ""
"All this suggests what the regular expression pattern for matching the end "
"of a sentence should be; and, indeed, if we evaluate @code{sentence-end} we "
"find that it returns the following value:"
msgstr ""
"Todo esto sugiere que el patr@'on de la expresi@'on regular para\n"
"asociar el fin de una frase ser@'{@dotless{i}}a; y, profundamente, si\n"
"se eval@'ua @code{sentence-end} y encuentra que se devuelve el valor\n"
"siguiente:"

#. type: group
#: emacs-lisp-intro.texi:12395
#, no-wrap
msgid ""
"sentence-end\n"
"     @result{} \"[.?!][]\\\"')@}]*\\\\($\\\\|     \\\\|  \\\\)[\n"
"]*\"\n"
msgstr ""
"sentence-end\n"
"     @result{} \"[.?!][]\\\"')@}]*\\\\($\\\\|     \\\\|  \\\\)[\n"
"]*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12412
msgid ""
"(Well, not in GNU Emacs 22; that is because of an effort to make the process "
"simpler and to handle more glyphs and languages.  When the value of "
"@code{sentence-end} is @code{nil}, then use the value defined by the "
"function @code{sentence-end}.  (Here is a use of the difference between a "
"value and a function in Emacs Lisp.)  The function returns a value "
"constructed from the variables @code{sentence-end-base}, @code{sentence-end-"
"double-space}, @code{sentence-end-without-period}, and @code{sentence-end-"
"without-space}.  The critical variable is @code{sentence-end-base}; its "
"global value is similar to the one described above but it also contains two "
"additional quotation marks.  These have differing degrees of curliness.  The "
"@code{sentence-end-without-period} variable, when true, tells Emacs that a "
"sentence may end without a period, such as text in Thai.)"
msgstr ""
"(Bien, no en GNU Emacs 22; porque es un esfuerzo crear el proceso\n"
"simple y manejar m@'as s@'{@dotless{i}}mbolos y lenguajes. Cuando el\n"
"valor de @code{sentence-end} es @code{nil}, entonces usa el valor\n"
"definido por la funci@'on @code{sentence-end} es @code{nil}, entonces\n"
"usa el valor definido por la funci@'on\n"
"@code{sentence-end}. (Aqu@'{@dotless{i}} se usa la diferencia entre un\n"
"valor y una funci@'on en Emacs Lisp.) La funci@'on devuelve un valor\n"
"construido desde las variables @code{sentence-end-base},\n"
"@code{sentence-end-double-space}, @code{sentence-end-without-period},\n"
"y @code{sentence-end-without-space}. La variable cr@'{@dotless{i}}tica\n"
"es @code{sentence-end-base}; su valor global es similar a uno descrito\n"
"debajo pero tambi@'en contiene marcas de cita adicionales. Estas\n"
"tienen diferentes grados de curvas. La variable\n"
"@code{sentence-end-without-period}, cuando es verdad, dice a Emacs que\n"
"una frase puede finalizar sin un periodo tal como texto en Thai.)"

#. type: item
#: emacs-lisp-intro.texi:12421
#, no-wrap
msgid "[.?!]"
msgstr "[.?!]"

#. type: table
#: emacs-lisp-intro.texi:12425
#, no-wrap
msgid ""
"The first part of the pattern is the three characters, a period, a question\n"
"mark and an exclamation mark, within square brackets.  The pattern must\n"
"begin with one or other of these characters.\n"
"\n"
msgstr ""
"La primera parte del patr@'on son los tres caracteres, un periodo, una\n"
"pregunta marca y un marca de exclamaci@'on, con par@'entesis\n"
"cuadrados. El patr@'on empieza con uno un otro de estos caracteres.\n"

#. type: item
#: emacs-lisp-intro.texi:12426
#, no-wrap
msgid "[]\\\"')@}]*"
msgstr "[]\\\"')@}]*"

#. type: table
#: emacs-lisp-intro.texi:12436
#, no-wrap
msgid ""
"The second part of the pattern is the group of closing braces and\n"
"quotation marks, which can appear zero or more times.  These may follow\n"
"the period, question mark or exclamation mark.  In a regular expression,\n"
"the backslash, @samp{\\}, followed by the double quotation mark,\n"
"@samp{\"}, indicates the class of string-quote characters.  Usually, the\n"
"double quotation mark is the only character in this class.  The\n"
"asterisk, @samp{*}, indicates that the items in the previous group (the\n"
"group surrounded by square brackets, @samp{[]}) may be repeated zero or\n"
"more times.\n"
"\n"
msgstr ""
"La segunda parte del patr@'on es el grupo de cerrar par@'entesis y\n"
"marcas de cita, que pueden aparecer cero o m@'as veces. Estos pueden\n"
"seguir el periodo, marca de pregunta o marca de exclamaci@'on. En una\n"
"expresi@'on regular la barra, @samp{\\}, seguido por las dobes\n"
"comillas, @samp{\"}, indica los casos de caracteres\n"
"string-quote. Normalmente, las dobles comillas es el @'unico caracter\n"
"en esta clase. El asterisco, @samp{*}, indica que los\n"
"@'{@dotless{i}}tems en el grupo previo (el grupo alrededor por\n"
"comillas cuadradas, @samp{[]} puede ser repetido cero o m@'as veces.\n"
"\n"

#. type: item
#: emacs-lisp-intro.texi:12437
#, no-wrap
msgid "\\\\($\\\\|   \\\\|  \\\\)"
msgstr "\\\\($\\\\|   \\\\|  \\\\)"

#. type: table
#: emacs-lisp-intro.texi:12446
#, no-wrap
msgid ""
"The third part of the pattern is one or other of: either the end of a\n"
"line, or two blank spaces, or a tab.  The double back-slashes are used\n"
"to prevent Emacs from reading the parentheses and vertical bars as part\n"
"of the search pattern; the parentheses are used to mark the group and\n"
"the vertical bars are used to indicated that the patterns to either side\n"
"of them are alternatives.  The dollar sign is used to indicate the end\n"
"of a line and both the two spaces and the tab are each inserted as is to\n"
"indicate what they are.\n"
"\n"
msgstr ""
"La tercera parte del patr@'on es uno u otro de: si el fin de una\n"
"l@'{@dotless{i}}nea, o dos espacios en blanco, o un tabulador. Las\n"
"barras invertidas dobles son usadas para prevenir a Emacs desde leer\n"
"los par@'entesis y barras verticales como parte del patr@'on de\n"
"b@'usqueda; los par@'entesis son usados para marcar el grupo y las\n"
"barras verticales usadas para indicarse que los patrones de un lado de\n"
"ellos son alternativas. El signo del d@'olar es usados para indicar el\n"
"fin de una l@'{@dotless{i}}nea y ambos espacios y el tabulador son\n"
"cada uno insertados como est@'an para indicar lo que ellos son.\n"
"\n"

#. type: item
#: emacs-lisp-intro.texi:12447
#, no-wrap
msgid "[@key{RET}]*"
msgstr "[@key{RET}]*"

#. type: table
#: emacs-lisp-intro.texi:12453
#, no-wrap
msgid ""
"Finally, the last part of the pattern indicates that the end of the line\n"
"or the whitespace following the period, question mark or exclamation\n"
"mark may, but need not, be followed by one or more carriage returns.  In\n"
"the pattern, the carriage return is inserted as an actual carriage\n"
"return between square brackets but here it is shown as @key{RET}.\n"
msgstr ""
"Finalmente, la @'ultima parte del patr@'on indica que el fin de la\n"
"l@'{@dotless{i}}nea o el espacio en blanco siguiendo el periodo, marca\n"
"de pregunta o marca de exclamaci@'on, pero no necesita, el retorno de\n"
"carro es insertado como un retorno de carro devuelve par@'entesis\n"
"cuadrados pero aqu@'{@dotless{i}} eso muestra @key{RET}.\n"

#. type: section
#: emacs-lisp-intro.texi:12457
#, no-wrap
msgid "The @code{re-search-forward} Function"
msgstr "La funci@'on @code{re-search-forward}"

#. type: Plain text
#: emacs-lisp-intro.texi:12463
msgid ""
"The @code{re-search-forward} function is very like the @code{search-forward} "
"function.  (@xref{search-forward, , The @code{search-forward} Function}.)"
msgstr ""
"La funci@'on @code{re-search-forward} es similar a la funci@'on\n"
"@code{search-forward}. (@xref{search-forward, , La Funci@'on\n"
"@code{search-forward}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:12470
msgid ""
"@code{re-search-forward} searches for a regular expression.  If the search "
"is successful, it leaves point immediately after the last character in the "
"target.  If the search is backwards, it leaves point just before the first "
"character in the target.  You may tell @code{re-search-forward} to return "
"@code{t} for true.  (Moving point is therefore a `side effect'.)"
msgstr ""
"@code{re-search-forward} busca una expresi@'on regular. Si la\n"
"b@'usqueda es exitosa, deja el punto inmediatamente despu@'es del\n"
"@'ultimo caracter en el objetivo. Si la b@'usqueda es hacia atr@'as,\n"
"deja el punto antes del primer caracter en el objetivo. Se puede\n"
"contar @code{re-search-forward} para devolver @code{t} a\n"
"cierto. (Moviendo el punto es por ello un `efecto lateral'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:12473
msgid ""
"Like @code{search-forward}, the @code{re-search-forward} function takes four "
"arguments:"
msgstr ""
"Como @code{search-forward}, la funci@'on @code{re-search-forward} toma\n"
"cuatro argumentos:"

#. type: enumerate
#: emacs-lisp-intro.texi:12478
msgid ""
"The first argument is the regular expression that the function searches "
"for.  The regular expression will be a string between quotation marks."
msgstr ""
"El primer argumento es la expresi@'on regular que la funci@'on\n"
"busca. La expresi@'on regular ser@'a una cadena entre comillas."

#. type: enumerate
#: emacs-lisp-intro.texi:12482
msgid ""
"The optional second argument limits how far the function will search; it is "
"a bound, which is specified as a position in the buffer."
msgstr ""
"El segundo argumento opcional limita c@'omo la funci@'on busca; es\n"
"un emparejamiento, que se especifica como una posici@'on en el\n"
"b@'uffer."

#. type: enumerate
#: emacs-lisp-intro.texi:12489
msgid ""
"The optional third argument specifies how the function responds to failure: "
"@code{nil} as the third argument causes the function to signal an error (and "
"print a message) when the search fails; any other value causes it to return "
"@code{nil} if the search fails and @code{t} if the search succeeds."
msgstr ""
"El tercer argumento opcional especifica c@'omo la funci@'on responde al\n"
"fallo: @code{nil} como tercer argumento que causa la funci@'on para\n"
"se@~nalar un error (e imprime un mensaje) cuando la b@'usqueda falla;\n"
"cualquier otro valor causa devolver @code{nil} si la b@'usqueda falla\n"
"y @code{t} si la b@'usqueda tiene @'exito."

#. type: enumerate
#: emacs-lisp-intro.texi:12493
msgid ""
"The optional fourth argument is the repeat count.  A negative repeat count "
"causes @code{re-search-forward} to search backwards."
msgstr ""
"El cuarto argumento opcional es el contaje repetido. Un contaje\n"
"negativo repetido causa @code{re-search-forward} para buscar hacia atr@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:12497
msgid "The template for @code{re-search-forward} looks like this:"
msgstr "La plantilla para @code{re-search-forward} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:12504
#, no-wrap
msgid ""
"(re-search-forward \"@var{regular-expression}\"\n"
"                @var{limit-of-search}\n"
"                @var{what-to-do-if-search-fails}\n"
"                @var{repeat-count})\n"
msgstr ""
"(re-search-forward \"@var{regular-expression}\"\n"
"                @var{limit-of-search}\n"
"                @var{what-to-do-if-search-fails}\n"
"                @var{repeat-count})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12512
msgid ""
"The second, third, and fourth arguments are optional.  However, if you want "
"to pass a value to either or both of the last two arguments, you must also "
"pass a value to all the preceding arguments.  Otherwise, the Lisp "
"interpreter will mistake which argument you are passing the value to."
msgstr ""
"El segundo, tercer, y cuarto argumentos son opcionales. Sin embargo,\n"
"si se quiere pasar un valor a uno o ambos de los @'ultimos dos\n"
"argumentos, se debe tambi@'en pasar un valor a todos los argumentos\n"
"precedentes. De otro modo, el int@'erprete Lisp errar@'a a qu@'e\n"
"argumento est@'as pasando el valor."

#. type: Plain text
#: emacs-lisp-intro.texi:12516
msgid ""
"In the @code{forward-sentence} function, the regular expression will be the "
"value of the variable @code{sentence-end}.  In simple form, that is:"
msgstr ""
"En la funci@'on @code{forward-sentence}, la expresi@'on regular ser@'a\n"
"el valor de la variable @code{sentence-end}. En forma simple, esto es:"

#. type: group
#: emacs-lisp-intro.texi:12521
#, no-wrap
msgid ""
"\"[.?!][]\\\"')@}]*\\\\($\\\\|  \\\\|  \\\\)[\n"
"]*\"\n"
msgstr ""
"\"[.?!][]\\\"')@}]*\\\\($\\\\|  \\\\|  \\\\)[\n"
"]*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12529
msgid ""
"The limit of the search will be the end of the paragraph (since a sentence "
"cannot go beyond a paragraph).  If the search fails, the function will "
"return @code{nil}; and the repeat count will be provided by the argument to "
"the @code{forward-sentence} function."
msgstr ""
"El l@'{@dotless{i}}mite de la b@'usqueda ser@'a el fin del p@'arrafo\n"
"(desde una frase no puede ir bajo un p@'arrafo). Si la b@'usqueda\n"
"falla, la funci@'on devuelve @code{nil}, y el contaje repite ser@'a\n"
"provisto por el argumento para la funci@'on @code{forward-sentence}."

#. type: Plain text
#: emacs-lisp-intro.texi:12540
msgid ""
"The command to move the cursor forward a sentence is a straightforward "
"illustration of how to use regular expression searches in Emacs Lisp.  "
"Indeed, the function looks longer and more complicated than it is; this is "
"because the function is designed to go backwards as well as forwards; and, "
"optionally, over more than one sentence.  The function is usually bound to "
"the key command @kbd{M-e}."
msgstr ""
"El comando mueve el cursor hacia adelante una frase es una\n"
"ilustraci@'on honesta de c@'omo usar b@'usquedas de expresiones\n"
"regulares en Emacs Lisp. En realidad, la funci@'on parece m@'as larga\n"
"y m@'as complicada de lo que es; esto es porque la funci@'on est@'a\n"
"dise@~nada para ir hacia atr@'as tan bien como hacia adelante; y,\n"
"opcionalmente, a trav@'es de una frase. La funci@'on est@'a\n"
"normalmente asociada al comando @kbd{M-e}."

#. type: node
#: emacs-lisp-intro.texi:12548
#, no-wrap
msgid "Complete forward-sentence"
msgstr "Completa forward-sentence"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:12549
#, no-wrap
msgid "Complete @code{forward-sentence} function definition"
msgstr "Completa la definici@'on @code{forward-sentence}"

#. type: Plain text
#: emacs-lisp-intro.texi:12554
msgid "Here is the code for @code{forward-sentence}:"
msgstr "Aqu@'{@dotless{i}} est@'a la c@'odigo para @code{forward-sentence}:"

#. type: group
#: emacs-lisp-intro.texi:12561
#, no-wrap
msgid ""
"(defun forward-sentence (&optional arg)\n"
"  \"Move forward to next `sentence-end'.  With argument, repeat.\n"
"With negative argument, move backward repeatedly to `sentence-beginning'.\n"
"\n"
msgstr ""
"(defun forward-sentence (&optional arg)\n"
"  \"Ve al siguiente `sentence-end'. Con el argumento, repite.\n"
"Con el argumento negativo, mueve atr@'as repetidamente a `sentence-beginning'.\n"

#. type: group
#: emacs-lisp-intro.texi:12564
#, no-wrap
msgid ""
"The variable `sentence-end' is a regular expression that matches ends of\n"
"sentences.  Also, every paragraph boundary terminates sentences as well.\"\n"
msgstr ""
"La variable `sentence-end' es una expresi@'on regular que empareja el\n"
"fin de frases. Tambi@'en, cada p@'arrafo asociado termina las frases\n"
"bien.\n"

#. type: group
#: emacs-lisp-intro.texi:12579
#, no-wrap
msgid ""
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let ((opoint (point))\n"
"        (sentence-end (sentence-end)))\n"
"    (while (< arg 0)\n"
"      (let ((pos (point))\n"
"            (par-beg (save-excursion (start-of-paragraph-text) (point))))\n"
"       (if (and (re-search-backward sentence-end par-beg t)\n"
"                (or (< (match-end 0) pos)\n"
"                    (re-search-backward sentence-end par-beg t)))\n"
"           (goto-char (match-end 0))\n"
"         (goto-char par-beg)))\n"
"      (setq arg (1+ arg)))\n"
msgstr ""
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let ((opoint (point))\n"
"        (sentence-end (sentence-end)))\n"
"    (while (< arg 0)\n"
"      (let ((pos (point))\n"
"            (par-beg (save-excursion (start-of-paragraph-text) (point))))\n"
"       (if (and (re-search-backward sentence-end par-beg t)\n"
"                (or (< (match-end 0) pos)\n"
"                    (re-search-backward sentence-end par-beg t)))\n"
"           (goto-char (match-end 0))\n"
"         (goto-char par-beg)))\n"
"      (setq arg (1+ arg)))\n"

#. type: group
#: emacs-lisp-intro.texi:12588
#, no-wrap
msgid ""
"    (while (> arg 0)\n"
"      (let ((par-end (save-excursion (end-of-paragraph-text) (point))))\n"
"       (if (re-search-forward sentence-end par-end t)\n"
"           (skip-chars-backward \" \\t\\n\")\n"
"         (goto-char par-end)))\n"
"      (setq arg (1- arg)))\n"
"    (constrain-to-field nil opoint t)))\n"
msgstr ""
"    (while (> arg 0)\n"
"      (let ((par-end (save-excursion (end-of-paragraph-text) (point))))\n"
"       (if (re-search-forward sentence-end par-end t)\n"
"           (skip-chars-backward \" \\t\\n\")\n"
"         (goto-char par-end)))\n"
"      (setq arg (1- arg)))\n"
"    (constrain-to-field nil opoint t)))\n"

#. type: group
#: emacs-lisp-intro.texi:12601
#, no-wrap
msgid ""
"(defun forward-sentence (&optional arg)\n"
"  \"Move forward to next sentence-end.  With argument, repeat.\n"
"With negative argument, move backward repeatedly to sentence-beginning.\n"
"Sentence ends are identified by the value of sentence-end\n"
"treated as a regular expression.  Also, every paragraph boundary\n"
"terminates sentences as well.\"\n"
msgstr ""
"(defun forward-sentence (&optional arg) \n"
"  \n"
" \"Mueve hacia adelante a la siguiente sentence-end. Con el argumento,\n"
"  repetir.  Con el argumento negativo, mueve hacia atr@'as\n"
"  repetidamente a sentence-beginning. La frase que finalizan son\n"
"  identificadas por el valor de sentence-end tratada como expresi@'on\n"
"  regular. Tambi@'en, cada p@'arrafo l@'{@dotless{i}}mite termina las\n"
"  frases bien\"\n"

#. type: group
#: emacs-lisp-intro.texi:12620
#, no-wrap
msgid ""
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (while (< arg 0)\n"
"    (let ((par-beg\n"
"           (save-excursion (start-of-paragraph-text) (point))))\n"
"      (if (re-search-backward\n"
"           (concat sentence-end \"[^ \\t\\n]\") par-beg t)\n"
"          (goto-char (1- (match-end 0)))\n"
"        (goto-char par-beg)))\n"
"    (setq arg (1+ arg)))\n"
"  (while (> arg 0)\n"
"    (let ((par-end\n"
"           (save-excursion (end-of-paragraph-text) (point))))\n"
"      (if (re-search-forward sentence-end par-end t)\n"
"          (skip-chars-backward \" \\t\\n\")\n"
"        (goto-char par-end)))\n"
"    (setq arg (1- arg))))\n"
msgstr ""
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (while (< arg 0)\n"
"    (let ((par-beg\n"
"           (save-excursion (start-of-paragraph-text) (point))))\n"
"      (if (re-search-backward\n"
"           (concat sentence-end \"[^ \\t\\n]\") par-beg t)\n"
"          (goto-char (1- (match-end 0)))\n"
"        (goto-char par-beg)))\n"
"    (setq arg (1+ arg)))\n"
"  (while (> arg 0)\n"
"    (let ((par-end\n"
"           (save-excursion (end-of-paragraph-text) (point))))\n"
"      (if (re-search-forward sentence-end par-end t)\n"
"          (skip-chars-backward \" \\t\\n\")\n"
"        (goto-char par-end)))\n"
"    (setq arg (1- arg))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12627
msgid ""
"The function looks long at first sight and it is best to look at its "
"skeleton first, and then its muscle.  The way to see the skeleton is to look "
"at the expressions that start in the left-most columns:"
msgstr ""
"La funci@'on se ve larga a primera vista y es mejor mirar primero el\n"
"esqueleto, y entonces su m@'usculo. El camino para ver el esqueleto es\n"
"mirar en las expresiones que empiezan las columnas m@'as a la\n"
"izquierda:"

#. type: group
#: emacs-lisp-intro.texi:12643
#, no-wrap
msgid ""
"(defun forward-sentence (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let ((opoint (point)) (sentence-end (sentence-end)))\n"
"    (while (< arg 0)\n"
"      (let ((pos (point))\n"
"            (par-beg (save-excursion (start-of-paragraph-text) (point))))\n"
"       @var{rest-of-body-of-while-loop-when-going-backwards}\n"
"    (while (> arg 0)\n"
"      (let ((par-end (save-excursion (end-of-paragraph-text) (point))))\n"
"       @var{rest-of-body-of-while-loop-when-going-forwards}\n"
"    @var{handle-forms-and-equivalent}\n"
msgstr ""
"(defun forward-sentence (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let ((opoint (point)) (sentence-end (sentence-end)))\n"
"    (while (< arg 0)\n"
"      (let ((pos (point))\n"
"            (par-beg (save-excursion (start-of-paragraph-text) (point))))\n"
"       @var{rest-of-body-of-while-loop-when-going-backwards}\n"
"    (while (> arg 0)\n"
"      (let ((par-end (save-excursion (end-of-paragraph-text) (point))))\n"
"       @var{rest-of-body-of-while-loop-when-going-forwards}\n"
"    @var{handle-forms-and-equivalent}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12649
msgid ""
"This looks much simpler! The function definition consists of documentation, "
"an @code{interactive} expression, an @code{or} expression, a @code{let} "
"expression, and @code{while} loops."
msgstr ""
"@exclamdown{}Esto parece bastante simple! La definici@'on de la\n"
"funci@'on consiste de documentaci@'on una expresi@'on\n"
"@code{interactive}, una expresi@'on @code{or}, una expresi@'on\n"
"@code{let}, y bucles @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:12651
msgid "Let's look at each of these parts in turn."
msgstr "Permite mirar cada una de estas partes."

#. type: Plain text
#: emacs-lisp-intro.texi:12653
msgid "We note that the documentation is thorough and understandable."
msgstr "Notamos que la documentaci@'on es profunda y comprensible."

#. type: Plain text
#: emacs-lisp-intro.texi:12659
msgid ""
"The function has an @code{interactive \"p\"} declaration.  This means that "
"the processed prefix argument, if any, is passed to the function as its "
"argument.  (This will be a number.)  If the function is not passed an "
"argument (it is optional) then the argument @code{arg} will be bound to 1."
msgstr ""
"La funci@'on tiene una declaraci@'on @code{interactive \"p\"}. Esto\n"
"signifca que el argumento prefijo, si cualquiera es pasado a la\n"
"funci@'on como su argumento. (Esto ser@'a un n@'umero.) Si la\n"
"funci@'on no pasa un argumento (eso es opcional) entonces el argumento\n"
"@code{arg} ser@'a asociado a 1."

#. type: Plain text
#: emacs-lisp-intro.texi:12666
msgid ""
"When @code{forward-sentence} is called non-interactively without an "
"argument, @code{arg} is bound to @code{nil}.  The @code{or} expression "
"handles this.  What it does is either leave the value of @code{arg} as it "
"is, but only if @code{arg} is bound to a value; or it sets the value of "
"@code{arg} to 1, in the case when @code{arg} is bound to @code{nil}."
msgstr ""
"Cuando @code{forward-sentence} se llama no interactivamente sin un\n"
"argumento, @code{arg} est@'a asignado @code{nil}. La expresi@'on\n"
"@code{or} maneja esto. Lo que hace es dejar el valor de @code{arg}\n"
"como eso es, pero solo si @code{arg} est@'a asignado a un valor; o eso\n"
"asigna el valor de @code{arg} a 1, en el caso de @code{arg} est@'a\n"
"asignado a @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:12673
msgid ""
"Next is a @code{let}.  That specifies the values of two local variables, "
"@code{point} and @code{sentence-end}.  The local value of point, from before "
"the search, is used in the @code{constrain-to-field} function which handles "
"forms and equivalents.  The @code{sentence-end} variable is set by the "
"@code{sentence-end} function."
msgstr ""
"Lo siguiente es un @code{let}. Que especifica los valores de dos\n"
"variables locales @code{point} y @code{sentence-end}. El valor local\n"
"de punto, desde antes de la b@'usqueda, es usada en la funci@'on\n"
"@code{constrain-to-field} que maneja formularios y equivalentes. La\n"
"variable @code{sentence-end} est@'a asignada por la funci@'on\n"
"@code{sentence-end}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:12675
#, no-wrap
msgid "The @code{while} loops"
msgstr "Los bucles @code{while}"

#. type: Plain text
#: emacs-lisp-intro.texi:12684
msgid ""
"Two @code{while} loops follow.  The first @code{while} has a true-or-false-"
"test that tests true if the prefix argument for @code{forward-sentence} is a "
"negative number.  This is for going backwards.  The body of this loop is "
"similar to the body of the second @code{while} clause, but it is not exactly "
"the same.  We will skip this @code{while} loop and concentrate on the second "
"@code{while} loop."
msgstr ""
"Sigue dos bucles @code{while}. El primer @code{while} tiene un\n"
"true-or-false-test que chequea cierto si el argumento prefijo para\n"
"@code{forward-sentence} es un n@'umero negativo. Esto es para volver\n"
"hacia atr@'as. El cuerpo de este bucle es similar al cuerpo de la\n"
"segunda cl@'ausula @code{while}, pero eso no es exactamente el\n"
"mismo. Se obviar@'a este bucle @code{while} y concentra en el segundo\n"
"bucle @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:12688
msgid ""
"The second @code{while} loop is for moving point forward.  Its skeleton "
"looks like this:"
msgstr ""
"El segundo bucle @code{while} est@'a moviendo el punto hacia\n"
"adelante. Su esqueleto se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:12697
#, no-wrap
msgid ""
"(while (> arg 0)            ; @r{true-or-false-test}\n"
"  (let @var{varlist}\n"
"    (if (@var{true-or-false-test})\n"
"        @var{then-part}\n"
"      @var{else-part}\n"
"  (setq arg (1- arg))))     ; @code{while} @r{loop decrementer}\n"
msgstr ""
"(while (> arg 0)            ; @r{true-or-false-test}\n"
"  (let @var{varlist}\n"
"    (if (@var{true-or-false-test})\n"
"        @var{then-part}\n"
"      @var{else-part}\n"
"  (setq arg (1- arg))))     ; @code{while} @r{loop decrementer}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12706
msgid ""
"The @code{while} loop is of the decrementing kind.  (@xref{Decrementing "
"Loop, , A Loop with a Decrementing Counter}.)  It has a true-or-false-test "
"that tests true so long as the counter (in this case, the variable "
"@code{arg}) is greater than zero; and it has a decrementer that subtracts 1 "
"from the value of the counter every time the loop repeats."
msgstr ""
"El bucle @code{while} es el tipo de decremento. (@xref{Bucle que se\n"
"decrementa, , Un Bucle con un Contador de Decremento}.) Eso tiene un\n"
"true-or-false-test que chequea cierto tan largo con el contador (en\n"
"este caso, la variable @code{arg}) es mayor que cero; y eso tiene un\n"
"decremento que elimina 1 desde el valor del contador cada vez que el\n"
"bucle se repite."

#. type: Plain text
#: emacs-lisp-intro.texi:12710
msgid ""
"If no prefix argument is given to @code{forward-sentence}, which is the most "
"common way the command is used, this @code{while} loop will run once, since "
"the value of @code{arg} will be 1."
msgstr ""
"Si ning@'un argumento prefijo es dado para @code{forward-sentece}, que\n"
"es el camino m@'as com@'un es usado, este bucle @code{while}\n"
"ejecutar@'a una vez, desde que el valor de @code{arg} ser@'a 1."

#. type: Plain text
#: emacs-lisp-intro.texi:12714
msgid ""
"The body of the @code{while} loop consists of a @code{let} expression, which "
"creates and binds a local variable, and has, as its body, an @code{if} "
"expression."
msgstr ""
"El cuerpo del cuerpo @code{while} consite de una expresi@'on\n"
"@code{let}, que crea y asocia una variable local, y tiene, su cuerpo,\n"
"una expresi@'on @code{if}."

#. type: Plain text
#: emacs-lisp-intro.texi:12717
msgid "The body of the @code{while} loop looks like this:"
msgstr "El cuerpo del bucle @code{while} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:12725
#, no-wrap
msgid ""
"(let ((par-end\n"
"       (save-excursion (end-of-paragraph-text) (point))))\n"
"  (if (re-search-forward sentence-end par-end t)\n"
"      (skip-chars-backward \" \\t\\n\")\n"
"    (goto-char par-end)))\n"
msgstr ""
"(let ((par-end\n"
"       (save-excursion (end-of-paragraph-text) (point))))\n"
"  (if (re-search-forward sentence-end par-end t)\n"
"      (skip-chars-backward \" \\t\\n\")\n"
"    (goto-char par-end)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12733
msgid ""
"The @code{let} expression creates and binds the local variable @code{par-"
"end}.  As we shall see, this local variable is designed to provide a bound "
"or limit to the regular expression search.  If the search fails to find a "
"proper sentence ending in the paragraph, it will stop on reaching the end of "
"the paragraph."
msgstr ""
"La expresi@'on @code{let} crea y asocia la variable local\n"
"@code{par-end}. Como se ve, esta variable local est@'a dise@~nada para\n"
"proporcionar una asociaci@'on o l@'{@dotless{i}}mite para la\n"
"b@'usqueda de la expresi@'on regular. Si la b@'usqueda falla para\n"
"encontrar una frase apropiada finalizando en el p@'arrafo, eso\n"
"se parar@'a logrando el fin del p@'arrafo."

#. type: Plain text
#: emacs-lisp-intro.texi:12738
msgid ""
"But first, let us examine how @code{par-end} is bound to the value of the "
"end of the paragraph.  What happens is that the @code{let} sets the value of "
"@code{par-end} to the value returned when the Lisp interpreter evaluates the "
"expression"
msgstr ""
"Pero primero, perm@'{@dotless{i}}tenos examinar c@'omo @code{par-end}\n"
"se asocia a la variable del fin del p@'arrafo. Lo que ocurre es que el\n"
"@code{let} asigna el valor de @code{par-end} al valor devuelto cuando\n"
"el int@'erprete eval@'ua la expresi@'on."

#. type: group
#: emacs-lisp-intro.texi:12742
#, no-wrap
msgid "(save-excursion (end-of-paragraph-text) (point))\n"
msgstr "(save-excursion (end-of-paragraph-text) (point))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12753
msgid ""
"In this expression, @code{(end-of-paragraph-text)} moves point to the end of "
"the paragraph, @code{(point)} returns the value of point, and then "
"@code{save-excursion} restores point to its original position.  Thus, the "
"@code{let} binds @code{par-end} to the value returned by the @code{save-"
"excursion} expression, which is the position of the end of the paragraph.  "
"(The @code{end-of-paragraph-text} function uses @code{forward-paragraph}, "
"which we will discuss shortly.)"
msgstr ""
"En esta expresi@'on, @code{(end-of-paragraph-text)} mueve el punto al\n"
"fin del p@'arrafo, @code{(point)} devuelve el valor del punto, y\n"
"entonces @code{save-excursion} restaura el punto a su posici@'on\n"
"original. De este modo, el @code{let} asocia @code{par-end} al valor\n"
"devuelto por la expresi@'on @code{save-excursion}, que es la\n"
"posici@'on del fin del p@'arrafo.  (La funci@'on\n"
"@code{end-of-paragraph-text} usa @code{forward-paragraph}, que se\n"
"discutir@'a pronto.)"

#. type: Plain text
#: emacs-lisp-intro.texi:12757
msgid ""
"Emacs next evaluates the body of the @code{let}, which is an @code{if} "
"expression that looks like this:"
msgstr ""
"Emacs eval@'ua el cuerpo del @code{let}, que es una expresi@'on\n"
"@code{if} que se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:12763
#, no-wrap
msgid ""
"(if (re-search-forward sentence-end par-end t) ; @r{if-part}\n"
"    (skip-chars-backward \" \\t\\n\")              ; @r{then-part}\n"
"  (goto-char par-end)))                        ; @r{else-part}\n"
msgstr ""
"(if (re-search-forward sentence-end par-end t) ; @r{if-part}\n"
"    (skip-chars-backward \" \\t\\n\")              ; @r{then-part}\n"
"  (goto-char par-end)))                        ; @r{else-part}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:12770
msgid ""
"The @code{if} tests whether its first argument is true and if so, evaluates "
"its then-part; otherwise, the Emacs Lisp interpreter evaluates the else-"
"part.  The true-or-false-test of the @code{if} expression is the regular "
"expression search."
msgstr ""
"El test @code{if} si su primer argumento es cierto y si\n"
"as@'{@dotless{i}}, eval@'ua su parte then; de otro modo, el\n"
"int@'erprete Emacs Lisp eval@'ua la parte else. El true-or-false-test\n"
"de la expresi@'on @code{if} es la b@'usqueda de la expresi@'on regular."

#. type: Plain text
#: emacs-lisp-intro.texi:12774
msgid ""
"It may seem odd to have what looks like the `real work' of the @code{forward-"
"sentence} function buried here, but this is a common way this kind of "
"operation is carried out in Lisp."
msgstr ""
"Puede estar mal tener que mirar como el `trabajo real' de la funci@'on\n"
"@code{forward-sentence} es vista aqu@'{@dotless{i}}, pero esto es un\n"
"camino com@'un de este tipo de operaci@'on traida en Lisp."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:12776
#, no-wrap
msgid "The regular expression search"
msgstr "La b@'usqueda de expresiones regulares"

#. type: Plain text
#: emacs-lisp-intro.texi:12782
msgid ""
"The @code{re-search-forward} function searches for the end of the sentence, "
"that is, for the pattern defined by the @code{sentence-end} regular "
"expression.  If the pattern is found---if the end of the sentence is found---"
"then the @code{re-search-forward} function does two things:"
msgstr ""
"La funci@'on @code{re-search-forward} busca el fin de la frase, que\n"
"es, para el patr@'on definido por la expresi@'on regular\n"
"@code{sentence-end}. Si el patr@'on es encontrado --- si el fin de la\n"
"frase se encuentra --- entonces la funci@'on @code{re-search-forward}\n"
"hace dos cosas:"

#. type: enumerate
#: emacs-lisp-intro.texi:12787
msgid ""
"The @code{re-search-forward} function carries out a side effect, which is to "
"move point to the end of the occurrence found."
msgstr ""
"La funci@'on @code{re-search-forward} trae un efecto lateral, que es\n"
"mover el punto al final de la ocurrencia encontrada."

#. type: enumerate
#: emacs-lisp-intro.texi:12792
msgid ""
"The @code{re-search-forward} function returns a value of true.  This is the "
"value received by the @code{if}, and means that the search was successful."
msgstr ""
"La funci@'on @code{re-search-forward} devuelve un valor de\n"
"verdad. Esto es el valor recibido por el @code{if}, y significa que la\n"
"b@'usqueda fu@'e exitosa."

#. type: Plain text
#: emacs-lisp-intro.texi:12798
msgid ""
"The side effect, the movement of point, is completed before the @code{if} "
"function is handed the value returned by the successful conclusion of the "
"search."
msgstr ""
"El efecto lateral, el movimiento del punto se completa antes de la\n"
"funci@'on @code{if} y es manejado por el valor devuelto por la exitosa\n"
"conclusi@'on de la b@'usqueda."

#. type: Plain text
#: emacs-lisp-intro.texi:12808
msgid ""
"When the @code{if} function receives the value of true from a successful "
"call to @code{re-search-forward}, the @code{if} evaluates the then-part, "
"which is the expression @code{(skip-chars-backward \" \\t\\n\")}.  This "
"expression moves backwards over any blank spaces, tabs or carriage returns "
"until a printed character is found and then leaves point after the "
"character.  Since point has already been moved to the end of the pattern "
"that marks the end of the sentence, this action leaves point right after the "
"closing printed character of the sentence, which is usually a period."
msgstr ""
"Cuando la funci@'on @code{if} recibe el valor de verdad desde una\n"
"llamada exitosa a @code{re-search-forward}, el @code{if} eval@'ua la\n"
"parte then que es la expresi@'on @code{(skip-chars-backward\n"
"\"\\t\\n\")}. Esta expresi@'on se mueve atr@'as a trav@'es de espacios en\n"
"blanco, los tabuladores o retornos de carro hasta un caracter impreso\n"
"es encontrado y entonces deja el punto correcto despu@'es del caracter\n"
"impreso cerrado de la frase, que es normalmente un periodo."

#. type: Plain text
#: emacs-lisp-intro.texi:12814
msgid ""
"On the other hand, if the @code{re-search-forward} function fails to find a "
"pattern marking the end of the sentence, the function returns false.  The "
"false then causes the @code{if} to evaluate its third argument, which is "
"@code{(goto-char par-end)}: it moves point to the end of the paragraph."
msgstr ""
"Por otro lado, si la funci@'on @code{re-search-forward} falla para\n"
"encontrar un patr@'on marcando el fin de la frase, la funci@'on\n"
"devuelve falso. Lo falso causa el @code{if} para evaluar su tercer\n"
"argumento, que es @code{(goto-char par-end)}: eso mueve el punto al\n"
"final del p@'arrafo."

#. type: Plain text
#: emacs-lisp-intro.texi:12817
msgid ""
"(And if the text is in a form or equivalent, and point may not move fully, "
"then the @code{constrain-to-field} function comes into play.)"
msgstr ""
"(Y si el texto est@'a en una forma o equivalente, y apunta a que no\n"
"puede moverse completamente entonces la funci@'on\n"
"@code{constrain-to-field} empieza a funcionar.)"

#. type: Plain text
#: emacs-lisp-intro.texi:12822
msgid ""
"Regular expression searches are exceptionally useful and the pattern "
"illustrated by @code{re-search-forward}, in which the search is the test of "
"an @code{if} expression, is handy.  You will see or write code incorporating "
"this pattern often."
msgstr ""
"Las b@'usquedas de expresiones regulares son excepcionalmente @'utiles\n"
"y el patr@'on ilustrado por @code{re-search-forward}, en el que la\n"
"b@'usqueda es el test de una expresi@'on @code{if}, es manejable. Se\n"
"ver@'a o escribir@'a c@'odigo incorporando este patr@'on con frecuencia."

#. type: Plain text
#: emacs-lisp-intro.texi:12976
msgid ""
"The @code{forward-paragraph} function moves point forward to the end of the "
"paragraph.  It is usually bound to @kbd{M-@}} and makes use of a number of "
"functions that are important in themselves, including @code{let*}, "
"@code{match-beginning}, and @code{looking-at}."
msgstr ""
"La funci@'on @code{forward-paragraph} mueve el punto al fin del\n"
"p@'arrafo. Eso est@'a normalmente asociado a @kbd{M-@}} y hace uso de\n"
"un n@'umero de funciones que son importantes en s@'{@dotless{i}},\n"
"incluyendo @code{let*}, @code{match-beginning}, y @code{looking-at}."

#. type: Plain text
#: emacs-lisp-intro.texi:12981
msgid ""
"The function definition for @code{forward-paragraph} is considerably longer "
"than the function definition for @code{forward-sentence} because it works "
"with a paragraph, each line of which may begin with a fill prefix."
msgstr ""
"La definici@'on de funci@'on para @code{forward-paragraph} es\n"
"considerablemente mayor que la definici@'on de funci@'on para\n"
"@code{forward-sentence} porque eso funciona como un p@'arrafo, cada\n"
"l@'{@dotless{i}}nea puede empezar con un prefijo de relleno @emph{fill\n"
"prefix}."

#. type: Plain text
#: emacs-lisp-intro.texi:12989
msgid ""
"A fill prefix consists of a string of characters that are repeated at the "
"beginning of each line.  For example, in Lisp code, it is a convention to "
"start each line of a paragraph-long comment with @samp{;;; }.  In Text mode, "
"four blank spaces make up another common fill prefix, creating an indented "
"paragraph.  (@xref{Fill Prefix, , , emacs, The GNU Emacs Manual}, for more "
"information about fill prefixes.)"
msgstr ""
"Un prefijo de relleno @emph{fill prefix} consiste en una cadena de\n"
"caracteres que se repite al principio de cada\n"
"l@'{@dotless{i}}nea. Por ejemplo, en c@'odigo Lisp, es una\n"
"convenci@'on para empezar cada l@'{@dotless{i}}nea de un comentario de\n"
"p@'arrafo largo con @samp{;;; }. En modo Texto, cuatro espacios en\n"
"blanco crean otro prefijo de relleno @emph{fill prefix} com@'un,\n"
"creando un p@'arrafo indentado. (@xref{Fill Prefix, , , emacs, The GNU\n"
"Emacs Manual} para m@'as informaci@'on acerca de prefijos de relleno\n"
"@emph{fill prefix}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:12995
msgid ""
"The existence of a fill prefix means that in addition to being able to find "
"the end of a paragraph whose lines begin on the left-most column, the "
"@code{forward-paragraph} function must be able to find the end of a "
"paragraph when all or many of the lines in the buffer begin with the fill "
"prefix."
msgstr ""
"La existencia de un prefijo de relleno significa que adem@'as de ser\n"
"capaz de encontrar el fin de un p@'arrafo cuyas l@'{@dotless{i}}neas\n"
"empiezan m@'as a la izquierda, la funci@'on @code{forward-paragraph}\n"
"debe ser capaz de encontrar el fin de un p@'arrafo cuando todas o\n"
"muchas de las l@'{@dotless{i}}neas en el b@'uffer empiezan con el\n"
"prefijo de relleno @emph{fill prefix}."

#. type: Plain text
#: emacs-lisp-intro.texi:12999
msgid ""
"Moreover, it is sometimes practical to ignore a fill prefix that exists, "
"especially when blank lines separate paragraphs.  This is an added "
"complication."
msgstr ""
"M@'as all@'a, es algunas veces pr@'actico ignorar un prefijo de\n"
"relleno @emph{fill prefix} que existe, especialmente cuando las\n"
"l@'{@dotless{i}}neas en blanco separen p@'arrafos. Esto es una\n"
"complicaci@'on a@~nadida."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:13008
#, no-wrap
msgid "Shortened @code{forward-paragraph} function definition"
msgstr "Definici@'on de funci@'on @code{forward-paragraph}"

#. type: Plain text
#: emacs-lisp-intro.texi:13014
msgid ""
"Rather than print all of the @code{forward-paragraph} function, we will only "
"print parts of it.  Read without preparation, the function can be daunting!"
msgstr ""
"En vez de imprimir toda la funci@'on @code{forward-paragraph},\n"
"nosotros solo imprimiremos partes de la misma. @exclamdown{}Lee sin\n"
"preparaci@'on, la funci@'on puede estar para desanimar!"

#. type: Plain text
#: emacs-lisp-intro.texi:13017
msgid "In outline, the function looks like this:"
msgstr "En esquema, la funci@'on se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:13030
#, no-wrap
msgid ""
"(defun forward-paragraph (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let*\n"
"      @var{varlist}\n"
"    (while (and (< arg 0) (not (bobp)))     ; @r{backward-moving-code}\n"
"      @dots{}\n"
"    (while (and (> arg 0) (not (eobp)))     ; @r{forward-moving-code}\n"
"      @dots{}\n"
msgstr ""
"(defun forward-paragraph (&optional arg)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (interactive \"p\")\n"
"  (or arg (setq arg 1))\n"
"  (let*\n"
"      @var{varlist}\n"
"    (while (and (< arg 0) (not (bobp)))     ; @r{backward-moving-code}\n"
"      @dots{}\n"
"    (while (and (> arg 0) (not (eobp)))     ; @r{forward-moving-code}\n"
"      @dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13035
msgid ""
"The first parts of the function are routine: the function's argument list "
"consists of one optional argument.  Documentation follows."
msgstr ""
"Las primeras partes de la funci@'on son rutinas: la funci@'on lista\n"
"argumentos que consisten de un argumento opcional. La documentaci@'on sigue."

#. type: Plain text
#: emacs-lisp-intro.texi:13045
msgid ""
"The lower case @samp{p} in the @code{interactive} declaration means that the "
"processed prefix argument, if any, is passed to the function.  This will be "
"a number, and is the repeat count of how many paragraphs point will move.  "
"The @code{or} expression in the next line handles the common case when no "
"argument is passed to the function, which occurs if the function is called "
"from other code rather than interactively.  This case was described "
"earlier.  (@xref{forward-sentence, The @code{forward-sentence} function}.)  "
"Now we reach the end of the familiar part of this function."
msgstr ""
"La letra min@'uscula @samp{p} en la declaraci@'on @code{interactive}\n"
"significa que el argumento prefijo se procesa, si se pasa a la\n"
"funci@'on. Eso ser@'a un n@'umero, y es el contaje repetido de cu@'antos\n"
"p@'arrafos se mover@'a.  La expresi@'on @code{or} en la siguiente\n"
"l@'{@dotless{i}}nea maneja el caso com@'un cuando no hay argumentos\n"
"que se pasan a la funci@'on, esto ocurre si la funci@'on se llama\n"
"desde otro c@'odigo en vez de interactivamente. Este caso se describe\n"
"pronto. (@xref{forward-sentence, La funci@'on\n"
"@code{forward-sentence}}.) Ahora se logra el fin de la parte familiar\n"
"de esta funci@'on."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:13047
#, no-wrap
msgid "The @code{let*} expression"
msgstr "La expresi@'on @code{let*}"

#. type: Plain text
#: emacs-lisp-intro.texi:13052
msgid ""
"The next line of the @code{forward-paragraph} function begins a @code{let*} "
"expression.  This is a different than @code{let}.  The symbol is @code{let*} "
"not @code{let}."
msgstr ""
"La siguiente l@'{@dotless{i}}nea de la funci@'on\n"
"@code{forward-paragraph} empieza una expresi@'on @code{let*}. Esto es\n"
"tan diferente como @code{let}. El s@'{@dotless{i}}mbolo es @code{let*}\n"
"no @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:13057
msgid ""
"The @code{let*} special form is like @code{let} except that Emacs sets each "
"variable in sequence, one after another, and variables in the latter part of "
"the varlist can make use of the values to which Emacs set variables in the "
"earlier part of the varlist."
msgstr ""
"La forma especial @code{let*} es como @code{let} excepto que Emacs\n"
"asigna cada variable en secuencia, una despu@'es de otra, y las\n"
"variables en la @'ultima parte de la varlist hacen uso de los valores\n"
"para los que Emacs asign@'o variable al principio la varlist."

#. type: Plain text
#: emacs-lisp-intro.texi:13063
msgid ""
"(@ref{append save-excursion, , @code{save-excursion} in @code{append-to-"
"buffer}}.)"
msgstr ""
"(@ref{append save-excursion, , @code{save-excursion} en @code{append-to-"
"buffer}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13068
msgid ""
"In the @code{let*} expression in this function, Emacs binds a total of seven "
"variables: @code{opoint}, @code{fill-prefix-regexp}, @code{parstart}, "
"@code{parsep}, @code{sp-parstart}, @code{start}, and @code{found-start}."
msgstr ""
"En la expresi@'on @code{let*} en esta funci@'on, Emacs asigna un total\n"
"de siete variables: @code{opoint}, @code{fill-prefix-regexp},\n"
"@code{parstart}, @code{parsep}, @code{sp-parstart}, @code{start}, y "
"@code{found-start}."

#. type: Plain text
#: emacs-lisp-intro.texi:13071
msgid ""
"The variable @code{parsep} appears twice, first, to remove instances of "
"@samp{^}, and second, to handle fill prefixes."
msgstr ""
"La variable @code{parsep} aparece dos veces, primero, para borrar\n"
"instancias de @samp{^}, y segundo, para manejar prefijos rellenos."

#. type: Plain text
#: emacs-lisp-intro.texi:13075
msgid ""
"The variable @code{opoint} is just the value of @code{point}.  As you can "
"guess, it is used in a @code{constrain-to-field} expression, just as in "
"@code{forward-sentence}."
msgstr ""
"La variable @code{opoint} es solo el valor de @code{point}. Como se\n"
"puede adivinar, eso se usa en una expresi@'on\n"
"@code{constrain-to-field}, solo como en @code{forward-sentence}."

#. type: Plain text
#: emacs-lisp-intro.texi:13078
msgid ""
"The variable @code{fill-prefix-regexp} is set to the value returned by "
"evaluating the following list:"
msgstr ""
"La variable @code{fill-prefix-regexp} se asigna al valor devuelto para\n"
"evaluar la siguiente lista:"

#. type: group
#: emacs-lisp-intro.texi:13085
#, no-wrap
msgid ""
"(and fill-prefix\n"
"     (not (equal fill-prefix \"\"))\n"
"     (not paragraph-ignore-fill-prefix)\n"
"     (regexp-quote fill-prefix))\n"
msgstr ""
"(and fill-prefix\n"
"     (not (equal fill-prefix \"\"))\n"
"     (not paragraph-ignore-fill-prefix)\n"
"     (regexp-quote fill-prefix))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13090
msgid ""
"This is an expression whose first element is the @code{and} special form."
msgstr ""
"Esta es una expresi@'on cuyo primer elemento es la forma especial @code{and}."

#. type: Plain text
#: emacs-lisp-intro.texi:13100
msgid ""
"As we learned earlier (@pxref{kill-new function, , The @code{kill-new} "
"function}), the @code{and} special form evaluates each of its arguments "
"until one of the arguments returns a value of @code{nil}, in which case the "
"@code{and} expression returns @code{nil}; however, if none of the arguments "
"returns a value of @code{nil}, the value resulting from evaluating the last "
"argument is returned.  (Since such a value is not @code{nil}, it is "
"considered true in Lisp.)  In other words, an @code{and} expression returns "
"a true value only if all its arguments are true."
msgstr ""
"Como se aprendi@'o antes la (@pxref{Funci@'on kill-new, , La funci@'on\n"
"@code{kill-new}}), la forma especial @code{and} eval@'ua cada uno de\n"
"sus argumentos hasta uno de los argumentos y devuelve un valor de\n"
"@code{nil} en el que el caso de la expresi@'on @code{and} devuelve\n"
"@code{nil}; sin embargo, si ninguno de los argumentos devuelve un\n"
"valor de @code{nil}, el valor resultante de evaluar el @'ultimo\n"
"argumento es devuelto. (Puesto que tal valor no es @code{nil}, eso es\n"
"considerado verdad en Lisp.) En otras palabras, una expresi@'on\n"
"@code{and} devuelve un valor de verdad solo si todos sus argumentos\n"
"son verdad."

#. type: Plain text
#: emacs-lisp-intro.texi:13106
msgid ""
"In this case, the variable @code{fill-prefix-regexp} is bound to a non-"
"@code{nil} value only if the following four expressions produce a true (i."
"e., a non-@code{nil}) value when they are evaluated; otherwise, @code{fill-"
"prefix-regexp} is bound to @code{nil}."
msgstr ""
"En este caso, la variable @code{fill-prefix-regexp} est@'a asociado a\n"
"un valor no @code{nil} solo si el las siguientes cuatro expresiones\n"
"producen un valor true (por ej., un no @code{nil}) cuando son\n"
"evaluados; de otro modo, @code{fill-prefix-regexp} est@'a asociado a "
"@code{nil}."

#. type: item
#: emacs-lisp-intro.texi:13108
#, no-wrap
msgid "fill-prefix"
msgstr "fill-prefix"

#. type: table
#: emacs-lisp-intro.texi:13112
msgid ""
"When this variable is evaluated, the value of the fill prefix, if any, is "
"returned.  If there is no fill prefix, this variable returns @code{nil}."
msgstr ""
"Cuando esta variable se eval@'ua, el valor del prefijo de relleno\n"
"@emph{fill prefix}, si cualquiera, est@'a devuelto. Si no hay prefijo\n"
"relleno, la variable devuelve @code{nil}."

#. type: item
#: emacs-lisp-intro.texi:13113
#, no-wrap
msgid "(not (equal fill-prefix \"\")"
msgstr "(not (equal fill-prefix \"\")"

#. type: table
#: emacs-lisp-intro.texi:13117
msgid ""
"This expression checks whether an existing fill prefix is an empty string, "
"that is, a string with no characters in it.  An empty string is not a useful "
"fill prefix."
msgstr ""
"Esta expresi@'on chequea si un prefijo lleno es una cadena\n"
"vac@'{@dotless{i}}a, que es, una cadena sin caracteres en eso. Una\n"
"cadena vac@'{@dotless{i}}a no es @'util un prefijo relleno @emph{fill\n"
"prefix}."

#. type: item
#: emacs-lisp-intro.texi:13118
#, no-wrap
msgid "(not paragraph-ignore-fill-prefix)"
msgstr "(not paragraph-ignore-fill-prefix)"

#. type: table
#: emacs-lisp-intro.texi:13122
msgid ""
"This expression returns @code{nil} if the variable @code{paragraph-ignore-"
"fill-prefix} has been turned on by being set to a true value such as "
"@code{t}."
msgstr ""
"Esta expresi@'on devuelve @code{nil} si la variable\n"
"@code{paragraph-ignore-fill-prefix} ha sido cambiado siendo asignado\n"
"un valor de verdad tal como @code{t}."

#. type: item
#: emacs-lisp-intro.texi:13123
#, no-wrap
msgid "(regexp-quote fill-prefix)"
msgstr "(regexp-quote fill-prefix)"

#. type: table
#: emacs-lisp-intro.texi:13128
msgid ""
"This is the last argument to the @code{and} special form.  If all the "
"arguments to the @code{and} are true, the value resulting from evaluating "
"this expression will be returned by the @code{and} expression and bound to "
"the variable @code{fill-prefix-regexp},"
msgstr ""
"Este es el @'ultimo argumento para la forma especial @code{and}. Si\n"
"todos los argumentos de @code{and} son verdaderos, el valor resultante\n"
"de evaluar esta expresi@'on ser@'a devuelto por la expresi@'on\n"
"@code{and} y asociado a la variable @code{fill-prefix-regexp},"

#. type: findex
#: emacs-lisp-intro.texi:13130
#, no-wrap
msgid "regexp-quote"
msgstr "regexp-quote"

#. type: Plain text
#: emacs-lisp-intro.texi:13140
msgid ""
"The result of evaluating this @code{and} expression successfully is that "
"@code{fill-prefix-regexp} will be bound to the value of @code{fill-prefix} "
"as modified by the @code{regexp-quote} function.  What @code{regexp-quote} "
"does is read a string and return a regular expression that will exactly "
"match the string and match nothing else.  This means that @code{fill-prefix-"
"regexp} will be set to a value that will exactly match the fill prefix if "
"the fill prefix exists.  Otherwise, the variable will be set to @code{nil}."
msgstr ""
"El resultado de evaluar esta expresi@'on @code{and} con @'exito es que\n"
"@code{fill-prefix-regexp} se asociar@'a al valor de @code{fill-prefix}\n"
"como fu@'e modificado por la funci@'on @code{regexp-quote}. Lo que\n"
"@code{regexp-quote} hace es leer una cadena y devolver la expresi@'on\n"
"regular que asociar@'a exactamente la cadena y nada m@'as. Esto\n"
"significa que @code{fill-prefix-regexp} ser@'a asignada a un valor que\n"
"asociar@'a el prefijo si el prefijo existe. De otro modo, la variable\n"
"ser@'a asignada a @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:13146
msgid ""
"The next two local variables in the @code{let*} expression are designed to "
"remove instances of @samp{^} from @code{parstart} and @code{parsep}, the "
"local variables which indicate the paragraph start and the paragraph "
"separator.  The next expression sets @code{parsep} again.  That is to handle "
"fill prefixes."
msgstr ""
"Las dos variables locales siguientes en la expresi@'on @code{let*}\n"
"est@'an dise@~nadas para eliminar instancias de @samp{^} desde\n"
"@code{parstart} y @code{parsep}, las variables locales indican que\n"
"el p@'arrafo empieza como separador de p@'arrafo. La siguiente\n"
"expresi@'on asigna @code{parsep} de nuevo. Esto es manejar prefijos rellenos."

#. type: Plain text
#: emacs-lisp-intro.texi:13151
msgid ""
"This is the setting that requires the definition call @code{let*} rather "
"than @code{let}.  The true-or-false-test for the @code{if} depends on "
"whether the variable @code{fill-prefix-regexp} evaluates to @code{nil} or "
"some other value."
msgstr ""
"Esta es la configuraci@'on que requiere la llamada de la definici@'on\n"
"@code{let*} en vez de @code{let}. El true-or-false-test para el\n"
"@code{if} depende de si la variable @code{fill-prefix-regexp} eval@'ua\n"
"a @code{nil} o alg@'un otro valor."

#. type: Plain text
#: emacs-lisp-intro.texi:13156
msgid ""
"If @code{fill-prefix-regexp} does not have a value, Emacs evaluates the else-"
"part of the @code{if} expression and binds @code{parsep} to its local "
"value.  (@code{parsep} is a regular expression that matches what separates "
"paragraphs.)"
msgstr ""
"Si @code{fill-prefix-regexp} no tiene un valor, Emacs eval@'ua la\n"
"parte else de la expresi@'on @code{if} y asocia @code{parsep} a su\n"
"valor local. (@code{parsep} es una expresi@'on regular que asocia lo\n"
"que los p@'arrafos separan.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13161
msgid ""
"But if @code{fill-prefix-regexp} does have a value, Emacs evaluates the then-"
"part of the @code{if} expression and binds @code{parsep} to a regular "
"expression that includes the @code{fill-prefix-regexp} as part of the "
"pattern."
msgstr ""
"Pero si @code{fill-prefix-regexp} tiene un valor, Emacs eval@'ua la\n"
"parte then de la expresi@'on @code{if} y asocia @code{parsep} a una\n"
"expresi@'on regular que incluye el @code{fill-prefix-regexp} como\n"
"parte del patr@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:13168
msgid ""
"Specifically, @code{parsep} is set to the original value of the paragraph "
"separate regular expression concatenated with an alternative expression that "
"consists of the @code{fill-prefix-regexp} followed by optional whitespace to "
"the end of the line.  The whitespace is defined by @w{@code{\"[ \\t]*$"
"\"}}.)  The @samp{\\\\|} defines this portion of the regexp as an "
"alternative to @code{parsep}."
msgstr ""
"Espec@'{@dotless{i}}ficamente, @code{parsep} est@'a asignado al valor "
"original del\n"
"p@'arrafo que separa la expresi@'on regular concatenada con una\n"
"expresi@'on alternativa que consiste del @code{fill-prefix-regexp}\n"
"seguido por espacios en blanco opcionales para el fin de la\n"
"l@'{@dotless{i}}nea. El espacio en blanco est@'a definido por\n"
"@w{@code{\"[ \\t]*$\"}}.) El @samp{\\\\|} define esta porci@'on del regexp\n"
"como una alternativa a @code{parsep}."

#. type: Plain text
#: emacs-lisp-intro.texi:13172
msgid ""
"According to a comment in the code, the next local variable, @code{sp-"
"parstart}, is used for searching, and then the final two, @code{start} and "
"@code{found-start}, are set to @code{nil}."
msgstr ""
"De acuerdo a un comentario en el c@'odigo, la siguiente variable\n"
"local, @code{sp-parstart}, se usa para buscar, y entonces los dos\n"
"finales, @code{start} y @code{found-start}, se asignan a @code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:13177
msgid ""
"Now we get into the body of the @code{let*}.  The first part of the body of "
"the @code{let*} deals with the case when the function is given a negative "
"argument and is therefore moving backwards.  We will skip this section."
msgstr ""
"Ahora tenemos dentro el cuerpo del @code{let*}. La primera parte del\n"
"cuerpo del @code{let*} trata con el caso cuando la funci@'on es dada\n"
"a un argumento negativo y consiguientemente movi@'endose hacia\n"
"atr@'as. Nosotros saldremos de esta secci@'on yendo hacia atr@'as. "

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:13179
#, no-wrap
msgid "The forward motion @code{while} loop"
msgstr "El bucle @code{while} hacia adelante"

#. type: Plain text
#: emacs-lisp-intro.texi:13187
msgid ""
"The second part of the body of the @code{let*} deals with forward motion.  "
"It is a @code{while} loop that repeats itself so long as the value of "
"@code{arg} is greater than zero.  In the most common use of the function, "
"the value of the argument is 1, so the body of the @code{while} loop is "
"evaluated exactly once, and the cursor moves forward one paragraph."
msgstr ""
"La segunda parte del cuerpo del @code{let*} trata con el proceso hacia\n"
"adelante. Eso es un bucle @code{while} que se repite si el valor de\n"
"@code{arg} es mayor que cero. En el uso m@'as com@'un de la funci@'on\n"
"el valor del argumento es 1, as@'{@dotless{i}} el cuerpo del bucle\n"
"@code{while} se eval@'ua exactamente una vez, y el cursor se mueve\n"
"hacia adelante un p@'arrafo."

#. type: Plain text
#: emacs-lisp-intro.texi:13225
msgid ""
"This part handles three situations: when point is between paragraphs, when "
"there is a fill prefix and when there is no fill prefix."
msgstr ""
"Esta parte maneja tres situaciones: cuando el punto est@'a entre\n"
"p@'arrafos, cuando hay un prefijo de relleno y cuando no hay prefijo\n"
"de relleno @emph{fill prefix}."

#. type: Plain text
#: emacs-lisp-intro.texi:13228
msgid "The @code{while} loop looks like this:"
msgstr "El bucle @code{while} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:13233
#, no-wrap
msgid ""
";; @r{going forwards and not at the end of the buffer}\n"
"(while (and (> arg 0) (not (eobp)))\n"
"\n"
msgstr ""
";; @r{yendo hacia adelante y no al fin del b@'uffer}\n"
"(while (and (> arg 0) (not (eobp)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:13244
#, no-wrap
msgid ""
"  ;; @r{between paragraphs}\n"
"  ;; Move forward over separator lines...\n"
"  (while (and (not (eobp))\n"
"              (progn (move-to-left-margin) (not (eobp)))\n"
"              (looking-at parsep))\n"
"    (forward-line 1))\n"
"  ;;  @r{This decrements the loop}\n"
"  (unless (eobp) (setq arg (1- arg)))\n"
"  ;; ... and one more line.\n"
"  (forward-line 1)\n"
msgstr ""
"  ;; @r{entre p@'arrafos}\n"
"  ;; Mueve hacia adelante a trav@'es de l@'{@dotless{i}}neas de\n"
"  ;; separaci@'on...\n"
"  (while (and (not (eobp))\n"
"              (progn (move-to-left-margin) (not (eobp)))\n"
"              (looking-at parsep))\n"
"    (forward-line 1))\n"
"  ;;  @r{Esto decremento el bucle}\n"
"  (unless (eobp) (setq arg (1- arg)))\n"
"  ;; ... y una l@'{@dotless{i}}nea m@'as\n"
"  (forward-line 1)\n"

#. type: group
#: emacs-lisp-intro.texi:13255 emacs-lisp-intro.texi:13327
#, no-wrap
msgid ""
"  (if fill-prefix-regexp\n"
"      ;; There is a fill prefix; it overrides parstart;\n"
"      ;; we go forward line by line\n"
"      (while (and (not (eobp))\n"
"                  (progn (move-to-left-margin) (not (eobp)))\n"
"                  (not (looking-at parsep))\n"
"                  (looking-at fill-prefix-regexp))\n"
"        (forward-line 1))\n"
msgstr ""
"  (if fill-prefix-regexp\n"
"      ;; Hay un prefijo lleno; que sobreescribe parstart;\n"
"      ;; vamos adelante l@'{@dotless{i}}nea por l@'{@dotless{i}}nea\n"
"      (while (and (not (eobp))\n"
"                  (progn (move-to-left-margin) (not (eobp)))\n"
"                  (not (looking-at parsep))\n"
"                  (looking-at fill-prefix-regexp))\n"
"        (forward-line 1))\n"

#. type: group
#: emacs-lisp-intro.texi:13270
#, no-wrap
msgid ""
"    ;; There is no fill prefix;\n"
"    ;; we go forward character by character\n"
"    (while (and (re-search-forward sp-parstart nil 1)\n"
"                (progn (setq start (match-beginning 0))\n"
"                       (goto-char start)\n"
"                       (not (eobp)))\n"
"                (progn (move-to-left-margin)\n"
"                       (not (looking-at parsep)))\n"
"                (or (not (looking-at parstart))\n"
"                    (and use-hard-newlines\n"
"                         (not (get-text-property (1- start) 'hard)))))\n"
"      (forward-char 1))\n"
msgstr ""
"    ;; No hay prefijo;\n"
"    ;; vamos hacia adelante caracter por caracter\n"
"    (while (and (re-search-forward sp-parstart nil 1)\n"
"                (progn (setq start (match-beginning 0))\n"
"                       (goto-char start)\n"
"                       (not (eobp)))\n"
"                (progn (move-to-left-margin)\n"
"                       (not (looking-at parsep)))\n"
"                (or (not (looking-at parstart))\n"
"                    (and use-hard-newlines\n"
"                         (not (get-text-property (1- start) 'hard)))))\n"
"      (forward-char 1))\n"

#. type: group
#: emacs-lisp-intro.texi:13278
#, no-wrap
msgid ""
"    ;; and if there is no fill prefix and if we are not at the end,\n"
"    ;;     go to whatever was found in the regular expression search\n"
"    ;;     for sp-parstart\n"
"    (if (< (point) (point-max))\n"
"        (goto-char start))))\n"
msgstr ""
"    ;; y si no hay prefijo y si no estamos al final\n"
"    ;; ir a lo que fu@'e encontrado en la b@'usqueda de expresiones regulares\n"
"    ;; para sp-parstart\n"
"    (if (< (point) (point-max))\n"
"        (goto-char start))))\n"

#. type: item
#: emacs-lisp-intro.texi:13281 emacs-lisp-intro.texi:13658
#, no-wrap
msgid "eobp"
msgstr "eobp"

#. type: Plain text
#: emacs-lisp-intro.texi:13289
msgid ""
"We can see that this is a decrementing counter @code{while} loop, using the "
"expression @code{(setq arg (1- arg))} as the decrementer.  That expression "
"is not far from the @code{while}, but is hidden in another Lisp macro, an "
"@code{unless} macro.  Unless we are at the end of the buffer---that is what "
"the @code{eobp} function determines; it is an abbreviation of @samp{End Of "
"Buffer P}---we decrease the value of @code{arg} by one."
msgstr ""
"Se puede ver que esto es un contador de decremento @code{while},\n"
"usando la expresi@'on @code{(setq arg (1- arg))} como lo que se\n"
"decrementa. Esta expresi@'on no est@'a lejos desde el @code{while},\n"
"pero est@'a oculta en otra macro Lisp, una macro @code{unless}. A\n"
"menos que estemos al final del b@'uffer --- esto es lo que la\n"
"funci@'on @code{eobp} determina; eso es una abreviaci@'on de @samp{Fin\n"
"del Buffer P} --- nosotros decrementamos el valor de @code{arg} por\n"
"uno."

#. type: Plain text
#: emacs-lisp-intro.texi:13295
msgid ""
"(If we are at the end of the buffer, we cannot go forward any more and the "
"next loop of the @code{while} expression will test false since the test is "
"an @code{and} with @code{(not (eobp))}.  The @code{not} function means "
"exactly as you expect; it is another name for @code{null}, a function that "
"returns true when its argument is false.)"
msgstr ""
"(Si estamos al fin del b@'uffer, no podemos ir m@'as hacia adelante y\n"
"el siguiente bucle de la expresi@'on @code{while} chequear@'a falso\n"
"desde que el test es un @code{and} con @code{(not (eobp))}. La\n"
"funci@'on @code{not} significa exactamente como se esperaba; eso es\n"
"otro nombre de @code{null}, una funci@'on que devuelve cierto cuando\n"
"su argumento es falso.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13299
msgid ""
"Interestingly, the loop count is not decremented until we leave the space "
"between paragraphs, unless we come to the end of buffer or stop seeing the "
"local value of the paragraph separator."
msgstr ""
"De manera interesante, el bucle cuenta que no se decrementa\n"
"hasta que deje el espacio entre p@'arrafos, a menos que vuelva al fin\n"
"del b@'uffer o pare viendo el valor local del separador del p@'arrafo."

#. type: Plain text
#: emacs-lisp-intro.texi:13305
msgid ""
"That second @code{while} also has a @code{(move-to-left-margin)} "
"expression.  The function is self-explanatory.  It is inside a @code{progn} "
"expression and not the last element of its body, so it is only invoked for "
"its side effect, which is to move point to the left margin of the current "
"line."
msgstr ""
"El segundo @code{while} tambi@'en tiene una expresi@'on\n"
"@code{(move-to-left-margin)}. La funci@'on es autoexplicativa. Eso\n"
"est@'a dentro de una expresi@'on @code{progn} y no el @'ultimo\n"
"elemento de su cuerpo, as@'{@dotless{i}} es solo invocado para su\n"
"efecto lateral, que es mover el punto al margen izquierdo de la\n"
"l@'{@dotless{i}}nea actual."

#. type: item
#: emacs-lisp-intro.texi:13306 emacs-lisp-intro.texi:13654
#, no-wrap
msgid "looking-at"
msgstr "looking-at"

#. type: Plain text
#: emacs-lisp-intro.texi:13310
msgid ""
"The @code{looking-at} function is also self-explanatory; it returns true if "
"the text after point matches the regular expression given as its argument."
msgstr ""
"La funci@'on @code{looking-at} es tambi@'en auto-explicativa; eso\n"
"devuelve cierto si el texto despu@'es del punto asocia la expresi@'on\n"
"regular dada como su argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:13313
msgid ""
"The rest of the body of the loop looks difficult at first, but makes sense "
"as you come to understand it."
msgstr ""
"El resto del cuerpo del bucle se ve compleja al principio, pero tiene\n"
"sentido cuando se comprende."

#. type: Plain text
#: emacs-lisp-intro.texi:13316
msgid "First consider what happens if there is a fill prefix:"
msgstr ""
"Primero considera que ocurre si hay un prefijo de relleno @emph{fill\n"
"prefix}:"

#. type: Plain text
#: emacs-lisp-intro.texi:13333
msgid ""
"This expression moves point forward line by line so long as four conditions "
"are true:"
msgstr ""
"Esta expresi@'on mueve el punto hacia adelante l@'{@dotless{i}}nea por\n"
"l@'{@dotless{i}}nea tan lejos como que las cuatro condiciones son ciertas:"

#. type: enumerate
#: emacs-lisp-intro.texi:13337
msgid "Point is not at the end of the buffer."
msgstr "Punto no est@'a al final del b@'uffer."

#. type: enumerate
#: emacs-lisp-intro.texi:13341
msgid ""
"We can move to the left margin of the text and are not at the end of the "
"buffer."
msgstr ""
"Podemos mover al margen izquierdo del texto y no estar al fin del b@'uffer."

#. type: enumerate
#: emacs-lisp-intro.texi:13344
msgid "The text following point does not separate paragraphs."
msgstr "El siguiente punto no separa p@'arrafos."

#. type: enumerate
#: emacs-lisp-intro.texi:13347
msgid "The pattern following point is the fill prefix regular expression."
msgstr ""
"El patr@'on que sigue el punto es la expresi@'on regular prefija rellena."

#. type: Plain text
#: emacs-lisp-intro.texi:13353
msgid ""
"The last condition may be puzzling, until you remember that point was moved "
"to the beginning of the line early in the @code{forward-paragraph} "
"function.  This means that if the text has a fill prefix, the @code{looking-"
"at} function will see it."
msgstr ""
"La @'ultima condici@'on puede ser un puzzle, hasta que se recuerde qu@'e\n"
"punto fu@'e movido al principio de la l@'{@dotless{i}}nea temprana en\n"
"la funci@'on @code{forward-paragraph}. Esto significa que si el texto\n"
"tiene el prefijo relleno, la funci@'on @code{looking-at} se ver@'a."

#. type: Plain text
#: emacs-lisp-intro.texi:13356
msgid "Consider what happens when there is no fill prefix."
msgstr "Considera qu@'e ocurre cuando no hay un prefijo lleno."

#. type: group
#: emacs-lisp-intro.texi:13369
#, no-wrap
msgid ""
"    (while (and (re-search-forward sp-parstart nil 1)\n"
"                (progn (setq start (match-beginning 0))\n"
"                       (goto-char start)\n"
"                       (not (eobp)))\n"
"                (progn (move-to-left-margin)\n"
"                       (not (looking-at parsep)))\n"
"                (or (not (looking-at parstart))\n"
"                    (and use-hard-newlines\n"
"                         (not (get-text-property (1- start) 'hard)))))\n"
"      (forward-char 1))\n"
msgstr ""
"    (while (and (re-search-forward sp-parstart nil 1)\n"
"                (progn (setq start (match-beginning 0))\n"
"                       (goto-char start)\n"
"                       (not (eobp)))\n"
"                (progn (move-to-left-margin)\n"
"                       (not (looking-at parsep)))\n"
"                (or (not (looking-at parstart))\n"
"                    (and use-hard-newlines\n"
"                         (not (get-text-property (1- start) 'hard)))))\n"
"      (forward-char 1))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13379
msgid ""
"This @code{while} loop has us searching forward for @code{sp-parstart}, "
"which is the combination of possible whitespace with a the local value of "
"the start of a paragraph or of a paragraph separator.  (The latter two are "
"within an expression starting @code{\\(?:} so that they are not referenced "
"by the @code{match-beginning} function.)"
msgstr ""
"El bucle @code{while} nos tiene buscando hacia adelante para\n"
"@code{sp-parstart}, que es la combinaci@'on de posibles espacios en\n"
"blanco con un valor local del comienzo de un p@'arrafo o de un\n"
"p@'arrafo separador. (Las @'ultimas dos son con una expresi@'on\n"
"empezando con @code{(?:)} as@'{@dotless{i}} que no est@'an\n"
"referenciadas por la funci@'on @code{match-beginning}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13382
msgid "The two expressions,"
msgstr "Las dos expresiones,"

#. type: group
#: emacs-lisp-intro.texi:13387
#, no-wrap
msgid ""
"(setq start (match-beginning 0))\n"
"(goto-char start)\n"
msgstr ""
"(setq start (match-beginning 0))\n"
"(goto-char start)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13393
msgid ""
"mean go to the start of the text matched by the regular expression search."
msgstr ""
"significa ir al comienzo del siguiente texto localizado por la\n"
"expresi@'on regular."

#. type: Plain text
#: emacs-lisp-intro.texi:13397
msgid ""
"The @code{(match-beginning 0)} expression is new.  It returns a number "
"specifying the location of the start of the text that was matched by the "
"last search."
msgstr ""
"La expresi@'on @code{(match-beginning 0)} es nueva. Eso devuelve un\n"
"n@'umero especificando la posici@'on del comienzo del texto fuese\n"
"asociado a la @'ultima b@'usqueda."

#. type: Plain text
#: emacs-lisp-intro.texi:13404
msgid ""
"The @code{match-beginning} function is used here because of a characteristic "
"of a forward search: a successful forward search, regardless of whether it "
"is a plain search or a regular expression search, moves point to the end of "
"the text that is found.  In this case, a successful search moves point to "
"the end of the pattern for @code{sp-parstart}."
msgstr ""
"La funci@'on @code{match-beginning} es usado aqu@'{@dotless{i}} porque\n"
"una caracter@'{@dotless{i}}stica de una b@'usqueda hacia adelante: una\n"
"b@'usqueda hacia adelante, sin dignidad si eso es una b@'usqueda plana\n"
"o una expresi@'on regular, mueve el punto al fin del texto que es\n"
"encontrado. En este caso, una b@'usqueda exitosa mueve el punto al\n"
"fin del patr@'on para @code{sp-parstart}."

#. type: Plain text
#: emacs-lisp-intro.texi:13409
msgid ""
"However, we want to put point at the end of the current paragraph, not "
"somewhere else.  Indeed, since the search possibly includes the paragraph "
"separator, point may end up at the beginning of the next one unless we use "
"an expression that includes @code{match-beginning}."
msgstr ""
"Sin embargo, se quiere poner el punto al fin del actual p@'arrafo, no\n"
"en alg@'un lugar m@'as. En vez de eso, desde que la b@'usqueda\n"
"posiblemente incluye el separador del p@'arrafo, el punto puede\n"
"finalizar al principio de lo siguiente a menos que se use una\n"
"expresi@'on que incluya @code{match-beginning}."

#. type: item
#: emacs-lisp-intro.texi:13410 emacs-lisp-intro.texi:13650
#, no-wrap
msgid "match-beginning"
msgstr "match-beginning"

#. type: Plain text
#: emacs-lisp-intro.texi:13417
msgid ""
"When given an argument of 0, @code{match-beginning} returns the position "
"that is the start of the text matched by the most recent search.  In this "
"case, the most recent search looks for @code{sp-parstart}.  The @code{(match-"
"beginning 0)} expression returns the beginning position of that pattern, "
"rather than the end position of that pattern."
msgstr ""
"Cuando un argumento de 0, @code{match-beginning} devuelve la posici@'on\n"
"que es el comienzo del texto asociado por la b@'usqueda m@'as\n"
"reciente. En este caso, la b@'usqueda m@'as reciente parece\n"
"@code{sp-parstart}. La expresi@'on @code{(match-beginning 0)} devuelve\n"
"la posici@'on del comienzo de este patr@'on, en vez de la posici@'on\n"
"final de este patr@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:13423
msgid ""
"(Incidentally, when passed a positive number as an argument, the @code{match-"
"beginning} function returns the location of point at that parenthesized "
"expression in the last search unless that parenthesized expression begins "
"with @code{\\(?:}.  I don't know why @code{\\(?:} appears here since the "
"argument is 0.)"
msgstr ""
"(Incidentalmente, cuando se pasa un n@'umero positivo como un\n"
"argumento, la funci@'on @code{match-beginning} devuelve la\n"
"localizaci@'on de punto en el que la expresi@'on con par@'entesis en\n"
"la @'ultima b@'usqueda a menos que la expresi@'on con par@'entesis\n"
"empiece con @code{\\(?:}. No s@'e porque @code{\\(?:} aparece\n"
"aqu@'{@dotless{i}} desde que el argumento es 0.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13426
msgid "The last expression when there is no fill prefix is"
msgstr "La @'ultima expresi@'on cuando no hay prefijos es"

#. type: group
#: emacs-lisp-intro.texi:13431
#, no-wrap
msgid ""
"(if (< (point) (point-max))\n"
"    (goto-char start))))\n"
msgstr ""
"(if (< (point) (point-max))\n"
"    (goto-char start))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13438
msgid ""
"This says that if there is no fill prefix and if we are not at the end, "
"point should move to the beginning of whatever was found by the regular "
"expression search for @code{sp-parstart}."
msgstr ""
"Esto dice que si no hay prefijo lleno y no estamos al punto final que\n"
"se mover@'{@dotless{i}}a al principio de lo que fu@'e encontrado por\n"
"la b@'usqueda de la expresi@'on regular para @code{sp-parstart}."

#. type: Plain text
#: emacs-lisp-intro.texi:13441
msgid ""
"The full definition for the @code{forward-paragraph} function not only "
"includes code for going forwards, but also code for going backwards."
msgstr ""
"La definici@'on completa para la funci@'on @code{forward-paragraph} no\n"
"solo incluye c@'odigo para avanzar, tambi@'en c@'odigo para retroceder."

#. type: Plain text
#: emacs-lisp-intro.texi:13450
msgid ""
"If you are reading this inside of GNU Emacs and you want to see the whole "
"function, you can type @kbd{C-h f} (@code{describe-function})  and the name "
"of the function.  This gives you the function documentation and the name of "
"the library containing the function's source.  Place point over the name of "
"the library and press the RET key; you will be taken directly to the "
"source.  (Be sure to install your sources! Without them, you are like a "
"person who tries to drive a car with his eyes shut!)"
msgstr ""
"Si est@'a leyendo esto dentro de GNU Emacs y quieres ver la funci@'on\n"
"completa, se puede escribir @kbd{C-h f} (@code{describe-function}) y\n"
"el nombre de la funci@'on. Esto da la documentaci@'on de funci@'on\n"
"y el nombre de la librer@'{@dotless{i}}a conteniendo las fuentes de la\n"
"funci@'on. Posiciona el punto a trav@'es del nombre de la\n"
"librer@'{@dotless{i}}a y presionar la tecla RET; ser@'a tomado\n"
"directamente a las fuentes. (@exclamdown{}Aseg@'urate de instalar las\n"
"fuentes! @exclamdown{}Sin eso, estar@'as como una persona que intenta\n"
"conducir un coche con los ojos cerrados!)"

#. type: section
#: emacs-lisp-intro.texi:13452
#, no-wrap
msgid "Create Your Own @file{TAGS} File"
msgstr "Crea tu propio fichero @file{TAGS}"

#. type: cindex
#: emacs-lisp-intro.texi:13454
#, no-wrap
msgid "@file{TAGS} file, create own"
msgstr "fichero de @file{TAGS}, crea el propio"

#. type: Plain text
#: emacs-lisp-intro.texi:13462
msgid ""
"Besides @kbd{C-h f} (@code{describe-function}), another way to see the "
"source of a function is to type @kbd{M-.} (@code{find-tag}) and the name of "
"the function when prompted for it.  This is a good habit to get into.  The "
"@kbd{M-.} (@code{find-tag}) command takes you directly to the source for a "
"function, variable, or node.  The function depends on tags tables to tell it "
"where to go."
msgstr ""
"Bajo @kbd{C-h f} (@code{describe-function}), otro camino para ver la\n"
"fuente de una funci@'on es escribir @kbd{M-.} (@code{find-tag}) y el\n"
"nombre de la funci@'on se asigna para eso. Esto es un buen h@'abito\n"
"para obtenerlo. El comando @kbd{M-.} (@code{find-tag}) toma\n"
"directamente a las fuentes de una funci@'on, variable, o nodo. La\n"
"funci@'on depende de tablas de etiquetas para saber donde ir."

#. type: Plain text
#: emacs-lisp-intro.texi:13469
msgid ""
"If the @code{find-tag} function first asks you for the name of a @file{TAGS} "
"table, give it the name of a @file{TAGS} file such as @file{/usr/local/src/"
"emacs/src/TAGS}.  (The exact path to your @file{TAGS} file depends on how "
"your copy of Emacs was installed.  I just told you the location that "
"provides both my C and my Emacs Lisp sources.)"
msgstr ""
"Si la funci@'on @code{find-tag} pregunta primero por el nombre de una\n"
"tabla @file{TAGS}, dado el nombre de un fichero @file{TAGS} tal como\n"
"@file{/usr/local/src/emacs/src/TAGS}. (La ruta exacta a tu fichero\n"
"@file{TAGS} depende de c@'omo tu copia de Emacs fu@'e instalada. Yo\n"
"te cuento la localizaci@'on que provee tanto mi C y mis fuentes de\n"
"Emacs Lisp.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13472
msgid ""
"You can also create your own @file{TAGS} file for directories that lack one."
msgstr ""
"Se puede tambi@'en crear tu propio fichero @file{TAGS} para los directorios\n"
"que faltan."

#. type: Plain text
#: emacs-lisp-intro.texi:13476
msgid ""
"You often need to build and install tags tables yourself.  They are not "
"built automatically.  A tags table is called a @file{TAGS} file; the name is "
"in upper case letters."
msgstr ""
"Con frecuencia se necesita construir e instalar etiquetas de tablas\n"
"por uno mismo. Esas no son construidas autom@'aticamente. Una tabla de\n"
"etiquetas llama a un fichero @file{TAGS}; el nombre es letras\n"
"may@'usculas."

#. type: Plain text
#: emacs-lisp-intro.texi:13481
msgid ""
"You can create a @file{TAGS} file by calling the @code{etags} program that "
"comes as a part of the Emacs distribution.  Usually, @code{etags} is "
"compiled and installed when Emacs is built.  (@code{etags} is not an Emacs "
"Lisp function or a part of Emacs; it is a C program.)"
msgstr ""
"Se puede crear un fichero @file{TAGS} llamando el programa\n"
"@code{etags} que viene como parte de la distribuci@'on\n"
"Emacs. Normalmente, @code{etags} est@'a compilado e instalado cuando\n"
"Emacs se construye. (@code{etags} no es una funci@'on Lisp o una parte\n"
"de Emacs; eso es un programa C.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13488
msgid ""
"To create a @file{TAGS} file, first switch to the directory in which you "
"want to create the file.  In Emacs you can do this with the @kbd{M-x cd} "
"command, or by visiting a file in the directory, or by listing the directory "
"with @kbd{C-x d} (@code{dired}).  Then run the compile command, with "
"@w{@code{etags *.el}} as the command to execute"
msgstr ""
"Para crear el fichero @file{TAGS}, primero cambia el directorio en el\n"
"que se quiere crear el fichero. En Emacs se puede hacer esto con el\n"
"comando @kbd{M-x cd}, o visitando un fichero en el directorio, o\n"
"listando el directorio @w{@code{etags *.el}} como el comando a ejecutar"

#. type: Plain text
#: emacs-lisp-intro.texi:13495
msgid "to create a @file{TAGS} file for Emacs Lisp."
msgstr "crear un fichero de @file{TAGS} para Emacs Lisp."

# 2296 entries translated
#. type: Plain text
#: emacs-lisp-intro.texi:13500
msgid ""
"For example, if you have a large number of files in your @file{~/emacs} "
"directory, as I do---I have 137 @file{.el} files in it, of which I load 12---"
"you can create a @file{TAGS} file for the Emacs Lisp files in that directory."
msgstr ""
"Por ejemplo, si se tiene un gran n@'umero de ficheros en el\n"
"directorio @file{~/emacs}, como se hace --- Yo tengo 137 @file{.el}\n"
"dentro, de que se carguen 12 --- se puede crear un fichero @file{TAGS}\n"
"para los ficheros Emacs Lisp en este directorio."

#. type: Plain text
#: emacs-lisp-intro.texi:13506
msgid ""
"The @code{etags} program takes all the usual shell `wildcards'.  For "
"example, if you have two directories for which you want a single @file{TAGS} "
"file, type @w{@code{etags *.el ../elisp/*.el}}, where @file{../elisp/} is "
"the second directory:"
msgstr ""
"El programa @code{etags} toma en toda la consola usual `comodines'. Por\n"
"ejemplo, si tienes dos directorios para el que quieres un fichero\n"
"@file{TAGS} simple, escribe @w{@code{etags *.el ../elisp/*.el}}, donde\n"
"@file{../elisp/} es el segundo directorio:"

#. type: smallexample
#: emacs-lisp-intro.texi:13509
#, no-wrap
msgid "M-x compile RET etags *.el ../elisp/*.el RET\n"
msgstr "M-x compile RET etags *.el ../elisp/*.el RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13513
msgid "Type"
msgstr "Tipo"

#. type: smallexample
#: emacs-lisp-intro.texi:13516
#, no-wrap
msgid "M-x compile RET etags --help RET\n"
msgstr "M-x compile RET etags --help RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13521
msgid ""
"to see a list of the options accepted by @code{etags} as well as a list of "
"supported languages."
msgstr ""
"para ver una lista de las opciones aceptadas por @code{etags} tan bien\n"
"como una lista de lenguajes soportados."

#. type: Plain text
#: emacs-lisp-intro.texi:13528
msgid ""
"The @code{etags} program handles more than 20 languages, including Emacs "
"Lisp, Common Lisp, Scheme, C, C++, Ada, Fortran, HTML, Java, LaTeX, Pascal, "
"Perl, PostScript, Python, TeX, Texinfo, makefiles, and most assemblers.  The "
"program has no switches for specifying the language; it recognizes the "
"language in an input file according to its file name and contents."
msgstr ""
"El programa @code{etags} maneja m@'as de 20 lenguajes, incluyendo\n"
"Emacs Lisp, Common Lisp, Scheme, C, C++, Ada, Fortran, HTML, Java,\n"
"LaTeX, Pascal, Perl, Postscript, Python, TeX, Texinfo, makefiles, y la\n"
"mayor@'{@dotless{i}}a de ensambladores. El programa no cambia para\n"
"especificar el lenguaje; eso reconoce el lenguaje como una entrada de\n"
"fichero de acuerdo a su nombre de fichero y contenidos."

#. type: Plain text
#: emacs-lisp-intro.texi:13533
msgid ""
"@file{etags} is very helpful when you are writing code yourself and want to "
"refer back to functions you have already written.  Just run @code{etags} "
"again at intervals as you write new functions, so they become part of the "
"@file{TAGS} file."
msgstr ""
"@file{etags} es muy @'util cuando se escribe c@'odigo por\n"
"t@'{@dotless{i}} mismo y quiere referirse a funciones que ya se han\n"
"escrito. Ahora ejecuta @code{etags} de nuevo en intervalos como se\n"
"escriben nuevas funciones, as@'{@dotless{i}} llegan a ser parte del\n"
"fichero @file{TAGS}."

#. type: Plain text
#: emacs-lisp-intro.texi:13537
msgid ""
"If you think an appropriate @file{TAGS} file already exists for what you "
"want, but do not know where it is, you can use the @code{locate} program to "
"attempt to find it."
msgstr ""
"Si piensa que un fichero @file{TAGS} apropiado que ya existe para lo\n"
"que quieres, pero no conoces donde est@'a, se puede usar el programa\n"
"@code{locate} para intentar encontrarlo."

#. type: Plain text
#: emacs-lisp-intro.texi:13543
msgid ""
"Type @w{@kbd{M-x locate @key{RET} TAGS @key{RET}}} and Emacs will list for "
"you the full path names of all your @file{TAGS} files.  On my system, this "
"command lists 34 @file{TAGS} files.  On the other hand, a `plain vanilla' "
"system I recently installed did not contain any @file{TAGS} files."
msgstr ""
"Escribe @w{@kbd{M-x locate @key{RET} TAGS @key{RET}}} y Emacs \n"
"listar@'a para ti las rutas nombres completas de todos tus ficheros\n"
"@file{TAGS}. En mi sistema, este comando lista 34 fichero @file{TAGS}.\n"
"Por otro lado, un sistema `vanilla plano' que recientemente no\n"
"conten@'{@dotless{i}}a fichero @file{TAGS}."

#. type: Plain text
#: emacs-lisp-intro.texi:13548
msgid ""
"If the tags table you want has been created, you can use the @code{M-x visit-"
"tags-table} command to specify it.  Otherwise, you will need to create the "
"tag table yourself and then use @code{M-x visit-tags-table}."
msgstr ""
"Si la tabla de etiquetas que se quiere ha sido creada, se puede usar\n"
"el comando @code{M-x visit-tags-table} para especificarlo. De otro\n"
"modo, se necesitar@'a la tabla de etiquetas por t@'{@dotless{i}} mismo\n"
"y entonces usar @code{M-x visit-tags-table}."

#. type: cindex
#: emacs-lisp-intro.texi:13549 emacs-lisp-intro.texi:13550
#, no-wrap
msgid "Building Tags in the Emacs sources"
msgstr "Construyendo Etiquetas en las fuentes Emacs"

#. type: cindex
#: emacs-lisp-intro.texi:13551
#, no-wrap
msgid "Tags in the Emacs sources"
msgstr "Etiquetas en las fuentes Emacs"

#. type: findex
#: emacs-lisp-intro.texi:13552
#, no-wrap
msgid "make tags"
msgstr "crear etiquetas"

#. type: Plain text
#: emacs-lisp-intro.texi:13559
msgid ""
"The GNU Emacs sources come with a @file{Makefile} that contains a "
"sophisticated @code{etags} command that creates, collects, and merges tags "
"tables from all over the Emacs sources and puts the information into one "
"@file{TAGS} file in the @file{src/} directory. (The @file{src/} directory is "
"below the top level of your Emacs directory.)"
msgstr ""
"Las fuentes GNU Emacs vienen con un @file{Makefile} que contiene un\n"
"comando sofisticado @code{etags} que crea, recoge, y asocia tablas de\n"
"etiquetas de todas las fuentes de Emacs y pone la informaci@'on dentro\n"
"de un fichero @file{TAGS} en el directorio @file{src/}. (El directorio\n"
"@file{src/} est@'a debajo del alto nivel de tu directorio Emacs.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13563
msgid ""
"To build this @file{TAGS} file, go to the top level of your Emacs source "
"directory and run the compile command @code{make tags}:"
msgstr ""
"Para construir este fichero @file{TAGS}, se puede ir al alto nivel de\n"
"directorio de fuentes Emacs y ejecutar el comando de compilar @code{make "
"tags}:"

#. type: smallexample
#: emacs-lisp-intro.texi:13566
#, no-wrap
msgid "M-x compile RET make tags RET\n"
msgstr "M-x compile RET make tags RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13571
msgid ""
"(The @code{make tags} command works well with the GNU Emacs sources, as well "
"as with some other source packages.)"
msgstr ""
"(El comando @code{make tags} trabaja bien con las fuentes de GNU\n"
"Emacs, tan bien como con otros paquetes fuentes.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13574
msgid ""
"For more information, see @ref{Tags, , Tag Tables, emacs, The GNU Emacs "
"Manual}."
msgstr ""
"Para m@'as informaci@'on, mira @ref{Etiquetas, , Tablas de Etiquetas,\n"
"emacs, El Manual GNU Emacs}."

#. type: node
#: emacs-lisp-intro.texi:13575
#, no-wrap
msgid "Regexp Review"
msgstr "Revisar regexp"

#. type: table
#: emacs-lisp-intro.texi:13585
msgid ""
"Repeatedly evaluate the body of the expression so long as the first element "
"of the body tests true.  Then return @code{nil}.  (The expression is "
"evaluated only for its side effects.)"
msgstr ""
"Repetidamente eval@'ua el cuerpo de la expresi@'on tan larga como el\n"
"primer elemento del cuerpo chequea cierto. Entonces devuelve\n"
"@code{nil}. (La expresi@'on es evaluado solo por sus efectos laterales.)"

#. type: group
#: emacs-lisp-intro.texi:13595
#, no-wrap
msgid ""
"(let ((foo 2))\n"
"  (while (> foo 0)\n"
"    (insert (format \"foo is %d.\\n\" foo))\n"
"    (setq foo (1- foo))))\n"
"\n"
msgstr ""
"(let ((foo 2))\n"
"  (while (> foo 0)\n"
"    (insert (format \"foo is %d.\\n\" foo))\n"
"    (setq foo (1- foo))))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:13599
#, no-wrap
msgid ""
"     @result{}      foo is 2.\n"
"             foo is 1.\n"
"             nil\n"
msgstr ""
"     @result{}      foo is 2.\n"
"             foo is 1.\n"
"             nil\n"

#. type: table
#: emacs-lisp-intro.texi:13607
msgid ""
"(The @code{insert} function inserts its arguments at point; the "
"@code{format} function returns a string formatted from its arguments the way "
"@code{message} formats its arguments; @code{\\n} produces a new line.)"
msgstr ""
"(La funci@'on @code{insert} inserta sus argumentos en el punto; la\n"
"funci@'on @code{format} devuelve una cadena formateada desde sus\n"
"argumentos el camino @code{message} formatea sus argumentos; @code{\\n}\n"
"produce una nueva l@'{@dotless{i}}nea.)"

#. type: table
#: emacs-lisp-intro.texi:13611
msgid ""
"Search for a pattern, and if the pattern is found, move point to rest just "
"after it."
msgstr ""
"Busca un patr@'on, y si el patr@'on se encuentra, mueve el punto al\n"
"resto solo despu@'es de eso."

#. type: table
#: emacs-lisp-intro.texi:13614
msgid "Takes four arguments, like @code{search-forward}:"
msgstr "Toma cuatro argumentos, como @code{search-forward}:"

#. type: enumerate
#: emacs-lisp-intro.texi:13619
msgid ""
"A regular expression that specifies the pattern to search for.  (Remember to "
"put quotation marks around this argument!)"
msgstr ""
"Una expresi@'on regular que especifica el patr@'on para\n"
"buscarlo. (@exclamdown{}Recuerda por marcas de comillas alrededor de\n"
"este argumento!)"

#. type: item
#: emacs-lisp-intro.texi:13632
#, no-wrap
msgid "let*"
msgstr "let*"

#. type: table
#: emacs-lisp-intro.texi:13637
msgid ""
"Bind some variables locally to particular values, and then evaluate the "
"remaining arguments, returning the value of the last one.  While binding the "
"local variables, use the local values of variables bound earlier, if any."
msgstr ""
"Asocia algunas variables localmente a valores particulares, y entonces\n"
"eval@'ua los argumentos que permanencen, devolviendo el valor del\n"
"@'ultimo. Mientras se asocian las variables locales, se usan los\n"
"valores locales de variables asociadas pronto, si acaso."

#. type: group
#: emacs-lisp-intro.texi:13647
#, no-wrap
msgid ""
"(let* ((foo 7)\n"
"      (bar (* 3 foo)))\n"
"  (message \"`bar' is %d.\" bar))\n"
"     @result{} `bar' is 21.\n"
msgstr ""
"(let* ((foo 7)\n"
"      (bar (* 3 foo)))\n"
"  (message \"`bar' is %d.\" bar))\n"
"     @result{} `bar' is 21.\n"

#. type: table
#: emacs-lisp-intro.texi:13653
msgid ""
"Return the position of the start of the text found by the last regular "
"expression search."
msgstr ""
"Devuelve la posici@'on del principio del texto encontrado por la\n"
"@'ultima b@'usqueda de la expresi@'on regular."

#. type: table
#: emacs-lisp-intro.texi:13657
msgid ""
"Return @code{t} for true if the text after point matches the argument, which "
"should be a regular expression."
msgstr ""
"Devuelve @code{t} para verdadero si el texto despu@'es del punto se\n"
"asocia al argumento, que deber@'{@dotless{i}}a ser una expresi@'on."

#. type: table
#: emacs-lisp-intro.texi:13663
msgid ""
"Return @code{t} for true if point is at the end of the accessible part of a "
"buffer.  The end of the accessible part is the end of the buffer if the "
"buffer is not narrowed; it is the end of the narrowed part if the buffer is "
"narrowed."
msgstr ""
"Devuelve @code{t} para cierto si el punto est@'a en el fin de la parte\n"
"accesible de un b@'uffer. El fin de la parte accesible es el fin del\n"
"b@'uffer no est@'a encogido; eso es el fin de la parte encogida si el\n"
"b@'uffer est@'a encogido."

#. type: section
#: emacs-lisp-intro.texi:13667
#, no-wrap
msgid "Exercises with @code{re-search-forward}"
msgstr "Ejercicios con @code{re-search-forward}"

#. type: itemize
#: emacs-lisp-intro.texi:13673
msgid ""
"Write a function to search for a regular expression that matches two or more "
"blank lines in sequence."
msgstr ""
"Escribe una funci@'on para buscar para una expresi@'on que detecte dos\n"
"o m@'as l@'{@dotless{i}}neas blancas en secuencia."

#. type: itemize
#: emacs-lisp-intro.texi:13682
msgid ""
"Write a function to search for duplicated words, such as `the the'.  "
"@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs "
"Manual}, for information on how to write a regexp (a regular expression) to "
"match a string that is composed of two identical halves.  You can devise "
"several regexps; some are better than others.  The function I use is "
"described in an appendix, along with several regexps.  @xref{the-the, , "
"@code{the-the} Duplicated Words Function}."
msgstr ""
"Escribe una funci@'on para buscar palabras duplicadas, tales como `el\n"
"el'. @xref{Regexps, , Sintaxis para Expresiones Regulares, emacs, El\n"
"Manual de GNU Emacs}, para informaci@'on de c@'omo escribir un regexp\n"
"(una expresi@'on regular) para asociar una cadena que se compone de\n"
"dos mitades id@'enticas. Se puede disponer de varios regexps; algunos\n"
"son mejores que otros. La funci@'on que se usa es descrito en un\n"
"ap@'endice, a lo largo de varios regexps. @xref{the-the, , Funci@'on\n"
"de Palabras Duplicadas @code{the-the}}."

#. type: cindex
#: emacs-lisp-intro.texi:13686
#, no-wrap
msgid "Repetition for word counting"
msgstr "Repetici@'on para contar palabras"

#. type: cindex
#: emacs-lisp-intro.texi:13687
#, no-wrap
msgid "Regular expressions for word counting"
msgstr "Expresiones regulares para contar palabras"

#. type: Plain text
#: emacs-lisp-intro.texi:13693
msgid ""
"Repetition and regular expression searches are powerful tools that you often "
"use when you write code in Emacs Lisp.  This chapter illustrates the use of "
"regular expression searches through the construction of word count commands "
"using @code{while} loops and recursion."
msgstr ""
"La repetici@'on y b@'usqueda de expresiones regulares son herramientas\n"
"poderosas que con frecuencia se usan cuando se escribe c@'odigo en Emacs\n"
"Lisp. Este cap@'{@dotless{i}}tulo ilustra el uso de b@'usqueda de\n"
"expresiones regulares a trav@'es de la construcci@'on de comandos de\n"
"contaje de palabras usando bucles @code{while} y recursi@'on."

#. type: node
#: emacs-lisp-intro.texi:13702
#, no-wrap
msgid "Why Count Words"
msgstr "Por qu@'e Contar Palabras"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:13703
#, no-wrap
msgid "Counting words"
msgstr "Contando palabras"

#. type: Plain text
#: emacs-lisp-intro.texi:13708
msgid ""
"The standard Emacs distribution contains functions for counting the number "
"of lines and words within a region."
msgstr ""
"La distribuci@'on de Emacs est@'andar contiene una funci@'on para\n"
"contar el n@'umero de l@'{@dotless{i}}neas en una regi@'on. "

#. type: Plain text
#: emacs-lisp-intro.texi:13718
msgid ""
"Certain types of writing ask you to count words.  Thus, if you write an "
"essay, you may be limited to 800 words; if you write a novel, you may "
"discipline yourself to write 1000 words a day.  It seems odd, but for a long "
"time, Emacs lacked a word count command.  Perhaps people used Emacs mostly "
"for code or types of documentation that did not require word counts; or "
"perhaps they restricted themselves to the operating system word count "
"command, @code{wc}.  Alternatively, people may have followed the publishers' "
"convention and computed a word count by dividing the number of characters in "
"a document by five."
msgstr ""
"Hay cierto tipo de pregunta escrita para contar palabras. De este\n"
"modo, si se escribe un ensayo, puede limitarse a 800 palabras; si se\n"
"escribe una novela, te puedes disciplinar a ti mismo a escribir 1000\n"
"palabras al d@'{@dotless{i}}a. Parece raro, pero durante mucho tiempo,\n"
"a Emacs le falt@'o un comando para contar palabras. Quiz@'as la gente\n"
"usaba Emacs mayoritariamente para codificar o documentar cosas que no\n"
"requieren contar palabras, o quiz@'as se restring@'{@dotless{i}}an al\n"
"sistema operativo el comando de contar palabras, @code{wc}. De manera\n"
"alternativa, la gente puede seguir la convenci@'on de las editoriales\n"
"y computaban un contaje de palabras dividiendo el n@'umero de caracteres\n"
"en un documento por cinco."

#. type: Plain text
#: emacs-lisp-intro.texi:13722
msgid ""
"There are many ways to implement a command to count words.  Here are some "
"examples, which you may wish to compare with the standard Emacs command, "
"@code{count-words-region}."
msgstr ""
"Hay mucho caminos para implementar un comando para contar\n"
"palabras. Aqu@'{@dotless{i}} hay algunos ejemplos, que pueden desear\n"
"compararse con el comando de Emacs est@'andar,\n"
"@code{count-words-region}."

#. type: Plain text
#: emacs-lisp-intro.texi:13736
msgid ""
"A word count command could count words in a line, paragraph, region, or "
"buffer.  What should the command cover? You could design the command to "
"count the number of words in a complete buffer.  However, the Emacs "
"tradition encourages flexibility---you may want to count words in just a "
"section, rather than all of a buffer.  So it makes more sense to design the "
"command to count the number of words in a region.  Once you have a command "
"to count words in a region, you can, if you wish, count words in a whole "
"buffer by marking it with @w{@kbd{C-x h}} (@code{mark-whole-buffer})."
msgstr ""
"Un comando de contar palabras podr@'{@dotless{i}}a contar palabras en\n"
"una l@'{@dotless{i}}nea, p@'arrafo, regi@'on, o\n"
"b@'uffer. @questiondown{}Qu@'e comando funcionar@'{@dotless{i}}a? Se\n"
"podr@'{@dotless{i}}a dise@~nar el comando para contar el n@'umero de\n"
"palabras en un b@'uffer completo. Sin embargo, la tradici@'on Emacs\n"
"anima a la flexibilidad --- se puede querer contar palabras solo en\n"
"una secci@'on, en vez de en todo un b@'uffer. As@'{@dotless{i}}, tiene\n"
"m@'as sentido dise@~nar el comando para contar el n@'umero de palabras\n"
"en una regi@'on. Una vez tienes un comando @code{count-words-region},\n"
"se puede, si desea, contar palabras en un b@'uffer completo\n"
"marc@'andolo con @w{@kbd{C-x h}} (@code{mark-whole-buffer})."

#. type: Plain text
#: emacs-lisp-intro.texi:13742
msgid ""
"Clearly, counting words is a repetitive act: starting from the beginning of "
"the region, you count the first word, then the second word, then the third "
"word, and so on, until you reach the end of the region.  This means that "
"word counting is ideally suited to recursion or to a @code{while} loop."
msgstr ""
"Claramente, contar palabras es un acto repetitivo: empezando desde el\n"
"principio de la regi@'on, se cuenta la primera palabra, entonces la\n"
"segunda palabra, entonces la tercera palabra, y as@'{@dotless{i}},\n"
"hasta que logres el fin de la regi@'on. Esto significa que contar\n"
"palabras se ajusta idealmente a recursi@'on o a un bucle @code{while}."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:13750
#, no-wrap
msgid "Designing @code{@value{COUNT-WORDS}}"
msgstr "Dise@~nando @code{@value{COUNT-WORDS}}"

#. type: Plain text
#: emacs-lisp-intro.texi:13756
msgid ""
"First, we will implement the word count command with a @code{while} loop, "
"then with recursion.  The command will, of course, be interactive."
msgstr ""
"Primero, implementaremos el comando de contar palabras con un bucle\n"
"@code{while}, entonces con la recursi@'on. El comando, de acuerdo,\n"
"ser@'a interactivo."

#. type: Plain text
#: emacs-lisp-intro.texi:13759
msgid "The template for an interactive function definition is, as always:"
msgstr ""
"La plantilla para una definici@'on de funci@'on interactiva es, como siempre:"

#. type: Plain text
#: emacs-lisp-intro.texi:13770
msgid "What we need to do is fill in the slots."
msgstr "Lo que necesitamos hacer es rellenar los slots."

#. type: Plain text
#: emacs-lisp-intro.texi:13776
msgid ""
"The name of the function should be self-explanatory and similar to the "
"existing @code{count-lines-region} name.  This makes the name easier to "
"remember.  @code{count-words-region} is the obvious choice.  Since that name "
"is now used for the standard Emacs command to count words, we will name our "
"implementation @code{@value{COUNT-WORDS}}."
msgstr ""
"El nombre de la funci@'on ser@'{@dotless{i}}a auto-explicativo y\n"
"similar al nombre del @code{count-lines-region} existente. Esto hace\n"
"que el nombre sea f@'acil de recordar. @code{count-words-region} es\n"
"una buena elecci@'on. Puesto que el nombre se usa ahora para el\n"
"comando de Emacs est@'andar para contar palabras, nosotros nombraremos\n"
"nuestra implementaci@'on como @code{@value{COUNT-WORDS}}."

#. type: Plain text
#: emacs-lisp-intro.texi:13787
msgid ""
"The function counts words within a region.  This means that the argument "
"list must contain symbols that are bound to the two positions, the beginning "
"and end of the region.  These two positions can be called @samp{beginning} "
"and @samp{end} respectively.  The first line of the documentation should be "
"a single sentence, since that is all that is printed as documentation by a "
"command such as @code{apropos}.  The interactive expression will be of the "
"form @samp{(interactive \"r\")}, since that will cause Emacs to pass the "
"beginning and end of the region to the function's argument list.  All this "
"is routine."
msgstr ""
"La funci@'on cuenta palabras con una regi@'on. Esto significa que el\n"
"argumento lista debe contener s@'{@dotless{i}}mbolos que son asociados\n"
"a las dos posiciones, el principio y fin de la regi@'on. Estas dos\n"
"posiciones puede ser llamadas @samp{beginning} y @samp{end}\n"
"respectivamente. La primera l@'{@dotless{i}}nea de la documentaci@'on\n"
"ser@'{@dotless{i}}a una frase simple, desde que esto es todo lo que\n"
"est@'a impreso como documentaci@'on por un comando tal como\n"
"@code{apropos}. La expresi@'on interactiva ser@'a de la forma\n"
"@samp{(interactive \"r\")}, puesto que causar@'a que Emacs pase al\n"
"principio y fin de la regi@'on a la lista de argumentos de\n"
"funci@'on. Todo esto es rutina."

#. type: Plain text
#: emacs-lisp-intro.texi:13792
msgid ""
"The body of the function needs to be written to do three tasks: first, to "
"set up conditions under which the @code{while} loop can count words, second, "
"to run the @code{while} loop, and third, to send a message to the user."
msgstr ""
"El cuerpo de la funci@'on necesita ser escrita para hacer tres tareas:\n"
"primero, configurar condiciones bajo las que el bucle @code{while}\n"
"pueda contar palabras, segundo, ejecutar el bucle @code{while}, y\n"
"tercero, enviar un mensaje al usuario."

#. type: Plain text
#: emacs-lisp-intro.texi:13801
msgid ""
"When a user calls @code{@value{COUNT-WORDS}}, point may be at the beginning "
"or the end of the region.  However, the counting process must start at the "
"beginning of the region.  This means we will want to put point there if it "
"is not already there.  Executing @code{(goto-char beginning)} ensures this.  "
"Of course, we will want to return point to its expected position when the "
"function finishes its work.  For this reason, the body must be enclosed in a "
"@code{save-excursion} expression."
msgstr ""
"Cuando un usuario llama a @code{@value{COUNT-WORDS}}, apunta a que\n"
"puede estar al principio o fin de la regi@'on. Sin embargo, el proceso\n"
"de conteo debe empezar al principio de la regi@'on. Esto significa que\n"
"querremos poner el punto que hay si eso no est@'a\n"
"all@'{@dotless{i}}. Ejecutando @code{(goto-char beginning)} asegura\n"
"esto. De acuerdo, querremos devolver el punto a su posici@'on esperada\n"
"cuando la funci@'on finalice su trabajo. Por esta raz@'on, el cuerpo\n"
"debe ser encerrado en una expresi@'on @code{save-excursion}."

#. type: Plain text
#: emacs-lisp-intro.texi:13807
msgid ""
"The central part of the body of the function consists of a @code{while} loop "
"in which one expression jumps point forward word by word, and another "
"expression counts those jumps.  The true-or-false-test of the @code{while} "
"loop should test true so long as point should jump forward, and false when "
"point is at the end of the region."
msgstr ""
"La parte central del cuerpo de la funci@'on consiste en un bucle\n"
"@code{while} en el que una expresi@'on salta el punto hacia delante\n"
"palabra por palabra, y otra expresi@'on cuenta estos saltos. Si el\n"
"test-verdadero-o-falso del bucle @code{while} es verdadero, el punto\n"
"saltar@'{@dotless{i}}a hacia adelante, y si es falso el punto\n"
"estar@'{@dotless{i}}a al fin de la regi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:13811
msgid ""
"We could use @code{(forward-word 1)} as the expression for moving point "
"forward word by word, but it is easier to see what Emacs identifies as a "
"`word' if we use a regular expression search."
msgstr ""
"Nosotros podr@'{@dotless{i}}amos usar @code{(forward-word 1)} como la\n"
"expresi@'on para mover el punto hacia adelante palabra por palabra,\n"
"pero eso es f@'acil de ver que Emacs identifica como una `palabra' si\n"
"se usa una b@'usqueda de expresi@'on regular."

#. type: Plain text
#: emacs-lisp-intro.texi:13816
msgid ""
"A regular expression search that finds the pattern for which it is searching "
"leaves point after the last character matched.  This means that a succession "
"of successful word searches will move point forward word by word."
msgstr ""
"Una expresi@'on regular busca lo que encuentra el patr@'on que se\n"
"est@'a buscando deja el punto despu@'es del @'ultimo car@'acter\n"
"emparejado. Esto significa que una sucesi@'on de palabras exitosas\n"
"busquen que mover@'a el punto adelante palabra por palabra."

#. type: Plain text
#: emacs-lisp-intro.texi:13825
msgid ""
"As a practical matter, we want the regular expression search to jump over "
"whitespace and punctuation between words as well as over the words "
"themselves.  A regexp that refuses to jump over interword whitespace would "
"never jump more than one word! This means that the regexp should include the "
"whitespace and punctuation that follows a word, if any, as well as the word "
"itself.  (A word may end a buffer and not have any following whitespace or "
"punctuation, so that part of the regexp must be optional.)"
msgstr ""
"Como materia pr@'actica, se quiere que la expresi@'on regular se\n"
"busque para saltar a trav@'es de un espacio en blanco y punt@'ue entre\n"
"palabras tan bien a trav@'es de las palabras en s@'{@dotless{i}}. Una\n"
"expresi@'on regexp que rechaza para saltar a trav@'es de espacios en\n"
"blanco entre palabras @exclamdown{}nunca saltar@'{@dotless{i}}a m@'as\n"
"de una palabra!. Esto significa que el regexp incluir@'{@dotless{i}}a\n"
"el espacio en blanco y la puntuaci@'on sigue a una palabra\n"
"cualquiera, como la palabra en s@'{@dotless{i}}. (Una palabra puede\n"
"finalizar un b@'uffer y no tiene cualquier espacio en blanco o\n"
"puntuaci@'on, as@'{@dotless{i}} esta parte del regexp debe ser\n"
"opcional.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13830
msgid ""
"Thus, what we want for the regexp is a pattern defining one or more word "
"constituent characters followed, optionally, by one or more characters that "
"are not word constituents.  The regular expression for this is:"
msgstr ""
"De este modo, queremos para el regexp es un patr@'on definiendo una o\n"
"m@'as palabras de caracteres que constituyen caracteres seguidos,\n"
"opcionalmente, por uno o m@'as caracteres que no son palabras\n"
"constituyentes. La expresi@'on regular para esto es:"

#. type: smallexample
#: emacs-lisp-intro.texi:13833
#, no-wrap
msgid "\\w+\\W*\n"
msgstr "\\w+\\W*\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13840
msgid ""
"The buffer's syntax table determines which characters are and are not word "
"constituents.  For more information about syntax, @pxref{Syntax Tables, , "
"Syntax Tables, elisp, The GNU Emacs Lisp Reference Manual}."
msgstr ""
"La tabla de sintaxis del b@'uffer determina qu@'e caracteres son y no\n"
"son palabras constituyentes. Para m@'as informaci@'on acerca de\n"
"sintaxis, @pxref{Tablas de Sintaxis, , Tablas de Sintaxis, elisp, El\n"
"Manual de Referencia de GNU Emacs Lisp}."

#. type: Plain text
#: emacs-lisp-intro.texi:13843
msgid "The search expression looks like this:"
msgstr "La expresi@'on se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:13846
#, no-wrap
msgid "(re-search-forward \"\\\\w+\\\\W*\")\n"
msgstr "(re-search-forward \"\\\\w+\\\\W*\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13857
msgid ""
"(Note that paired backslashes precede the @samp{w} and @samp{W}.  A single "
"backslash has special meaning to the Emacs Lisp interpreter.  It indicates "
"that the following character is interpreted differently than usual.  For "
"example, the two characters, @samp{\\n}, stand for @samp{newline}, rather "
"than for a backslash followed by @samp{n}.  Two backslashes in a row stand "
"for an ordinary, `unspecial' backslash, so Emacs Lisp interpreter ends of "
"seeing a single backslash followed by a letter.  So it discovers the letter "
"is special.)"
msgstr ""
"(Note que las barras invertidas que preceden el @samp{w} y\n"
"@samp{W}. Una barra invertida tiene significado especial al\n"
"int@'erprete Emacs Lisp. Eso indica que el caracter siguiente es\n"
"interpretado de manera diferente que la normal. Por ejemplo, los dos\n"
"caracteres, @samp{\\n}, son una @samp{nueva l@'{@dotless{i}}nea}, en\n"
"vez de una barra invertida seguida por @samp{\\n}. Dos barras\n"
"invertidas en una fila para una `barra invertida no especial',\n"
"as@'{@dotless{i}} Emacs Lisp interpreta el fin de mirar una barra\n"
"invertida simple seguida por una letra. As@'{@dotless{i}} descubre la\n"
"letra que es especial.)"

#. type: Plain text
#: emacs-lisp-intro.texi:13861
msgid ""
"We need a counter to count how many words there are; this variable must "
"first be set to 0 and then incremented each time Emacs goes around the "
"@code{while} loop.  The incrementing expression is simply:"
msgstr ""
"Se necesita un contador para contar cu@'antas palabras hay; esta\n"
"variables debe primero ser asignado a 0 y entonces incrementados cada\n"
"vez que Emacs va alrededor del bucle @code{while}. La expresi@'on de\n"
"incremento es simple:"

#. type: smallexample
#: emacs-lisp-intro.texi:13864
#, no-wrap
msgid "(setq count (1+ count))\n"
msgstr "(setq count (1+ count))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13877
msgid ""
"Finally, we want to tell the user how many words there are in the region.  "
"The @code{message} function is intended for presenting this kind of "
"information to the user.  The message has to be phrased so that it reads "
"properly regardless of how many words there are in the region: we don't want "
"to say that ``there are 1 words in the region''.  The conflict between "
"singular and plural is ungrammatical.  We can solve this problem by using a "
"conditional expression that evaluates different messages depending on the "
"number of words in the region.  There are three possibilities: no words in "
"the region, one word in the region, and more than one word.  This means that "
"the @code{cond} special form is appropriate."
msgstr ""
"Finalmente, se quiere contar al usuario cu@'antas palabras hay en la\n"
"regi@'on. La funci@'on @code{message} presenta este tipo de\n"
"informaci@'on al usuario. El mensaje tiene que ser fraseado\n"
"de manera que se lea apropiadamente sin cuidado de cuantas palabras\n"
"hay en la regi@'on: no se quiere decir que ``hay una palabra en la\n"
"regi@'on''. El conflicto entre singular y plural no es gramatical. Se\n"
"puede resolver este problema usando una expresi@'on condicional que\n"
"eval@'ua diferentes mensajes dependiendo en el n@'umero de palabras en\n"
"la regi@'on. Hay tres posibilidades: no palabras en la regi@'on, una\n"
"palabra en la regi@'on, y m@'as de una palabra. Esto significa que la\n"
"forma especial @code{cond} es apropiada."

#. type: Plain text
#: emacs-lisp-intro.texi:13880
msgid "All this leads to the following function definition:"
msgstr "Todo esto lidera a la siguiente definici@'on de funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:13892
#, no-wrap
msgid ""
";;; @r{First version; has bugs!}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Print number of words in the region.\n"
"Words are defined as at least one word-constituent\n"
"character followed by at least one character that\n"
"is not a word-constituent.  The buffer's syntax\n"
"table determines which characters these are.\"\n"
"  (interactive \"r\")\n"
"  (message \"Counting words in region ... \")\n"
msgstr ""
";;; @r{@exclamdown{}La Primera versi@'on; tiene errores!}\n"
"(defun count-words-region (beginning end)\n"
"  \"Imprime el n@'umero de palabras en la regi@'on.\n"
"Las palabras est@'an definidas al menos una palabra\n"
"constituida de caracteres seguido por al menos un \n"
"caracter que no constituye palabra. La tabla de \n"
"sintaxis del b@'uffer determina qu@'e caracteres hay.\"\n"
"  (interactive \"r\")\n"
"  (message \"Contando palaras en la regi@'on ... \")\n"

#. type: group
#: emacs-lisp-intro.texi:13899 emacs-lisp-intro.texi:13968
#, no-wrap
msgid ""
";;; @r{1. Set up appropriate conditions.}\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"
"    (let ((count 0))\n"
msgstr ""
";;; @r{1. Configurar condiciones apropiadas.}\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"
"    (let ((count 0))\n"

#. type: group
#: emacs-lisp-intro.texi:13906 emacs-lisp-intro.texi:13975
#, no-wrap
msgid ""
";;; @r{2. Run the} while @r{loop.}\n"
"      (while (< (point) end)\n"
"        (re-search-forward \"\\\\w+\\\\W*\")\n"
"        (setq count (1+ count)))\n"
msgstr ""
";;; @r{2. Ejecutar el} @r{bucle} while.\n"
"      (while (< (point) end)\n"
"        (re-search-forward \"\\\\w+\\\\W*\")\n"
"        (setq count (1+ count)))\n"

#. type: group
#: emacs-lisp-intro.texi:13919 emacs-lisp-intro.texi:14174
#: emacs-lisp-intro.texi:14283
#, no-wrap
msgid ""
";;; @r{3. Send a message to the user.}\n"
"      (cond ((zerop count)\n"
"             (message\n"
"              \"The region does NOT have any words.\"))\n"
"            ((= 1 count)\n"
"             (message\n"
"              \"The region has 1 word.\"))\n"
"            (t\n"
"             (message\n"
"              \"The region has %d words.\" count))))))\n"
msgstr ""
";;; @r{3. Enviar un mensaje al usuario.}\n"
"      (cond ((zerop count)\n"
"             (message\n"
"              \"La regi@'on no tiene palabras.\"))\n"
"            ((= 1 count)\n"
"             (message\n"
"              \"La regi@'on tiene 1 palabra.\"))\n"
"            (t\n"
"             (message\n"
"              \"La regi@'on tiene %d palabras.\" count))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13924
msgid "As written, the function works, but not in all circumstances."
msgstr ""
"Como se escribe, la funci@'on funciona, pero no en todas las circunstancias."

#. type: subsection
#: emacs-lisp-intro.texi:13926
#, no-wrap
msgid "The Whitespace Bug in @code{@value{COUNT-WORDS}}"
msgstr "El error de espacio en blanco en @code{@value{COUNT-WORDS}}"

#. type: Plain text
#: emacs-lisp-intro.texi:13936
msgid ""
"The @code{@value{COUNT-WORDS}} command described in the preceding section "
"has two bugs, or rather, one bug with two manifestations.  First, if you "
"mark a region containing only whitespace in the middle of some text, the "
"@code{@value{COUNT-WORDS}} command tells you that the region contains one "
"word! Second, if you mark a region containing only whitespace at the end of "
"the buffer or the accessible portion of a narrowed buffer, the command "
"displays an error message that looks like this:"
msgstr ""
"El comando @code{@value{COUNT-WORDS}} descrito en la secci@'on\n"
"precedente tiene dos errores, o incluso, un error con dos\n"
"manifestaciones. Primero, si se marca una regi@'on conteniendo solo\n"
"espacio en blanco en el medio de alg@'un texto el comando\n"
"@exclamdown{}@code{@value{COUNT-WORDS}} cuenta que la regi@'on\n"
"contiene una palabra!. Segundo, si se marca una regi@'on conteniendo\n"
"solo espacios en blanco al final del b@'uffer o la porci@'on accesible\n"
"de un b@'uffer encogido, el comando muestra un mensaje de error que se\n"
"parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:13939
#, no-wrap
msgid "Search failed: \"\\\\w+\\\\W*\"\n"
msgstr "B@'usqueda fallida: \"\\\\w+\\\\W*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13943
msgid ""
"If you are reading this in Info in GNU Emacs, you can test for these bugs "
"yourself."
msgstr ""
"Si est@'a leyendo esto en Info en GNU Emacs, se puede testear para\n"
"estos errores por s@'{@dotless{i}} mismo."

#. type: Plain text
#: emacs-lisp-intro.texi:13945
msgid "First, evaluate the function in the usual manner to install it."
msgstr "Primero, eval@'ua la funci@'on de la manera usual para instalarlo."

#. type: ifinfo
#: emacs-lisp-intro.texi:13948
msgid ""
"Here is a copy of the definition.  Place your cursor after the closing "
"parenthesis and type @kbd{C-x C-e} to install it."
msgstr ""
"Aqu@'{@dotless{i}} hay una copia de la definici@'on. Emplaza tu cursor\n"
"despu@'es de cerrar los par@'entesis y escribir @kbd{C-x C-e} para\n"
"instalarlo."

#. type: group
#: emacs-lisp-intro.texi:13957
#, no-wrap
msgid ""
";; @r{First version; has bugs!}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Print number of words in the region.\n"
"Words are defined as at least one word-constituent character followed\n"
"by at least one character that is not a word-constituent.  The buffer's\n"
"syntax table determines which characters these are.\"\n"
msgstr ""
";; @r{@exclamdown{}La Primera versi@'on; tiene errores!}  (defun\n"
"@value{COUNT-WORDS} (beginning end) \n"
"\"Imprime el n@'umero de palabras en la regi@'on.  Las palabras son\n"
"definidas como al menos un caracter de palabra constituida seguida por\n"
"al menos un caracter que no es una palabra constituyente. La tabla de\n"
"sintaxis del b@'uffer determina qu@'e caracteres hay.\"\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:13961
#, no-wrap
msgid ""
"  (interactive \"r\")\n"
"  (message \"Counting words in region ... \")\n"
msgstr ""
"  (interactive \"r\")\n"
"  (message \"Contando palabras en la regi@'on ... \")\n"

#. type: group
#: emacs-lisp-intro.texi:13983
#, no-wrap
msgid ""
";;; @r{3. Send a message to the user.}\n"
"      (cond ((zerop count)\n"
"             (message \"The region does NOT have any words.\"))\n"
"            ((= 1 count) (message \"The region has 1 word.\"))\n"
"            (t (message \"The region has %d words.\" count))))))\n"
msgstr ""
";;; @r{3. Env@'{@dotless{i}}a un mensaje al usuario.}\n"
"      (cond ((zerop count)\n"
"             (message \"La regi@'on no tiene palabras.\"))\n"
"            ((= 1 count) (message \"The regi@'on tiene 1 palabra.\"))\n"
"            (t (message \"La regi@'on tiene %d palabras.\" count))))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13989
msgid "If you wish, you can also install this keybinding by evaluating it:"
msgstr "Si se desea, se puede tambi@'en instalar este atajo para ser evaluado:"

#. type: smallexample
#: emacs-lisp-intro.texi:13992
#, no-wrap
msgid "(global-set-key \"\\C-c=\" '@value{COUNT-WORDS})\n"
msgstr "(global-set-key \"\\C-c=\" '@value{COUNT-WORDS})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:13997
msgid ""
"To conduct the first test, set mark and point to the beginning and end of "
"the following line and then type @kbd{C-c =} (or @kbd{M-x @value{COUNT-"
"WORDS}} if you have not bound @kbd{C-c =}):"
msgstr ""
"Para conducir el primer test, asigna marca y punto al principio y fin\n"
"de la siguiente l@'{@dotless{i}}nea y entonces escribe @kbd{C-c =} (o\n"
"@kbd{M-x @value{COUNT-WORDS}} si no se ha asignado @kbd{C-c =}):"

#. type: smallexample
#: emacs-lisp-intro.texi:14000
#, no-wrap
msgid "    one   two  three\n"
msgstr "    uno   dos  tres\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14004
msgid "Emacs will tell you, correctly, that the region has three words."
msgstr ""
"Emacs te contar@'a, correctamente, que la regi@'on tiene tres palabras."

#. type: Plain text
#: emacs-lisp-intro.texi:14011
msgid ""
"Repeat the test, but place mark at the beginning of the line and place point "
"just @emph{before} the word @samp{one}.  Again type the command @kbd{C-c =} "
"(or @kbd{M-x @value{COUNT-WORDS}}).  Emacs should tell you that the region "
"has no words, since it is composed only of the whitespace at the beginning "
"of the line.  But instead Emacs tells you that the region has one word!"
msgstr ""
"Repite el test, pero marca el lugar al principio de la\n"
"l@'{@dotless{i}}nea y emplaza el punto justo @emph{antes} de la\n"
"palabra @samp{uno}. De nuevo escribe el comando @kbd{C-c =} (o\n"
"@kbd{M-x @value{COUNT-WORDS}}). Emacs cuenta que la regi@'on no tiene\n"
"palabras, puesto que eso est@'a compuesto solo por espacios en blanco\n"
"al principio de la l@'{@dotless{i}}nea. @exclamdown{}Pero en vez de\n"
"que Emacs cuente que la regi@'on tiene una palabra!"

#. type: Plain text
#: emacs-lisp-intro.texi:14020
msgid ""
"For the third test, copy the sample line to the end of the @file{*scratch*} "
"buffer and then type several spaces at the end of the line.  Place mark "
"right after the word @samp{three} and point at the end of line.  (The end of "
"the line will be the end of the buffer.)  Type @kbd{C-c =} (or @kbd{M-x "
"@value{COUNT-WORDS}}) as you did before.  Again, Emacs should tell you that "
"the region has no words, since it is composed only of the whitespace at the "
"end of the line.  Instead, Emacs displays an error message saying "
"@samp{Search failed}."
msgstr ""
"Para el tercer test, copia la l@'{@dotless{i}}nea de ejemplo al fin\n"
"del b@'uffer @file{*scratch*} y entonces escribe varios espacios al fin\n"
"de la l@'{@dotless{i}}nea. Posiciona la marca correcta despu@'es de la\n"
"palabra @samp{tres} y apunta al fin de la l@'{@dotless{i}}nea. (El fin\n"
"de la l@'{@dotless{i}}nea ser@'a el fin del b@'uffer.) Escribe @kbd{C-c\n"
"=} (o @kbd{M-x @value{COUNT-WORDS}}) como se hizo antes. De nuevo,\n"
"Emacs te contar@'{@dotless{i}}a que la regi@'on no tiene palabras,\n"
"puesto que eso est@'a compuesto solo de los espacios en blanco al fin\n"
"de la l@'{@dotless{i}}nea. En vez de eso, Emacs muestra un mensaje de\n"
"error diciendo @samp{B@'usqueda fallida}."

#. type: Plain text
#: emacs-lisp-intro.texi:14022
msgid "The two bugs stem from the same problem."
msgstr "Los dos errores queman el mismo problema."

#. type: Plain text
#: emacs-lisp-intro.texi:14036
msgid ""
"Consider the first manifestation of the bug, in which the command tells you "
"that the whitespace at the beginning of the line contains one word.  What "
"happens is this: The @code{M-x @value{COUNT-WORDS}} command moves point to "
"the beginning of the region.  The @code{while} tests whether the value of "
"point is smaller than the value of @code{end}, which it is.  Consequently, "
"the regular expression search looks for and finds the first word.  It leaves "
"point after the word.  @code{count} is set to one.  The @code{while} loop "
"repeats; but this time the value of point is larger than the value of "
"@code{end}, the loop is exited; and the function displays a message saying "
"the number of words in the region is one.  In brief, the regular expression "
"search looks for and finds the word even though it is outside the marked "
"region."
msgstr ""
"Considere la primera manifestaci@'on del error, en el que el comando\n"
"te cuenta que el espacio en blanco al principio de la\n"
"l@'{@dotless{i}}nea contiene una palabra. Lo que ocurre es esto: El\n"
"comando @code{M-x @value{COUNT-WORDS}} mueve el punto al principio de\n"
"la regi@'on. El test @code{while} si el valor del punto es m@'as\n"
"peque@~no de lo que el valor de @code{end}, que es. Por consiguiente,\n"
"en la expresi@'on regular se busca y encuentra la primera palabra. Eso\n"
"deja el punto despu@'es de la palabra. @code{count} que se establece a\n"
"uno. El bucle @code{while} repite; pero esta vez el valor del punto es\n"
"m@'as largo que el valor de @code{end}, el bucle sale; y la funci@'on\n"
"muestra un mensaje diciendo el n@'umero de palabras en la regi@'on es\n"
"uno. En breve, la expresi@'on regular busca y encuentra la palabra\n"
"incluso aunque eso est@'e fuera de la regi@'on marcada."

#. type: Plain text
#: emacs-lisp-intro.texi:14042
msgid ""
"In the second manifestation of the bug, the region is whitespace at the end "
"of the buffer.  Emacs says @samp{Search failed}.  What happens is that the "
"true-or-false-test in the @code{while} loop tests true, so the search "
"expression is executed.  But since there are no more words in the buffer, "
"the search fails."
msgstr ""
"En la segunda manifestaci@'on del error, la regi@'on es un espacio en\n"
"blanco al fin del b@'uffer. Emacs dice @samp{B@'usqueda fallida}. Lo\n"
"que ocurre es que true-or-false-test en el bucle @code{while} chequea\n"
"verdad, as@'{@dotless{i}} la expresi@'on de b@'usqueda es\n"
"ejecutada. Pero desde que no hay m@'as palabras en el buffer, la\n"
"b@'usqueda falla."

#. type: Plain text
#: emacs-lisp-intro.texi:14045
msgid ""
"In both manifestations of the bug, the search extends or attempts to extend "
"outside of the region."
msgstr ""
"En ambas manifestaciones del error, la b@'usqueda extiende o intenta\n"
"extenderse fuera de la regi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14049
msgid ""
"The solution is to limit the search to the region---this is a fairly simple "
"action, but as you may have come to expect, it is not quite as simple as you "
"might think."
msgstr ""
"La soluci@'on es limitar la b@'usqueda a la regi@'on --- esto es una\n"
"acci@'on simple y limpia, pero como tu puedes tener que llegar a\n"
"esperar, eso no es tan simple como se podr@'{@dotless{i}}a pensar."

#. type: Plain text
#: emacs-lisp-intro.texi:14058
msgid ""
"As we have seen, the @code{re-search-forward} function takes a search "
"pattern as its first argument.  But in addition to this first, mandatory "
"argument, it accepts three optional arguments.  The optional second argument "
"bounds the search.  The optional third argument, if @code{t}, causes the "
"function to return @code{nil} rather than signal an error if the search "
"fails.  The optional fourth argument is a repeat count.  (In Emacs, you can "
"see a function's documentation by typing @kbd{C-h f}, the name of the "
"function, and then @key{RET}.)"
msgstr ""
"Como se ha visto, la funci@'on @code{re-search-forward} toma un\n"
"patr@'on de b@'usqueda como su primer argumento. Pero adem@'as de este\n"
"primer, argumento obligatorio, se aceptan tres argumentos\n"
"opcionales. El segundo argumento opcional asocia la b@'usqueda. El\n"
"tercer argumento opcional, si @code{t}, causa la funci@'on a devolver\n"
"@code{nil} en vez de la se@~nal un error si la b@'usqueda falla. El\n"
"cuarto argumento opcional es un contador repetido. (En Emacs, se puede\n"
"ver una documentaci@'on de la funci@'on escribiendo @kbd{C-h f}, el\n"
"nombre de la funci@'on, y entonces @key{RET}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:14063
msgid ""
"In the @code{@value{COUNT-WORDS}} definition, the value of the end of the "
"region is held by the variable @code{end} which is passed as an argument to "
"the function.  Thus, we can add @code{end} as an argument to the regular "
"expression search expression:"
msgstr ""
"En la definici@'on @code{@value{COUNT-WORDS}}, el valor del fin de la\n"
"regi@'on es tomada por la variable @code{end} que es pasada como un\n"
"argumento para la funci@'on. De este modo, se puede a@~nadir\n"
"@code{end} como un argumento para la b@'usqueda de la expresi@'on de\n"
"b@'usqueda:"

#. type: smallexample
#: emacs-lisp-intro.texi:14066
#, no-wrap
msgid "(re-search-forward \"\\\\w+\\\\W*\" end)\n"
msgstr "(re-search-forward \"\\\\w+\\\\W*\" fin)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14072
msgid ""
"However, if you make only this change to the @code{@value{COUNT-WORDS}} "
"definition and then test the new version of the definition on a stretch of "
"whitespace, you will receive an error message saying @samp{Search failed}."
msgstr ""
"Sin embargo, si se crea solo este cambio a la definici@'on\n"
"@code{@value{COUNT-WORDS}} y entonces se chequea la nueva versi@'on de\n"
"la definici@'on en una extensi@'on de espacio en blanco, se recibir@'a\n"
"un mensaje de error diciendo @samp{B@'usqueda fallida}."

#. type: Plain text
#: emacs-lisp-intro.texi:14078
msgid ""
"What happens is this: the search is limited to the region, and fails as you "
"expect because there are no word-constituent characters in the region.  "
"Since it fails, we receive an error message.  But we do not want to receive "
"an error message in this case; we want to receive the message that \"The "
"region does NOT have any words.\""
msgstr ""
"Lo que ocurre es esto: la b@'usqueda se limita a la regi@'on, y\n"
"falla como se espera porque no hay caracteres de palabras\n"
"constituyentes en la regi@'on. Puesto que eso falla, se recibe un\n"
"mensaje de error. Pero no queremos recibir un mensaje de error en este\n"
"caso; se quiere recibir el mensaje que \"La regi@'on no tiene palabras\"."

#. type: Plain text
#: emacs-lisp-intro.texi:14082
msgid ""
"The solution to this problem is to provide @code{re-search-forward} with a "
"third argument of @code{t}, which causes the function to return @code{nil} "
"rather than signal an error if the search fails."
msgstr ""
"La soluci@'on a este problema es proveer @code{re-search-forward} con\n"
"un tercer argumento de @code{t}, que causa la funci@'on para devolver\n"
"@code{nil} en vez la se@~nalar un error si la b@'usqueda falla."

#. type: Plain text
#: emacs-lisp-intro.texi:14086
msgid ""
"However, if you make this change and try it, you will see the message "
"``Counting words in region ... '' and @dots{} you will keep on seeing that "
"message @dots{}, until you type @kbd{C-g} (@code{keyboard-quit})."
msgstr ""
"Sin embargo, si se crea este cambio y se intenta, se ver@'a el mensaje\n"
"``Contando palabras en la regi@'on ...'' y @dots{} se guardar@'a\n"
"viendo qu@'e mensaje @dots{}, hasta que se escribe @kbd{C-g}\n"
"(@code{keyboard-quit})."

#. type: Plain text
#: emacs-lisp-intro.texi:14098
msgid ""
"Here is what happens: the search is limited to the region, as before, and it "
"fails because there are no word-constituent characters in the region, as "
"expected.  Consequently, the @code{re-search-forward} expression returns "
"@code{nil}.  It does nothing else.  In particular, it does not move point, "
"which it does as a side effect if it finds the search target.  After the "
"@code{re-search-forward} expression returns @code{nil}, the next expression "
"in the @code{while} loop is evaluated.  This expression increments the "
"count.  Then the loop repeats.  The true-or-false-test tests true because "
"the value of point is still less than the value of end, since the @code{re-"
"search-forward} expression did not move point. @dots{} and the cycle repeats "
"@dots{}"
msgstr ""
"Aqu@'{@dotless{i}} est@'a lo que ocurre: la b@'usqueda est@'a limitada\n"
"a la regi@'on, como antes, y eso falla porque no hay caracteres no\n"
"constituyentes de palabras en la regi@'on, como se\n"
"espera. Por tanto, la expresi@'on @code{re-search-forward}\n"
"devuelve @code{nil}. Eso no hace nada m@'as. En particular, no mueve\n"
"el punto, que hace como un efecto lateral si se encuentra la\n"
"b@'usqueda objetiva. Despu@'es la expresi@'on @code{re-search-forward}\n"
"devuelve @code{nil}, la siguiente expresi@'on en el bucle @code{while}\n"
"est@'a evaluado. Esta expresi@'on incrementa el contador. Entonces el\n"
"bucle repite. El test true-or-false-test chequea cierto porque el\n"
"valor del punto es todav@'{@dotless{i}}a menor que el valor final,\n"
"desde que la expresi@'on @code{re-search-forward} no\n"
"mover@'{@dotless{i}}a el punto. @dots{} y el ciclo repite @dots{}"

#. type: Plain text
#: emacs-lisp-intro.texi:14105
msgid ""
"The @code{@value{COUNT-WORDS}} definition requires yet another modification, "
"to cause the true-or-false-test of the @code{while} loop to test false if "
"the search fails.  Put another way, there are two conditions that must be "
"satisfied in the true-or-false-test before the word count variable is "
"incremented: point must still be within the region and the search expression "
"must have found a word to count."
msgstr ""
"La definici@'on @code{@value{COUNT-WORDS}} requiere\n"
"todav@'{@dotless{i}}a de otra modificaci@'on para causar el\n"
"true-or-false-test del bucle @code{while} para chequear falso si la\n"
"b@'usqueda falla. Pon otro camino, hay dos condiciones que deben ser\n"
"satisfechas en el true-or-false-test antes que el contador de palabras\n"
"variable se incremente: el punto debe todav@'{@dotless{i}}a estar con la\n"
"regi@'on y la expresi@'n de b@'usqueda debe haber encontrado una\n"
"palabra para contar."

#. type: Plain text
#: emacs-lisp-intro.texi:14110
msgid ""
"Since both the first condition and the second condition must be true "
"together, the two expressions, the region test and the search expression, "
"can be joined with an @code{and} special form and embedded in the "
"@code{while} loop as the true-or-false-test, like this:"
msgstr ""
"Por ambas la primera condici@'on y la segunda condici@'on deben ser\n"
"ciertas juntas, las dos expresiones, la regi@'on chequea y la\n"
"expresi@'on de b@'usqueda, puede estar unido con una forma especial\n"
"@code{and} y embebido en el bucle @code{while} como el\n"
"true-or-false-test, como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:14113
#, no-wrap
msgid "(and (< (point) end) (re-search-forward \"\\\\w+\\\\W*\" end t))\n"
msgstr "(and (< (point) end) (re-search-forward \"\\\\w+\\\\W*\" end t))\n"

#. type: iftex
#: emacs-lisp-intro.texi:14121 emacs-lisp-intro.texi:16119
msgid ""
"(For information about @code{and}, see @ref{kill-new function, , The "
"@code{kill-new} function}.)"
msgstr ""
"(Para informaci@'on acerca de @code{and}, ver @ref{Funci@'on kill-new,\n"
", La funci@'on @code{kill-new}}.)"

#. type: ifinfo
#: emacs-lisp-intro.texi:14126 emacs-lisp-intro.texi:16124
msgid ""
"(@xref{kill-new function, , The @code{kill-new} function}, for information "
"about @code{and}.)"
msgstr ""
"(@xref{Funci@'on kill-new, , La funci@'on @code{kill-new}}, para\n"
"informaci@'on acerca de @code{and}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:14135
msgid ""
"The @code{re-search-forward} expression returns @code{t} if the search "
"succeeds and as a side effect moves point.  Consequently, as words are "
"found, point is moved through the region.  When the search expression fails "
"to find another word, or when point reaches the end of the region, the true-"
"or-false-test tests false, the @code{while} loop exits, and the "
"@code{@value{COUNT-WORDS}} function displays one or other of its messages."
msgstr ""
"La expresi@'on @code{re-search-forward} devuelve @code{t} si la\n"
"b@'usqueda es exitosa y como efecto lateral se mueve el\n"
"punto. Consiguientemente, como las palabras se encuentran, el punto es\n"
"movido a trav@'es de la regi@'on. Cuando la b@'usqueda de la expresi@'on\n"
"falla para encontrar otra palabra, o cuando el punto logra el fin de\n"
"la regi@'on, el test true-or-false-test es falso, el bucle @code{while}\n"
"existe, y la funci@'on @code{@value{COUNT-WORDS}} muestra uno u otro de\n"
"sus mensajes."

#. type: Plain text
#: emacs-lisp-intro.texi:14139
msgid ""
"After incorporating these final changes, the @code{@value{COUNT-WORDS}} "
"works without bugs (or at least, without bugs that I have found!).  Here is "
"what it looks like:"
msgstr ""
"Despu@'es de incorporar estos cambios finales, el\n"
"@code{@value{COUNT-WORDS}} funciona sin errores (@exclamdown{}o al\n"
"menos, sin los errores que yo haya encontrado!. Aqu@'{@dotless{i}} est@'a\n"
"lo que parece:"

#. type: group
#: emacs-lisp-intro.texi:14147
#, no-wrap
msgid ""
";;; @r{Final version:} @code{while}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Print number of words in the region.\"\n"
"  (interactive \"r\")\n"
"  (message \"Counting words in region ... \")\n"
msgstr ""
";;; @r{Versi@'on final:} @code{while}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Imprime n@'umero de palabras en la regi@'on.\"\n"
"  (interactive \"r\")\n"
"  (message \"Contando palabras en la regi@'on ... \")\n"

#. type: group
#: emacs-lisp-intro.texi:14154
#, no-wrap
msgid ""
";;; @r{1. Set up appropriate conditions.}\n"
"  (save-excursion\n"
"    (let ((count 0))\n"
"      (goto-char beginning)\n"
msgstr ""
";;; @r{1. Configura condiciones apropiadas.}\n"
"  (save-excursion\n"
"    (let ((count 0))\n"
"      (goto-char beginning)\n"

#. type: group
#: emacs-lisp-intro.texi:14161
#, no-wrap
msgid ""
";;; @r{2. Run the} while @r{loop.}\n"
"      (while (and (< (point) end)\n"
"                  (re-search-forward \"\\\\w+\\\\W*\" end t))\n"
"        (setq count (1+ count)))\n"
msgstr ""
";;; @r{2. Ejecuta el} @r{bucle} while\n"
"      (while (and (< (point) end)\n"
"                  (re-search-forward \"\\\\w+\\\\W*\" end t))\n"
"        (setq count (1+ count)))\n"

#. type: section
#: emacs-lisp-intro.texi:14178
#, no-wrap
msgid "Count Words Recursively"
msgstr "Cuenta palabras recursivamente"

#. type: cindex
#: emacs-lisp-intro.texi:14179
#, no-wrap
msgid "Count words recursively"
msgstr "Cuenta palabras recursivamente"

#. type: cindex
#: emacs-lisp-intro.texi:14180
#, no-wrap
msgid "Recursively counting words"
msgstr "Recursivamente contando palabras"

#. type: cindex
#: emacs-lisp-intro.texi:14181
#, no-wrap
msgid "Words, counted recursively"
msgstr "Palabras, contadas recursivamente"

#. type: Plain text
#: emacs-lisp-intro.texi:14185
msgid ""
"You can write the function for counting words recursively as well as with a "
"@code{while} loop.  Let's see how this is done."
msgstr ""
"Se puede escribir la funci@'on para contar palabras tanto de manera\n"
"recursiva como con un bucle @code{while}. Permita ver c@'omo se\n"
"hace."

#. type: Plain text
#: emacs-lisp-intro.texi:14190
msgid ""
"First, we need to recognize that the @code{@value{COUNT-WORDS}} function has "
"three jobs: it sets up the appropriate conditions for counting to occur; it "
"counts the words in the region; and it sends a message to the user telling "
"how many words there are."
msgstr ""
"Primero, se necesita reconocer que la funci@'on\n"
"@code{@value{COUNT-WORDS}} tiene tres trabajos: eso configura las\n"
"condiciones apropiadas para contar lo que ocurre; eso cuenta las\n"
"palabras en la regi@'on; y env@'{@dotless{i}}a un mensaje al usuario\n"
"contando cu@'antas palabras hay."

#. type: Plain text
#: emacs-lisp-intro.texi:14198
msgid ""
"If we write a single recursive function to do everything, we will receive a "
"message for every recursive call.  If the region contains 13 words, we will "
"receive thirteen messages, one right after the other.  We don't want this! "
"Instead, we must write two functions to do the job, one of which (the "
"recursive function) will be used inside of the other.  One function will set "
"up the conditions and display the message; the other will return the word "
"count."
msgstr ""
"Si se escribe una funci@'on recursiva simple para hacer cualquier cosa\n"
"se recibir@'a un mensaje para cada llamada recursiva. Si la regi@'on\n"
"contiene 13 palabras, se recibir@'an trece mensajes, uno correcto\n"
"despu@'es del otro. @exclamdown{}No queremos esto!. En vez de eso,\n"
"se deben escribir dos funciones para hacer el trabajo, una (la\n"
"funci@'on recursiva) ser@'a usada dentro de la otra. Una funci@'on\n"
"configurar@'a las condiciones y muestra el mensaje; la otra\n"
"devolver@'a el contador de palabras."

#. type: Plain text
#: emacs-lisp-intro.texi:14201
msgid ""
"Let us start with the function that causes the message to be displayed.  We "
"can continue to call this @code{@value{COUNT-WORDS}}."
msgstr ""
"Perm@'{@dotless{i}}tase comenzar con la funci@'on que causa el mensaje\n"
"que se muestra. Se puede continuar por llamarse @code{@value{COUNT-WORDS}}."

#. type: Plain text
#: emacs-lisp-intro.texi:14206
msgid ""
"This is the function that the user will call.  It will be interactive.  "
"Indeed, it will be similar to our previous versions of this function, except "
"that it will call @code{recursive-count-words} to determine how many words "
"are in the region."
msgstr ""
"Esta es la funci@'on que el usuario llama. Ser@'a interactiva. En\n"
"realidad, ser@'a similar a nuestras versiones previas de esta\n"
"funci@'on, excepto que llamar@'a @code{recursive-count-words} para\n"
"determinar cu@'antas palabras hay en la regi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14210
msgid ""
"We can readily construct a template for this function, based on our previous "
"versions:"
msgstr ""
"Se puede construir una plantilla legible para esta funci@'on, basada\n"
"en versiones previas:"

#. type: group
#: emacs-lisp-intro.texi:14217
#, no-wrap
msgid ""
";; @r{Recursive version; uses regular expression search}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{interactive-expression}@dots{})\n"
msgstr ""
";; @r{Versi@'on Recursiva; usa la b@'usqueda de la expresi@'on regular}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{interactive-expression}@dots{})\n"

#. type: group
#: emacs-lisp-intro.texi:14223
#, no-wrap
msgid ""
";;; @r{1. Set up appropriate conditions.}\n"
"  (@var{explanatory message})\n"
"  (@var{set-up functions}@dots{}\n"
msgstr ""
";;; @r{1. Configura condiciones apropiadas.}\n"
"  (@var{explanatory message})\n"
"  (@var{set-up functions}@dots{}\n"

#. type: group
#: emacs-lisp-intro.texi:14228
#, no-wrap
msgid ""
";;; @r{2. Count the words.}\n"
"    @var{recursive call}\n"
msgstr ""
";;; @r{2. Contar las palabras.}\n"
"    @var{recursive call}\n"

#. type: group
#: emacs-lisp-intro.texi:14233
#, no-wrap
msgid ""
";;; @r{3. Send a message to the user.}\n"
"    @var{message providing word count}))\n"
msgstr ""
";;; @r{3. Env@'{@dotless{i}}a un mensaje al usuario.}\n"
"    @var{message providing word count}))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14244
msgid ""
"The definition looks straightforward, except that somehow the count returned "
"by the recursive call must be passed to the message displaying the word "
"count.  A little thought suggests that this can be done by making use of a "
"@code{let} expression: we can bind a variable in the varlist of a @code{let} "
"expression to the number of words in the region, as returned by the "
"recursive call; and then the @code{cond} expression, using binding, can "
"display the value to the user."
msgstr ""
"La definici@'on parece sencilla, excepto que como el contador devuelve\n"
"la llamada recursiva que debe ser pasada al mensaje mostrando el\n"
"contaje de palabras. Un peque@~no pensamiento sugiere que esto puede\n"
"ser hecho haciendo uso de una expresi@'on @code{let} al n@'umero de\n"
"palabras en la regi@'on, como se devuelve por la llamada recursiva; y\n"
"entonces la expresi@'on @code{cond}, que usa la asociaci@'on, puede\n"
"mostrar el valor al usuario."

#. type: Plain text
#: emacs-lisp-intro.texi:14249
msgid ""
"Often, one thinks of the binding within a @code{let} expression as somehow "
"secondary to the `primary' work of a function.  But in this case, what you "
"might consider the `primary' job of the function, counting words, is done "
"within the @code{let} expression."
msgstr ""
"Con frecuencia, uno piensa que se puede asociar una expresi@'on\n"
"@code{let} como algo secundario al trabajo `primario' de una\n"
"funci@'on. Pero en este caso, se podr@'{@dotless{i}}a considerar el\n"
"trabajo `primario' de la funci@'on, contando palabras, esto es hecho\n"
"con la expresi@'on @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:14252
msgid "Using @code{let}, the function definition looks like this:"
msgstr "Usando @code{let}, la definici@'on de funci@'on se parece a:"

#. type: group
#: emacs-lisp-intro.texi:14258
#, no-wrap
msgid ""
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Print number of words in the region.\"\n"
"  (interactive \"r\")\n"
msgstr ""
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Imprime el n@'umero de palabras en la regi@'on.\"\n"
"  (interactive \"r\")\n"

#. type: group
#: emacs-lisp-intro.texi:14265
#, no-wrap
msgid ""
";;; @r{1. Set up appropriate conditions.}\n"
"  (message \"Counting words in region ... \")\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"
msgstr ""
";;; @r{1. Configura condiciones apropiadas.}\n"
"  (message \"Contando palabras en la regi@'on ... \")\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"

#. type: group
#: emacs-lisp-intro.texi:14270
#, no-wrap
msgid ""
";;; @r{2. Count the words.}\n"
"    (let ((count (recursive-count-words end)))\n"
msgstr ""
";;; @r{2. Contar las palabras.}\n"
"    (let ((count (recursive-count-words end)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14287
msgid "Next, we need to write the recursive counting function."
msgstr ""
"Lo siguiente, que se necesita es escribir la funci@'on de contaje\n"
"recursivo."

#. type: Plain text
#: emacs-lisp-intro.texi:14290
msgid ""
"A recursive function has at least three parts: the `do-again-test', the "
"`next-step-expression', and the recursive call."
msgstr ""
"Una funci@'on recursiva tiene al menos tres partes: el `do-again-test',\n"
"la `next-step-expression', y la llamada recursiva."

#. type: Plain text
#: emacs-lisp-intro.texi:14300
msgid ""
"The do-again-test determines whether the function will or will not be called "
"again.  Since we are counting words in a region and can use a function that "
"moves point forward for every word, the do-again-test can check whether "
"point is still within the region.  The do-again-test should find the value "
"of point and determine whether point is before, at, or after the value of "
"the end of the region.  We can use the @code{point} function to locate "
"point.  Clearly, we must pass the value of the end of the region to the "
"recursive counting function as an argument."
msgstr ""
"El do-again-test determina si la funci@'on ser@'a o no llamada de\n"
"nuevo. Puesto que estamos contando palabras en una regi@'on y puede\n"
"causar que una funci@'on se mueva el punto hacia delante por cada\n"
"palabra, el do-again-test puede chequear si el punto est@'a\n"
"todav@'{@dotless{i}}a con la regi@'on. El do-again-test\n"
"encontrar@'{@dotless{i}}a el valor del punto y determina si el punto\n"
"est@'a antes, en, o despu@'es del valor del fin de la regi@'on. Se\n"
"puede usar la funci@'on @code{point} para localizar el\n"
"punto. Claramente, se debe pasar el valor del fin de la regi@'on a la\n"
"funci@'on de contaje recursivo como un argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:14303
msgid ""
"In addition, the do-again-test should also test whether the search finds a "
"word.  If it does not, the function should not call itself again."
msgstr ""
"Adem@'as, el do-again-test tambi@'en chequea si la b@'usqueda\n"
"encuentra una palabra. Si no, la funci@'on no se\n"
"llamar@'{@dotless{i}}a de nuevo."

#. type: Plain text
#: emacs-lisp-intro.texi:14310
msgid ""
"The next-step-expression changes a value so that when the recursive function "
"is supposed to stop calling itself, it stops.  More precisely, the next-step-"
"expression changes a value so that at the right time, the do-again-test "
"stops the recursive function from calling itself again.  In this case, the "
"next-step-expression can be the expression that moves point forward, word by "
"word."
msgstr ""
"La next-step-expression cambia un valor as@'{@dotless{i}} que cuando\n"
"la funci@'on recursiva se supone que debe parar de llamarse\n"
"as@'{@dotless{i}} misma, se para. M@'as precisamente, los cambios de\n"
"next-step-expression cambia un valor as@'{@dotless{i}} en el momento\n"
"adecuado, el do-again-test para la funci@'on recursiva de la llamada\n"
"en s@'{@dotless{i}} de nuevo. En este caso, la next-step-expression\n"
"puede ser la expresi@'on que mueve el punto hacia adelante, palabra\n"
"por palabra."

#. type: Plain text
#: emacs-lisp-intro.texi:14312
msgid "The third part of a recursive function is the recursive call."
msgstr "La tercera parte de una funci@'on recursiva es la llamada recursiva."

#. type: Plain text
#: emacs-lisp-intro.texi:14315
msgid ""
"Somewhere, also, we also need a part that does the `work' of the function, a "
"part that does the counting.  A vital part!"
msgstr ""
"En alg@'un lugar, tambi@'en, se necesita una parte que hace el\n"
"`trabajo' de la funci@'on, una parte que es el\n"
"contaje. @exclamdown{}Una parte vital!"

#. type: Plain text
#: emacs-lisp-intro.texi:14318
msgid "But already, we have an outline of the recursive counting function:"
msgstr "Pero ya, tenemos un gui@'on de la funci@'on recursiva de contaje:"

#. type: group
#: emacs-lisp-intro.texi:14326
#, no-wrap
msgid ""
"(defun recursive-count-words (region-end)\n"
"  \"@var{documentation}@dots{}\"\n"
"   @var{do-again-test}\n"
"   @var{next-step-expression}\n"
"   @var{recursive call})\n"
msgstr ""
"(defun recursive-count-words (region-end)\n"
"  \"@var{documentation}@dots{}\"\n"
"   @var{do-again-test}\n"
"   @var{next-step-expression}\n"
"   @var{recursive call})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14334
msgid ""
"Now we need to fill in the slots.  Let's start with the simplest cases "
"first: if point is at or beyond the end of the region, there cannot be any "
"words in the region, so the function should return zero.  Likewise, if the "
"search fails, there are no words to count, so the function should return "
"zero."
msgstr ""
"Ahora se necesita rellenar los slots. Permite comenzar con el caso\n"
"m@'as simple primero: si se apunta debajo del fin de la regi@'on, no\n"
"puede haber palabras en la regi@'on, as@'{@dotless{i}} la funci@'on\n"
"devuelve cero. De otro modo, si la b@'usqueda falla no hay palabras\n"
"para contar, as@'{@dotless{i}} la funci@'on devolver@'{@dotless{i}}a cero."

#. type: Plain text
#: emacs-lisp-intro.texi:14337
msgid ""
"On the other hand, if point is within the region and the search succeeds, "
"the function should call itself again."
msgstr ""
"Por otro lado, si se apunta con la regi@'on y la b@'usqueda tiene\n"
"@'exito, la funci@'on se llamar@'{@dotless{i}}a de nuevo."

#. type: Plain text
#: emacs-lisp-intro.texi:14340
msgid "Thus, the do-again-test should look like this:"
msgstr "De este modo, do-again-test se ver@'{@dotless{i}}a as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:14345
#, no-wrap
msgid ""
"(and (< (point) region-end)\n"
"     (re-search-forward \"\\\\w+\\\\W*\" region-end t))\n"
msgstr ""
"(and (< (point) region-end)\n"
"     (re-search-forward \"\\\\w+\\\\W*\" region-end t))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14353
msgid ""
"Note that the search expression is part of the do-again-test---the function "
"returns @code{t} if its search succeeds and @code{nil} if it fails.  "
"(@xref{Whitespace Bug, , The Whitespace Bug in @code{@value{COUNT-WORDS}}}, "
"for an explanation of how @code{re-search-forward} works.)"
msgstr ""
"Note que la expresi@'on de b@'usqueda es parte del do-again-test ---\n"
"la funci@'on devuelve @code{t} si su b@'usqueda tiene @'exito y\n"
"@code{nil} si falla. (@xref{Error de espacio en blanco, , El Error de\n"
"Espacio en Blanco en @code{@value{COUNT-WORDS}}}), para una\n"
"explicaci@'on de c@'omo @code{re-search-forward} funciona.)"

#. type: Plain text
#: emacs-lisp-intro.texi:14359
msgid ""
"The do-again-test is the true-or-false test of an @code{if} clause.  "
"Clearly, if the do-again-test succeeds, the then-part of the @code{if} "
"clause should call the function again; but if it fails, the else-part should "
"return zero since either point is outside the region or the search failed "
"because there were no words to find."
msgstr ""
"El do-again-test es el test true-or-false de una cl@'ausula\n"
"@code{if}. Claramente si el do-again-test tiene @'exito, la then-part\n"
"de la cl@'ausula @code{if} llamar@'{@dotless{i}}a a la funci@'on; pero\n"
"si eso falla, la else-part devolver@'{@dotless{i}}a cero desde que el\n"
"punto est@'a fuera de la regi@'on o la b@'usqueda fall@'o porque no\n"
"hab@'{@dotless{i}}a palabras a encontrar."

#. type: Plain text
#: emacs-lisp-intro.texi:14363
msgid ""
"But before considering the recursive call, we need to consider the next-step-"
"expression.  What is it? Interestingly, it is the search part of the do-"
"again-test."
msgstr ""
"Pero antes de considerar la llamada recursiva, se necesita considerar\n"
"la next-step-expression. @questiondown{}Qu@'e es eso? De manera\n"
"interesante, eso es la parte de la b@'usqueda del do-again-test."

#. type: Plain text
#: emacs-lisp-intro.texi:14370
msgid ""
"In addition to returning @code{t} or @code{nil} for the do-again-test, "
"@code{re-search-forward} moves point forward as a side effect of a "
"successful search.  This is the action that changes the value of point so "
"that the recursive function stops calling itself when point completes its "
"movement through the region.  Consequently, the @code{re-search-forward} "
"expression is the next-step-expression."
msgstr ""
"Adem@'as para devolver @code{t} o @code{nil} para el do-again-test,\n"
"@code{re-search-forward} mueve el punto hacia adelante como un efecto\n"
"lateral de una b@'usqueda exitosa. Esta es la acci@'on que cambia el\n"
"valor de punto as@'{@dotless{i}} que la funci@'on recursiva para de\n"
"llamarse a s@'{@dotless{i}} misma cuando el punto complete su\n"
"movimiento a trav@'es de la regi@'on. Por consiguiente, la expresi@'on\n"
"@code{re-search-forward} es la next-step-expression."

#. type: Plain text
#: emacs-lisp-intro.texi:14374
msgid ""
"In outline, then, the body of the @code{recursive-count-words} function "
"looks like this:"
msgstr ""
"En esquema, entonces, el cuerpo de la funci@'on\n"
"@code{recursive-count-words} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:14382
#, no-wrap
msgid ""
"(if @var{do-again-test-and-next-step-combined}\n"
"    ;; @r{then}\n"
"    @var{recursive-call-returning-count}\n"
"  ;; @r{else}\n"
"  @var{return-zero})\n"
msgstr ""
"(if @var{do-again-test-and-next-step-combined}\n"
"    ;; @r{then}\n"
"    @var{recursive-call-returning-count}\n"
"  ;; @r{else}\n"
"  @var{return-zero})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14386
msgid "How to incorporate the mechanism that counts?"
msgstr "@questiondown{}C@'omo incorporar el mecanismo que cuenta?"

#. type: Plain text
#: emacs-lisp-intro.texi:14390
msgid ""
"If you are not used to writing recursive functions, a question like this can "
"be troublesome.  But it can and should be approached systematically."
msgstr ""
"Si no est@'as acostumbrado a escribir funciones recursivas, una pregunta\n"
"como esta puede ser un problema. Pero eso puede y ser@'{@dotless{i}}a\n"
"enfocado sistem@'aticamente."

#. type: Plain text
#: emacs-lisp-intro.texi:14396
msgid ""
"We know that the counting mechanism should be associated in some way with "
"the recursive call.  Indeed, since the next-step-expression moves point "
"forward by one word, and since a recursive call is made for each word, the "
"counting mechanism must be an expression that adds one to the value returned "
"by a call to @code{recursive-count-words}."
msgstr ""
"Se sabe que el mecanismo de contaje ser@'{@dotless{i}}a asociado en\n"
"alg@'un lugar con la llamada recursiva. En vez de eso, desde que la\n"
"next-step-expression mueve el punto hacia adelante por una palabra, y\n"
"desde que una llamada recursiva es hecha para cada palabra, el\n"
"mecanismo de contaje debe ser una expresi@'on que a@~nade uno al valor\n"
"devuelto por una llamada para @code{recursive-count-words}"

#. type: Plain text
#: emacs-lisp-intro.texi:14399
msgid "Consider several cases:"
msgstr "Considera varias casos:"

#. type: itemize
#: emacs-lisp-intro.texi:14406
msgid ""
"If there are two words in the region, the function should return a value "
"resulting from adding one to the value returned when it counts the first "
"word, plus the number returned when it counts the remaining words in the "
"region, which in this case is one."
msgstr ""
"Si hay dos palabras en la regi@'on, la funci@'on devolver@'a un valor\n"
"resultante de a@~nadir uno al valor devuelto al contar la primera\n"
"palabra, m@'as el n@'umero devuelto al contar las palabras que\n"
"permanecen en la regi@'on, que en este caso es una."

#. type: itemize
#: emacs-lisp-intro.texi:14412
msgid ""
"If there is one word in the region, the function should return a value "
"resulting from adding one to the value returned when it counts that word, "
"plus the number returned when it counts the remaining words in the region, "
"which in this case is zero."
msgstr ""
"Si hay una palabra en la regi@'on, la funci@'on\n"
"devolver@'{@dotless{i}}a un valor resultante de a@~nadir uno al valor\n"
"devuelto cuando eso cuenta esta palabra m@'as el n@'umero devuelto\n"
"cuando eso cuenta las palabras que permanecen en la regi@'on, que en\n"
"este caso es cero."

#. type: itemize
#: emacs-lisp-intro.texi:14415
msgid "If there are no words in the region, the function should return zero."
msgstr ""
"Si no hay palabras en la regi@'on, la funci@'on\n"
"devolver@'{@dotless{i}}a cero."

#. type: Plain text
#: emacs-lisp-intro.texi:14421
msgid ""
"From the sketch we can see that the else-part of the @code{if} returns zero "
"for the case of no words.  This means that the then-part of the @code{if} "
"must return a value resulting from adding one to the value returned from a "
"count of the remaining words."
msgstr ""
"Desde el esquema se puede ver que la parte else del @code{if} devuelve\n"
"cero para el caso en el que no hay palabras. Esto significa que la\n"
"parte then del @code{if} debe devolver un valor resultante de a@~nadir\n"
"uno al valor devuelto desde el contaje de las palabras que permanecen."

#. type: Plain text
#: emacs-lisp-intro.texi:14425
msgid ""
"The expression will look like this, where @code{1+} is a function that adds "
"one to its argument."
msgstr ""
"La expresi@'on se parece a esto, donde @code{1+} es una funci@'on que\n"
"a@~nade uno a su argumento."

#. type: smallexample
#: emacs-lisp-intro.texi:14428
#, no-wrap
msgid "(1+ (recursive-count-words region-end))\n"
msgstr "(1+ (recursive-count-words region-end))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14433
msgid ""
"The whole @code{recursive-count-words} function will then look like this:"
msgstr ""
"La funci@'on completa @code{recursive-count-words} entonces se\n"
"parecer@'a e esto:"

#. type: group
#: emacs-lisp-intro.texi:14438
#, no-wrap
msgid ""
"(defun recursive-count-words (region-end)\n"
"  \"@var{documentation}@dots{}\"\n"
"\n"
msgstr ""
"(defun recursive-count-words (region-end)\n"
"  \"@var{documentation}@dots{}\"\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:14442 emacs-lisp-intro.texi:14506
#, no-wrap
msgid ""
";;; @r{1. do-again-test}\n"
"  (if (and (< (point) region-end)\n"
"           (re-search-forward \"\\\\w+\\\\W*\" region-end t))\n"
msgstr ""
";;; @r{1. do-again-test}\n"
"  (if (and (< (point) region-end)\n"
"           (re-search-forward \"\\\\w+\\\\W*\" region-end t))\n"

#. type: group
#: emacs-lisp-intro.texi:14447 emacs-lisp-intro.texi:14511
#, no-wrap
msgid ""
";;; @r{2. then-part: the recursive call}\n"
"      (1+ (recursive-count-words region-end))\n"
"\n"
msgstr ""
";;; @r{2. then-part: la llamada recursiva}\n"
"      (1+ (recursive-count-words region-end))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:14450 emacs-lisp-intro.texi:14514
#, no-wrap
msgid ""
";;; @r{3. else-part}\n"
"    0))\n"
msgstr ""
";;; @r{3. else-part}\n"
"    0))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14455
msgid "Let's examine how this works:"
msgstr "Perm@'{@dotless{i}}teme examinar c@'omo esto funciona:"

#. type: Plain text
#: emacs-lisp-intro.texi:14458
msgid ""
"If there are no words in the region, the else part of the @code{if} "
"expression is evaluated and consequently the function returns zero."
msgstr ""
"Si no hay palabras en la regi@'on, la parte else de la expresi@'on\n"
"@code{if} es evaluada y, por tanto, la funci@'on devuelve cero."

#. type: Plain text
#: emacs-lisp-intro.texi:14466
msgid ""
"If there is one word in the region, the value of point is less than the "
"value of @code{region-end} and the search succeeds.  In this case, the true-"
"or-false-test of the @code{if} expression tests true, and the then-part of "
"the @code{if} expression is evaluated.  The counting expression is "
"evaluated.  This expression returns a value (which will be the value "
"returned by the whole function) that is the sum of one added to the value "
"returned by a recursive call."
msgstr ""
"Si hay una palabra en la regi@'on, el valor del punto es menor que el\n"
"valor de @code{region-end} y la b@'usqueda tiene @'exito. En este\n"
"caso, el true-or-false-test de la expresi@'on @code{if} chequea\n"
"cierto, y la then-part de la expresi@'on @code{if} es evaluada. La\n"
"expresi@'on de contaje se eval@'ua. Esta expresi@'on devuelve un valor\n"
"(que ser@'a el valor devuelto por la funci@'on completa) que es la\n"
"suma de uno a@~nadida al valor devuelto por una llamada recursiva."

#. type: Plain text
#: emacs-lisp-intro.texi:14475
msgid ""
"Meanwhile, the next-step-expression has caused point to jump over the first "
"(and in this case only) word in the region.  This means that when "
"@code{(recursive-count-words region-end)} is evaluated a second time, as a "
"result of the recursive call, the value of point will be equal to or greater "
"than the value of region end.  So this time, @code{recursive-count-words} "
"will return zero.  The zero will be added to one, and the original "
"evaluation of @code{recursive-count-words} will return one plus zero, which "
"is one, which is the correct amount."
msgstr ""
"Mientras tanto, la next-step-expression ha causado el punto para\n"
"saltar a trav@'es de la primera (y en este caso @'unica) palabra en la\n"
"regi@'on. Esto significa que cuando @code{(recursive-count-words\n"
"region-end)} est@'a evaluada una segunda vez, como un resultado de la\n"
"llamada recursiva, el valor del punto ser@'a igual o mayor que el\n"
"valor de la regi@'on final. As@'{@dotless{i}} esta vez,\n"
"@code{recursive-count-words} devolver@'a cero. El cero ser@'a\n"
"a@~nadido a uno, y la evaluaci@'on original de\n"
"@code{recursive-count-words} devolver@'a uno m@'as cero (uno) que es\n"
"la cantidad correcta."

#. type: Plain text
#: emacs-lisp-intro.texi:14481
msgid ""
"Clearly, if there are two words in the region, the first call to "
"@code{recursive-count-words} returns one added to the value returned by "
"calling @code{recursive-count-words} on a region containing the remaining "
"word---that is, it adds one to one, producing two, which is the correct "
"amount."
msgstr ""
"Claramente, si hay dos palabras en la regi@'on, la primera llamada a\n"
"@code{recursive-count-words} devuelve uno que se a@~nade al valor\n"
"devuelto por el siguiente @code{recursive-count-words} en una regi@'on\n"
"donde est@'a la palabra que permanece --- que es, eso a@~nadir uno a\n"
"uno, produciendo dos, que es la cantidad correcta."

#. type: Plain text
#: emacs-lisp-intro.texi:14486
msgid ""
"Similarly, if there are three words in the region, the first call to "
"@code{recursive-count-words} returns one added to the value returned by "
"calling @code{recursive-count-words} on a region containing the remaining "
"two words---and so on and so on."
msgstr ""
"Similarmente, si hay tres palabras en la regi@'on, la primera llamada\n"
"@code{recursive-count-words} devuelve uno a@~nadido al valor devuelto\n"
"llamado @code{recursive-count-words} en una regi@'on conteniendo las\n"
"dos palabras que faltan --- y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:14490
msgid "With full documentation the two functions look like this:"
msgstr "Con documentaci@'on completa las dos funciones se parecen a esto:"

#. type: Plain text
#: emacs-lisp-intro.texi:14494
msgid "The recursive function:"
msgstr "La funci@'on recursiva:"

#. type: group
#: emacs-lisp-intro.texi:14500
#, no-wrap
msgid ""
"(defun recursive-count-words (region-end)\n"
"  \"Number of words between point and REGION-END.\"\n"
msgstr ""
"(defun recursive-count-words (region-end)\n"
"  \"N@'umero de palabras entre punto y REGION-END.\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14520
msgid "The wrapper:"
msgstr "El envoltorio:"

#. type: group
#: emacs-lisp-intro.texi:14526
#, no-wrap
msgid ""
";;; @r{Recursive version}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Print number of words in the region.\n"
msgstr ""
";;; @r{Versi@'on Recursiva}\n"
"(defun @value{COUNT-WORDS} (beginning end)\n"
"  \"Imprime el n@'umero de palabras en la regi@'on.\n"

#. type: group
#: emacs-lisp-intro.texi:14533
#, no-wrap
msgid ""
"Words are defined as at least one word-constituent\n"
"character followed by at least one character that is\n"
"not a word-constituent.  The buffer's syntax table\n"
"determines which characters these are.\"\n"
msgstr ""
"Las palabras son definidas como al menos una palabra constituyente\n"
"seguida por al menos un caracter que es una palabra constituyente. La\n"
"tabla de sintaxis del buffer determina qu@'e caracter hay.\n"

#. type: group
#: emacs-lisp-intro.texi:14540
#, no-wrap
msgid ""
"  (interactive \"r\")\n"
"  (message \"Counting words in region ... \")\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"
"    (let ((count (recursive-count-words end)))\n"
msgstr ""
"  (interactive \"r\")\n"
"  (message \"Contando palabras en la regi@'on ... \")\n"
"  (save-excursion\n"
"    (goto-char beginning)\n"
"    (let ((count (recursive-count-words end)))\n"

#. type: group
#: emacs-lisp-intro.texi:14545
#, no-wrap
msgid ""
"      (cond ((zerop count)\n"
"             (message\n"
"              \"The region does NOT have any words.\"))\n"
msgstr ""
"      (cond ((zerop count)\n"
"             (message\n"
"              \"La regi@'on no tiene palabras.\"))\n"

#. type: group
#: emacs-lisp-intro.texi:14552
#, no-wrap
msgid ""
"            ((= 1 count)\n"
"             (message \"The region has 1 word.\"))\n"
"            (t\n"
"             (message\n"
"              \"The region has %d words.\" count))))))\n"
msgstr ""
"            ((= 1 count)\n"
"             (message \"La regi@'on tiene 1 palabra.\"))\n"
"            (t\n"
"             (message\n"
"              \"La regi@'on tiene %d palabras.\" count))))))\n"

#. type: section
#: emacs-lisp-intro.texi:14556
#, no-wrap
msgid "Exercise: Counting Punctuation"
msgstr "Ejercicio: contando puntuaci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:14561
msgid ""
"Using a @code{while} loop, write a function to count the number of "
"punctuation marks in a region---period, comma, semicolon, colon, exclamation "
"mark, and question mark.  Do the same using recursion."
msgstr ""
"Usando un bucle @code{while}, escriba una funci@'on para contar el\n"
"n@'umero de marcas de puntuaci@'on en una regi@'on --- periodo, coma,\n"
"punto y coma, dos puntos, exclamaci@'on, marca y marca de\n"
"pregunta. Haga lo mismo usando recursi@'on."

#. type: cindex
#: emacs-lisp-intro.texi:14564 emacs-lisp-intro.texi:14773
#, no-wrap
msgid "Counting words in a @code{defun}"
msgstr "Contando palabras en un @code{defun}"

#. type: cindex
#: emacs-lisp-intro.texi:14565
#, no-wrap
msgid "Word counting in a @code{defun}"
msgstr "Contando las palabras en un @code{defun}"

#. type: Plain text
#: emacs-lisp-intro.texi:14574
msgid ""
"Our next project is to count the number of words in a function definition.  "
"Clearly, this can be done using some variant of @code{@value{COUNT-WORDS}}.  "
"@xref{Counting Words, , Counting Words: Repetition and Regexps}.  If we are "
"just going to count the words in one definition, it is easy enough to mark "
"the definition with the @kbd{C-M-h} (@code{mark-defun}) command, and then "
"call @code{@value{COUNT-WORDS}}."
msgstr ""
"El siguiente proyecto es contar el n@'umero de palabras en una\n"
"definici@'on de funci@'on. Claramente, esto se puede hacer usando\n"
"alguna variante de @code{@value{COUNT-WORDS}}. @xref{Contando\n"
"palabras, , Contando palabras: repetici@'on y regexps}. Si se est@'a\n"
"ahora yendo a contar las palabras en una definici@'on, es\n"
"suficientemente f@'acil marcar la definici@'on con el comando\n"
"@kbd{C-M-h} (@code{mark-defun}), y entonces se llama a\n"
"@code{@value{COUNT-WORDS}}."

#. type: Plain text
#: emacs-lisp-intro.texi:14581
msgid ""
"However, I am more ambitious: I want to count the words and symbols in every "
"definition in the Emacs sources and then print a graph that shows how many "
"functions there are of each length: how many contain 40 to 49 words or "
"symbols, how many contain 50 to 59 words or symbols, and so on.  I have "
"often been curious how long a typical function is, and this will tell."
msgstr ""
"Sin embargo, soy m@'as ambicioso: Yo quiero contar las palabras y\n"
"s@'{@dotless{i}}mbolos en cada definici@'on en las fuentes de Emacs y\n"
"entonces imprimir un grafo que muestre cu@'antas funciones hay de cada\n"
"tama@~no: cu@'antas contienen de 40 a 49 palabras o\n"
"s@'{@dotless{i}}mbolos, cu@'antas contienen de 50 a 59 palabras o\n"
"s@'{@dotless{i}}mbolos, y as@'{@dotless{i}}. Yo he sido con frecuencia\n"
"curioso de c@'omo es una funci@'on t@'{@dotless{i}}pica, y esto se contar@'a."

#. type: unnumberedsec
#: emacs-lisp-intro.texi:14596 emacs-lisp-intro.texi:14597
#, no-wrap
msgid "Divide and Conquer"
msgstr "Divide y vencer@'as"

#. type: Plain text
#: emacs-lisp-intro.texi:14604
msgid ""
"Described in one phrase, the histogram project is daunting; but divided into "
"numerous small steps, each of which we can take one at a time, the project "
"becomes less fearsome.  Let us consider what the steps must be:"
msgstr ""
"Descrito en una frase, el proyecto desanima; pero dividido dentro de\n"
"numerosos peque@~nos pasos, cada uno de los que podemos tomar en un\n"
"momento, el proyecto llegar ser menos\n"
"atemorizante. Perm@'{@dotless{i}}tenos considerar qu@'e pasos deben\n"
"ser:"

#. type: itemize
#: emacs-lisp-intro.texi:14609
msgid ""
"First, write a function to count the words in one definition.  This includes "
"the problem of handling symbols as well as words."
msgstr ""
"Primero, escribe una funci@'on para contar las palabras en una\n"
"definici@'on. Esto incluye el problema de manejar\n"
"s@'{@dotless{i}}mbolos tan bien como palabras."

#. type: itemize
#: emacs-lisp-intro.texi:14614
msgid ""
"Second, write a function to list the numbers of words in each function in a "
"file.  This function can use the @code{count-words-in-defun} function."
msgstr ""
"Segundo, escribe una funci@'on para listar los n@'umeros de palabras\n"
"en cada funci@'on en un fichero. Esta funci@'on puede usar la\n"
"funci@'on @code{count-words-in-defun}."

#. type: itemize
#: emacs-lisp-intro.texi:14620
msgid ""
"Third, write a function to list the numbers of words in each function in "
"each of several files.  This entails automatically finding the various "
"files, switching to them, and counting the words in the definitions within "
"them."
msgstr ""
"Tercero, escribe una funci@'on para listar los n@'umeros de palabras\n"
"en cada funci@'on en cada uno de varios ficheros. Esto encola\n"
"autom@'aticamente encontrando varios ficheros, cambi@'andolos, y\n"
"contando las palabras en las definiciones con ellos."

#. type: itemize
#: emacs-lisp-intro.texi:14625
msgid ""
"Fourth, write a function to convert the list of numbers that we created in "
"step three to a form that will be suitable for printing as a graph."
msgstr ""
"Cuarto, escribe una funci@'on para convertir la lista de n@'umeros que\n"
"nosotros creamos en tres pasos para un formulario que se ajustar@'a\n"
"para imprimir un grafo."

#. type: itemize
#: emacs-lisp-intro.texi:14628
msgid "Fifth, write a function to print the results as a graph."
msgstr ""
"Quinto, escribe una funci@'on para imprimir los resultados como un grafo."

#. type: Plain text
#: emacs-lisp-intro.texi:14632
msgid ""
"This is quite a project! But if we take each step slowly, it will not be "
"difficult."
msgstr ""
"@exclamdown{}Esto es un proyecto! Pero si tomamos cada paso\n"
"lentamente, eso no ser@'a dif@'{@dotless{i}}cil."

#. type: section
#: emacs-lisp-intro.texi:14634
#, no-wrap
msgid "What to Count?"
msgstr "@questiondown{}Qu@'e contar?"

#. type: cindex
#: emacs-lisp-intro.texi:14635
#, no-wrap
msgid "Words and symbols in defun"
msgstr "Palabras y s@'{@dotless{i}}mbolos en defun"

#. type: Plain text
#: emacs-lisp-intro.texi:14648
msgid ""
"When we first start thinking about how to count the words in a function "
"definition, the first question is (or ought to be) what are we going to "
"count? When we speak of `words' with respect to a Lisp function definition, "
"we are actually speaking, in large part, of `symbols'.  For example, the "
"following @code{multiply-by-seven} function contains the five symbols "
"@code{defun}, @code{multiply-by-seven}, @code{number}, @code{*}, and "
"@code{7}.  In addition, in the documentation string, it contains the four "
"words @samp{Multiply}, @samp{NUMBER}, @samp{by}, and @samp{seven}.  The "
"symbol @samp{number} is repeated, so the definition contains a total of ten "
"words and symbols."
msgstr ""
"Cuando nosotros primero empezamos pensando acerca del contaje de\n"
"palabras en una definici@'on de funci@'on, la primera pregunta es (o\n"
"podr@'{@dotless{i}}a ser) @questiondown{}qu@'e se va a contar?  Cuando\n"
"se habla de `palabras' con repecto a una definici@'on de funci@'on\n"
"Lisp, estamos actualmente hablando, en parte, de\n"
"`s@'{@dotless{i}}mbolos'. Por ejemplo, la siguiente funci@'on\n"
"@code{multiply-by-seven} contiene los cinco s@'{@dotless{i}}mbolos\n"
"@code{defun}, @code{multipy-by-seven}, @code{number}, @code{*}, y\n"
"@code{7}. Adem@'as, en la cadena de documentaci@'on, contiene cuatro\n"
"palabras @samp{Multiplicar}, @samp{NUMBER}, @samp{por}, y\n"
"@samp{siete}. El s@'{@dotless{i}}mbolo @samp{n@'umero} es repetido,\n"
"as@'{@dotless{i}} la definici@'on contiene un total de diez palabras y\n"
"s@'{@dotless{i}}mbolos."

#. type: Plain text
#: emacs-lisp-intro.texi:14663
msgid ""
"However, if we mark the @code{multiply-by-seven} definition with @kbd{C-M-h} "
"(@code{mark-defun}), and then call @code{@value{COUNT-WORDS}} on it, we will "
"find that @code{@value{COUNT-WORDS}} claims the definition has eleven words, "
"not ten! Something is wrong!"
msgstr ""
"Sin embargo, si se marca la definici@'on @code{multiply-by-seven} con\n"
"@kbd{C-M-h} (@code{mark-defun}), y entonces se llama a\n"
"@code{@value{COUNT-WORDS}} dentro, se encontrar@'a que\n"
"@code{@value{COUNT-WORDS}} @exclamdown{}reclama la definici@'on tiene\n"
"once palabras, no diez! @exclamdown{}Alguna cosa est@'a mal!"

#. type: Plain text
#: emacs-lisp-intro.texi:14670
msgid ""
"The problem is twofold: @code{@value{COUNT-WORDS}} does not count the "
"@samp{*} as a word, and it counts the single symbol, @code{multiply-by-"
"seven}, as containing three words.  The hyphens are treated as if they were "
"interword spaces rather than intraword connectors: @samp{multiply-by-seven} "
"is counted as if it were written @samp{multiply by seven}."
msgstr ""
"El problema es doble: @code{@value{COUNT-WORDS}} no cuenta el @samp{*}\n"
"como una palabra, y eso cuenta el s@'{@dotless{i}}mbolo simple,\n"
"@code{multiply-by-seven}, conteniendo tres palabras. Las conexiones\n"
"son tratadas como si fueran espacios entre palabras en vez de\n"
"conectores entre palabras @samp{multiply-by-seven} se cuenta como si\n"
"fuese escrito @samp{multiply-by-seven}."

#. type: Plain text
#: emacs-lisp-intro.texi:14675
msgid ""
"The cause of this confusion is the regular expression search within the "
"@code{@value{COUNT-WORDS}} definition that moves point forward word by "
"word.  In the canonical version of @code{@value{COUNT-WORDS}}, the regexp is:"
msgstr ""
"La causa de esta confusi@'on es la expresi@'on regular que busca la\n"
"definici@'on @code{@value{COUNT-WORDS}} que mueve el punto hacia\n"
"delante palabra por palabra. En la versi@'on can@'onica de\n"
"@code{@value{COUNT-WORDS}}, el regexp es:"

#. type: smallexample
#: emacs-lisp-intro.texi:14678
#, no-wrap
msgid "\"\\\\w+\\\\W*\"\n"
msgstr "\"\\\\w+\\\\W*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14686
msgid ""
"This regular expression is a pattern defining one or more word constituent "
"characters possibly followed by one or more characters that are not word "
"constituents.  What is meant by `word constituent characters' brings us to "
"the issue of syntax, which is worth a section of its own."
msgstr ""
"Esta expresi@'on regular es un patr@'on definiendo una o m@'as\n"
"palabras constituyendo caracteres posiblemente seguidos por uno o\n"
"m@'as caracteres que no son palabras constituyentes. Esto significa\n"
"que los `caracteres que constituyen palabras' nos traen la cuesti@'on\n"
"de la sintaxis, que es el valor de una secci@'on en s@'{@dotless{i}}."

#. type: section
#: emacs-lisp-intro.texi:14688
#, no-wrap
msgid "What Constitutes a Word or Symbol?"
msgstr "@questiondown{}Qu@'e constituye una palabra o s@'{@dotless{i}}mbolo?"

#. type: cindex
#: emacs-lisp-intro.texi:14689
#, no-wrap
msgid "Syntax categories and tables"
msgstr "Categor@'{@dotless{i}}as de sintaxis y tablas"

#. type: Plain text
#: emacs-lisp-intro.texi:14700
msgid ""
"Emacs treats different characters as belonging to different @dfn{syntax "
"categories}.  For example, the regular expression, @samp{\\\\w+}, is a "
"pattern specifying one or more @emph{word constituent} characters.  Word "
"constituent characters are members of one syntax category.  Other syntax "
"categories include the class of punctuation characters, such as the period "
"and the comma, and the class of whitespace characters, such as the blank "
"space and the tab character.  (For more information, @pxref{Syntax Tables, , "
"Syntax Tables, elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"Emacs trata diferentes caracteres perteneciendo a diferentes\n"
"@dfn{categor@'{@dotless{i}}as de sintaxis}. Por ejemplo, la\n"
"expresi@'on regular, @samp{\\\\w+}, es un patr@'on especificando uno o\n"
"m@'as caracteres de @emph{palabras constituyentes}. Los caracteres de\n"
"palabras constituyentes son miembros de una categor@'{@dotless{i}}a de\n"
"sintaxis. Otras categor@'{@dotless{i}}a de sintaxis incluye la clase\n"
"de caracteres de puntuaci@'on, tales como el espacio en blanco o el\n"
"caracter de tabulaci@'on. (Para m@'as informaci@'on, ver\n"
"@ref{Sintaxis, Sintaxis, La Tabla de Sintaxis, emacs, El Manual GNU\n"
"Emacs}, y @ref{Tablas de Sintaxis, , Tablas de Sintaxis, elisp, El\n"
"Manual de Referencia GNU Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:14708
msgid ""
"Syntax tables specify which characters belong to which categories.  Usually, "
"a hyphen is not specified as a `word constituent character'.  Instead, it is "
"specified as being in the `class of characters that are part of symbol names "
"but not words.' This means that the @code{@value{COUNT-WORDS}} function "
"treats it in the same way it treats an interword white space, which is why "
"@code{@value{COUNT-WORDS}} counts @samp{multiply-by-seven} as three words."
msgstr ""
"Las tablas de sintaxis especifican qu@'e caracteres pertenecen a qu@'e\n"
"categor@'{@dotless{i}}as. Normalmente un gui@'on no est@'a\n"
"especificado como un `caracter constituido por una palabra'. En vez de\n"
"eso, se especific@'o como estando en la `clase de caracteres que son\n"
"parte de los nombres de s@'{@dotless{i}}mbolos, pero no las palabras.'\n"
"Esto significa que la funci@'on @code{@value{COUNT-WORDS}} se trata del\n"
"mismo modo que trata un espacio en blanco entre palabras, que es el\n"
"por qu@'e @code{@value{COUNT-WORDS}} cuenta @samp{multiply-by-seven}\n"
"como tres palabras."

#. type: Plain text
#: emacs-lisp-intro.texi:14711
msgid ""
"There are two ways to cause Emacs to count @samp{multiply-by-seven} as one "
"symbol: modify the syntax table or modify the regular expression."
msgstr ""
"Hay dos caminos para causar que Emacs cuente @samp{multiply-by-seven}\n"
"como un s@'{@dotless{i}}mbolo: modificar la tabla de sintaxis o\n"
"modificar la expresi@'on regular."

#. type: Plain text
#: emacs-lisp-intro.texi:14717
msgid ""
"We could redefine a hyphen as a word constituent character by modifying the "
"syntax table that Emacs keeps for each mode.  This action would serve our "
"purpose, except that a hyphen is merely the most common character within "
"symbols that is not typically a word constituent character; there are "
"others, too."
msgstr ""
"Se podr@'{@dotless{i}}a redefinir un gui@'on (@emph{hyphen}) como un\n"
"caracter que constituye una palabra modificando la tabla de sintaxis\n"
"que Emacs guarda por cada modo. Esta acci@'on servir@'{@dotless{i}}a\n"
"nuestro prop@'osito, excepto que una conexi@'on es meramente el\n"
"caracter m@'as com@'un con s@'{@dotless{i}}mbolos que no son\n"
"t@'{@dotless{i}}picamente un caracter de palabra constituyente; hay\n"
"otros, tambi@'en."

#. type: Plain text
#: emacs-lisp-intro.texi:14721
msgid ""
"Alternatively, we can redefine the regexp used in the @code{@value{COUNT-"
"WORDS}} definition so as to include symbols.  This procedure has the merit "
"of clarity, but the task is a little tricky."
msgstr ""
"Alternativamente, se puede redefinir la expresi@'on regular\n"
"@emph{regexp} usada en la definici@'on @code{count-words}\n"
"as@'{@dotless{i}} como incluir s@'{@dotless{i}}mbolos. Este\n"
"procedimiento tiene el m@'erito de la claridad, pero la tarea es un\n"
"peque@~no truco."

#. type: Plain text
#: emacs-lisp-intro.texi:14725
msgid ""
"The first part is simple enough: the pattern must match ``at least one "
"character that is a word or symbol constituent''.  Thus:"
msgstr ""
"La primera parte es suficientemente simple: el patr@'on debe asignarse\n"
"``al menos un car@'acter que es una palabra o s@'{@dotless{i}}mbolo\n"
"constituyente''. De este modo:"

#. type: smallexample
#: emacs-lisp-intro.texi:14728
#, no-wrap
msgid "\"\\\\(\\\\w\\\\|\\\\s_\\\\)+\"\n"
msgstr "\"\\\\(\\\\w\\\\|\\\\s_\\\\)+\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14738
msgid ""
"The @samp{\\\\(} is the first part of the grouping construct that includes "
"the @samp{\\\\w} and the @samp{\\\\s_} as alternatives, separated by the "
"@samp{\\\\|}.  The @samp{\\\\w} matches any word-constituent character and "
"the @samp{\\\\s_} matches any character that is part of a symbol name but "
"not a word-constituent character.  The @samp{+} following the group "
"indicates that the word or symbol constituent characters must be matched at "
"least once."
msgstr ""
"El @samp{\\\\(} es la primera parte del constructo que agrupa esto que\n"
"incluye el @samp{\\\\w} y el @samp{\\\\s_} como alternativas, separadas\n"
"por los @samp{\\\\|}.  El @samp{\\\\w} asocia cualquier caracter de\n"
"palabra constituyente y el @samp{\\\\s_} asocia cualquier caracter que\n"
"es parte de un nombre de s@'{@dotless{i}}mbolo pero no una palabra de\n"
"caracteres constituyente. El @samp{+} sigue al grupo que indica que la\n"
"palabra o s@'{@dotless{i}}mbolo constituyan caracteres que deben ser\n"
"asociados al menos por uno."

#. type: Plain text
#: emacs-lisp-intro.texi:14743
msgid ""
"However, the second part of the regexp is more difficult to design.  What we "
"want is to follow the first part with ``optionally one or more characters "
"that are not constituents of a word or symbol''.  At first, I thought I "
"could define this with the following:"
msgstr ""
"Sin embargo, la segunda parte de regexp es m@'as dif@'{@dotless{i}}cil\n"
"de dise@~nar. Lo que queremos es seguir la primera parte con\n"
"``opcionalmente uno o m@'as caracteres que no constituyen una palabra\n"
"o s@'{@dotless{i}}mbolo''. Primero, se pensaba que se\n"
"podr@'{@dotless{i}}a definir esto con lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:14746
#, no-wrap
msgid "\"\\\\(\\\\W\\\\|\\\\S_\\\\)*\"\n"
msgstr "\"\\\\(\\\\W\\\\|\\\\S_\\\\)*\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14753
msgid ""
"The upper case @samp{W} and @samp{S} match characters that are @emph{not} "
"word or symbol constituents.  Unfortunately, this expression matches any "
"character that is either not a word constituent or not a symbol "
"constituent.  This matches any character!"
msgstr ""
"Las may@'usculas @samp{W} y @samp{S} asocian caracteres que @emph{no}\n"
"son constituyente de palabra o\n"
"s@'{@dotless{i}}mbolo. Desafortunadamente, esta expresi@'on asocia\n"
"cualquier caracter que sea o no una palabra constituyente no un\n"
"s@'{@dotless{i}}mbolo constituyente. @exclamdown{}Esto asocia\n"
"cualquier caracter!"

#. type: Plain text
#: emacs-lisp-intro.texi:14763
msgid ""
"I then noticed that every word or symbol in my test region was followed by "
"white space (blank space, tab, or newline).  So I tried placing a pattern to "
"match one or more blank spaces after the pattern for one or more word or "
"symbol constituents.  This failed, too.  Words and symbols are often "
"separated by whitespace, but in actual code parentheses may follow symbols "
"and punctuation may follow words.  So finally, I designed a pattern in which "
"the word or symbol constituents are followed optionally by characters that "
"are not white space and then followed optionally by white space."
msgstr ""
"Entonces se notific@'o que cada palabra o s@'{@dotless{i}}mbolo en mi\n"
"regi@'on test fu@'e seguida por alg@'un espacio (espacio en blanco,\n"
"tabulador, o nueva l@'{@dotless{i}}nea). As@'{@dotless{i}} yo\n"
"intent@'e emplazar un patr@'on para asociar uno o m@'as espacios en\n"
"blanco despu@'es del patr@'on para una o m@'as palabras o\n"
"s@'{@dotless{i}}mbolos constituyentes. Esto fall@'o,\n"
"tambi@'en. Palabras y s@'{@dotless{i}}mbolos son con frecuencia\n"
"separados por espacios en blanco, pero en el c@'odigo actual los\n"
"par@'entesis pueden seguir s@'{@dotless{i}}mbolos y puntuaci@'on puede\n"
"seguir las palabras. As@'{@dotless{i}} finalmente, se dise@~no un\n"
"patr@'on en el que la palabra o s@'{@dotless{i}}mbolo constituyente\n"
"es seguido opcionalmente por caracteres que no son espacios en blanco\n"
"y entonces son seguidos opcionalmente por espacios en blanco."

#. type: Plain text
#: emacs-lisp-intro.texi:14766
msgid "Here is the full regular expression:"
msgstr "Aqu@'{@dotless{i}} est@'a la expresi@'on regular completa:"

#. type: smallexample
#: emacs-lisp-intro.texi:14769
#, no-wrap
msgid "\"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\"\n"
msgstr "\"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\"\n"

#. type: section
#: emacs-lisp-intro.texi:14772
#, no-wrap
msgid "The @code{count-words-in-defun} Function"
msgstr "La funci@'on @code{count-words-in-defun}"

#. type: Plain text
#: emacs-lisp-intro.texi:14779
msgid ""
"We have seen that there are several ways to write a @code{count-words-"
"region} function.  To write a @code{count-words-in-defun}, we need merely "
"adapt one of these versions."
msgstr ""
"Se ha visto que hay varios caminos para escribir una funci@'on\n"
"@code{count-word-region}. Para escribir un\n"
"@code{count-words-in-defun}, se necesita solamente adaptar una de\n"
"estas versiones."

#. type: Plain text
#: emacs-lisp-intro.texi:14785
msgid ""
"The version that uses a @code{while} loop is easy to understand, so I am "
"going to adapt that.  Because @code{count-words-in-defun} will be part of a "
"more complex program, it need not be interactive and it need not display a "
"message but just return the count.  These considerations simplify the "
"definition a little."
msgstr ""
"La versi@'on que usa un bucle @code{while} es f@'acil de comprender,\n"
"as@'{@dotless{i}} estoy yendo a adaptar esto. Porque\n"
"@code{count-words-in-defun} ser@'a parte de un programa m@'as\n"
"complejo, eso no necesita ser interactivo y no necesita mostrar un\n"
"mensaje pero solo devuelve el contaje. Estas consideraciones\n"
"simplifican la definici@'on un poco."

#. type: Plain text
#: emacs-lisp-intro.texi:14793
msgid ""
"On the other hand, @code{count-words-in-defun} will be used within a buffer "
"that contains function definitions.  Consequently, it is reasonable to ask "
"that the function determine whether it is called when point is within a "
"function definition, and if it is, to return the count for that definition.  "
"This adds complexity to the definition, but saves us from needing to pass "
"arguments to the function."
msgstr ""
"Por otro lado, @code{count-words-in-defun} ser@'a usado con un buffer\n"
"que contiene definiciones de funci@'on. Consiguientemente, es\n"
"razonable preguntar que la funci@'on determina si se llam@'o cuando el\n"
"punto est@'a con una definici@'on de funci@'on, y eso es, para\n"
"devolver el contaje para esta definici@'on. Esto a@~nade complejidad a\n"
"la definici@'on, pero nos guarda desde la necesidad de pasar\n"
"argumentos a la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14796
msgid "These considerations lead us to prepare the following template:"
msgstr "Estas consideraciones nos llevan a preparar la siguiente plantilla:"

#. type: group
#: emacs-lisp-intro.texi:14804
#, no-wrap
msgid ""
"(defun count-words-in-defun ()\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{set up}@dots{}\n"
"     (@var{while loop}@dots{})\n"
"   @var{return count})\n"
msgstr ""
"(defun count-words-in-defun ()\n"
"  \"@var{documentation}@dots{}\"\n"
"  (@var{set up}@dots{}\n"
"     (@var{while loop}@dots{})\n"
"   @var{return count})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14809
msgid "As usual, our job is to fill in the slots."
msgstr "As@'{@dotless{i}}, el trabajo es rellenar los slots."

#. type: Plain text
#: emacs-lisp-intro.texi:14811
msgid "First, the set up."
msgstr "Primero, la configuraci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14818
msgid ""
"We are presuming that this function will be called within a buffer "
"containing function definitions.  Point will either be within a function "
"definition or not.  For @code{count-words-in-defun} to work, point must move "
"to the beginning of the definition, a counter must start at zero, and the "
"counting loop must stop when point reaches the end of the definition."
msgstr ""
"Estamos presuponiendo que esta funci@'on ser@'a llamada con un\n"
"b@'uffer conteniendo definiciones de funci@'on. Apunta si ser@'a con\n"
"una definici@'on de funci@'on o no. Para que\n"
"@code{count-words-in-defun} funcione, el punto debe moverse al\n"
"principio de la definici@'on, un contador debe empezar a cero, y el\n"
"bucle contando debe parar cuando el punto logre el fin de la definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14826
msgid ""
"The @code{beginning-of-defun} function searches backwards for an opening "
"delimiter such as a @samp{(} at the beginning of a line, and moves point to "
"that position, or else to the limit of the search.  In practice, this means "
"that @code{beginning-of-defun} moves point to the beginning of an enclosing "
"or preceding function definition, or else to the beginning of the buffer.  "
"We can use @code{beginning-of-defun} to place point where we wish to start."
msgstr ""
"La funci@'on @code{beginning-of-defun} busca atr@'as para un\n"
"delimitador de apertura tal como @samp{(} al principio de una\n"
"l@'{@dotless{i}}nea, y mueve el punto a esta posici@'on, o sino al\n"
"l@'{@dotless{i}}mite de la b@'usqueda. En la pr@'actica, esto significa\n"
"que @code{beginning-of-defun} mueve el punto al principio de un cierre\n"
"o definici@'on de funci@'on precedente, o sino al principio del buffer."

#. type: Plain text
#: emacs-lisp-intro.texi:14830
msgid ""
"The @code{while} loop requires a counter to keep track of the words or "
"symbols being counted.  A @code{let} expression can be used to create a "
"local variable for this purpose, and bind it to an initial value of zero."
msgstr ""
"El bucle @code{while} requiere un contador para guardar la traza de\n"
"las palabras o s@'{@dotless{i}}mbolos siendo contados. Una expresi@'on\n"
"@code{let} puede ser usado para crear una variable local para este\n"
"prop@'osito, y lo asocia a un valor inicial de cero."

#. type: Plain text
#: emacs-lisp-intro.texi:14835
msgid ""
"The @code{end-of-defun} function works like @code{beginning-of-defun} except "
"that it moves point to the end of the definition.  @code{end-of-defun} can "
"be used as part of an expression that determines the position of the end of "
"the definition."
msgstr ""
"La funci@'on @code{end-of-defun} funciona como\n"
"@code{beginning-of-defun} excepto que mueve el punto al fin de la\n"
"definici@'on. @code{end-of-defun} puede ser usado como parte de una\n"
"expresi@'on que determina la posici@'on del fin de la definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14841
msgid ""
"The set up for @code{count-words-in-defun} takes shape rapidly: first we "
"move point to the beginning of the definition, then we create a local "
"variable to hold the count, and finally, we record the position of the end "
"of the definition so the @code{while} loop will know when to stop looping."
msgstr ""
"La configuraci@'on para @code{count-words-in-defun} toma forma\n"
"r@'apidamente: primero movemos el punto al principio de la\n"
"definici@'on, entonces se crea una variable local para manejar el\n"
"conteo, y finalmente, se graba la posici@'on del fin de la\n"
"definici@'on as@'{@dotless{i}} el bucle @code{while} conocer@'a cuando\n"
"parar el bucle."

#. type: group
#: emacs-lisp-intro.texi:14850
#, no-wrap
msgid ""
"(beginning-of-defun)\n"
"(let ((count 0)\n"
"      (end (save-excursion (end-of-defun) (point))))\n"
msgstr ""
"(beginning-of-defun)\n"
"(let ((count 0)\n"
"      (end (save-excursion (end-of-defun) (point))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14859
msgid ""
"The code is simple.  The only slight complication is likely to concern "
"@code{end}: it is bound to the position of the end of the definition by a "
"@code{save-excursion} expression that returns the value of point after "
"@code{end-of-defun} temporarily moves it to the end of the definition."
msgstr ""
"El c@'odigo es simple. La @'unica ligera complicaci@'on es\n"
"probablemente ir al @code{end}: eso est@'a asociado a la posici@'on\n"
"del fin de la definici@'on por una expresi@'on @code{save-excursion}\n"
"que devuelve el valor del punto despu@'es de @code{end-of-defun}\n"
"temporalmente se mueve al fin de la definici@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:14862
msgid ""
"The second part of the @code{count-words-in-defun}, after the set up, is the "
"@code{while} loop."
msgstr ""
"La segunda parte del @code{count-words-in-defun}, despu@'es de la\n"
"configuraci@'on, es el bucle @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:14869
msgid ""
"The loop must contain an expression that jumps point forward word by word "
"and symbol by symbol, and another expression that counts the jumps.  The "
"true-or-false-test for the @code{while} loop should test true so long as "
"point should jump forward, and false when point is at the end of the "
"definition.  We have already redefined the regular expression for this, so "
"the loop is straightforward:"
msgstr ""
"El bucle debe contener una expresi@'on que mueva el punto hacia\n"
"adelante palabra por palabra y s@'{@dotless{i}}mbolo por\n"
"s@'{@dotless{i}}mbolo, y otra expresi@'on que cuente los saltos. El\n"
"test-verdadero-o-falso para el bucle @code{while} chequear@'{@dotless{i}}a\n"
"verdadero tan largo como el punto deber@'{@dotless{i}}a saltar hacia\n"
"adelante, y falso si apunta al fin de la definici@'on. Ya se ha\n"
"redefinido la expresi@'on regular para esto, as@'{@dotless{i}} el\n"
"bucle es sencillo:"

#. type: group
#: emacs-lisp-intro.texi:14876
#, no-wrap
msgid ""
"(while (and (< (point) end)\n"
"            (re-search-forward\n"
"             \"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\" end t))\n"
"  (setq count (1+ count)))\n"
msgstr ""
"(while (and (< (point) end)\n"
"            (re-search-forward\n"
"             \"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\" end t)\n"
"  (setq count (1+ count)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14883
msgid ""
"The third part of the function definition returns the count of words and "
"symbols.  This part is the last expression within the body of the @code{let} "
"expression, and can be, very simply, the local variable @code{count}, which "
"when evaluated returns the count."
msgstr ""
"La tercera parte de la definici@'on devuelve el contaje de palabras y\n"
"s@'{@dotless{i}}mbolos. Esta parte es la @'ultima expresi@'on con el\n"
"cuerpo de la expresi@'on @code{let}, y puede ser, muy la variable\n"
"local @code{count}, que cuando se eval@'ua devuelve el contaje."

#. type: Plain text
#: emacs-lisp-intro.texi:14886
msgid ""
"Put together, the @code{count-words-in-defun} definition looks like this:"
msgstr "Puesto junto, la definici@'on @code{count-words-in-defun} se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:14895 emacs-lisp-intro.texi:21440
#, no-wrap
msgid ""
"(defun count-words-in-defun ()\n"
"  \"Return the number of words and symbols in a defun.\"\n"
"  (beginning-of-defun)\n"
"  (let ((count 0)\n"
"        (end (save-excursion (end-of-defun) (point))))\n"
msgstr ""
"(defun count-words-in-defun ()\n"
"  \"Devuelve el n@'umero de palabras y s@'{@dotless{i}}mbolos en una defun.\"\n"
"  (beginning-of-defun)\n"
"  (let ((count 0)\n"
"        (end (save-excursion (end-of-defun) (point))))\n"

#. type: group
#: emacs-lisp-intro.texi:14904 emacs-lisp-intro.texi:21450
#, no-wrap
msgid ""
"    (while\n"
"        (and (< (point) end)\n"
"             (re-search-forward\n"
"              \"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\"\n"
"              end t))\n"
"      (setq count (1+ count)))\n"
"    count))\n"
msgstr ""
"    (while\n"
"        (and (< (point) end)\n"
"             (re-search-forward\n"
"              \"\\\\(\\\\w\\\\|\\\\s_\\\\)+[^ \\t\\n]*[ \\t\\n]*\"\n"
"              end t))\n"
"      (setq count (1+ count)))\n"
"    count))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14911
msgid ""
"How to test this? The function is not interactive, but it is easy to put a "
"wrapper around the function to make it interactive; we can use almost the "
"same code as for the recursive version of @code{@value{COUNT-WORDS}}:"
msgstr ""
"@questiondown{}C@'omo se chequea esto? La funci@'on no es interactiva,\n"
"pero es f@'acil poner un envoltorio alrededor de la funci@'on para\n"
"hacerla interactiva; se puede usar casi el mismo c@'odigo como la\n"
"versi@'on recursiva de @code{@value{COUNT-WORDS}}:"

#. type: group
#: emacs-lisp-intro.texi:14920
#, no-wrap
msgid ""
";;; @r{Interactive version.}\n"
"(defun count-words-defun ()\n"
"  \"Number of words and symbols in a function definition.\"\n"
"  (interactive)\n"
"  (message\n"
"   \"Counting words and symbols in function definition ... \")\n"
msgstr ""
";;; @r{Versi@'on Interactiva.}\n"
"(defun count-words-defun ()\n"
"  \"N@'umero de palabras y s@'{@dotless{i}}mbolos en una definici@'on\n"
"  de funci@'on.\"\n"
"  (interactive)\n"
"  (message\n"
"   \"Contando palabras y s@'{@dotless{i}}mbolos en la definici@'on de funci@'on ... \")\n"

#. type: group
#: emacs-lisp-intro.texi:14927
#, no-wrap
msgid ""
"  (let ((count (count-words-in-defun)))\n"
"    (cond\n"
"     ((zerop count)\n"
"      (message\n"
"       \"The definition does NOT have any words or symbols.\"))\n"
msgstr ""
"  (let ((count (count-words-in-defun)))\n"
"    (cond\n"
"     ((zerop count)\n"
"      (message\n"
"       \"La definici@'on NO tiene palabras o s@'{@dotless{i}}mbolos.\"))\n"

#. type: group
#: emacs-lisp-intro.texi:14935
#, no-wrap
msgid ""
"     ((= 1 count)\n"
"      (message\n"
"       \"The definition has 1 word or symbol.\"))\n"
"     (t\n"
"      (message\n"
"       \"The definition has %d words or symbols.\" count)))))\n"
msgstr ""
"     ((= 1 count)\n"
"      (message\n"
"       \"La definici@'on tiene 1 palabra o s@'{@dotless{i}}mbolo.\"))\n"
"     (t\n"
"      (message\n"
"       \"La definici@'on tiene %d palabras o s@'{@dotless{i}}mbolos.\" count)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14941
msgid "Let's re-use @kbd{C-c =} as a convenient keybinding:"
msgstr "Permite reutilizar @kbd{C-c =} como un atajo conveniente:"

#. type: smallexample
#: emacs-lisp-intro.texi:14944
#, no-wrap
msgid "(global-set-key \"\\C-c=\" 'count-words-defun)\n"
msgstr "(global-set-key \"\\C-c=\" 'count-words-defun)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14949
msgid ""
"Now we can try out @code{count-words-defun}: install both @code{count-words-"
"in-defun} and @code{count-words-defun}, and set the keybinding, and then "
"place the cursor within the following definition:"
msgstr ""
"Ahora se puede intentar @code{count-words-defun}: instala ambas\n"
"funciones @code{count-words-in-defun} y @code{count-words-defun}, y\n"
"asigna el atajo, y entonces emplaza el cursor con la siguiente definici@'on:"

#. type: group
#: emacs-lisp-intro.texi:14956
#, no-wrap
msgid ""
"(defun multiply-by-seven (number)\n"
"  \"Multiply NUMBER by seven.\"\n"
"  (* 7 number))\n"
"     @result{} 10\n"
msgstr ""
"(defun multiply-by-seven (number)\n"
"  \"Multiplicar NUMBER por siete.\"\n"
"  (* 7 number))\n"
"     @result{} 10\n"

#. type: Plain text
#: emacs-lisp-intro.texi:14961
msgid "Success! The definition has 10 words and symbols."
msgstr ""
"@exclamdown{}@'Exito! La definici@'on tiene 10 palabras y s@'{@dotless{i}}"
"mbolos."

#. type: Plain text
#: emacs-lisp-intro.texi:14964
msgid ""
"The next problem is to count the numbers of words and symbols in several "
"definitions within a single file."
msgstr ""
"El siguiente problema es contar los n@'umeros de palabras y\n"
"s@'{@dotless{i}}mbolos en varias definiciones con un fichero simple."

#. type: section
#: emacs-lisp-intro.texi:14966
#, no-wrap
msgid "Count Several @code{defuns} Within a File"
msgstr "Contar varias @code{defuns} en un fichero"

#. type: Plain text
#: emacs-lisp-intro.texi:14972
msgid ""
"A file such as @file{simple.el} may have a hundred or more function "
"definitions within it.  Our long term goal is to collect statistics on many "
"files, but as a first step, our immediate goal is to collect statistics on "
"one file."
msgstr ""
"Un fichero tal como @file{simple.el} puede tener un centenar o m@'as\n"
"definiciones de funci@'on dentro. Nuestro objetivo es recoger\n"
"estad@'{@dotless{i}}sticas en muchos ficheros, pero en un primer\n"
"paso, nuestro objetivo inmediato es recoger estad@'{@dotless{i}}sticas\n"
"en un fichero."

#. type: Plain text
#: emacs-lisp-intro.texi:14975
msgid ""
"The information will be a series of numbers, each number being the length of "
"a function definition.  We can store the numbers in a list."
msgstr ""
"La informaci@'on ser@'a una serie de n@'umeros, cada n@'umero siendo\n"
"el tama@~no de una definici@'on de funci@'on. Se pueden almacenar los\n"
"n@'umeros en una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:14981
msgid ""
"We know that we will want to incorporate the information regarding one file "
"with information about many other files; this means that the function for "
"counting definition lengths within one file need only return the list of "
"lengths.  It need not and should not display any messages."
msgstr ""
"Se sabe que se querr@'a incorporar la informaci@'on considerando un\n"
"fichero con informaci@'on acerca de muchos otros ficheros; esto\n"
"significa que la funci@'on para contar el tama@~no de contaje con un\n"
"fichero solo necesita devolver la lista de tama@~nos. Eso no necesita \n"
"y no mostrar@'{@dotless{i}}a mensajes."

#. type: Plain text
#: emacs-lisp-intro.texi:14987
msgid ""
"The word count commands contain one expression to jump point forward word by "
"word and another expression to count the jumps.  The function to return the "
"lengths of definitions can be designed to work the same way, with one "
"expression to jump point forward definition by definition and another "
"expression to construct the lengths' list."
msgstr ""
"Los comando de contar palabras contienen una expresi@'on para saltar\n"
"el punto hacia adelante palabra por palabra y otra expresi@'on para\n"
"contar los saltos. La funci@'on devuelve los tama@~nos de definiciones\n"
"que pueden ser dise@~nadas para trabajar del mismo modo, con una\n"
"expresi@'on para saltar el punto hacia la definici@'on por\n"
"definici@'on y otra expresi@'on para construir el tama@~no de la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:14998
msgid ""
"This statement of the problem makes it elementary to write the function "
"definition.  Clearly, we will start the count at the beginning of the file, "
"so the first command will be @code{(goto-char (point-min))}.  Next, we start "
"the @code{while} loop; and the true-or-false test of the loop can be a "
"regular expression search for the next function definition---so long as the "
"search succeeds, point is moved forward and then the body of the loop is "
"evaluated.  The body needs an expression that constructs the lengths' list.  "
"@code{cons}, the list construction command, can be used to create the list.  "
"That is almost all there is to it."
msgstr ""
"Esta frase del problema hace elemental escribir la definici@'on de\n"
"funci@'on. Claramente, empezaremos el conteo al principio del fichero,\n"
"as@'{@dotless{i}} el primer comando ser@'a @code{(goto-char\n"
"(point-min))}. Lo siguiente, es empezar el bucle @code{while}; y este\n"
"true-or-false del bucle puede ser una b@'usqueda de expresi@'on\n"
"regular para la siguiente definici@'on de funci@'on ---\n"
"as@'{@dotless{i}} en el momento que la b@'usqueda tiene @'exito, el\n"
"punto se mueve hacia adelante y entonces el cuerpo del bucle es\n"
"evaluado. El cuerpo necesita una expresi@'on que construye la lista de\n"
"tama@~nos. @code{cons}, la lista de construcci@'on del comando, puede\n"
"ser usado para crear la lista. Esto es casi todo lo que hay."

#. type: Plain text
#: emacs-lisp-intro.texi:15001
msgid "Here is what this fragment of code looks like:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a este fragmento de c@'odigo que se ve\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:15008
#, no-wrap
msgid ""
"(goto-char (point-min))\n"
"(while (re-search-forward \"^(defun\" nil t)\n"
"  (setq lengths-list\n"
"        (cons (count-words-in-defun) lengths-list)))\n"
msgstr ""
"(goto-char (point-min))\n"
"(while (re-search-forward \"^(defun\" nil t)\n"
"  (setq lengths-list\n"
"        (cons (count-words-in-defun) lengths-list)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15013
msgid ""
"What we have left out is the mechanism for finding the file that contains "
"the function definitions."
msgstr ""
"Dejamos fuera el mecanismo para encontrar el fichero que contiene las\n"
"definiciones de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:15017
msgid ""
"In previous examples, we either used this, the Info file, or we switched "
"back and forth to some other buffer, such as the @file{*scratch*} buffer."
msgstr ""
"En ejemplos previos, nosotros hab@'{@dotless{i}}amos usado esto, el\n"
"fichero Info, o cambiamos atr@'as y adelante a alg@'un otro b@'uffer,\n"
"tal como el b@'uffer @file{*scratch*}."

#. type: Plain text
#: emacs-lisp-intro.texi:15019
msgid "Finding a file is a new process that we have not yet discussed."
msgstr ""
"Encontrar un fichero es un nuevo proceso que no tenemos\n"
"todav@'{@dotless{i}}a discutido."

#. type: Plain text
#: emacs-lisp-intro.texi:15027
msgid ""
"To find a file in Emacs, you use the @kbd{C-x C-f} (@code{find-file})  "
"command.  This command is almost, but not quite right for the lengths "
"problem."
msgstr ""
"Para encontrar un fichero en Emacs, se usa el comando @kbd{C-x C-f}\n"
"(@code{find-file}). Este comando es casi, pero no bastante correcto\n"
"para el problema de tama@~nos."

#. type: Plain text
#: emacs-lisp-intro.texi:15030
msgid "Let's look at the source for @code{find-file}:"
msgstr "Permita mirar el fuente para @code{find-file}:"

#. type: group
#: emacs-lisp-intro.texi:15039
#, no-wrap
msgid ""
"(defun find-file (filename)\n"
"  \"Edit file FILENAME.\n"
"Switch to a buffer visiting file FILENAME,\n"
"creating one if none already exists.\"\n"
"  (interactive \"FFind file: \")\n"
"  (switch-to-buffer (find-file-noselect filename)))\n"
msgstr ""
"(defun find-file (filename)\n"
"  \"Edita el fichero FILENAME.\n"
"Cambia a un b@'uffer visitando el fichero FILENAME,\n"
"creando uno si no existe ya.\"\n"
"  (interactive \"FFind file: \")\n"
"  (switch-to-buffer (find-file-noselect filename)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15048
msgid ""
"(The most recent version of the @code{find-file} function definition permits "
"you to specify optional wildcards to visit multiple files; that makes the "
"definition more complex and we will not discuss it here, since it is not "
"relevant.  You can see its source using either @kbd{M-.} (@code{find-tag}) "
"or @kbd{C-h f} (@code{describe-function}).)"
msgstr ""
"(La versi@'on m@'as reciente de la definici@'on de funci@'on\n"
"@code{find-file} permite comodines especiales para visitar m@'ultiples\n"
"ficheros; que hacen la definici@'on m@'as compleja y no se discutir@'a\n"
"aqu@'{@dotless{i}}, ya que no es relevante. Se pueden ver sus fuentes\n"
"usando @kbd{M-.} (@code{find-tag}) o @kbd{C-h f} (@code{describe-function}).)"

#. type: Plain text
#: emacs-lisp-intro.texi:15077
msgid ""
"The definition I am showing possesses short but complete documentation and "
"an interactive specification that prompts you for a file name when you use "
"the command interactively.  The body of the definition contains two "
"functions, @code{find-file-noselect} and @code{switch-to-buffer}."
msgstr ""
"La definici@'on que se est@'a mostrando posee una documentaci@'on\n"
"corta, pero completa y una especificaci@'on interactiva que muestra un\n"
"nombre de fichero cuando se usa el comando interactivamente. El cuerpo\n"
"de la definici@'on contiene dos funciones, @code{find-file-noselect} y\n"
"@code{switch-to-buffer}."

#. type: Plain text
#: emacs-lisp-intro.texi:15084
msgid ""
"According to its documentation as shown by @kbd{C-h f} (the @code{describe-"
"function} command), the @code{find-file-noselect} function reads the named "
"file into a buffer and returns the buffer.  (Its most recent version "
"includes an optional wildcards argument, too, as well as another to read a "
"file literally and an other you suppress warning messages.  These optional "
"arguments are irrelevant.)"
msgstr ""
"De acuerdo a su documentaci@'on como muestra por @kbd{C-h f} (el\n"
"comando @code{describe-function}), la funci@'on\n"
"@code{find-file-noselect} lee el fichero nombrado dentro de un\n"
"b@'uffer y devuelve el b@'uffer. (Su versi@'on m@'as reciente incluye\n"
"un argumento comod@'{@dotless{i}}n, tambi@'en, as@'{@dotless{i}} como\n"
"otro para leer un fichero literalmente y otro que suprime mensajes de\n"
"aviso. Estos argumentos opcionales son irrelevantes.) "

#. type: Plain text
#: emacs-lisp-intro.texi:15092
msgid ""
"However, the @code{find-file-noselect} function does not select the buffer "
"in which it puts the file.  Emacs does not switch its attention (or yours if "
"you are using @code{find-file-noselect}) to the selected buffer.  That is "
"what @code{switch-to-buffer} does: it switches the buffer to which Emacs "
"attention is directed; and it switches the buffer displayed in the window to "
"the new buffer.  We have discussed buffer switching elsewhere.  "
"(@xref{Switching Buffers}.)"
msgstr ""
"Sin embargo, la funci@'on @code{find-file-noselect} no selecciona el\n"
"b@'uffer en el que se pone el fichero. Emacs no cambia su atenci@'on\n"
"(o la tuya si est@'as usando @code{find-file-noselect}) al b@'uffer\n"
"seleccionado. Esto es lo que @code{switch-to-buffer} hace: eso cambia\n"
"el b@'uffer al que se dirige la atenci@'on de Emacs; y eso cambia el\n"
"b@'uffer mostrado en la ventana al nuevo b@'uffer. Se ha discutido el\n"
"b@'uffer cambiando a otro lugar. (@xref{Cambiando b@'uffers}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15100
msgid ""
"In this histogram project, we do not need to display each file on the screen "
"as the program determines the length of each definition within it.  Instead "
"of employing @code{switch-to-buffer}, we can work with @code{set-buffer}, "
"which redirects the attention of the computer program to a different buffer "
"but does not redisplay it on the screen.  So instead of calling on "
"@code{find-file} to do the job, we must write our own expression."
msgstr ""
"En este proyecto de histograma, no se necesita mostrar cada fichero en\n"
"la pantalla como el programa determina el tama@~no de cada\n"
"definici@'on con eso. En vez de emplear @code{switch-to-buffer}, se\n"
"puede trabajar con @code{set-buffer}, que redirige la atenci@'on del\n"
"programa de ordenador para un b@'uffer diferente pero no lo muestra en\n"
"pantalla. As@'{@dotless{i}} en vez llamar a @code{find-file} para\n"
"hacer el trabajo, debe escribir nuestra expresi@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:15102
msgid "The task is easy: use @code{find-file-noselect} and @code{set-buffer}."
msgstr ""
"La tarea es f@'acil: usar @code{find-file-noselect} y @code{set-buffer}."

#. type: section
#: emacs-lisp-intro.texi:15104
#, no-wrap
msgid "@code{lengths-list-file} in Detail"
msgstr "@code{lengths-list-file} en detalle"

#. type: Plain text
#: emacs-lisp-intro.texi:15112
msgid ""
"The core of the @code{lengths-list-file} function is a @code{while} loop "
"containing a function to move point forward `defun by defun' and a function "
"to count the number of words and symbols in each defun.  This core must be "
"surrounded by functions that do various other tasks, including finding the "
"file, and ensuring that point starts out at the beginning of the file.  The "
"function definition looks like this:"
msgstr ""
"El n@'ucleo de la funci@'on @code{lengths-list-file} es un bucle\n"
"@code{while} conteniendo una funci@'on para mover el punto hacia\n"
"delante `funci@'on a funci@'on' y una funci@'on para contar el\n"
"n@'umero de palabras y s@'{@dotless{i}}mbolos en cada funci@'on. Este\n"
"n@'ucleo debe ser rodeado por funciones que hacen otras tareas varias,\n"
"incluyendo encontrar el fichero, y asegurando que el punto empieza al\n"
"principio del fichero. La definici@'on de la funci@'on se parece a:"

#. type: group
#: emacs-lisp-intro.texi:15121 emacs-lisp-intro.texi:21460
#, no-wrap
msgid ""
"(defun lengths-list-file (filename)\n"
"  \"Return list of definitions' lengths within FILE.\n"
"The returned list is a list of numbers.\n"
"Each number is the number of words or\n"
"symbols in one function definition.\"\n"
msgstr ""
"(defun lengths-list-file (filename)\n"
"  \"Devuelve la lista de tama@~nos de definiciones con FILE.\n"
"La lista devuelta es una lista de n@'umeros.\n"
"Cada n@'umero es el n@'umero de palabras o\n"
"s@'{@dotless{i}}mbolos en una definici@'on.\"\n"

#. type: group
#: emacs-lisp-intro.texi:15136
#, no-wrap
msgid ""
"  (message \"Working on `%s' ... \" filename)\n"
"  (save-excursion\n"
"    (let ((buffer (find-file-noselect filename))\n"
"          (lengths-list))\n"
"      (set-buffer buffer)\n"
"      (setq buffer-read-only t)\n"
"      (widen)\n"
"      (goto-char (point-min))\n"
"      (while (re-search-forward \"^(defun\" nil t)\n"
"        (setq lengths-list\n"
"              (cons (count-words-in-defun) lengths-list)))\n"
"      (kill-buffer buffer)\n"
"      lengths-list)))\n"
msgstr ""
"  (message \"Trabajando en `%s' ... \" filename)\n"
"  (save-excursion\n"
"    (let ((buffer (find-file-noselect filename))\n"
"          (lengths-list))\n"
"      (set-buffer buffer)\n"
"      (setq buffer-read-only t)\n"
"      (widen)\n"
"      (goto-char (point-min))\n"
"      (while (re-search-forward \"^(defun\" nil t)\n"
"        (setq lengths-list\n"
"              (cons (count-words-in-defun) lengths-list)))\n"
"      (kill-buffer buffer)\n"
"      lengths-list)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15145
msgid ""
"The function is passed one argument, the name of the file on which it will "
"work.  It has four lines of documentation, but no interactive "
"specification.  Since people worry that a computer is broken if they don't "
"see anything going on, the first line of the body is a message."
msgstr ""
"La funci@'on pasa un argumento, el nombre del fichero en el que se\n"
"trabajar@'a. Eso tiene cuatro l@'{@dotless{i}}neas de documentaci@'on,\n"
"pero sin especificaci@'on interactiva. Para evitar la preocupaci@'on\n"
"de si se ha estropeado el programa o no, la primera\n"
"l@'{@dotless{i}}nea del cuerpo es un mensaje de aviso."

#. type: Plain text
#: emacs-lisp-intro.texi:15150
msgid ""
"The next line contains a @code{save-excursion} that returns Emacs's "
"attention to the current buffer when the function completes.  This is useful "
"in case you embed this function in another function that presumes point is "
"restored to the original buffer."
msgstr ""
"La siguiente l@'{@dotless{i}}nea contiene un @code{save-excursion} que\n"
"devuelve a Emacs la atenci@'on al actual b@'uffer cuando la funci@'on\n"
"se completa. Esto es @'util en caso de embeber esta funci@'on en otra\n"
"funci@'on que presume que el punto restaura el b@'uffer original."

#. type: Plain text
#: emacs-lisp-intro.texi:15155
msgid ""
"In the varlist of the @code{let} expression, Emacs finds the file and binds "
"the local variable @code{buffer} to the buffer containing the file.  At the "
"same time, Emacs creates @code{lengths-list} as a local variable."
msgstr ""
"En la varlist de la expresi@'on @code{let}, Emacs encuentra el fichero\n"
"y ajusta la variable local @code{buffer} al b@'uffer conteniendo el\n"
"fichero. Al mismo tiempo, Emacs crea @code{lengths-list} como una\n"
"variable local."

#. type: Plain text
#: emacs-lisp-intro.texi:15157
msgid "Next, Emacs switches its attention to the buffer."
msgstr "Lo siguiente, Emacs cambia su atenci@'on al b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:15168
msgid ""
"In the following line, Emacs makes the buffer read-only.  Ideally, this line "
"is not necessary.  None of the functions for counting words and symbols in a "
"function definition should change the buffer.  Besides, the buffer is not "
"going to be saved, even if it were changed.  This line is entirely the "
"consequence of great, perhaps excessive, caution.  The reason for the "
"caution is that this function and those it calls work on the sources for "
"Emacs and it is inconvenient if they are inadvertently modified.  It goes "
"without saying that I did not realize a need for this line until an "
"experiment went awry and started to modify my Emacs source files @dots{}"
msgstr ""
"En la siguiente l@'{@dotless{i}}nea, Emacs crea el b@'uffer de solo\n"
"lectura. Idealmente, esta l@'{@dotless{i}}nea no es necesaria. Ninguna\n"
"de las funciones para contar palabras y s@'{@dotless{i}}mbolos en una\n"
"definici@'on de funci@'on cambiar@'{@dotless{i}}a el b@'uffer. Debajo,\n"
"el b@'uffer no est@'a yendo para ser guardado, incluso si eso fuese\n"
"cambiado. Esta l@'{@dotless{i}}nea es enteramente la consecuencia\n"
"grata, quiz@'as excesiva precauci@'on. La raz@'on para la precauci@'on\n"
"es que esta funci@'on y esta se llama a trabajar en las fuentes para\n"
"Emacs y eso es un inconveniente si est@'an inadvertidamente\n"
"modificadas. Eso va sin decir que no se realiz@'o una necesidad para\n"
"esta l@'{@dotless{i}}nea hasta que un experimento fu@'e cambiado hacia\n"
"un lado y empez@'o a modificar mis ficheros de fuentes Emacs @dots{}"

#. type: Plain text
#: emacs-lisp-intro.texi:15176
msgid ""
"Next comes a call to widen the buffer if it is narrowed.  This function is "
"usually not needed---Emacs creates a fresh buffer if none already exists; "
"but if a buffer visiting the file already exists Emacs returns that one.  In "
"this case, the buffer may be narrowed and must be widened.  If we wanted to "
"be fully `user-friendly', we would arrange to save the restriction and the "
"location of point, but we won't."
msgstr ""
"Lo siguiente llama a alargar el b@'uffer si eso est@'a encogido. Esta\n"
"funci@'on es normalmente innecesaria --- Emacs crea un b@'uffer fresco\n"
"si ninguno ya existe; pero si un b@'uffer est@'a visitando el fichero\n"
"que ya existe que Emacs devuelve uno. En este caso, el b@'uffer puede\n"
"ser encogido y debe ser amplio. Si se quiere ser completamente `amigo\n"
"del usuario', se pondr@'{@dotless{i}}a en orden para guardar la\n"
"restricci@'on y la localizaci@'on del punto, pero no."

#. type: Plain text
#: emacs-lisp-intro.texi:15179
msgid ""
"The @code{(goto-char (point-min))} expression moves point to the beginning "
"of the buffer."
msgstr ""
"La expresi@'on @code{(goto-char (point-min))} mueve el punto al\n"
"principio del b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:15183
msgid ""
"Then comes a @code{while} loop in which the `work' of the function is "
"carried out.  In the loop, Emacs determines the length of each definition "
"and constructs a lengths' list containing the information."
msgstr ""
"Entonces llega un bucle @code{while} en el que se devuelve el\n"
"`trabajo' de la funci@'on. En el bucle, Emacs determina el tama@~no de\n"
"cada definici@'on y construye una lista de tama@~nos conteniendo la\n"
"informaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:15189
msgid ""
"Emacs kills the buffer after working through it.  This is to save space "
"inside of Emacs.  My version of GNU Emacs 19 contained over 300 source files "
"of interest; GNU Emacs 22 contains over a thousand source files.  Another "
"function will apply @code{lengths-list-file} to each of the files."
msgstr ""
"Emacs corta el b@'uffer despu@'es de trabajar a trav@'es de eso. Esto\n"
"es guardar espacio dentro de Emacs. Mi versi@'on de GNU Emacs 19\n"
"conten@'{@dotless{i}}a 300 ficheros fuente de inter@'es; GNU Emacs 22\n"
"contiene a trav@'es de un millar de ficheros fuente. Otra funci@'on\n"
"aplicar@'a @code{lengths-list-file} a cada uno de los ficheros."

#. type: Plain text
#: emacs-lisp-intro.texi:15193
msgid ""
"Finally, the last expression within the @code{let} expression is the "
"@code{lengths-list} variable; its value is returned as the value of the "
"whole function."
msgstr ""
"Finalmente, la @'ultima expresi@'on con la expresi@'on @code{let} es\n"
"la variable @code{lengths-list}; su valor es devuelto como el valor de\n"
"la funci@'on completa."

#. type: Plain text
#: emacs-lisp-intro.texi:15197
msgid ""
"You can try this function by installing it in the usual fashion.  Then place "
"your cursor after the following expression and type @kbd{C-x C-e} "
"(@code{eval-last-sexp})."
msgstr ""
"Se puede probar esta funci@'on instal@'andolo en el modo\n"
"usual. Entonces posiciona tu cursor despu@'es de la siguiente\n"
"expresi@'on y escribe @kbd{C-x C-e} (@code{eval-last-sexp})."

#. type: smallexample
#: emacs-lisp-intro.texi:15202
#, no-wrap
msgid ""
"(lengths-list-file\n"
" \"/usr/local/share/emacs/22.1.1/lisp/emacs-lisp/debug.el\")\n"
msgstr ""
"(lengths-list-file\n"
" \"/usr/local/share/emacs/22.1.1/lisp/emacs-lisp/debug.el\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15208
msgid ""
"(You may need to change the pathname of the file; the one here is for GNU "
"Emacs version 22.1.1.  To change the expression, copy it to the "
"@file{*scratch*} buffer and edit it."
msgstr ""
"(Se puede necesitar cambiar la ruta del fichero; el @'unico\n"
"aqu@'{@dotless{i}} es para GNU Emacs versi@'on 22.1.1. Para cambiar la\n"
"expresi@'on, c@'opialo al b@'uffer @file{*scratch*} y\n"
"ed@'{@dotless{i}}talo."

#. type: Plain text
#: emacs-lisp-intro.texi:15213
msgid ""
"(Also, to see the full length of the list, rather than a truncated version, "
"you may have to evaluate the following:"
msgstr ""
"(Tambi@'en, para ver el tama@~no completo de la lista, en vez de una\n"
"versi@'on truncada se puede tener que evaluar lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:15216
#, no-wrap
msgid "(custom-set-variables '(eval-expression-print-length nil))\n"
msgstr "(custom-set-variables '(eval-expression-print-length nil))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15221
msgid ""
"(@xref{defcustom, , Specifying Variables using @code{defcustom}}.  Then "
"evaluate the @code{lengths-list-file} expression.)"
msgstr ""
"(@xref{defcustom, , Especificando Variables usando\n"
"@code{defcustom}}. Entonces eval@'ua la expresi@'on @code{lengths-list-"
"file}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15225
msgid ""
"The lengths' list for @file{debug.el} takes less than a second to produce "
"and looks like this in GNU Emacs 22:"
msgstr ""
"La lista de tama@~nos para @file{debug.el} toma menos de un segundo\n"
"para producirse esto en GNU Emacs 22:"

#. type: smallexample
#: emacs-lisp-intro.texi:15228
#, no-wrap
msgid "(83 113 105 144 289 22 30 97 48 89 25 52 52 88 28 29 77 49 43 290 232 587)\n"
msgstr "(83 113 105 144 289 22 30 97 48 89 25 52 52 88 28 29 77 49 43 290 232 587)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15233
msgid ""
"(Using my old machine, the version 19 lengths' list for @file{debug.el} took "
"seven seconds to produce and looked like this:"
msgstr ""
"(Usando mi vieja m@'aquina, la versi@'on 19 lista tama@~nos para\n"
"@file{debug.el} que en siete segundos para producen esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:15236
#, no-wrap
msgid "(75 41 80 62 20 45 44 68 45 12 34 235)\n"
msgstr "(75 41 80 62 20 45 44 68 45 12 34 235)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15240
msgid ""
"(The newer version of @file{debug.el} contains more defuns than the earlier "
"one; and my new machine is much faster than the old one.)"
msgstr ""
"(La versi@'on nueva de @file{debug.el} contiene m@'as defuns que la\n"
"temprana; y mi nueva m@'aquina es m@'as r@'apida que la vieja."

#. type: Plain text
#: emacs-lisp-intro.texi:15243
msgid ""
"Note that the length of the last definition in the file is first in the list."
msgstr ""
"N@'otese que el tama@~no de la @'ultima definici@'on en el fichero es\n"
"el primero en la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:15251
msgid ""
"In the previous section, we created a function that returns a list of the "
"lengths of each definition in a file.  Now, we want to define a function to "
"return a master list of the lengths of the definitions in a list of files."
msgstr ""
"En la secci@'on previa, se creaba una funci@'on que devuelve una lista\n"
"de los tama@~nos de cada definici@'on en un fichero. Ahora, se quiere\n"
"definir una funci@'on para devolver una lista maestra de los tama@~nos\n"
"de las definiciones en una lista de ficheros."

#. type: Plain text
#: emacs-lisp-intro.texi:15254
msgid ""
"Working on each of a list of files is a repetitious act, so we can use "
"either a @code{while} loop or recursion."
msgstr ""
"Trabajar en cada elemento de una lista de ficheros es un acto repetitivo,\n"
"as@'{@dotless{i}} se puede usar un bucle @code{while} o recursi@'on."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:15262
#, no-wrap
msgid "Determine the lengths of @code{defuns}"
msgstr "Determina las longitudes de @code{defuns}"

#. type: Plain text
#: emacs-lisp-intro.texi:15274
msgid ""
"The design using a @code{while} loop is routine.  The argument passed the "
"function is a list of files.  As we saw earlier (@pxref{Loop Example}), you "
"can write a @code{while} loop so that the body of the loop is evaluated if "
"such a list contains elements, but to exit the loop if the list is empty.  "
"For this design to work, the body of the loop must contain an expression "
"that shortens the list each time the body is evaluated, so that eventually "
"the list is empty.  The usual technique is to set the value of the list to "
"the value of the @sc{cdr} of the list each time the body is evaluated."
msgstr ""
"El dise@~no usando un bucle @code{while} es rutina. El argumento que\n"
"se pasaba a la funci@'on es una lista de ficheros. Como se vi@'o\n"
"pronto (@pxref{Ejemplo de bucle}), se puede escribir un bucle\n"
"@code{while} de un modo que el cuerpo del bucle es evaluado si tal\n"
"lista contiene elementos, pero sale del bucle si la lista est@'a\n"
"vac@'{@dotless{i}}a. Para que este dise@~no funcione, el cuerpo del\n"
"bucle debe contener una expresi@'on que ordene la lista cada vez que\n"
"el cuerpo es evaluado, de modo que finalmente la lista est@'e\n"
"vac@'{@dotless{i}}a. La t@'ecnica normal es asignar el valor de la\n"
"lista para el valor del @sc{cdr} de la lista cada vez que el cuerpo es\n"
"evaluado."

#. type: Plain text
#: emacs-lisp-intro.texi:15277
msgid "The template looks like this:"
msgstr "La plantilla se ve as@'{@dotless{i}}:"

#. type: Plain text
#: emacs-lisp-intro.texi:15296
msgid ""
"Also, we remember that a @code{while} loop returns @code{nil} (the result of "
"evaluating the true-or-false-test), not the result of any evaluation within "
"its body.  (The evaluations within the body of the loop are done for their "
"side effects.)  However, the expression that sets the lengths' list is part "
"of the body---and that is the value that we want returned by the function as "
"a whole.  To do this, we enclose the @code{while} loop within a @code{let} "
"expression, and arrange that the last element of the @code{let} expression "
"contains the value of the lengths' list.  (@xref{Incrementing Example, , "
"Loop Example with an Incrementing Counter}.)"
msgstr ""
"Tambi@'en, recu@'erdanos que un bucle @code{while} devuelve @code{nil}\n"
"(el resultado de evaluar el true-or-false-test), no el resultado de\n"
"cualquier evaluaci@'on con su cuerpo. (Las evaluaciones con el cuerpo\n"
"del bucle son hechas para sus efectos laterales.) Sin embargo, la\n"
"expresi@'on que asigna la lista de tama@~nos es parte del cuerpo --- y\n"
"que es el valor que queremos devuelto por la funci@'on como un\n"
"todo. Para hacer esto cerramos el bucle @code{while} con una\n"
"expresi@'on @code{let}, y pone en orden que el @'ultimo elemento de la\n"
"expresi@'on @code{let} contiene el valor de lista de\n"
"tama@~nos. (@xref{Ejemplo de Incremento, , El Ejemplo del Bucle con un\n"
"Contador de Incremento}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15300
msgid "These considerations lead us directly to the function itself:"
msgstr ""
"Estas consideraciones lideran directamente a la funci@'on en "
"s@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:15306
#, no-wrap
msgid ""
";;; @r{Use @code{while} loop.}\n"
"(defun lengths-list-many-files (list-of-files)\n"
"  \"Return list of lengths of defuns in LIST-OF-FILES.\"\n"
msgstr ""
";;; @r{Usar bucle @code{while}.}\n"
"(defun lengths-list-many-files (list-of-files)\n"
"  \"Devuelve la lista de tama@~nos de funciones en LIST-OF-FILES.\"\n"

#. type: group
#: emacs-lisp-intro.texi:15309
#, no-wrap
msgid ""
"  (let (lengths-list)\n"
"\n"
msgstr ""
"  (let (lengths-list)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15315
#, no-wrap
msgid ""
";;; @r{true-or-false-test}\n"
"    (while list-of-files\n"
"      (setq lengths-list\n"
"            (append\n"
"             lengths-list\n"
"\n"
msgstr ""
";;; @r{true-or-false-test}\n"
"    (while list-of-files\n"
"      (setq lengths-list\n"
"            (append\n"
"             lengths-list\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15319
#, no-wrap
msgid ""
";;; @r{Generate a lengths' list.}\n"
"             (lengths-list-file\n"
"              (expand-file-name (car list-of-files)))))\n"
msgstr ""
";;; @r{Genera una lista de tama@~nos.}\n"
"             (lengths-list-file\n"
"              (expand-file-name (car list-of-files)))))\n"

#. type: group
#: emacs-lisp-intro.texi:15324
#, no-wrap
msgid ""
";;; @r{Make files' list shorter.}\n"
"      (setq list-of-files (cdr list-of-files)))\n"
"\n"
msgstr ""
";;; @r{Crea una lista ordenada de ficheros.}\n"
"      (setq list-of-files (cdr list-of-files)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15327
#, no-wrap
msgid ""
";;; @r{Return final value of lengths' list.}\n"
"    lengths-list))\n"
msgstr ""
";;; @r{Devuelve la lista final de valores de tama@~nos.}\n"
"    lengths-list))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15333
msgid ""
"@code{expand-file-name} is a built-in function that converts a file name to "
"the absolute, long, path name form.  The function employs the name of the "
"directory in which the function is called."
msgstr ""
"@code{expand-file-name} es una funci@'on construida que convierte un\n"
"nombre de fichero al absoluto, forma de nombre de ruta. La funci@'on\n"
"emplea el nombre del directorio en el que la funci@'on se llama."

#. type: Plain text
#: emacs-lisp-intro.texi:15339
msgid ""
"Thus, if @code{expand-file-name} is called on @code{debug.el} when Emacs is "
"visiting the @file{/usr/local/share/emacs/22.1.1/lisp/emacs-lisp/} directory,"
msgstr ""
"De este modo, si @code{expand-file-name} es llamado en @code{debug.el}\n"
"cuando Emacs est@'a visitando el directorio @file{/usr/local/share/"
"emacs/22.1.1/lisp/emacs-lisp/}"

#. type: smallexample
#: emacs-lisp-intro.texi:15342
#, no-wrap
msgid "debug.el\n"
msgstr "debug.el\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15347
msgid "becomes"
msgstr "llega a ser"

#. type: smallexample
#: emacs-lisp-intro.texi:15351
#, no-wrap
msgid "/usr/local/share/emacs/22.1.1/lisp/emacs-lisp/debug.el\n"
msgstr "/usr/local/share/emacs/22.1.1/lisp/emacs-lisp/debug.el\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15356
msgid ""
"The only other new element of this function definition is the as yet "
"unstudied function @code{append}, which merits a short section for itself."
msgstr ""
"El @'unico nuevo elemento de esta definici@'on de funci@'on es la\n"
"todav@'{@dotless{i}}a no estudiada funci@'on @code{append}, que merece\n"
"una corta secci@'on en s@'{@dotless{i}}."

#. type: subsection
#: emacs-lisp-intro.texi:15358
#, no-wrap
msgid "The @code{append} Function"
msgstr "La funci@'on @code{append}"

#. type: Plain text
#: emacs-lisp-intro.texi:15362
msgid "The @code{append} function attaches one list to another.  Thus,"
msgstr "La funci@'on @code{append} adjunta una lista a otra. De este modo,"

#. type: smallexample
#: emacs-lisp-intro.texi:15365
#, no-wrap
msgid "(append '(1 2 3 4) '(5 6 7 8))\n"
msgstr "(append '(1 2 3 4) '(5 6 7 8))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15370
msgid "produces the list"
msgstr "produce la lista"

#. type: smallexample
#: emacs-lisp-intro.texi:15373
#, no-wrap
msgid "(1 2 3 4 5 6 7 8)\n"
msgstr "(1 2 3 4 5 6 7 8)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15378
msgid ""
"This is exactly how we want to attach two lengths' lists produced by "
"@code{lengths-list-file} to each other.  The results contrast with "
"@code{cons},"
msgstr ""
"Esto es exactamente c@'omo queremos adjuntar dos listas de tama@~nos\n"
"producidas por @code{lengths-list-file} a cualquier otra. Los\n"
"resultados contrastan con @code{cons},"

#. type: smallexample
#: emacs-lisp-intro.texi:15381
#, no-wrap
msgid "(cons '(1 2 3 4) '(5 6 7 8))\n"
msgstr "(cons '(1 2 3 4) '(5 6 7 8))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15387
msgid ""
"which constructs a new list in which the first argument to @code{cons} "
"becomes the first element of the new list:"
msgstr ""
"que construye una nueva lista en el que el primer argumento para\n"
"@code{cons} llega a ser el primer elemento de la nueva lista:"

#. type: smallexample
#: emacs-lisp-intro.texi:15390
#, no-wrap
msgid "((1 2 3 4) 5 6 7 8)\n"
msgstr "((1 2 3 4) 5 6 7 8)\n"

#. type: section
#: emacs-lisp-intro.texi:15393
#, no-wrap
msgid "Recursively Count Words in Different Files"
msgstr "Recursivamente cuenta palabras en diferentes ficheros"

#. type: Plain text
#: emacs-lisp-intro.texi:15398
msgid ""
"Besides a @code{while} loop, you can work on each of a list of files with "
"recursion.  A recursive version of @code{lengths-list-many-files} is short "
"and simple."
msgstr ""
"Bajo un bucle @code{while}, se puede trabajar cada lista de ficheros\n"
"con recursi@'on. Una versi@'on recursiva de\n"
"@code{lengths-list-many-files} es corta y simple."

#. type: Plain text
#: emacs-lisp-intro.texi:15407
msgid ""
"The recursive function has the usual parts: the `do-again-test', the `next-"
"step-expression', and the recursive call.  The `do-again-test' determines "
"whether the function should call itself again, which it will do if the "
"@code{list-of-files} contains any remaining elements; the `next-step-"
"expression' resets the @code{list-of-files} to the @sc{cdr} of itself, so "
"eventually the list will be empty; and the recursive call calls itself on "
"the shorter list.  The complete function is shorter than this description!"
msgstr ""
"La funci@'on recursiva tiene las partes normales: el `do-again-test',\n"
"la `next-step-expression', y la llamada recursiva. El `do-again-test'\n"
"determina si la funci@'on se llamar@'{@dotless{i}}a, que har@'a si la\n"
"@code{list-of-files} contiene los elementos que permanecen; la\n"
"`next-step-expression' resetea el @code{list-of-files} al @sc{cdr} en\n"
"s@'{@dotless{i}}, as@'{@dotless{i}} finalmente la lista ser@'a\n"
"vac@'{@dotless{i}}a; y la llamada recursiva llama en s@'{@dotless{i}}\n"
"a la lista ordenada. @exclamdown{}La funci@'on completa est@'a\n"
"ordenada por esta descripci@'on!"

#. type: findex
#: emacs-lisp-intro.texi:15407
#, no-wrap
msgid "recursive-lengths-list-many-files"
msgstr "recursive-lengths-list-many-files"

#. type: group
#: emacs-lisp-intro.texi:15419
#, no-wrap
msgid ""
"(defun recursive-lengths-list-many-files (list-of-files)\n"
"  \"Return list of lengths of each defun in LIST-OF-FILES.\"\n"
"  (if list-of-files                     ; @r{do-again-test}\n"
"      (append\n"
"       (lengths-list-file\n"
"        (expand-file-name (car list-of-files)))\n"
"       (recursive-lengths-list-many-files\n"
"        (cdr list-of-files)))))\n"
msgstr ""
"(defun recursive-lengths-list-many-files (list-of-files)\n"
"  \"Devuelve la lista de tama@~nos de cada defun en LIST-OF-FILES.\"\n"
"  (if list-of-files                     ; @r{do-again-test}\n"
"      (append\n"
"       (lengths-list-file\n"
"        (expand-file-name (car list-of-files)))\n"
"       (recursive-lengths-list-many-files\n"
"        (cdr list-of-files)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15426
msgid ""
"In a sentence, the function returns the lengths' list for the first of the "
"@code{list-of-files} appended to the result of calling itself on the rest of "
"the @code{list-of-files}."
msgstr ""
"En una frase, la funci@'on devuelve de tama@~nos de la lista para la\n"
"el primero de la @code{list-of-files} al resultado de llamarse\n"
"as@'{@dotless{i}} mismo al resto de @code{list-of-files}."

#. type: Plain text
#: emacs-lisp-intro.texi:15430
msgid ""
"Here is a test of @code{recursive-lengths-list-many-files}, along with the "
"results of running @code{lengths-list-file} on each of the files "
"individually."
msgstr ""
"Aqu@'{@dotless{i}} hay un test\n"
"@code{recursive-lengths-list-many-files}, a lo largo de los resultados\n"
"de ejecutar @code{lengths-list-file} en cada uno de los ficheros\n"
"individualmente."

#. type: Plain text
#: emacs-lisp-intro.texi:15437
msgid ""
"Install @code{recursive-lengths-list-many-files} and @code{lengths-list-"
"file}, if necessary, and then evaluate the following expressions.  You may "
"need to change the files' pathnames; those here work when this Info file and "
"the Emacs sources are located in their customary places.  To change the "
"expressions, copy them to the @file{*scratch*} buffer, edit them, and then "
"evaluate them."
msgstr ""
"Instala @code{recursive-lengths-list-many-files} y\n"
"@code{lengths-list-file}, si es necesario, y entonces eval@'ua las\n"
"siguientes expresiones. Se puede necesitar cambiar las rutas de\n"
"ficheros; aqu@'{@dotless{i}} se trabaja cuando este fichero Info\n"
"y las fuentes de Emacs est@'an localizadas en sus lugares\n"
"personales. Para cambiar las expresiones, c@'opialas al b@'uffer\n"
"@file{*scratch*}, ed@'{@dotless{i}}talos y entonces eval@'ualos."

#. type: Plain text
#: emacs-lisp-intro.texi:15441
msgid ""
"The results are shown after the @samp{@result{}}.  (These results are for "
"files from Emacs version 22.1.1; files from other versions of Emacs may "
"produce different results.)"
msgstr ""
"Los resultados son mostrados despu@'es del @samp{@result{}}. (Estos\n"
"resultados son para ficheros de Emacs versi@'on 22.1.1; ficheros desde\n"
"otras versiones de Emacs puede producir diferentes resultados.)"

#. type: group
#: emacs-lisp-intro.texi:15446
#, no-wrap
msgid ""
"(cd \"/usr/local/share/emacs/22.1.1/\")\n"
"\n"
msgstr ""
"(cd \"/usr/local/share/emacs/22.1.1/\")\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15449
#, no-wrap
msgid ""
"(lengths-list-file \"./lisp/macros.el\")\n"
"     @result{} (283 263 480 90)\n"
msgstr ""
"(lengths-list-file \"./lisp/macros.el\")\n"
"     @result{} (283 263 480 90)\n"

#. type: group
#: emacs-lisp-intro.texi:15454
#, no-wrap
msgid ""
"(lengths-list-file \"./lisp/mail/mailalias.el\")\n"
"     @result{} (38 32 29 95 178 180 321 218 324)\n"
msgstr ""
"(lengths-list-file \"./lisp/mail/mailalias.el\")\n"
"     @result{} (38 32 29 95 178 180 321 218 324)\n"

#. type: group
#: emacs-lisp-intro.texi:15459
#, no-wrap
msgid ""
"(lengths-list-file \"./lisp/makesum.el\")\n"
"     @result{} (85 181)\n"
msgstr ""
"(lengths-list-file \"./lisp/makesum.el\")\n"
"     @result{} (85 181)\n"

#. type: group
#: emacs-lisp-intro.texi:15467
#, no-wrap
msgid ""
"  (recursive-lengths-list-many-files\n"
"   '(\"./lisp/macros.el\"\n"
"     \"./lisp/mail/mailalias.el\"\n"
"     \"./lisp/makesum.el\"))\n"
"       @result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 85 181)\n"
msgstr ""
"  (recursive-lengths-list-many-files\n"
"   '(\"./lisp/macros.el\"\n"
"     \"./lisp/mail/mailalias.el\"\n"
"     \"./lisp/makesum.el\"))\n"
"       @result{} (283 263 480 90 38 32 29 95 178 180 321 218 324 85 181)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15472
msgid ""
"The @code{recursive-lengths-list-many-files} function produces the output we "
"want."
msgstr ""
"La funci@'on @code{recursive-lengths-list-many-files} produce la\n"
"salida que queremos."

#. type: Plain text
#: emacs-lisp-intro.texi:15474
msgid ""
"The next step is to prepare the data in the list for display in a graph."
msgstr ""
"El siguiente paso es preparar el dato en la lista para mostrarlo en un\n"
"grafo."

#. type: Plain text
#: emacs-lisp-intro.texi:15485
msgid ""
"The @code{recursive-lengths-list-many-files} function returns a list of "
"numbers.  Each number records the length of a function definition.  What we "
"need to do now is transform this data into a list of numbers suitable for "
"generating a graph.  The new list will tell how many functions definitions "
"contain less than 10 words and symbols, how many contain between 10 and 19 "
"words and symbols, how many contain between 20 and 29 words and symbols, and "
"so on."
msgstr ""
"La funci@'on @code{recursive-lengths-list-many-files} devuelve una\n"
"lista de n@'umeros. Cada n@'umero graba el tama@~no de una\n"
"definici@'on de funci@'on. Lo que se necesita hacer ahora es\n"
"transformar estos datos dentro de una lista de n@'umeros ajustado para\n"
"generar un grafo. La nueva lista contar@'a cu@'antas definiciones de\n"
"funciones contienen menos de 10 palabras y s@'{@dotless{i}}mbolos,\n"
"cuantas contienen entre 10 y 19 palabras y s@'{@dotless{i}}mbolos,\n"
"cu@'antas contienen entre 20 y 29 palabras y s@'{@dotless{i}}mbolos, y\n"
"as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:15490
msgid ""
"In brief, we need to go through the lengths' list produced by the "
"@code{recursive-lengths-list-many-files} function and count the number of "
"defuns within each range of lengths, and produce a list of those numbers."
msgstr ""
"En breve, se necesita ir a trav@'es el tama@~no de la lista producida\n"
"por la funci@'on @code{recursive-lengths-list-many-files} y contar el\n"
"n@'umero de defuns con cada rango de tama@~nos, y produce una lista de\n"
"esto de n@'umeros."

#. type: node
#: emacs-lisp-intro.texi:15499
#, no-wrap
msgid "Data for Display in Detail"
msgstr "Datos para mostrar en detalle"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:15500
#, no-wrap
msgid "The Data for Display in Detail"
msgstr "El dato para mostrar en detalle"

#. type: Plain text
#: emacs-lisp-intro.texi:15507
msgid ""
"Based on what we have done before, we can readily foresee that it should not "
"be too hard to write a function that `@sc{cdr}s' down the lengths' list, "
"looks at each element, determines which length range it is in, and "
"increments a counter for that range."
msgstr ""
"Basado en lo que hemos hecho antes, se prevee que no\n"
"ser@'{@dotless{i}}a dif@'{@dotless{i}}cil escribir una funci@'on que\n"
"`@sc{cdr}s' bajo la lista de tama@~nos, parece que cada elemento,\n"
"determina que rango de tama@~nos est@'a dentro, e incrementa un\n"
"contador para este rango."

#. type: Plain text
#: emacs-lisp-intro.texi:15516
msgid ""
"However, before beginning to write such a function, we should consider the "
"advantages of sorting the lengths' list first, so the numbers are ordered "
"from smallest to largest.  First, sorting will make it easier to count the "
"numbers in each range, since two adjacent numbers will either be in the same "
"length range or in adjacent ranges.  Second, by inspecting a sorted list, we "
"can discover the highest and lowest number, and thereby determine the "
"largest and smallest length range that we will need."
msgstr ""
"Sin embargo, antes de empezar a escribir tal funci@'on, nosotros\n"
"considerar@'{@dotless{i}}amos las ventajas de ordenar los tama@~nos de\n"
"la lista primero, as@'{@dotless{i}} los n@'umeros son ordenados desde\n"
"el m@'as peque@~no al m@'as largo. Primero, ordenando se har@'a\n"
"f@'acil contar los n@'umeros en cada rango, desde dos n@'umeros\n"
"adyacentes ser@'a el mismo rango del tama@~no en rangos\n"
"adyacentes. Segundo, inspeccionando una lista ordenada, se puede\n"
"descubrir el n@'umero mayor y menor, y esto significa determinar el\n"
"rango de tama@~no mayor y menor que necesitar@'a."

#. type: subsection
#: emacs-lisp-intro.texi:15518
#, no-wrap
msgid "Sorting Lists"
msgstr "Ordenando listas"

#. type: findex
#: emacs-lisp-intro.texi:15519
#, no-wrap
msgid "sort"
msgstr "sort"

#. type: Plain text
#: emacs-lisp-intro.texi:15525
msgid ""
"Emacs contains a function to sort lists, called (as you might guess)  "
"@code{sort}.  The @code{sort} function takes two arguments, the list to be "
"sorted, and a predicate that determines whether the first of two list "
"elements is ``less'' than the second."
msgstr ""
"Emacs contiene una funci@'on para listas ordenadas, llamadas (como se\n"
"podr@'{@dotless{i}}a adivinar) @code{sort}. La funci@'on @code{sort}\n"
"toma dos argumentos, la lista es ordenada, y un predicado que\n"
"determina si la primera de dos elementos de lista es ``menor'' que la\n"
"segunda."

#. type: Plain text
#: emacs-lisp-intro.texi:15533
msgid ""
"As we saw earlier (@pxref{Wrong Type of Argument, , Using the Wrong Type "
"Object as an Argument}), a predicate is a function that determines whether "
"some property is true or false.  The @code{sort} function will reorder a "
"list according to whatever property the predicate uses; this means that "
"@code{sort} can be used to sort non-numeric lists by non-numeric criteria---"
"it can, for example, alphabetize a list."
msgstr ""
"Como se vi@'o antes (@pxref{Tipo incorrecto de argumento, , Usando el\n"
"Tipo Incorrecto de Objeto como un Argumento}), un predicado es una\n"
"funci@'on que determina si alguna propiedad es verdadera o falsa. La\n"
"funci@'on @code{sort} reordenar@'a una lista de acuerdo a lo que la\n"
"propiedad del predicado usa; esto significa que @code{sort} puede ser\n"
"usado para ordenar listas no num@'ericas por un criterio no num@'erico\n"
"--- eso puede, por ejemplo, alfabetizar una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:15536
msgid ""
"The @code{<} function is used when sorting a numeric list.  For example,"
msgstr ""
"La funci@'on @code{<} se usa cuando se ordena una lista\n"
"num@'erica. Por ejemplo,"

#. type: smallexample
#: emacs-lisp-intro.texi:15539
#, no-wrap
msgid "(sort '(4 8 21 17 33 7 21 7) '<)\n"
msgstr "(sort '(4 8 21 17 33 7 21 7) '<)\n"

#. type: smallexample
#: emacs-lisp-intro.texi:15547
#, no-wrap
msgid "(4 7 7 8 17 21 21 33)\n"
msgstr "(4 7 7 8 17 21 21 33)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15553
msgid ""
"(Note that in this example, both the arguments are quoted so that the "
"symbols are not evaluated before being passed to @code{sort} as arguments.)"
msgstr ""
"(Note que en este ejemplo, ambos argumentos se citan\n"
"as@'{@dotless{i}} que los s@'{@dotless{i}}mbolos no se eval@'uan\n"
"antes de ser pasados por @code{sort} como argumentos.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15557
msgid ""
"Sorting the list returned by the @code{recursive-lengths-list-many-files} "
"function is straightforward; it uses the @code{<} function:"
msgstr ""
"Ordenando la lista devuelta por la funci@'on\n"
"@code{recursive-lengths-list-many-files} es honesta; eso usa la\n"
"funci@'n @code{<}:"

#. type: group
#: emacs-lisp-intro.texi:15580
#, no-wrap
msgid ""
"(sort\n"
" (recursive-lengths-list-many-files\n"
"  '(\"./lisp/macros.el\"\n"
"    \"./lisp/mailalias.el\"\n"
"    \"./lisp/makesum.el\"))\n"
" '<)\n"
msgstr ""
"(sort\n"
" (recursive-lengths-list-many-files\n"
"  '(\"./lisp/macros.el\"\n"
"    \"./lisp/mailalias.el\"\n"
"    \"./lisp/makesum.el\"))\n"
" '<)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15586
msgid "which produces:"
msgstr "que produce:"

#. type: smallexample
#: emacs-lisp-intro.texi:15589
#, no-wrap
msgid "(29 32 38 85 90 95 178 180 181 218 263 283 321 324 480)\n"
msgstr "(29 32 38 85 90 95 178 180 181 218 263 283 321 324 480)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15595
msgid ""
"(Note that in this example, the first argument to @code{sort} is not quoted, "
"since the expression must be evaluated so as to produce the list that is "
"passed to @code{sort}.)"
msgstr ""
"(Note que en este ejemplo, el primer argumento para @code{sort} no\n"
"est@'a citado, desde que la expresi@'on debe ser evaluado\n"
"as@'{@dotless{i}} como producir la lista que es pasada para @code{sort}.)"

#. type: subsection
#: emacs-lisp-intro.texi:15597
#, no-wrap
msgid "Making a List of Files"
msgstr "Creando una lista de ficheros"

#. type: Plain text
#: emacs-lisp-intro.texi:15605
msgid ""
"The @code{recursive-lengths-list-many-files} function requires a list of "
"files as its argument.  For our test examples, we constructed such a list by "
"hand; but the Emacs Lisp source directory is too large for us to do for "
"that.  Instead, we will write a function to do the job for us.  In this "
"function, we will use both a @code{while} loop and a recursive call."
msgstr ""
"La funci@'on @code{recursive-lengths-list-many-files} requiere una\n"
"lista de fichero como argumento. Para nuestros ejemplos de test, se\n"
"construyeron tal como una lista a mano; pero el directorio fuente de\n"
"Emacs Lisp es demasiado grande para hacer esto. As@'{@dotless{i}}, se\n"
"escribir@'a una funci@'on para hacer el trabajo. En esta funci@'on,\n"
"se usa tanto un bucle @code{while} como una llamada recursiva."

#. type: findex
#: emacs-lisp-intro.texi:15606
#, no-wrap
msgid "directory-files"
msgstr "directory-files"

#. type: Plain text
#: emacs-lisp-intro.texi:15612
msgid ""
"We did not have to write a function like this for older versions of GNU "
"Emacs, since they placed all the @samp{.el} files in one directory.  "
"Instead, we were able to use the @code{directory-files} function, which "
"lists the names of files that match a specified pattern within a single "
"directory."
msgstr ""
"En viejas versiones de GNU Emacs no hizo falta tener que escribir esta\n"
"funci@'on, puesto que todos los ficheros @samp{.el} en un\n"
"directorio. En vez de eso, se puede ser capaz de usar la funci@'on\n"
"@code{directory-files}, que lista los nombres de fichero que hay en un\n"
"directorio simple."

#. type: Plain text
#: emacs-lisp-intro.texi:15619
msgid ""
"However, recent versions of Emacs place Emacs Lisp files in sub-directories "
"of the top level @file{lisp} directory.  This re-arrangement eases "
"navigation.  For example, all the mail related files are in a @file{lisp} "
"sub-directory called @file{mail}.  But at the same time, this arrangement "
"forces us to create a file listing function that descends into the sub-"
"directories."
msgstr ""
"Sin embargo, las versiones reciente Emacs emplazan ficheros de Emacs\n"
"Lisp en subdirectorios del directorio de alto nivel @file{lisp}. Esto\n"
"facilita la navegaci@'on. Por ejemplo, todos los ficheros de correo\n"
"relacionados que est@'an en el subdirectorio llamado @file{mail}. Pero al\n"
"mismo tiempo, esta facilidad fuerza a crear un fichero listando la\n"
"funci@'on que desciende dentro de los subdirectorios."

#. type: findex
#: emacs-lisp-intro.texi:15620
#, no-wrap
msgid "files-in-below-directory"
msgstr "files-in-below-directory"

#. type: Plain text
#: emacs-lisp-intro.texi:15627
msgid ""
"We can create this function, called @code{files-in-below-directory}, using "
"familiar functions such as @code{car}, @code{nthcdr}, and @code{substring} "
"in conjunction with an existing function called @code{directory-files-and-"
"attributes}.  This latter function not only lists all the filenames in a "
"directory, including the names of sub-directories, but also their attributes."
msgstr ""
"Se puede crear esta funci@'on, llamada\n"
"@code{files-en-below-directory}, usando funciones familiares tales\n"
"como @code{car}, @code{nthcdr}, y @code{substring} en conjunci@'on con\n"
"una funci@'on existente llamada\n"
"@code{directory-files-and-attributes}. Esta @'ultima funci@'on no solo\n"
"listas de ficheros en un directorio, incluyendo los nombres de\n"
"subdirectorios, pero tambi@'en sus atributos."

#. type: Plain text
#: emacs-lisp-intro.texi:15631
msgid ""
"To restate our goal: to create a function that will enable us to feed "
"filenames to @code{recursive-lengths-list-many-files} as a list that looks "
"like this (but with more elements):"
msgstr ""
"Para empezar nuestro objetivo: crear una funci@'on que nos permita\n"
"alimentas ficheros a @code{recursive-lengths-list-many-files} como una\n"
"lista que se parece a esto (pero con m@'as elementos):"

#. type: group
#: emacs-lisp-intro.texi:15637
#, no-wrap
msgid ""
"(\"./lisp/macros.el\"\n"
" \"./lisp/mail/rmail.el\"\n"
" \"./lisp/makesum.el\")\n"
msgstr ""
"(\"./lisp/macros.el\"\n"
" \"./lisp/mail/rmail.el\"\n"
" \"./lisp/makesum.el\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15647
msgid ""
"The @code{directory-files-and-attributes} function returns a list of lists.  "
"Each of the lists within the main list consists of 13 elements.  The first "
"element is a string that contains the name of the file---which, in GNU/"
"Linux, may be a `directory file', that is to say, a file with the special "
"attributes of a directory.  The second element of the list is @code{t} for a "
"directory, a string for symbolic link (the string is the name linked to), or "
"@code{nil}."
msgstr ""
"La funci@'on @code{directory-files-and-attributes} devuelve una lista\n"
"de listas. Cada una de las listas con la lista principal consiste de\n"
"13 elementos. El primer elemento es una cadena que contiene el nombre\n"
"del fichero -- que, en GNU/Linux, puede ser un `directorio fichero',\n"
"que dice, un fichero con los atributos especiales de un directorio. El\n"
"segundo elemento de la lista es @code{t} para un directorio, es una\n"
"cadena para el enlace simb@'olico (la cadena es el nombre enlazado), o\n"
"@code{nil}."

#. type: Plain text
#: emacs-lisp-intro.texi:15652
msgid ""
"For example, the first @samp{.el} file in the @file{lisp/} directory is "
"@file{abbrev.el}.  Its name is @file{/usr/local/share/emacs/22.1.1/lisp/"
"abbrev.el} and it is not a directory or a symbolic link."
msgstr ""
"Por ejemplo, el primer fichero @samp{.el} en el directorio es\n"
"@file{abbrev.el}. Su nombre es\n"
"@file{/usr/local/share/emacs/22.1.1/lisp/abbrev.el} y no es un\n"
"directorio o un enlace simb@'olico."

#. type: Plain text
#: emacs-lisp-intro.texi:15656
msgid ""
"This is how @code{directory-files-and-attributes} lists that file and its "
"attributes:"
msgstr ""
"Esto es c@'omo @code{directory-files-and-attributes} lista este\n"
"fichero y sus atributos:"

#. type: group
#: emacs-lisp-intro.texi:15664
#, no-wrap
msgid ""
"(\"abbrev.el\"\n"
"nil\n"
"1\n"
"1000\n"
"100\n"
msgstr ""
"(\"abbrev.el\"\n"
"nil\n"
"1\n"
"1000\n"
"100\n"

#. type: group
#: emacs-lisp-intro.texi:15671
#, no-wrap
msgid ""
"(20615 27034 579989 697000)\n"
"(17905 55681 0 0)\n"
"(20615 26327 734791 805000)\n"
"13188\n"
"\"-rw-r--r--\"\n"
msgstr ""
"(20615 27034 579989 697000)\n"
"(17905 55681 0 0)\n"
"(20615 26327 734791 805000)\n"
"13188\n"
"\"-rw-r--r--\"\n"

#. type: group
#: emacs-lisp-intro.texi:15676
#, no-wrap
msgid ""
"nil\n"
"2971624\n"
"773)\n"
msgstr ""
"nil\n"
"2971624\n"
"773)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15682
msgid ""
"On the other hand, @file{mail/} is a directory within the @file{lisp/} "
"directory.  The beginning of its listing looks like this:"
msgstr ""
"Por otro lado, @file{mail/} es un directorio con el directorio\n"
"@file{lisp/}. El principio del listado se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:15689
#, no-wrap
msgid ""
"(\"mail\"\n"
"t\n"
"@dots{}\n"
")\n"
msgstr ""
"(\"mail\"\n"
"t\n"
"@dots{}\n"
")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15696
msgid ""
"(To learn about the different attributes, look at the documentation of "
"@code{file-attributes}.  Bear in mind that the @code{file-attributes} "
"function does not list the filename, so its first element is @code{directory-"
"files-and-attributes}'s second element.)"
msgstr ""
"(Para aprender acerca de los diferentes atributos, mira en la\n"
"documentaci@'on de @code{file-attributes}. Tenga en mente que la\n"
"funci@'on @code{file-attributes} no lista el nombre del fichero,\n"
"as@'{@dotless{i}} su primer elemento es\n"
"@code{directory-files-and-attributes} que es el segundo elemento.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15700
msgid ""
"We will want our new function, @code{files-in-below-directory}, to list the "
"@samp{.el} files in the directory it is told to check, and in any "
"directories below that directory."
msgstr ""
"Se querr@'an nuestras nuevas funciones,\n"
"@code{files-in-below-directory}, para listar los fichero @samp{.el} en\n"
"el directorio eso es contado para chequear, y en los directorios bajo\n"
"este directorio."

#. type: Plain text
#: emacs-lisp-intro.texi:15706
msgid ""
"This gives us a hint on how to construct @code{files-in-below-directory}: "
"within a directory, the function should add @samp{.el} filenames to a list; "
"and if, within a directory, the function comes upon a sub-directory, it "
"should go into that sub-directory and repeat its actions."
msgstr ""
"Esto nos da una sugesti@'on de como construir\n"
"@code{files-in-below-directory}: con un directorio, la funci@'on\n"
"a@~nadir los nombres de ficheros @samp{.el} a una lista; y si, con un\n"
"directorio, la funci@'on viene con un subdirectorio,\n"
"ir@'{@dotless{i}}a dentro de este subdirectorio y repite sus acciones."

#. type: Plain text
#: emacs-lisp-intro.texi:15715
msgid ""
"However, we should note that every directory contains a name that refers to "
"itself, called @file{.}, (``dot'') and a name that refers to its parent "
"directory, called @file{..} (``double dot'').  (In @file{/}, the root "
"directory, @file{..} refers to itself, since @file{/} has no parent.)  "
"Clearly, we do not want our @code{files-in-below-directory} function to "
"enter those directories, since they always lead us, directly or indirectly, "
"to the current directory."
msgstr ""
"Sin embargo, nosotros notar@'{@dotless{i}}amos que cada directorio\n"
"contiene un nombre que se refiere a s@'{@dotless{i}} mismo, llamado\n"
"@file{.}, (``dot'') y un nombre que se refiere a su directorio padre,\n"
"llamado @file{..} (``doble punto''). (En @file{/}, el directorio\n"
"ra@'{@dotless{i}}z, @file{..} se refiere as@'{@dotless{i}} mismo,\n"
"desde que @file{/} no tiene padre.) Claramente, no que se quiere\n"
"nuestra funci@'on @code{files-in-below-directory} para introducir\n"
"estos directorio, desde que ellos siempre nos lideran, directamente o\n"
"indirectamente, al directorio actual."

#. type: Plain text
#: emacs-lisp-intro.texi:15718
msgid ""
"Consequently, our @code{files-in-below-directory} function must do several "
"tasks:"
msgstr ""
"Consecuentemente, nuestra funci@'on @code{files-in-below-directory}\n"
"debe hacer varias tareas:"

#. type: itemize
#: emacs-lisp-intro.texi:15723
msgid ""
"Check to see whether it is looking at a filename that ends in @samp{.el}; "
"and if so, add its name to a list."
msgstr ""
"Chequee para ver si se est@'a mirando en un nombre de fichero que\n"
"finaliza en @samp{.el} y si es as@'{@dotless{i}}, se a@~nade el nombre\n"
"a una lista."

#. type: itemize
#: emacs-lisp-intro.texi:15727
msgid ""
"Check to see whether it is looking at a filename that is the name of a "
"directory; and if so,"
msgstr ""
"Chequee para ver si est@'a mirando en un nombre de fichero que es el\n"
"nombre de un directorio; y si es as@'{@dotless{i}},"

#. type: itemize
#: emacs-lisp-intro.texi:15732
msgid ""
"Check to see whether it is looking at @file{.} or @file{..}; and if so skip "
"it."
msgstr ""
"Chequee para ver si est@'a mirando en @file{.} o @file{..}; y si es\n"
"as@'{@dotless{i}} sal."

#. type: itemize
#: emacs-lisp-intro.texi:15735
msgid "Or else, go into that directory and repeat the process."
msgstr "O adem@'as, ve dentro de este directorio y repite el proceso."

#. type: Plain text
#: emacs-lisp-intro.texi:15745
msgid ""
"Let's write a function definition to do these tasks.  We will use a "
"@code{while} loop to move from one filename to another within a directory, "
"checking what needs to be done; and we will use a recursive call to repeat "
"the actions on each sub-directory.  The recursive pattern is "
"`accumulate' (@pxref{Accumulate, , Recursive Pattern: @emph{accumulate}}), "
"using @code{append} as the combiner."
msgstr ""
"Se permite escribir una definici@'on de funci@'on para hacer estas\n"
"tareas. Se usar@'a un bucle @code{while} para mover de un nombre de\n"
"fichero a otro con un directorio chequeando lo que necesita ser hecho;\n"
"y se usa una llamada recursiva para repetir las acciones en cada\n"
"subdirectorio. El patr@'on recursivo es `acumular' (@pxref{Acumular, ,\n"
"Patr@'on recursivo: @emph{accumulate}}) usando @code{append} para\n"
"combinar."

#. type: Plain text
#: emacs-lisp-intro.texi:15758
msgid "Here is the function:"
msgstr "Aqu@'{@dotless{i}} est@'a la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:15768
#, no-wrap
msgid ""
"(defun files-in-below-directory (directory)\n"
"  \"List the .el files in DIRECTORY and in its sub-directories.\"\n"
"  ;; Although the function will be used non-interactively,\n"
"  ;; it will be easier to test if we make it interactive.\n"
"  ;; The directory will have a name such as\n"
"  ;;  \"/usr/local/share/emacs/22.1.1/lisp/\"\n"
"  (interactive \"DDirectory name: \")\n"
msgstr ""
"(defun files-in-below-directory (directory)\n"
"  \"Lista los ficheros .el en DIRECTORIO y en sus subdirectorios.\"\n"
"  ;; Aunque la funci@'on ser@'a usada no interactivamente,\n"
"  ;; ser@'a f@'acil chequear si lo hacemos interactivo.\n"
"  ;; El directorio tendr@'a un nombre tal como\n"
"  ;;  \"/usr/local/share/emacs/22.1.1/lisp/\"\n"
"  (interactive \"DNombre del Directorio: \")\n"

#. type: group
#: emacs-lisp-intro.texi:15775
#, no-wrap
msgid ""
"  (let (el-files-list\n"
"        (current-directory-list\n"
"         (directory-files-and-attributes directory t)))\n"
"    ;; while we are in the current directory\n"
"    (while current-directory-list\n"
msgstr ""
"  (let (el-files-list\n"
"        (current-directory-list\n"
"         (directory-files-and-attributes directory t)))\n"
"    ;; mientras estamos en el directorio actual\n"
"    (while current-directory-list\n"

#. type: group
#: emacs-lisp-intro.texi:15783
#, no-wrap
msgid ""
"      (cond\n"
"       ;; check to see whether filename ends in `.el'\n"
"       ;; and if so, append its name to a list.\n"
"       ((equal \".el\" (substring (car (car current-directory-list)) -3))\n"
"        (setq el-files-list\n"
"              (cons (car (car current-directory-list)) el-files-list)))\n"
msgstr ""
"      (cond\n"
"       ;; chequee para ver si el nombre del fichero finaliza en `.el'\n"
"       ;; y si es as@'{@dotless{i}}, a@~nade su nombre a una lista.\n"
"       ((equal \".el\" (substring (car (car current-directory-list)) -3))\n"
"        (setq el-files-list\n"
"              (cons (car (car current-directory-list)) el-files-list)))\n"

#. type: group
#: emacs-lisp-intro.texi:15794
#, no-wrap
msgid ""
"       ;; check whether filename is that of a directory\n"
"       ((eq t (car (cdr (car current-directory-list))))\n"
"        ;; decide whether to skip or recurse\n"
"        (if\n"
"            (equal \".\"\n"
"                   (substring (car (car current-directory-list)) -1))\n"
"            ;; then do nothing since filename is that of\n"
"            ;;   current directory or parent, \".\" or \"..\"\n"
"            ()\n"
msgstr ""
"       ;; chequee si el nombre del fichero es un directorio\n"
"       ((eq t (car (cdr (car current-directory-list))))\n"
"        ;; decide si salir o hacer recursi@'on\n"
"        (if\n"
"            (equal \".\"\n"
"                   (substring (car (car current-directory-list)) -1))\n"
"            ;; entonces no hagas nada puesto que el nombre del fichero es\n"
"            ;; el actual directorio o padre, \".\" o \"..\"\n"
"            ()\n"

#. type: group
#: emacs-lisp-intro.texi:15807
#, no-wrap
msgid ""
"          ;; else descend into the directory and repeat the process\n"
"          (setq el-files-list\n"
"                (append\n"
"                 (files-in-below-directory\n"
"                  (car (car current-directory-list)))\n"
"                 el-files-list)))))\n"
"      ;; move to the next filename in the list; this also\n"
"      ;; shortens the list so the while loop eventually comes to an end\n"
"      (setq current-directory-list (cdr current-directory-list)))\n"
"    ;; return the filenames\n"
"    el-files-list))\n"
msgstr ""
"          ;; else desciende dentro del directorio y repite el proceso\n"
"          (setq el-files-list\n"
"                (append\n"
"                 (files-in-below-directory\n"
"                  (car (car current-directory-list)))\n"
"                 el-files-list)))))\n"
"      ;; mueve al siguiente fichero en la lista; esto tambi@'en \n"
"      ;; ordena la lista as@'{@dotless{i}} mientras el bucle\n"
"      ;; eventualmente llega a un fin\n"
"      (setq current-directory-list (cdr current-directory-list)))\n"
"    ;; devuelve los ficheros\n"
"    el-files-list))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15815
msgid ""
"The @code{files-in-below-directory} @code{directory-files} function takes "
"one argument, the name of a directory."
msgstr ""
"Las funciones @code{files-in-below-directory} @code{directory-files}\n"
"toma un argumento, el nombre de un directorio."

#. type: Plain text
#: emacs-lisp-intro.texi:15818
msgid "Thus, on my system,"
msgstr "De este modo, en mi sistema,"

#. type: group
#: emacs-lisp-intro.texi:15826
#, no-wrap
msgid ""
"(length\n"
" (files-in-below-directory \"/usr/local/share/emacs/22.1.1/lisp/\"))\n"
msgstr ""
"(length\n"
" (files-in-below-directory \"/usr/local/share/emacs/22.1.1/lisp/\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15832
msgid ""
"tells me that in and below my Lisp sources directory are 1031 @samp{.el} "
"files."
msgstr ""
"se cuenta que dentro y debajo de mi directorio de fuentes Lisp hay\n"
"1031 ficheros @samp{.el}"

#. type: Plain text
#: emacs-lisp-intro.texi:15836
msgid ""
"@code{files-in-below-directory} returns a list in reverse alphabetical "
"order.  An expression to sort the list in alphabetical order looks like this:"
msgstr ""
"@code{files-in-below-directory} devuelve una lista en orden\n"
"alfab@'etico inverso. Una expresi@'on para ordenar la lista en orden\n"
"que parece como este:"

#. type: group
#: emacs-lisp-intro.texi:15842
#, no-wrap
msgid ""
"(sort\n"
" (files-in-below-directory \"/usr/local/share/emacs/22.1.1/lisp/\")\n"
" 'string-lessp)\n"
msgstr ""
"(sort\n"
" (files-in-below-directory \"/usr/local/share/emacs/22.1.1/lisp/\")\n"
" 'string-lessp)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15864
msgid ""
"Our immediate goal is to generate a list that tells us how many function "
"definitions contain fewer than 10 words and symbols, how many contain "
"between 10 and 19 words and symbols, how many contain between 20 and 29 "
"words and symbols, and so on."
msgstr ""
"Nuestro objetivo inmediato es generar una lista que cuenta, cuantas\n"
"definiciones de funciones contienen menos de 10 palabras y\n"
"s@'{@dotless{i}}mbolos, cuantas contienen entre 10 y 19 palabras y\n"
"s@'{@dotless{i}}mbolos, cuantas contienen entre 20 y 29 palabras y\n"
"s@'{@dotless{i}}mbolos, y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:15872
msgid ""
"With a sorted list of numbers, this is easy: count how many elements of the "
"list are smaller than 10, then, after moving past the numbers just counted, "
"count how many are smaller than 20, then, after moving past the numbers just "
"counted, count how many are smaller than 30, and so on.  Each of the "
"numbers, 10, 20, 30, 40, and the like, is one larger than the top of that "
"range.  We can call the list of such numbers the @code{top-of-ranges} list."
msgstr ""
"Con una lista ordenada de n@'umeros, es f@'acil: se cuentan cuantos\n"
"elementos de la lista son m@'as peque@~nos de 10, entonces, se\n"
"devuelven los n@'umeros contados, se cuenta cuantos son m@'as\n"
"peque@~nos de 20, entonces se devuelven los n@'umeros contados,\n"
"despu@'es se cuentan los que son m@'as peque@~nos de 30, y\n"
"as@'{@dotless{i}}. Cada uno de los n@'umeros, 10, 20, 30, 40, y como,\n"
"es m@'as grande que el tope de este rango. Se puede llamar a la lista\n"
"de tales n@'umeros, la lista @code{top-of-ranges}."

#. type: Plain text
#: emacs-lisp-intro.texi:15876
msgid ""
"If we wished, we could generate this list automatically, but it is simpler "
"to write a list manually.  Here it is:"
msgstr ""
"Si se desea, se podr@'{@dotless{i}}a generar esta lista\n"
"autom@'aticamente, pero es m@'as simple escribir una lista\n"
"manualmente. Aqu@'{@dotless{i}} est@'a:"

#. type: vindex
#: emacs-lisp-intro.texi:15876
#, no-wrap
msgid "top-of-ranges"
msgstr "top-of-ranges"

#. type: group
#: emacs-lisp-intro.texi:15888
#, no-wrap
msgid ""
"(defvar top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250\n"
"  260 270 280 290 300)\n"
" \"List specifying ranges for `defuns-per-range'.\")\n"
msgstr ""
"(defvar top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250\n"
"  260 270 280 290 300)\n"
" \"Listar especificando rangos para `defuns-per-range'.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15892
msgid "To change the ranges, we edit this list."
msgstr "Para cambiar los rangos, se edita esta lista."

#. type: Plain text
#: emacs-lisp-intro.texi:15897
msgid ""
"Next, we need to write the function that creates the list of the number of "
"definitions within each range.  Clearly, this function must take the "
"@code{sorted-lengths} and the @code{top-of-ranges} lists as arguments."
msgstr ""
"Lo siguiente, que se necesita es escribir la funci@'on que crea la\n"
"lista del n@'umero de definiciones con cada rango. Claramente, esta\n"
"funci@'on debe tomar el @code{sorted-lengths} y las listas\n"
"@code{top-of-ranges} listas como argumentos."

#. type: Plain text
#: emacs-lisp-intro.texi:15907
msgid ""
"The @code{defuns-per-range} function must do two things again and again: it "
"must count the number of definitions within a range specified by the current "
"top-of-range value; and it must shift to the next higher value in the "
"@code{top-of-ranges} list after counting the number of definitions in the "
"current range.  Since each of these actions is repetitive, we can use "
"@code{while} loops for the job.  One loop counts the number of definitions "
"in the range defined by the current top-of-range value, and the other loop "
"selects each of the top-of-range values in turn."
msgstr ""
"La funci@'on @code{defuns-per-range} debe hacer dos cosas una y otra\n"
"vez: eso debe contar el n@'umero de definiciones con un rango\n"
"espec@'{@dotless{i}}fico por el actual valor top-of-range; y eso debe\n"
"dividir al siguiente gran valor en la lista @code{top-of-ranges}\n"
"despu@'es de contar el n@'umero de definiciones en el rango\n"
"actual. Desde que cada una de estas acciones es repetitiva, se puede\n"
"usar los bucles @code{while} para el trabajo. Un bucle cuenta el\n"
"n@'umero de definiciones en el rango definido por el valor actual\n"
"top-of-range, y el otro bucle selecciona cada uno de los valores\n"
"top-of-range en turno."

#. type: Plain text
#: emacs-lisp-intro.texi:15912
msgid ""
"Several entries of the @code{sorted-lengths} list are counted for each "
"range; this means that the loop for the @code{sorted-lengths} list will be "
"inside the loop for the @code{top-of-ranges} list, like a small gear inside "
"a big gear."
msgstr ""
"Varias entradas de la lista @code{sorted-lengths} se cuentan para\n"
"cada rango; esto significa que el bucle para la lista\n"
"@code{sorted-lengths} ser@'a dentro del bucle para la lista\n"
"@code{top-of-ranges}, como un peque@~no adorno dentro de un gran adorno."

#. type: Plain text
#: emacs-lisp-intro.texi:15920
msgid ""
"The inner loop counts the number of definitions within the range.  It is a "
"simple counting loop of the type we have seen before.  (@xref{Incrementing "
"Loop, , A loop with an incrementing counter}.)  The true-or-false test of "
"the loop tests whether the value from the @code{sorted-lengths} list is "
"smaller than the current value of the top of the range.  If it is, the "
"function increments the counter and tests the next value from the "
"@code{sorted-lengths} list."
msgstr ""
"El bucle interno cuenta el n@'umero de definiciones con el rango. Eso\n"
"es un simple contaje del tipo en el que se ha visto\n"
"antes. (@xref{Incrementando el Bucle, , Un bucle con un contador de\n"
"incremento}). El test true-or-false del bucle chequea si el valor\n"
"desde la lista @code{sorted-lengths} es m@'as peque@~na que el actual\n"
"valor de lo alto del rango. Si es as@'{@dotless{i}}, la funci@'on\n"
"incrementa el contador y se chequea el siguiente valor desde la lista\n"
"@code{sorted-lengths}."

#. type: Plain text
#: emacs-lisp-intro.texi:15923
msgid "The inner loop looks like this:"
msgstr "El bucle interno se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:15929
#, no-wrap
msgid ""
"(while @var{length-element-smaller-than-top-of-range}\n"
"  (setq number-within-range (1+ number-within-range))\n"
"  (setq sorted-lengths (cdr sorted-lengths)))\n"
msgstr ""
"(while @var{length-element-smaller-than-top-of-range}\n"
"  (setq number-within-range (1+ number-within-range))\n"
"  (setq sorted-lengths (cdr sorted-lengths)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15935
msgid ""
"The outer loop must start with the lowest value of the @code{top-of-ranges} "
"list, and then be set to each of the succeeding higher values in turn.  This "
"can be done with a loop like this:"
msgstr ""
"El bucle de fuera debe empezar con el valor m@'as bajo de la lista\n"
"@code{top-of-ranges}, y entonces se asigna a cada uno de los valores\n"
"superiores exitosos a su vez. Esto puede ser hecho con un bucle como\n"
"este:"

#. type: group
#: emacs-lisp-intro.texi:15941
#, no-wrap
msgid ""
"(while top-of-ranges\n"
"  @var{body-of-loop}@dots{}\n"
"  (setq top-of-ranges (cdr top-of-ranges)))\n"
msgstr ""
"(while top-of-ranges\n"
"  @var{body-of-loop}@dots{}\n"
"  (setq top-of-ranges (cdr top-of-ranges)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15946
msgid "Put together, the two loops look like this:"
msgstr "Se ponen juntos, los dos bucles como este:"

#. type: group
#: emacs-lisp-intro.texi:15950
#, no-wrap
msgid ""
"(while top-of-ranges\n"
"\n"
msgstr ""
"(while top-of-ranges\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15955
#, no-wrap
msgid ""
"  ;; @r{Count the number of elements within the current range.}\n"
"  (while @var{length-element-smaller-than-top-of-range}\n"
"    (setq number-within-range (1+ number-within-range))\n"
"    (setq sorted-lengths (cdr sorted-lengths)))\n"
"\n"
msgstr ""
"  ;; @r{Contar el n@'umero de elementos con el actual rango.}\n"
"  (while @var{length-element-smaller-than-top-of-range}\n"
"    (setq number-within-range (1+ number-within-range))\n"
"    (setq sorted-lengths (cdr sorted-lengths)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:15958
#, no-wrap
msgid ""
"  ;; @r{Move to next range.}\n"
"  (setq top-of-ranges (cdr top-of-ranges)))\n"
msgstr ""
"  ;; @r{Mover al siguiente rango.}\n"
"  (setq top-of-ranges (cdr top-of-ranges)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:15965
msgid ""
"In addition, in each circuit of the outer loop, Emacs should record the "
"number of definitions within that range (the value of @code{number-within-"
"range}) in a list.  We can use @code{cons} for this purpose.  (@xref{cons, , "
"@code{cons}}.)"
msgstr ""
"Adem@'as, en cada circuito del bucle exterior, Emacs\n"
"grabar@'{@dotless{i}}a el n@'umero de definiciones con este rango (el\n"
"valor de @code{number-within-range}) en una lista. Se puede usar\n"
"@code{cons} para este prop@'osito. (@xref{cons, , @code{cons}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:15977
msgid ""
"The @code{cons} function works fine, except that the list it constructs will "
"contain the number of definitions for the highest range at its beginning and "
"the number of definitions for the lowest range at its end.  This is because "
"@code{cons} attaches new elements of the list to the beginning of the list, "
"and since the two loops are working their way through the lengths' list from "
"the lower end first, the @code{defuns-per-range-list} will end up largest "
"number first.  But we will want to print our graph with smallest values "
"first and the larger later.  The solution is to reverse the order of the "
"@code{defuns-per-range-list}.  We can do this using the @code{nreverse} "
"function, which reverses the order of a list."
msgstr ""
"La funci@'on @code{cons} trabaja bien, excepto que la lista que se\n"
"construye contendr@'a el n@'umero de definiciones para el alto rango y\n"
"su principio el n@'umero de definiciones para el m@'as bajo rango a su\n"
"fin. Esto es porque @code{cons} adjunta nuevos elementos de la lista\n"
"al principio de la lista, y desde los dos bucles que hacen c@'alculos\n"
"a trav@'es de la lista de tama@~nos desde lo bajo finaliza primero, el\n"
"@code{defuns-per-range-list} finalizar@'a el primer n@'umero m@'as\n"
"largo. Pero lo que se quiere es imprimir nuestro grafo con peque@~nos\n"
"valores primero y el m@'as grande despu@'es. La soluci@'on es invertir\n"
"el orden del @code{defuns-per-range-list}. Nosotros podemos hacer esto\n"
"usando la funci@'on @code{nreverse}, que invierte el orden de una\n"
"lista."

#. type: findex
#: emacs-lisp-intro.texi:15977
#, no-wrap
msgid "nreverse"
msgstr "nreverse"

#. type: smallexample
#: emacs-lisp-intro.texi:15984
#, no-wrap
msgid "(nreverse '(1 2 3 4))\n"
msgstr "(nreverse '(1 2 3 4))\n"

#. type: smallexample
#: emacs-lisp-intro.texi:15992
#, no-wrap
msgid "(4 3 2 1)\n"
msgstr "(4 3 2 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16001
msgid ""
"Note that the @code{nreverse} function is ``destructive''---that is, it "
"changes the list to which it is applied; this contrasts with the @code{car} "
"and @code{cdr} functions, which are non-destructive.  In this case, we do "
"not want the original @code{defuns-per-range-list}, so it does not matter "
"that it is destroyed.  (The @code{reverse} function provides a reversed copy "
"of a list, leaving the original list as is.)"
msgstr ""
"Note que la funci@'on @code{nreverse} es ``destructiva'' --- que es,\n"
"cambiar la lista a la que se aplica; esto contrasta con las\n"
"funciones @code{car} y @code{cdr}, que no son destructivas. En este\n"
"caso, no se quiere que el original @code{defuns-per-range-list},\n"
"de manera que no hay materia que se destruya. (La funci@'on\n"
"@code{reverse} provee un copia inversa de una lista, dejando la lista\n"
"original como es.)"

#. type: findex
#: emacs-lisp-intro.texi:16001
#, no-wrap
msgid "reverse"
msgstr "reverse"

#. type: Plain text
#: emacs-lisp-intro.texi:16005
msgid "Put all together, the @code{defuns-per-range} looks like this:"
msgstr "Pon todo junto, el @code{defuns-per-range} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:16013 emacs-lisp-intro.texi:21511
#, no-wrap
msgid ""
"(defun defuns-per-range (sorted-lengths top-of-ranges)\n"
"  \"SORTED-LENGTHS defuns in each TOP-OF-RANGES range.\"\n"
"  (let ((top-of-range (car top-of-ranges))\n"
"        (number-within-range 0)\n"
"        defuns-per-range-list)\n"
msgstr ""
"(defun defuns-per-range (sorted-lengths top-of-ranges)\n"
"  \"funciones de SORTED-LENGTHS en cada rango TOP-OF-RANGES.\"\n"
"  (let ((top-of-range (car top-of-ranges))\n"
"        (number-within-range 0)\n"
"        defuns-per-range-list)\n"

#. type: group
#: emacs-lisp-intro.texi:16018
#, no-wrap
msgid ""
"    ;; @r{Outer loop.}\n"
"    (while top-of-ranges\n"
msgstr ""
"    ;; @r{Bucle Exterior.}\n"
"    (while top-of-ranges\n"

#. type: group
#: emacs-lisp-intro.texi:16026
#, no-wrap
msgid ""
"      ;; @r{Inner loop.}\n"
"      (while (and\n"
"              ;; @r{Need number for numeric test.}\n"
"              (car sorted-lengths)\n"
"              (< (car sorted-lengths) top-of-range))\n"
msgstr ""
"      ;; @r{Bucle Interno.}\n"
"      (while (and\n"
"              ;; @r{Necesita el n@'umero para el test num@'erico.}\n"
"              (car sorted-lengths)\n"
"              (< (car sorted-lengths) top-of-range))\n"

#. type: group
#: emacs-lisp-intro.texi:16032
#, no-wrap
msgid ""
"        ;; @r{Count number of definitions within current range.}\n"
"        (setq number-within-range (1+ number-within-range))\n"
"        (setq sorted-lengths (cdr sorted-lengths)))\n"
"\n"
msgstr ""
"        ;; @r{Contar n@'umero de definiciones con el rango actual.}\n"
"        (setq number-within-range (1+ number-within-range))\n"
"        (setq sorted-lengths (cdr sorted-lengths)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:16034
#, no-wrap
msgid "      ;; @r{Exit inner loop but remain within outer loop.}\n"
msgstr "      ;; @r{Sal del bucle interno pero permanece con el bucle externo.}\n"

#. type: group
#: emacs-lisp-intro.texi:16040
#, no-wrap
msgid ""
"      (setq defuns-per-range-list\n"
"            (cons number-within-range defuns-per-range-list))\n"
"      (setq number-within-range 0)      ; @r{Reset count to zero.}\n"
msgstr ""
"      (setq defuns-per-range-list\n"
"            (cons number-within-range defuns-per-range-list))\n"
"      (setq number-within-range 0)      ; @r{Resetear el contaje a cero.}\n"

#. type: group
#: emacs-lisp-intro.texi:16047 emacs-lisp-intro.texi:21539
#, no-wrap
msgid ""
"      ;; @r{Move to next range.}\n"
"      (setq top-of-ranges (cdr top-of-ranges))\n"
"      ;; @r{Specify next top of range value.}\n"
"      (setq top-of-range (car top-of-ranges)))\n"
msgstr ""
"      ;; @r{Mover al siguiente rango.}\n"
"      (setq top-of-ranges (cdr top-of-ranges))\n"
"      ;; @r{Especifica el siguiente mejor rango de valores.}\n"
"      (setq top-of-range (car top-of-ranges)))\n"

#. type: group
#: emacs-lisp-intro.texi:16056
#, no-wrap
msgid ""
"    ;; @r{Exit outer loop and count the number of defuns larger than}\n"
"    ;; @r{  the largest top-of-range value.}\n"
"    (setq defuns-per-range-list\n"
"          (cons\n"
"           (length sorted-lengths)\n"
"           defuns-per-range-list))\n"
msgstr ""
"    ;; @r{Salir del bucle externo y contar el n@'umero de defuns m@'as\n"
"    ;; largas que}\n"
"    ;; @r{el valor m@'as largo del valor top-of-range.}\n"
"    (setq defuns-per-range-list\n"
"          (cons\n"
"           (length sorted-lengths)\n"
"           defuns-per-range-list))\n"

#. type: group
#: emacs-lisp-intro.texi:16062 emacs-lisp-intro.texi:21552
#, no-wrap
msgid ""
"    ;; @r{Return a list of the number of definitions within each range,}\n"
"    ;; @r{  smallest to largest.}\n"
"    (nreverse defuns-per-range-list)))\n"
msgstr ""
"    ;; @r{Devuelve una lista del n@'umero de definiciones con cada rango,}\n"
"    ;; @r{ del m@'as peque@~no al m@'as largo.}\n"
"    (nreverse defuns-per-range-list)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16069
msgid ""
"The function is straightforward except for one subtle feature.  The true-or-"
"false test of the inner loop looks like this:"
msgstr ""
"La funci@'on es simple excepto para una peque@~na funcionalidad. El\n"
"test verdadero-o-falso para el bucle interno se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:16074
#, no-wrap
msgid ""
"(and (car sorted-lengths)\n"
"     (< (car sorted-lengths) top-of-range))\n"
msgstr ""
"(and (car sorted-lengths)\n"
"     (< (car sorted-lengths) top-of-range))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16080
msgid "instead of like this:"
msgstr "en vez de algo como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:16083
#, no-wrap
msgid "(< (car sorted-lengths) top-of-range)\n"
msgstr "(< (car sorted-lengths) top-of-range)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16088
msgid ""
"The purpose of the test is to determine whether the first item in the "
"@code{sorted-lengths} list is less than the value of the top of the range."
msgstr ""
"El prop@'osito del test es determinar si el primer @'{@dotless{i}}tem\n"
"en la lista @code{sorted-lengths} es menor que el valor de lo mejor\n"
"del rango."

#. type: Plain text
#: emacs-lisp-intro.texi:16095
msgid ""
"The simple version of the test works fine unless the @code{sorted-lengths} "
"list has a @code{nil} value.  In that case, the @code{(car sorted-lengths)} "
"expression function returns @code{nil}.  The @code{<} function cannot "
"compare a number to @code{nil}, which is an empty list, so Emacs signals an "
"error and stops the function from attempting to continue to execute."
msgstr ""
"La versi@'on simple del test trabaja bien a menos que la lista\n"
"@code{sorted-lengths} tiene un valor @code{nil}. En este caso, la\n"
"expresi@'on @code{(car sorted-lengths)} devuelve @code{nil}. La\n"
"funci@'on @code{<} no se puede compara un n@'umero a @code{nil}, que\n"
"es una lista vac@'{@dotless{i}}a, as@'{@dotless{i}} Emacs se@~nala un\n"
"error y para la funci@'on desde el intento de continuar la ejecuci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:16100
msgid ""
"The @code{sorted-lengths} list always becomes @code{nil} when the counter "
"reaches the end of the list.  This means that any attempt to use the "
"@code{defuns-per-range} function with the simple version of the test will "
"fail."
msgstr ""
"La lista @code{sorted-lengths} siempre llega a ser @code{nil} cuando\n"
"el contador logra el fin de la lista. Esto significa que cualquier\n"
"intento de usar la funci@'on @code{defuns-per-range} con la versi@'on\n"
"simple del test fallar@'a."

#. type: Plain text
#: emacs-lisp-intro.texi:16112
msgid ""
"We solve the problem by using the @code{(car sorted-lengths)} expression in "
"conjunction with the @code{and} expression.  The @code{(car sorted-lengths)} "
"expression returns a non-@code{nil} value so long as the list has at least "
"one number within it, but returns @code{nil} if the list is empty.  The "
"@code{and} expression first evaluates the @code{(car sorted-lengths)} "
"expression, and if it is @code{nil}, returns false @emph{without} evaluating "
"the @code{<} expression.  But if the @code{(car sorted-lengths)} expression "
"returns a non-@code{nil} value, the @code{and} expression evaluates the "
"@code{<} expression, and returns that value as the value of the @code{and} "
"expression."
msgstr ""
"Se resuelve el problema usando @code{(car sorted-lengths)} en\n"
"conjunci@'on con la expresi@'on @code{and}. La expresi@'on @code{(car\n"
"sorted-lengths)} devuelve un valor no @code{nil} tan largo como la\n"
"lista que tiene al menos un n@'umero con eso, pero devuelve @code{nil}\n"
"si la lista est@'a vac@'{@dotless{i}}a. La expresi@'on @code{and}\n"
"primero eval@'ua el @code{(car sorted-lengths)}, y si eso es\n"
"@code{nil}, devuelve falso @emph{sin} evaluar la expresi@'on @code{<}\n"
" y devuelve este valor como el valor de la expresi@'on @code{and}."

#. type: Plain text
#: emacs-lisp-intro.texi:16115
msgid "This way, we avoid an error."
msgstr "Este camino, evita un error."

#. type: Plain text
#: emacs-lisp-intro.texi:16131
msgid ""
"Here is a short test of the @code{defuns-per-range} function.  First, "
"evaluate the expression that binds (a shortened)  @code{top-of-ranges} list "
"to the list of values, then evaluate the expression for binding the "
"@code{sorted-lengths} list, and then evaluate the @code{defuns-per-range} "
"function."
msgstr ""
"Aqu@'{@dotless{i}} hay un peque@~no test de la funci@'on\n"
"@code{defuns-per-range}. Primero, eval@'ua la expresi@'on que ajusta\n"
"(una resumida) lista @code{top-of-ranges} a la lista de valores,\n"
"entonces eval@'ua la expresi@'on para ajustar la lista\n"
"@code{sorted-lengths}, y entonces eval@'ua la funci@'on\n"
"@code{defuns-per-range}."

#. type: group
#: emacs-lisp-intro.texi:16138
#, no-wrap
msgid ""
";; @r{(Shorter list than we will use later.)}\n"
"(setq top-of-ranges\n"
" '(110 120 130 140 150\n"
"   160 170 180 190 200))\n"
"\n"
msgstr ""
";; @r{(La lista ordenada que usar@'a despu@'es.)}\n"
"(setq top-of-ranges\n"
" '(110 120 130 140 150\n"
"   160 170 180 190 200))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:16141
#, no-wrap
msgid ""
"(setq sorted-lengths\n"
"      '(85 86 110 116 122 129 154 176 179 200 265 300 300))\n"
"\n"
msgstr ""
"(setq sorted-lengths\n"
"      '(85 86 110 116 122 129 154 176 179 200 265 300 300))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:16143
#, no-wrap
msgid "(defuns-per-range sorted-lengths top-of-ranges)\n"
msgstr "(defuns-per-range sorted-lengths top-of-ranges)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16149
msgid "The list returned looks like this:"
msgstr "La lista devuelta se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:16152
#, no-wrap
msgid "(2 2 2 0 0 1 0 2 0 0 4)\n"
msgstr "(2 2 2 0 0 1 0 2 0 0 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16159
msgid ""
"Indeed, there are two elements of the @code{sorted-lengths} list smaller "
"than 110, two elements between 110 and 119, two elements between 120 and "
"129, and so on.  There are four elements with a value of 200 or larger."
msgstr ""
"Dentro, hay dos elementos de la lista @code{sorted-lengths} menores de\n"
"110, dos elementos entre 110 y 119, dos elementos entre 120 y 129 y\n"
"as@'{@dotless{i}}. Hay cuatro elementos con un valor de 200 o superior."

#. type: cindex
#: emacs-lisp-intro.texi:16163
#, no-wrap
msgid "Readying a graph"
msgstr "Leyendo un grafo"

#. type: cindex
#: emacs-lisp-intro.texi:16164
#, no-wrap
msgid "Graph prototype"
msgstr "Grafo prototipo"

#. type: cindex
#: emacs-lisp-intro.texi:16165
#, no-wrap
msgid "Prototype graph"
msgstr "Prototipo de grafo"

#. type: cindex
#: emacs-lisp-intro.texi:16166
#, no-wrap
msgid "Body of graph"
msgstr "Cuerpo de grafo"

#. type: Plain text
#: emacs-lisp-intro.texi:16170
msgid ""
"Our goal is to construct a graph showing the numbers of function definitions "
"of various lengths in the Emacs lisp sources."
msgstr ""
"Nuestro objetivo es construir un grafo mostrando los n@'umeros de\n"
"definiciones de funci@'on de varios tama@~nos en las fuentes de Emacs lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:16177
msgid ""
"As a practical matter, if you were creating a graph, you would probably use "
"a program such as @code{gnuplot} to do the job.  (@code{gnuplot} is nicely "
"integrated into GNU Emacs.)  In this case, however, we create one from "
"scratch, and in the process we will re-acquaint ourselves with some of what "
"we learned before and learn more."
msgstr ""
"Como una materia pr@'actica, si se estuviese creando un grafo,\n"
"probablemente usar@'{@dotless{i}}as un programa tal como\n"
"@code{gnuplot} para hacer el trabajo. (@code{gnuplot} est@'a bien\n"
"integrado dentro de GNU Emacs.) En este caso, sin embargo, creamos uno\n"
"desde cero, y en el proceso lo reconstruimos nosotros mismos con algo de\n"
"lo que se aprende antes y as@'{@dotless{i}} poder aprender m@'as."

#. type: Plain text
#: emacs-lisp-intro.texi:16184
msgid ""
"In this chapter, we will first write a simple graph printing function.  This "
"first definition will be a @dfn{prototype}, a rapidly written function that "
"enables us to reconnoiter this unknown graph-making territory.  We will "
"discover dragons, or find that they are myth.  After scouting the terrain, "
"we will feel more confident and enhance the function to label the axes "
"automatically."
msgstr ""
"En este cap@'{@dotless{i}}tulo, primero se escribe un grafo simple\n"
"imprimiendo la funci@'on. Esta primera definici@'on ser@'a un\n"
"@dfn{prototipo}, una funci@'on escrita r@'apidamente nos permite\n"
"reconocer este territorio de crear un grafo. Se descubren dragones, o\n"
"resulta que son mitos. Despu@'es de olisquear el terreno, nos\n"
"sentiremos m@'as confidentes y mejoraremos la funci@'on para etiquetar\n"
"las coordenadas autom@'aticamente."

#. type: node
#: emacs-lisp-intro.texi:16194
#, no-wrap
msgid "Columns of a graph"
msgstr "Columnas de un grafo"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:16195
#, no-wrap
msgid "Printing the Columns of a Graph"
msgstr "Imprimiendo las columnas de un grafo"

#. type: Plain text
#: emacs-lisp-intro.texi:16203
msgid ""
"Since Emacs is designed to be flexible and work with all kinds of terminals, "
"including character-only terminals, the graph will need to be made from one "
"of the `typewriter' symbols.  An asterisk will do; as we enhance the graph-"
"printing function, we can make the choice of symbol a user option."
msgstr ""
"Puesto que Emacs est@'a dise@~nado para ser flexible y trabajar con\n"
"todo tipo de terminales, incluyendo los terminales de caracteres, el\n"
"grafo necesitar@'a ser hecho desde s@'{@dotless{i}}mbolos de\n"
"`escritura'. Un asterisco har@'a; como nosotros mejoramos la funci@'on\n"
"de impresi@'on del grafo, se puede crear la elecci@'on del\n"
"s@'{@dotless{i}}mbolo como una opci@'on de usuario."

#. type: Plain text
#: emacs-lisp-intro.texi:16207
msgid ""
"We can call this function @code{graph-body-print}; it will take a "
"@code{numbers-list} as its only argument.  At this stage, we will not label "
"the graph, but only print its body."
msgstr ""
"Se puede llamar a esta funci@'on @code{graph-body-print}; se tomar@'a\n"
"un @code{numbers-list} como su @'unico argumento. En esta fase, no se\n"
"etiquetar@'a el grafo, pero se imprime su cuerpo."

#. type: Plain text
#: emacs-lisp-intro.texi:16212
msgid ""
"The @code{graph-body-print} function inserts a vertical column of asterisks "
"for each element in the @code{numbers-list}.  The height of each line is "
"determined by the value of that element of the @code{numbers-list}."
msgstr ""
"La funci@'on @code{graph-body-print} inserta una columna vertical de\n"
"asteriscos para cada elemento en la lista @code{numbers-list}. La\n"
"altura de cada l@'{@dotless{i}}nea est@'a determinada por el valor de\n"
"este elemento de la @code{numbers-list}."

#. type: Plain text
#: emacs-lisp-intro.texi:16215
msgid ""
"Inserting columns is a repetitive act; that means that this function can be "
"written either with a @code{while} loop or recursively."
msgstr ""
"Insertar columnas es un acto repetitivo; que significa que esta\n"
"funci@'on debe ser escrita con un bucle @code{while} o\n"
"recursivamente."

#. type: Plain text
#: emacs-lisp-intro.texi:16220
msgid ""
"Our first challenge is to discover how to print a column of asterisks.  "
"Usually, in Emacs, we print characters onto a screen horizontally, line by "
"line, by typing.  We have two routes we can follow: write our own column-"
"insertion function or discover whether one exists in Emacs."
msgstr ""
"Nuestro primer reto es descubrir como imprimir una columna de\n"
"asteriscos. Normalmente, en Emacs, se imprimen caracteres dentro de\n"
"una pantalla horizontalmente, l@'{@dotless{i}}nea a\n"
"l@'{@dotless{i}}nea, escribiendo. Se tienen dos rutas que se pueden\n"
"seguir: escribir nuestra funci@'on column-insertion o descubrir si una\n"
"que exista en Emacs."

#. type: Plain text
#: emacs-lisp-intro.texi:16226
msgid ""
"To see whether there is one in Emacs, we can use the @kbd{M-x apropos} "
"command.  This command is like the @kbd{C-h a} (@code{command-apropos})  "
"command, except that the latter finds only those functions that are "
"commands.  The @kbd{M-x apropos} command lists all symbols that match a "
"regular expression, including functions that are not interactive."
msgstr ""
"Para ver si hay uno en Emacs, se puede usar el comando @kbd{M-x\n"
"apropos}. Este comando es como el comando @kbd{C-h a}\n"
"(@code{command-apropos}), excepto que @'ultimo encuentra solo estas\n"
"funciones que son comandos. El comando @kbd{M-x apropos} lista todos\n"
"los s@'{@dotless{i}}mbolos que se asocian a una expresi@'on regular,\n"
"incluyendo funciones que no son interactivas."

#. type: findex
#: emacs-lisp-intro.texi:16226
#, no-wrap
msgid "apropos"
msgstr "apropos"

#. type: Plain text
#: emacs-lisp-intro.texi:16238
msgid ""
"What we want to look for is some command that prints or inserts columns.  "
"Very likely, the name of the function will contain either the word `print' "
"or the word `insert' or the word `column'.  Therefore, we can simply type "
"@kbd{M-x apropos RET print\\|insert\\|column RET} and look at the result.  "
"On my system, this command once too takes quite some time, and then produced "
"a list of 79 functions and variables.  Now it does not take much time at all "
"and produces a list of 211 functions and variables.  Scanning down the list, "
"the only function that looks as if it might do the job is @code{insert-"
"rectangle}."
msgstr ""
"Lo que se quiere buscar es alg@'un comando que imprima o inserte\n"
"columnas. Muy probablemente, el nombre de la funci@'on contendr@'a la\n"
"palabra `print' o la palabra `insert' o la palabra `column'. Por esta\n"
"raz@'on, podemos simplemente escribir @kbd{M-x apropos RET print\n"
"\\|insert\\|column RET} y se ve el resultado. En mi sistema, este comando\n"
"toma todav@'{@dotless{i}}a alg@'un tiempo, y entonces se produce una\n"
"lista de 79 funciones y variables. Ahora no se tarda mucho y se\n"
"produce una lista de 211 funciones y variables. Escaneando la lista,\n"
"la @'unica funci@'on que se ve como si se pudiera hacer el trabajo que\n"
"es @code{insert-rectangle}."

#. type: Plain text
#: emacs-lisp-intro.texi:16241
msgid "Indeed, this is the function we want; its documentation says:"
msgstr ""
"En realidad, esta es la funci@'on que queremos; su documentaci@'on dice:"

#. type: group
#: emacs-lisp-intro.texi:16251
#, no-wrap
msgid ""
"insert-rectangle:\n"
"Insert text of RECTANGLE with upper left corner at point.\n"
"RECTANGLE's first line is inserted at point,\n"
"its second line is inserted at a point vertically under point, etc.\n"
"RECTANGLE should be a list of strings.\n"
"After this command, the mark is at the upper left corner\n"
"and point is at the lower right corner.\n"
msgstr ""
"insert-rectangle:\n"
"Insertar texto de RECTANGLE con la esquina izquierda a punto\n"
"La primera l@'{@dotless{i}}nea de RECTANGLE es insertada al punto\n"
"su segunda l@'{@dotless{i}}nea es insertada a un punto verticalmente\n"
"bajo el punto, etc.\n"
"El RECTANGLE deber@'{@dotless{i}}a ser una lista de cadenas.\n"
"Despu@'es de este comando, la marca est@'a en la esquina izquierda\n"
"superior y el punto en la esquina derecha inferior.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16255
msgid "We can run a quick test, to make sure it does what we expect of it."
msgstr ""
"Se puede ejecutar un test r@'apido, para asegurar que hace lo que se\n"
"espera de eso."

#. type: Plain text
#: emacs-lisp-intro.texi:16261
msgid ""
"Here is the result of placing the cursor after the @code{insert-rectangle} "
"expression and typing @kbd{C-u C-x C-e} (@code{eval-last-sexp}).  The "
"function inserts the strings @samp{\"first\"}, @samp{\"second\"}, and "
"@samp{\"third\"} at and below point.  Also the function returns @code{nil}."
msgstr ""
"Aqu@'{@dotless{i}} est@'a el resultado de emplazar el cursor despu@'es\n"
"de la expresi@'on @code{insert-rectangle} y escribiendo @kbd{C-u C-x\n"
"C-e} (@code{eval-last-sexp}). La funci@'on inserta las cadenas\n"
"@samp{\"primero\"}, @samp{\"segundo\"}, y @samp{\"tercero\"} en el\n"
"punto. Tambi@'en la funci@'on devuelve @code{nil}."

#. type: group
#: emacs-lisp-intro.texi:16267
#, no-wrap
msgid ""
"(insert-rectangle '(\"first\" \"second\" \"third\"))first\n"
"                                              second\n"
"                                              thirdnil\n"
msgstr ""
"(insert-rectangle '(\"primero\" \"segundo\" \"tercer\"))primero\n"
"                                              segundo\n"
"                                              terceronil\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16277
msgid ""
"Of course, we won't be inserting the text of the @code{insert-rectangle} "
"expression itself into the buffer in which we are making the graph, but will "
"call the function from our program.  We shall, however, have to make sure "
"that point is in the buffer at the place where the @code{insert-rectangle} "
"function will insert its column of strings."
msgstr ""
"De acuerdo, no se inserta el texto de la expresi@'on\n"
"@code{insert-rectangle} en s@'{@dotless{i}} dentro del b@'uffer en el\n"
"que se marca el grafo, pero se llamar@'a la funci@'on de nuestro\n"
"programa. Nosotros, sin embargo, tenemos que asegurar que el punto\n"
"est@'a en el b@'uffer en el lugar donde la funci@'on\n"
"@code{insert-rectangle} insertar@'a la columna de cadenas."

#. type: Plain text
#: emacs-lisp-intro.texi:16288
msgid ""
"If you are reading this in Info, you can see how this works by switching to "
"another buffer, such as the @file{*scratch*} buffer, placing point somewhere "
"in the buffer, typing @kbd{M-:}, typing the @code{insert-rectangle} "
"expression into the minibuffer at the prompt, and then typing @key{RET}.  "
"This causes Emacs to evaluate the expression in the minibuffer, but to use "
"as the value of point the position of point in the @file{*scratch*} buffer.  "
"(@kbd{M-:} is the keybinding for @code{eval-expression}. Also, @code{nil} "
"does not appear in the @file{*scratch*} buffer since the expression is "
"evaluated in the minibuffer.)"
msgstr ""
"Si se est@'a leyendo esto en Info, se puede ver como este trabajo\n"
"cambia a otro b@'uffer, tal como el b@'uffer @file{*scratch*},\n"
"emplazando el punto a alg@'un lugar en el b@'uffer, se escribe\n"
"@kbd{M-:}, despu@'es se escribe la expresi@'on @code{insert-rectangle}\n"
"dentro del minib@'uffer en la consola, y entonces se escribe\n"
"@key{RET}. Esto causa que Emacs eval@'ue la expresi@'on en el\n"
"minib@'uffer, pero usa como el valor del punto la posici@'on del punto\n"
"en el b@'uffer @file{*scratch*}. (@kbd{M-:} es el atajo para\n"
"@code{eval-expression}. @code{nil} tampoco aparece en el b@'uffer\n"
"@file{*scratch*} desde que la expresi@'on se eval@'ua en el\n"
"minib@'uffer.)"

#. type: Plain text
#: emacs-lisp-intro.texi:16295
msgid ""
"We find when we do this that point ends up at the end of the last inserted "
"line---that is to say, this function moves point as a side-effect.  If we "
"were to repeat the command, with point at this position, the next insertion "
"would be below and to the right of the previous insertion.  We don't want "
"this! If we are going to make a bar graph, the columns need to be beside "
"each other."
msgstr ""
"Se encuentra cuando hacer esto hasta el punto que finaliza al fin de\n"
"la @'ultima l@'{@dotless{i}}nea insertada --- es decir, esta funci@'on\n"
"mueve el punto como un efecto lateral. Si se iba a repetir el comando,\n"
"con el punto en esta posici@'on, la siguiente inserci@'on\n"
"ser@'{@dotless{i}}a debajo y a la derecha de la inserci@'on\n"
"previa. @exclamdown{}Nosotros no queremos esto!. Si se est@'a yendo a\n"
"crear un gr@'afico de barras, las columnas necesitan estar debajo unas\n"
"de otras."

#. type: Plain text
#: emacs-lisp-intro.texi:16304
msgid ""
"So we discover that each cycle of the column-inserting @code{while} loop "
"must reposition point to the place we want it, and that place will be at the "
"top, not the bottom, of the column.  Moreover, we remember that when we "
"print a graph, we do not expect all the columns to be the same height.  This "
"means that the top of each column may be at a different height from the "
"previous one.  We cannot simply reposition point to the same line each time, "
"but moved over to the right---or perhaps we can@dots{}"
msgstr ""
"As@'{@dotless{i}} se descubre que cada ciclo del bucle @code{while}\n"
"de column-inserting debe reposicionar el punto al lugar que queremos,\n"
"y este lugar estar@'a arriba, no abajo, de la columna. M@'as all@'a,\n"
"se recuerda que cuando se imprime un grafo, no esperan todas las\n"
"columnas para estar a la misma altura. Esto significa que el alto de\n"
"cada columna puede estar a una altura diferente desde una\n"
"previa. Nosotros simplemente reposicionamos el punto a la misma\n"
"l@'{@dotless{i}}nea cada vez, pero movido cubriendo a la derecha --- o\n"
"quiz@'as se puede @dots{}"

#. type: Plain text
#: emacs-lisp-intro.texi:16313
msgid ""
"We are planning to make the columns of the bar graph out of asterisks.  The "
"number of asterisks in the column is the number specified by the current "
"element of the @code{numbers-list}.  We need to construct a list of "
"asterisks of the right length for each call to @code{insert-rectangle}.  If "
"this list consists solely of the requisite number of asterisks, then we will "
"have position point the right number of lines above the base for the graph "
"to print correctly.  This could be difficult."
msgstr ""
"Estamos planeando crear las columnas de la barra gr@'afica sin\n"
"asteriscos. El n@'umero de asteriscos en la columna es el n@'umero\n"
"espec@'{@dotless{i}}fico por el elemento actual del\n"
"@code{numbers-list}. Necesitamos construir una lista de asteriscos del\n"
"tama@~no derecho para cada llamada a @code{insert-rectangle}. Si esta\n"
"lista consiste @'unicamente del n@'umero requerido de asteriscos,\n"
"entonces tendremos la posici@'on de punto el n@'umero correcto de\n"
"l@'{@dotless{i}}neas bajo la base del gr@'afico para imprimirse\n"
"correctamente. Esto podr@'{@dotless{i}}a ser dif@'{@dotless{i}}cil."

#. type: Plain text
#: emacs-lisp-intro.texi:16322
msgid ""
"Alternatively, if we can figure out some way to pass @code{insert-rectangle} "
"a list of the same length each time, then we can place point on the same "
"line each time, but move it over one column to the right for each new "
"column.  If we do this, however, some of the entries in the list passed to "
"@code{insert-rectangle} must be blanks rather than asterisks.  For example, "
"if the maximum height of the graph is 5, but the height of the column is 3, "
"then @code{insert-rectangle} requires an argument that looks like this:"
msgstr ""
"Alternativamente, si podemos figurarnos alg@'un camino para pasar\n"
"@code{insert-rectangle} del mismo tama@~no cada vez, entonces podemos\n"
"posicionar el punto en la misma l@'{@dotless{i}}nea cada vez, pero se\n"
"mueve a trav@'es de una columna a la derecha por cada nueva\n"
"columna. Si hacemos esto, sin embargo, alguna de las entradas en la\n"
"lista pasaba a @code{insert-rectangle} y deben ser espacios en blanco\n"
"en vez de asteriscos. Por ejemplo, si la altura m@'axima del grafo es\n"
"5, pero la altura de la columna es 3, entonces @code{insert-rectangle}\n"
"requiere un argumento que se parezca a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:16325 emacs-lisp-intro.texi:16469
#, no-wrap
msgid "(\" \" \" \" \"*\" \"*\" \"*\")\n"
msgstr "(\" \" \" \" \"*\" \"*\" \"*\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16338
msgid ""
"This last proposal is not so difficult, so long as we can determine the "
"column height.  There are two ways for us to specify the column height: we "
"can arbitrarily state what it will be, which would work fine for graphs of "
"that height; or we can search through the list of numbers and use the "
"maximum height of the list as the maximum height of the graph.  If the "
"latter operation were difficult, then the former procedure would be easiest, "
"but there is a function built into Emacs that determines the maximum of its "
"arguments.  We can use that function.  The function is called @code{max} and "
"it returns the largest of all its arguments, which must be numbers.  Thus, "
"for example,"
msgstr ""
"Esta @'ultima propuesta no es tan dif@'{@dotless{i}}cil, de hecho se\n"
"puede determinar la altura de la columna. Hay dos caminos para\n"
"nosotros especificar la altura de la columna: se puede arbitrariamente\n"
"situar lo que ser@'a, lo que funcionar@'{@dotless{i}}a bien para\n"
"gr@'aficas de esta altura; o podemos buscar a trav@'es de la lista de\n"
"n@'umeros y usar la altura m@'axima de la lista como la altura\n"
"m@'axima del grafo. Si la @'ultima operaci@'on fuera\n"
"dif@'{@dotless{i}}cil, entonces el procedimiento formal\n"
"ser@'{@dotless{i}}a f@'acil, pero hay una funci@'on construida en\n"
"Emacs para determinar el m@'aximo de sus argumentos. Se puede usar\n"
"esta funci@'on. La funci@'on se llamaba @code{max} y eso devuelve el\n"
"mayor de sus argumentos, que deben ser n@'umeros. De este modo, por\n"
"ejemplo,"

#. type: smallexample
#: emacs-lisp-intro.texi:16341
#, no-wrap
msgid "(max  3 4 6 5 7 3)\n"
msgstr "(max  3 4 6 5 7 3)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16346
msgid ""
"returns 7.  (A corresponding function called @code{min} returns the smallest "
"of all its arguments.)"
msgstr ""
"devuelve 7. (Una funci@'on correspondiente llamada @code{min} devuelve\n"
"lo m@'as peque@~no de todos sus argumentos.)"

#. type: findex
#: emacs-lisp-intro.texi:16346
#, no-wrap
msgid "max"
msgstr "max"

#. type: findex
#: emacs-lisp-intro.texi:16347
#, no-wrap
msgid "min"
msgstr "min"

#. type: Plain text
#: emacs-lisp-intro.texi:16352
msgid ""
"However, we cannot simply call @code{max} on the @code{numbers-list}; the "
"@code{max} function expects numbers as its argument, not a list of numbers.  "
"Thus, the following expression,"
msgstr ""
"Sin embargo, no podemos simplemente llama a @code{max} en el\n"
"@code{numbers-list}; la funci@'on @code{max} espera n@'umeros como sus\n"
"argumentos, no una lista de n@'umeros. De este modo, la siguiente "
"expresi@'on,"

#. type: smallexample
#: emacs-lisp-intro.texi:16355
#, no-wrap
msgid "(max  '(3 4 6 5 7 3))\n"
msgstr "(max  '(3 4 6 5 7 3))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16360
msgid "produces the following error message;"
msgstr "produce el siguiente mensaje error;"

#. type: smallexample
#: emacs-lisp-intro.texi:16363
#, no-wrap
msgid "Wrong type of argument:  number-or-marker-p, (3 4 6 5 7 3)\n"
msgstr "Mal tipo de argumento: number-or-marker-p, (3 4 6 5 7 3)\n"

#. type: findex
#: emacs-lisp-intro.texi:16365
#, no-wrap
msgid "apply"
msgstr "apply"

#. type: Plain text
#: emacs-lisp-intro.texi:16370
msgid ""
"We need a function that passes a list of arguments to a function.  This "
"function is @code{apply}.  This function `applies' its first argument (a "
"function) to its remaining arguments, the last of which may be a list."
msgstr ""
"Se necesita una funci@'on que pasa una lista de argumentos a una\n"
"funci@'on. Esta funci@'on es @code{apply}. Esta funci@'on `aplica' su\n"
"primer argumento (una funci@'on) para los argumentos que permanecen,\n"
"el @'ultimo puede ser una lista."

#. type: smallexample
#: emacs-lisp-intro.texi:16376
#, no-wrap
msgid "(apply 'max 3 4 7 3 '(4 8 5))\n"
msgstr "(apply 'max 3 4 7 3 '(4 8 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16380
msgid "returns 8."
msgstr "devuelve 8"

#. type: Plain text
#: emacs-lisp-intro.texi:16390
msgid ""
"(Incidentally, I don't know how you would learn of this function without a "
"book such as this.  It is possible to discover other functions, like "
"@code{search-forward} or @code{insert-rectangle}, by guessing at a part of "
"their names and then using @code{apropos}.  Even though its base in metaphor "
"is clear---`apply' its first argument to the rest---I doubt a novice would "
"come up with that particular word when using @code{apropos} or other aid.  "
"Of course, I could be wrong; after all, the function was first named by "
"someone who had to invent it.)"
msgstr ""
"(Incidentalmente, yo no sabr@'{@dotless{i}}a c@'omo aprender acerca de\n"
"esta funci@'on sin un libro tal como este. Eso es posible descubrir\n"
"otras funciones, como @code{search-forward} o @code{insert-rectangle},\n"
"adivinando una parte de sus nombres y entonces usando\n"
"@code{apropos}. Incluso aunque su base metaf@'orica es clara ---\n"
"`apply' su primer argumento al resto --- dudo que un novicio\n"
"vendr@'{@dotless{i}}a con esta palabra particular usando\n"
"@code{apropos} u otra ayuda. De acuerdo, podr@'{@dotless{i}}a ser\n"
"incorrecto; despu@'es de todo, la funci@'on fu@'e primero llamada por\n"
"alguien quien lo hab@'{@dotless{i}}a inventado."

#. type: Plain text
#: emacs-lisp-intro.texi:16394
msgid ""
"The second and subsequent arguments to @code{apply} are optional, so we can "
"use @code{apply} to call a function and pass the elements of a list to it, "
"like this, which also returns 8:"
msgstr ""
"El segundo y subsiguientes argumentos para @code{apply} son\n"
"opcionales, as@'{@dotless{i}} se puede usar @code{apply} para llamar a\n"
"una funci@'on y pasan los elementos de una lista, como este, que\n"
"tambi@'en devuelve 8:"

#. type: smallexample
#: emacs-lisp-intro.texi:16397
#, no-wrap
msgid "(apply 'max '(4 8 5))\n"
msgstr "(apply 'max '(4 8 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16404
msgid ""
"This latter way is how we will use @code{apply}.  The @code{recursive-"
"lengths-list-many-files} function returns a numbers' list to which we can "
"apply @code{max} (we could also apply @code{max} to the sorted numbers' "
"list; it does not matter whether the list is sorted or not.)"
msgstr ""
"Este camino tard@'{@dotless{i}}o usar@'a @code{apply}. La funci@'on\n"
"@code{recursive-lengths-list-many-files} devuelve una lista de\n"
"n@'umeros que se puede aplicar a @code{max} (se podr@'{@dotless{i}}a\n"
"tambi@'en aplicar @emph{(hacer apply)} a la lista de n@'umeros\n"
"ordenados; eso no importa si la lista est@'a o no)."

#. type: Plain text
#: emacs-lisp-intro.texi:16407
msgid ""
"Hence, the operation for finding the maximum height of the graph is this:"
msgstr ""
"Aqu@'{@dotless{i}}, la operaci@'on para encontrar el tama@~no m@'aximo\n"
"del grafo es este:"

#. type: smallexample
#: emacs-lisp-intro.texi:16410
#, no-wrap
msgid "(setq max-graph-height (apply 'max numbers-list))\n"
msgstr "(setq max-graph-height (apply 'max numbers-list))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16417
msgid ""
"Now we can return to the question of how to create a list of strings for a "
"column of the graph.  Told the maximum height of the graph and the number of "
"asterisks that should appear in the column, the function should return a "
"list of strings for the @code{insert-rectangle} command to insert."
msgstr ""
"Ahora se puede devolver la pregunta de como crear una lista de cadenas\n"
"para una columna del grafo. Cuenta la m@'axima altura del grafo y el\n"
"n@'umero de asteriscos que aparecer@'{@dotless{i}}an en la columna, la\n"
"funci@'on devolver@'a una lista de cadenas para el comando a insertar\n"
"@code{insert-rectangle}."

#. type: Plain text
#: emacs-lisp-intro.texi:16424
msgid ""
"Each column is made up of asterisks or blanks.  Since the function is passed "
"the value of the height of the column and the number of asterisks in the "
"column, the number of blanks can be found by subtracting the number of "
"asterisks from the height of the column.  Given the number of blanks and the "
"number of asterisks, two @code{while} loops can be used to construct the "
"list:"
msgstr ""
"Cada columna se realiza con asteriscos o espacios en blanco. Puesto que\n"
"la funci@'on pasa el valor del alto de la columna y el n@'umero de\n"
"asteriscos en el columna, el n@'umero de espacios en blanco puede ser\n"
"encontrado sustrayendo el n@'umero de asteriscos desde lo alto de la\n"
"columna. Dado el n@'umero de espacios en blanco y el n@'umero de\n"
"asteriscos, dos bucles @code{while} puede ser usado para construir la\n"
"lista:"

#. type: group
#: emacs-lisp-intro.texi:16433
#, no-wrap
msgid ""
";;; @r{First version.}\n"
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Return list of strings that is one column of a graph.\"\n"
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"
msgstr ""
";;; @r{Primera versi@'on.}\n"
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Devuelve la lista de cadenas que una columna de un grafo.\"\n"
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"

#. type: group
#: emacs-lisp-intro.texi:16440
#, no-wrap
msgid ""
"    ;; @r{Fill in asterisks.}\n"
"    (while (> actual-height 0)\n"
"      (setq insert-list (cons \"*\" insert-list))\n"
"      (setq actual-height (1- actual-height)))\n"
msgstr ""
"    ;; @r{Llenar asteriscos.}\n"
"    (while (> actual-height 0)\n"
"      (setq insert-list (cons \"*\" insert-list))\n"
"      (setq actual-height (1- actual-height)))\n"

#. type: group
#: emacs-lisp-intro.texi:16448
#, no-wrap
msgid ""
"    ;; @r{Fill in blanks.}\n"
"    (while (> number-of-top-blanks 0)\n"
"      (setq insert-list (cons \" \" insert-list))\n"
"      (setq number-of-top-blanks\n"
"            (1- number-of-top-blanks)))\n"
msgstr ""
"    ;; @r{Rellena espacios en blanco.}\n"
"    (while (> number-of-top-blanks 0)\n"
"      (setq insert-list (cons \" \" insert-list))\n"
"      (setq number-of-top-blanks\n"
"            (1- number-of-top-blanks)))\n"

#. type: group
#: emacs-lisp-intro.texi:16453 emacs-lisp-intro.texi:16542
#: emacs-lisp-intro.texi:21586
#, no-wrap
msgid ""
"    ;; @r{Return whole list.}\n"
"    insert-list))\n"
msgstr ""
"    ;; @r{Devuelve la lista completa.}\n"
"    insert-list))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16458
msgid ""
"If you install this function and then evaluate the following expression you "
"will see that it returns the list as desired:"
msgstr ""
"Si se instala esta funci@'on y entonces eval@'ua la siguiente\n"
"expresi@'on se ver@'a que devuelve la lista como se desea:"

#. type: smallexample
#: emacs-lisp-intro.texi:16461
#, no-wrap
msgid "(column-of-graph 5 3)\n"
msgstr "(column-of-graph 5 3)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16466
msgid "returns"
msgstr "devuelve"

#. type: Plain text
#: emacs-lisp-intro.texi:16484
msgid ""
"As written, @code{column-of-graph} contains a major flaw: the symbols used "
"for the blank and for the marked entries in the column are `hard-coded' as a "
"space and asterisk.  This is fine for a prototype, but you, or another user, "
"may wish to use other symbols.  For example, in testing the graph function, "
"you many want to use a period in place of the space, to make sure the point "
"is being repositioned properly each time the @code{insert-rectangle} "
"function is called; or you might want to substitute a @samp{+} sign or other "
"symbol for the asterisk.  You might even want to make a graph-column that is "
"more than one display column wide.  The program should be more flexible.  "
"The way to do that is to replace the blank and the asterisk with two "
"variables that we can call @code{graph-blank} and @code{graph-symbol} and "
"define those variables separately."
msgstr ""
"Como est@'a escrito, @code{column-of-graph} contiene una grieta mayor:\n"
"los s@'{@dotless{i}}mbolos usados para el espacio en blanco para las\n"
"entradas marcadas en la columna son `codificadas duras' como un\n"
"espacio y un asterisco. Esto est@'a bien para un prototipo, pero tu, u\n"
"otro usuario, puede desear usar otros s@'{@dotless{i}}mbolos. Por\n"
"ejemplo, chequeando la funci@'on grafo, tu quieres usar un periodo en\n"
"vez del espacio, asegura el punto que est@'a siendo reposicionando\n"
"apropiadamente cada vez que la funci@'on @code{insert-rectangle} se\n"
"llama; o se podr@'{@dotless{i}}a querer sustituir un signo @samp{+} u\n"
"otro s@'{@dotless{i}}mbolo para el asterisco. Se podr@'{@dotless{i}}a\n"
"incluso querer hacer un graph-column que es m@'as que un ancho de\n"
"columna. El programa deber@'{@dotless{i}}a ser m@'as flexible. El\n"
"camino para hacer esto es reemplazar el espacio en blanco y el\n"
"asterisco con dos variables que se puede llamar @code{graph-blank} y\n"
"@code{graph-symbol} y define estas variables separadamente."

#. type: Plain text
#: emacs-lisp-intro.texi:16487
msgid ""
"Also, the documentation is not well written.  These considerations lead us "
"to the second version of the function:"
msgstr ""
"Tambi@'en la documentaci@'on no est@'a escrita. Estas consideraciones\n"
"nos llevan tambi@'en a la segunda versi@'on de la funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:16492 emacs-lisp-intro.texi:21401
#, no-wrap
msgid ""
"(defvar graph-symbol \"*\"\n"
"  \"String used as symbol in graph, usually an asterisk.\")\n"
msgstr ""
"(defvar graph-symbol \"*\"\n"
"  \"Cadena usada como s@'{@dotless{i}}mbolo en grafo, normalmente un asterisco.\")\n"

#. type: group
#: emacs-lisp-intro.texi:16499 emacs-lisp-intro.texi:21408
#, no-wrap
msgid ""
"(defvar graph-blank \" \"\n"
"  \"String used as blank in graph, usually a blank space.\n"
"graph-blank must be the same number of columns wide\n"
"as graph-symbol.\")\n"
msgstr ""
"(defvar graph-blank \" \"\n"
"  \"La cadena como un espacio en blanco en grafo, normalmente un\n"
"  espacio en blanco.\n"
"graph-blank debe ser el mismo n@'umero de columnas amplio como graph-symbol.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16505
msgid ""
"(For an explanation of @code{defvar}, see @ref{defvar, , Initializing a "
"Variable with @code{defvar}}.)"
msgstr ""
"(Para una explicaci@'on de @code{defvar}, ver @ref{defvar, ,\n"
"Inicializando una Variable con @code{defvar}}.)"

#. type: group
#: emacs-lisp-intro.texi:16511
#, no-wrap
msgid ""
";;; @r{Second version.}\n"
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Return MAX-GRAPH-HEIGHT strings; ACTUAL-HEIGHT are graph-symbols.\n"
"\n"
msgstr ""
";;; @r{Segunda versi@'on.}\n"
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Devuelve cadenas MAX-GRAPH-HEIGHT; ACTUAL-HEIGHT son\n"
"  s@'{@dotless{i}}mbolos de grafos.\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:16518
#, no-wrap
msgid ""
"The graph-symbols are contiguous entries at the end\n"
"of the list.\n"
"The list will be inserted as one column of a graph.\n"
"The strings are either graph-blank or graph-symbol.\"\n"
msgstr ""
"Los graph-symbols son entradas contiguo al fin de la lista. \n"
"La lista ser@'a insertado como una columna de un grafo.\n"
"Las cadenas son tanto graph-blank o graph-symbol.\n"

#. type: group
#: emacs-lisp-intro.texi:16524
#, no-wrap
msgid ""
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"
msgstr ""
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"

#. type: group
#: emacs-lisp-intro.texi:16531 emacs-lisp-intro.texi:21575
#, no-wrap
msgid ""
"    ;; @r{Fill in @code{graph-symbols}.}\n"
"    (while (> actual-height 0)\n"
"      (setq insert-list (cons graph-symbol insert-list))\n"
"      (setq actual-height (1- actual-height)))\n"
msgstr ""
"    ;; @r{Rellenar en @code{graph-symbols}.}\n"
"    (while (> actual-height 0)\n"
"      (setq insert-list (cons graph-symbol insert-list))\n"
"      (setq actual-height (1- actual-height)))\n"

#. type: group
#: emacs-lisp-intro.texi:16539 emacs-lisp-intro.texi:21583
#, no-wrap
msgid ""
"    ;; @r{Fill in @code{graph-blanks}.}\n"
"    (while (> number-of-top-blanks 0)\n"
"      (setq insert-list (cons graph-blank insert-list))\n"
"      (setq number-of-top-blanks\n"
"            (1- number-of-top-blanks)))\n"
"\n"
msgstr ""
"    ;; @r{Rellenar en @code{graph-blanks}.}\n"
"    (while (> number-of-top-blanks 0)\n"
"      (setq insert-list (cons graph-blank insert-list))\n"
"      (setq number-of-top-blanks\n"
"            (1- number-of-top-blanks)))\n"
"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16554
msgid ""
"If we wished, we could rewrite @code{column-of-graph} a third time to "
"provide optionally for a line graph as well as for a bar graph.  This would "
"not be hard to do.  One way to think of a line graph is that it is no more "
"than a bar graph in which the part of each bar that is below the top is "
"blank.  To construct a column for a line graph, the function first "
"constructs a list of blanks that is one shorter than the value, then it uses "
"@code{cons} to attach a graph symbol to the list; then it uses @code{cons} "
"again to attach the `top blanks' to the list."
msgstr ""
"Si se desea, podr@'{@dotless{i}}amos reescribir @code{column-of-graph}\n"
"una tercera vez para proporcionar opcionalmente un gr@'afico de\n"
"l@'{@dotless{i}}neas, como gr@'afico de barras. Esto no\n"
"ser@'{@dotless{i}}a duro de hacer. Un camino para pensar en un grafo\n"
"de l@'{@dotless{i}}neas es que no es m@'as que un grafo de barras en\n"
"el que la parte de cada barra que est@'a debajo del alto es\n"
"blanco. Para construir una columna para gr@'afico de\n"
"l@'{@dotless{i}}neas, la funci@'on primero construyen una lista de\n"
"espacios en blanco que es una m@'as ordenada que el valor, entonces\n"
"usa @code{cons} para adjuntar un s@'{@dotless{i}}mbolo gr@'afico a la\n"
"lista; entonces eso usa @code{cons} de nuevo para adjuntar el `alto de\n"
"espacios en blanco' a la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:16561
msgid ""
"It is easy to see how to write such a function, but since we don't need it, "
"we will not do it.  But the job could be done, and if it were done, it would "
"be done with @code{column-of-graph}.  Even more important, it is worth "
"noting that few changes would have to be made anywhere else.  The "
"enhancement, if we ever wish to make it, is simple."
msgstr ""
"Es f@'acil ver como escribir tal funci@'on, pero puesto que no se\n"
"necesita eso, no se har@'a. Pero el trabajo podr@'{@dotless{i}}a ser\n"
"hecho, y si eso se hiciera, se har@'{@dotless{i}}a con\n"
"@code{column-of-graph}. Incluso m@'as importante, no se valora nada\n"
"m@'as que pocos cambios que tendr@'{@dotless{i}}an que ser hechos de\n"
"cualquier otra manera. La mejora, que se desea hacer, es simple."

#. type: Plain text
#: emacs-lisp-intro.texi:16565
msgid ""
"Now, finally, we come to our first actual graph printing function.  This "
"prints the body of a graph, not the labels for the vertical and horizontal "
"axes, so we can call this @code{graph-body-print}."
msgstr ""
"Ahora, finalmente, volvemos a nuestra primera funci@'on de grafo\n"
"impresa. Esto imprime el cuerpo de un grafo, no las etiquetas para los\n"
"ejes horizontal y vertical, as@'{@dotless{i}} se puede llamar este\n"
"@code{graph-body-print}."

#. type: section
#: emacs-lisp-intro.texi:16567
#, no-wrap
msgid "The @code{graph-body-print} Function"
msgstr "La funci@'on @code{graph-body-print}"

#. type: Plain text
#: emacs-lisp-intro.texi:16577
msgid ""
"After our preparation in the preceding section, the @code{graph-body-print} "
"function is straightforward.  The function will print column after column of "
"asterisks and blanks, using the elements of a numbers' list to specify the "
"number of asterisks in each column.  This is a repetitive act, which means "
"we can use a decrementing @code{while} loop or recursive function for the "
"job.  In this section, we will write the definition using a @code{while} "
"loop."
msgstr ""
"Despu@'es de nuestra preparaci@'on en la secci@'on precedente, la\n"
"funci@'on @code{graph-body-print} es simple. La funci@'on imprimir@'a\n"
"la columna despu@'es de la columna de asteriscos y espacios en blanco,\n"
"usando los elementos de la lista de n@'umeros para especificar el\n"
"n@'umero de asteriscos en cada columna. Esto es un acto repetitivo,\n"
"que significa que se puede usar un bucle @code{while} que decrementa o\n"
"una funci@'on recursiva para el trabajo. En esta secci@'on, se\n"
"escribir@'a la definici@'on usando un bucle @code{while}."

#. type: Plain text
#: emacs-lisp-intro.texi:16580
msgid ""
"The @code{column-of-graph} function requires the height of the graph as an "
"argument, so we should determine and record that as a local variable."
msgstr ""
"La funci@'on @code{column-of-graph} requiere el alto del grafo como un\n"
"argumento, as@'{@dotless{i}} se asigna y guarda esto como una variable\n"
"local."

#. type: Plain text
#: emacs-lisp-intro.texi:16583
msgid ""
"This leads us to the following template for the @code{while} loop version of "
"this function:"
msgstr ""
"Esto lidera a la siguiente plantilla para el bucle @code{while}\n"
"versi@'on de esta funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:16590
#, no-wrap
msgid ""
"(defun graph-body-print (numbers-list)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let ((height  @dots{}\n"
"         @dots{}))\n"
msgstr ""
"(defun graph-body-print (numbers-list)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let ((height  @dots{}\n"
"         @dots{}))\n"

#. type: group
#: emacs-lisp-intro.texi:16596
#, no-wrap
msgid ""
"    (while numbers-list\n"
"      @var{insert-columns-and-reposition-point}\n"
"      (setq numbers-list (cdr numbers-list)))))\n"
msgstr ""
"    (while numbers-list\n"
"      @var{insert-columns-and-reposition-point}\n"
"      (setq numbers-list (cdr numbers-list)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16601
msgid "We need to fill in the slots of the template."
msgstr "Necesitamos rellenar los slots de la plantilla."

#. type: Plain text
#: emacs-lisp-intro.texi:16604
msgid ""
"Clearly, we can use the @code{(apply 'max numbers-list)} expression to "
"determine the height of the graph."
msgstr ""
"Claramente, se puede usar la expresi@'on @code{(apply 'max\n"
"numbers-list)} para determinar el alto del grafo."

#. type: Plain text
#: emacs-lisp-intro.texi:16609
msgid ""
"The @code{while} loop will cycle through the @code{numbers-list} one element "
"at a time.  As it is shortened by the @code{(setq numbers-list (cdr numbers-"
"list))} expression, the @sc{car} of each instance of the list is the value "
"of the argument for @code{column-of-graph}."
msgstr ""
"El bucle @code{while} iterar@'a a trav@'es de @code{numbers-list} un\n"
"elemento a la vez. Como eso est@'a ordenado por la expresi@'on\n"
"@code{(setq numbers-list (cdr numbers-list))}, el @sc{car} de cada\n"
"instancia de la lista es el valor del argumento para @code{column-of-graph}."

#. type: Plain text
#: emacs-lisp-intro.texi:16617
msgid ""
"At each cycle of the @code{while} loop, the @code{insert-rectangle} function "
"inserts the list returned by @code{column-of-graph}.  Since the @code{insert-"
"rectangle} function moves point to the lower right of the inserted "
"rectangle, we need to save the location of point at the time the rectangle "
"is inserted, move back to that position after the rectangle is inserted, and "
"then move horizontally to the next place from which @code{insert-rectangle} "
"is called."
msgstr ""
"En cada ciclo del bucle @code{while}, la funci@'on\n"
"@code{insert-rectangle} inserta la lista devuelta por\n"
"@code{column-of-graph}. Desde que la funci@'on\n"
"@code{insert-rectangle}, se necesita guardar la localizaci@'on de\n"
"punto al tiempo que el rect@'angulo se inserta, mueve atr@'as a esta\n"
"posici@'on despu@'es de que el rect@'angulo es insertado, y entonces\n"
"se mueve horizontalmente al siguiente lugar desde el que\n"
"@code{insert-rectangle} se llama."

#. type: Plain text
#: emacs-lisp-intro.texi:16627
msgid ""
"If the inserted columns are one character wide, as they will be if single "
"blanks and asterisks are used, the repositioning command is simply "
"@code{(forward-char 1)}; however, the width of a column may be greater than "
"one.  This means that the repositioning command should be written "
"@code{(forward-char symbol-width)}.  The @code{symbol-width} itself is the "
"length of a @code{graph-blank} and can be found using the expression "
"@code{(length graph-blank)}.  The best place to bind the @code{symbol-width} "
"variable to the value of the width of graph column is in the varlist of the "
"@code{let} expression."
msgstr ""
"Si las columnas se insertan en un car@'acter amplio, ser@'a si los\n"
"espacios en blanco y asteriscos se usan, el comando de reposici@'on\n"
"es simple @code{(forward-char 1)}; sin embargo, el ancho de una\n"
"columna puede ser m@'as grande que uno. Esto significa que el comando\n"
"de reposicionamiento ser@'{@dotless{i}}a escrito @code{(forward-char\n"
"symbol-width)}. El mejor lugar para asociar la variable\n"
"@code{symbol-width} al valor del width de la columna grafo est@'a en\n"
"la varlist de la expresi@'on @code{let}."

#. type: Plain text
#: emacs-lisp-intro.texi:16630
msgid "These considerations lead to the following function definition:"
msgstr ""
"Estas consideraciones lideran a la siguiente definici@'on de funci@'on:"

#. type: group
#: emacs-lisp-intro.texi:16636
#, no-wrap
msgid ""
"(defun graph-body-print (numbers-list)\n"
"  \"Print a bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\"\n"
"\n"
msgstr ""
"(defun graph-body-print (numbers-list)\n"
"  \"Imprime un gr@'afico de barras de la NUMBERS-LIST.\n"
"La numbers-list consiste en los valores del eje Y.\"\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:16640
#, no-wrap
msgid ""
"  (let ((height (apply 'max numbers-list))\n"
"        (symbol-width (length graph-blank))\n"
"        from-position)\n"
msgstr ""
"  (let ((height (apply 'max numbers-list))\n"
"        (symbol-width (length graph-blank))\n"
"        from-position)\n"

#. type: group
#: emacs-lisp-intro.texi:16649
#, no-wrap
msgid ""
"    (while numbers-list\n"
"      (setq from-position (point))\n"
"      (insert-rectangle\n"
"       (column-of-graph height (car numbers-list)))\n"
"      (goto-char from-position)\n"
"      (forward-char symbol-width)\n"
msgstr ""
"    (while numbers-list\n"
"      (setq from-position (point))\n"
"      (insert-rectangle\n"
"       (column-of-graph height (car numbers-list)))\n"
"      (goto-char from-position)\n"
"      (forward-char symbol-width)\n"

#. type: group
#: emacs-lisp-intro.texi:16654
#, no-wrap
msgid ""
"      ;; @r{Draw graph column by column.}\n"
"      (sit-for 0)\n"
"      (setq numbers-list (cdr numbers-list)))\n"
msgstr ""
"      ;; @r{Dibuja la columna del grafo por columna.}\n"
"      (sit-for 0)\n"
"      (setq numbers-list (cdr numbers-list)))\n"

#. type: group
#: emacs-lisp-intro.texi:16660
#, no-wrap
msgid ""
"    ;; @r{Place point for X axis labels.}\n"
"    (forward-line height)\n"
"    (insert \"\\n\")\n"
"))\n"
msgstr ""
"    ;; @r{Emplaza el punto para etiquetas de ejes X.}\n"
"    (forward-line height)\n"
"    (insert \"\\n\")\n"
"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16672
msgid ""
"The one unexpected expression in this function is the @w{@code{(sit-for 0)}} "
"expression in the @code{while} loop.  This expression makes the graph "
"printing operation more interesting to watch than it would be otherwise.  "
"The expression causes Emacs to `sit' or do nothing for a zero length of time "
"and then redraw the screen.  Placed here, it causes Emacs to redraw the "
"screen column by column.  Without it, Emacs would not redraw the screen "
"until the function exits."
msgstr ""
"La expresi@'on inesperada en esta funci@'on es la expresi@'on @w{@code{(sit-for\n"
"0)}} en el bucle @code{while}. Esta expresi@'on hace que el grafo\n"
"imprima la operaci@'on m@'as interesante para vigilar lo que\n"
"ser@'{@dotless{i}}a de otro modo. La expresi@'on causa que Emacs pare\n"
"(sit-for 0) para un momento cero y entonces redibuje la\n"
"pantalla. Puesto aqu@'{@dotless{i}}, eso causa que Emacs redibuje la\n"
"pantalla columna por columna. Sin eso, Emacs no\n"
"redibujar@'{@dotless{i}}a la pantalla hasta que la funci@'on exista."

#. type: Plain text
#: emacs-lisp-intro.texi:16674
msgid "We can test @code{graph-body-print} with a short list of numbers."
msgstr ""
"Se puede chequear @code{graph-body-print} con una peque@~na lista de\n"
"n@'umeros."

#. type: enumerate
#: emacs-lisp-intro.texi:16679
msgid ""
"Install @code{graph-symbol}, @code{graph-blank}, @code{column-of-graph}, "
"which are in"
msgstr ""
"Instala @code{graph-symbol}, @code{graph-blank},\n"
"@code{column-of-graph}, que est@'an en"

#. type: iftex
#: emacs-lisp-intro.texi:16681
msgid "@ref{Readying a Graph, , Readying a Graph},"
msgstr "@ref{Leyendo un grafo, , Leyendo un grafo},"

#. type: ifinfo
#: emacs-lisp-intro.texi:16684
msgid "@ref{Columns of a graph},"
msgstr "@ref{Columnas de un grafo},"

#. type: enumerate
#: emacs-lisp-intro.texi:16686
msgid "and @code{graph-body-print}."
msgstr "and @code{graph-body-print}."

#. type: enumerate
#: emacs-lisp-intro.texi:16690 emacs-lisp-intro.texi:20191
#: emacs-lisp-intro.texi:20531 emacs-lisp-intro.texi:20773
msgid "Copy the following expression:"
msgstr "Copia la siguiente expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:16693
#, no-wrap
msgid "(graph-body-print '(1 2 3 4 6 4 3 5 7 6 5 2 3))\n"
msgstr "(graph-body-print '(1 2 3 4 6 4 3 5 7 6 5 2 3))\n"

#. type: enumerate
#: emacs-lisp-intro.texi:16698
msgid ""
"Switch to the @file{*scratch*} buffer and place the cursor where you want "
"the graph to start."
msgstr ""
"Cambia al b@'uffer @file{*scratch*} y emplaza el cursor donde quiere\n"
"que el grafo empiece."

#. type: enumerate
#: emacs-lisp-intro.texi:16701 emacs-lisp-intro.texi:20202
#: emacs-lisp-intro.texi:20548 emacs-lisp-intro.texi:20784
msgid "Type @kbd{M-:} (@code{eval-expression})."
msgstr "Escribe @kbd{M-:} (@code{eval-expression})."

#. type: enumerate
#: emacs-lisp-intro.texi:16705 emacs-lisp-intro.texi:20206
msgid ""
"Yank the @code{graph-body-print} expression into the minibuffer with @kbd{C-"
"y} (@code{yank)}."
msgstr ""
"Pega la expresi@'on @code{graph-body-print} dentro del minib@'uffer con\n"
"@kbd{C-y} (@code{yank})."

#. type: enumerate
#: emacs-lisp-intro.texi:16708
msgid "Press @key{RET} to evaluate the @code{graph-body-print} expression."
msgstr "Presiona @key{RET} para evaluar la expresi@'on @code{graph-body-print}"

#. type: Plain text
#: emacs-lisp-intro.texi:16712
msgid "Emacs will print a graph like this:"
msgstr "Emacs imprimir@'a un grafo como este:"

#. type: group
#: emacs-lisp-intro.texi:16722
#, no-wrap
msgid ""
"                    *\n"
"                *   **\n"
"                *  ****\n"
"               *** ****\n"
"              ********* *\n"
"             ************\n"
"            *************\n"
msgstr ""
"                    *\n"
"                *   **\n"
"                *  ****\n"
"               *** ****\n"
"              ********* *\n"
"             ************\n"
"            *************\n"

#. type: findex
#: emacs-lisp-intro.texi:16725 emacs-lisp-intro.texi:16727
#, no-wrap
msgid "recursive-graph-body-print"
msgstr "recursive-graph-body-print"

#. type: section
#: emacs-lisp-intro.texi:16726
#, no-wrap
msgid "The @code{recursive-graph-body-print} Function"
msgstr "La funci@'on @code{recursive-graph-body-print}"

#. type: Plain text
#: emacs-lisp-intro.texi:16735
msgid ""
"The @code{graph-body-print} function may also be written recursively.  The "
"recursive solution is divided into two parts: an outside `wrapper' that uses "
"a @code{let} expression to determine the values of several variables that "
"need only be found once, such as the maximum height of the graph, and an "
"inside function that is called recursively to print the graph."
msgstr ""
"La funci@'on @code{graph-body-print} puede tambi@'en ser escrito\n"
"recursivamente. La soluci@'on recursiva es dividida dentro de dos\n"
"partes: una fuera `wrapper' @emph{envoltorio} que usa una expresi@'on\n"
"@code{let} para determinar los valores varias variables que solo\n"
"necesitan ser encontradas una vez, tal como la m@'axima altura del\n"
"grafo, y una funci@'on dentro que es llamada recursivamente para\n"
"imprimir el grafo."

#. type: Plain text
#: emacs-lisp-intro.texi:16738
msgid "The `wrapper' is uncomplicated:"
msgstr "El `envoltorio' no es complicado:"

#. type: group
#: emacs-lisp-intro.texi:16751
#, no-wrap
msgid ""
"(defun recursive-graph-body-print (numbers-list)\n"
"  \"Print a bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\"\n"
"  (let ((height (apply 'max numbers-list))\n"
"        (symbol-width (length graph-blank))\n"
"        from-position)\n"
"    (recursive-graph-body-print-internal\n"
"     numbers-list\n"
"     height\n"
"     symbol-width)))\n"
msgstr ""
"(defun recursive-graph-body-print (numbers-list)\n"
"  \"Imprime un gr@'afico de barras del NUMBERS-LIST.\n"
"El numbers-list consiste en los valores del eje Y.\"\n"
"  (let ((height (apply 'max numbers-list))\n"
"        (symbol-width (length graph-blank))\n"
"        from-position)\n"
"    (recursive-graph-body-print-internal\n"
"     numbers-list\n"
"     height\n"
"     symbol-width)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16763
msgid ""
"The recursive function is a little more difficult.  It has four parts: the "
"`do-again-test', the printing code, the recursive call, and the `next-step-"
"expression'.  The `do-again-test' is a @code{when} expression that "
"determines whether the @code{numbers-list} contains any remaining elements; "
"if it does, the function prints one column of the graph using the printing "
"code and calls itself again.  The function calls itself again according to "
"the value produced by the `next-step-expression' which causes the call to "
"act on a shorter version of the @code{numbers-list}."
msgstr ""
"La funci@'on recursiva es un poco m@'as dif@'{@dotless{i}}cil. Eso\n"
"tiene cuatro partes: el `do-again-test', el c@'odigo impreso, la\n"
"llamada recursiva, y la `next-step-expression'. El `do-again-test' es\n"
"una expresi@'on @code{when} determina si la @code{numbers-list}\n"
"contiene cualquier elemento que permanece; si hace eso, la funci@'on\n"
"imprime una columna del grafo usando el c@'odigo impreso y se llama\n"
"as@'{@dotless{i}} mismo de nuevo. La funci@'on se llama as@'{@dotless{i}}\n"
"misma de nuevo de acuerdo al valor producido por la\n"
"`next-step-expression' que causa para llamar a actuar en una versi@'on\n"
"ordenada de la @code{numbers-list}."

#. type: group
#: emacs-lisp-intro.texi:16770
#, no-wrap
msgid ""
"(defun recursive-graph-body-print-internal\n"
"  (numbers-list height symbol-width)\n"
"  \"Print a bar graph.\n"
"Used within recursive-graph-body-print function.\"\n"
msgstr ""
"(defun recursive-graph-body-print-internal\n"
"  (numbers-list height symbol-width)\n"
"  \"Imprime un gr@'afico de barras.\n"
"Usado con la funci@'on recursive-graph-body-print.\"\n"

#. type: group
#: emacs-lisp-intro.texi:16777
#, no-wrap
msgid ""
"  (when numbers-list\n"
"        (setq from-position (point))\n"
"        (insert-rectangle\n"
"         (column-of-graph height (car numbers-list)))\n"
msgstr ""
"  (when numbers-list\n"
"        (setq from-position (point))\n"
"        (insert-rectangle\n"
"         (column-of-graph height (car numbers-list)))\n"

#. type: group
#: emacs-lisp-intro.texi:16784
#, no-wrap
msgid ""
"        (goto-char from-position)\n"
"        (forward-char symbol-width)\n"
"        (sit-for 0)     ; @r{Draw graph column by column.}\n"
"        (recursive-graph-body-print-internal\n"
"         (cdr numbers-list) height symbol-width)))\n"
msgstr ""
"        (goto-char from-position)\n"
"        (forward-char symbol-width)\n"
"        (sit-for 0)     ; @r{Dibuja un gr@'afico columna por columna.}\n"
"        (recursive-graph-body-print-internal\n"
"         (cdr numbers-list) height symbol-width)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16789
msgid "After installation, this expression can be tested; here is a sample:"
msgstr ""
"Despu@'es de la siguiente instalaci@'on, esta expresi@'on puede ser\n"
"chequeada; aqu@'{@dotless{i}} hay un ejemplo:"

#. type: smallexample
#: emacs-lisp-intro.texi:16792
#, no-wrap
msgid "(recursive-graph-body-print '(3 2 5 6 7 5 3 4 6 4 3 2 1))\n"
msgstr "(recursive-graph-body-print '(3 2 5 6 7 5 3 4 6 4 3 2 1))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16796
msgid "Here is what @code{recursive-graph-body-print} produces:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a lo que @code{recursive-graph-body-print} produce:"

#. type: group
#: emacs-lisp-intro.texi:16806
#, no-wrap
msgid ""
"                *\n"
"               **   *\n"
"              ****  *\n"
"              **** ***\n"
"            * *********\n"
"            ************\n"
"            *************\n"
msgstr ""
"                *\n"
"               **   *\n"
"              ****  *\n"
"              **** ***\n"
"            * *********\n"
"            ************\n"
"            *************\n"

#. type: Plain text
#: emacs-lisp-intro.texi:16811
msgid ""
"Either of these two functions, @code{graph-body-print} or @code{recursive-"
"graph-body-print}, create the body of a graph."
msgstr ""
"Cada una de estas dos funciones, @code{graph-body-print} o\n"
"@code{recursive-graph-body-print}, crea el cuerpo de un grafo."

#. type: node
#: emacs-lisp-intro.texi:16812
#, no-wrap
msgid "Printed Axes"
msgstr "Ejes Impresos"

#. type: section
#: emacs-lisp-intro.texi:16813
#, no-wrap
msgid "Need for Printed Axes"
msgstr "Necesidad para ejes impresos"

#. type: Plain text
#: emacs-lisp-intro.texi:16818
msgid ""
"A graph needs printed axes, so you can orient yourself.  For a do-once "
"project, it may be reasonable to draw the axes by hand using Emacs's Picture "
"mode; but a graph drawing function may be used more than once."
msgstr ""
"Un grafo necesita ejes impresos, as@'{@dotless{i}} se puede orientar a\n"
"t@'{@dotless{i}} mismo. Para un proyecto do-once, eso puede ser\n"
"razonable dibujar los ejes a mano usando el modo de emacs Picture,\n"
"pero un grafo dibuja la funci@'on que puede ser usada m@'as de una vez."

#. type: Plain text
#: emacs-lisp-intro.texi:16824
msgid ""
"For this reason, I have written enhancements to the basic @code{print-graph-"
"body} function that automatically print labels for the horizontal and "
"vertical axes.  Since the label printing functions do not contain much new "
"material, I have placed their description in an appendix.  @xref{Full "
"Graph, , A Graph with Labeled Axes}."
msgstr ""
"Por esta raz@'on, se han escrito mejoras a la funci@'on b@'asica\n"
"@code{print-graph-body} que autom@'aticamente imprime etiquetas para\n"
"los ejes horizontal y vertical. Puesto que la etiqueta de imprimir\n"
"funciones no contiene mucho material nuevo, se ha emplazado su\n"
"descripci@'on en un ap@'endice @xref{Grafo completo, , Un Grafo con\n"
"Ejes Etiquetados}."

#. type: Plain text
#: emacs-lisp-intro.texi:16829
msgid "Write a line graph version of the graph printing functions."
msgstr ""
"Escribe una versi@'on de l@'{@dotless{i}}nea de grafo de la funciones\n"
"de impresi@'on del grafo."

#. type: cindex
#: emacs-lisp-intro.texi:16832
#, no-wrap
msgid "@file{.emacs} file"
msgstr "fichero @file{.emacs}"

#. type: cindex
#: emacs-lisp-intro.texi:16833
#, no-wrap
msgid "Customizing your @file{.emacs} file"
msgstr "Personalizando tu fichero @file{.emacs}"

#. type: cindex
#: emacs-lisp-intro.texi:16834
#, no-wrap
msgid "Initialization file"
msgstr "Fichero inicializaci@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:16840
msgid ""
"``You don't have to like Emacs to like it''---this seemingly paradoxical "
"statement is the secret of GNU Emacs.  The plain, `out of the box' Emacs is "
"a generic tool.  Most people who use it, customize it to suit themselves."
msgstr ""
"``No te tiene que gustar Emacs para lo que te gusta'' --- esto que\n"
"parece una frase parad@'ojica es el secreto de GNU Emacs. En realidad,\n"
"Emacs es una herramienta gen@'erica. La mayor@'{@dotless{i}}a de la\n"
"gente que usa Emacs, lo personaliza para ajustarlo a sus necesidades."

#. type: Plain text
#: emacs-lisp-intro.texi:16843
msgid ""
"GNU Emacs is mostly written in Emacs Lisp; this means that by writing "
"expressions in Emacs Lisp you can change or extend Emacs."
msgstr ""
"GNU Emacs est@'a mayoritariamente escrito en Emacs Lisp; esto\n"
"significa que escribiendo expresiones en Emacs Lisp se puede modificar\n"
"o extender Emacs."

#. type: node
#: emacs-lisp-intro.texi:16863
#, no-wrap
msgid "Default Configuration"
msgstr "Configuraci@'on por defecto"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:16864
#, no-wrap
msgid "Emacs's Default Configuration"
msgstr "Configuraci@'on por defecto de Emacs"

#. type: Plain text
#: emacs-lisp-intro.texi:16877
msgid ""
"There are those who appreciate Emacs's default configuration.  After all, "
"Emacs starts you in C mode when you edit a C file, starts you in Fortran "
"mode when you edit a Fortran file, and starts you in Fundamental mode when "
"you edit an unadorned file.  This all makes sense, if you do not know who is "
"going to use Emacs.  Who knows what a person hopes to do with an unadorned "
"file? Fundamental mode is the right default for such a file, just as C mode "
"is the right default for editing C code.  (Enough programming languages have "
"syntaxes that enable them to share or nearly share features, so C mode is "
"now provided by CC mode, the `C Collection'.)"
msgstr ""
"Hay quien aprecia la configuraci@'on por defecto de Emacs. Despu@'es\n"
"de todo, Emacs empieza en modo C cuando se edita un fichero C, empieza\n"
"en modo Fortran cuando se edita un fichero Fortran, y empieza en modo\n"
"Fundamental cuando se edita un fichero no adornado. Esto tiene\n"
"sentido, si no sabes quien est@'a yendo a usar\n"
"Emacs. @questiondown{}Qui@'en sabe lo que una persona espera hacer con\n"
"un fichero no adornado? El modo fundamental es el modo correcto por\n"
"defecto para tal fichero, tal como el modo C es lo correcto para\n"
"editar c@'odigo C. (Suficientes lenguajes de programaci@'on tienen\n"
"sintaxis que permiten compartir funcionalidades, tal como el modo C es\n"
"ahora proporcionado por el modo CC, la `Colecci@'on C'.)"

#. type: Plain text
#: emacs-lisp-intro.texi:16880
msgid ""
"But when you do know who is going to use Emacs---you, yourself---then it "
"makes sense to customize Emacs."
msgstr ""
"Pero cuando se conoce quien est@'a yendo a usar Emacs --- tu, tu mismo\n"
"-- entonces eso tiene sentido para personalizar Emacs."

#. type: Plain text
#: emacs-lisp-intro.texi:16884
msgid ""
"For example, I seldom want Fundamental mode when I edit an otherwise "
"undistinguished file; I want Text mode.  This is why I customize Emacs: so "
"it suits me."
msgstr ""
"Por ejemplo, yo raramente quiero el modo Fundamental cuando edito un\n"
"fichero de otro modo no distinguido; yo quiero el modo Texto. Esto es\n"
"por lo que yo personalizo Emacs: as@'{@dotless{i}} eso se ajusta a\n"
"m@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:16893
msgid ""
"You can customize and extend Emacs by writing or adapting a @file{~/.emacs} "
"file.  This is your personal initialization file; its contents, written in "
"Emacs Lisp, tell Emacs what to do.@footnote{You may also add @file{.el} to "
"@file{~/.emacs} and call it a @file{~/.emacs.el} file.  In the past, you "
"were forbidden to type the extra keystrokes that the name @file{~/.emacs.el} "
"requires, but now you may.  The new format is consistent with the Emacs Lisp "
"file naming conventions; the old format saves typing.}"
msgstr ""
"Se puede personalizar y extender Emacs escribiendo o adaptando un\n"
"fichero @file{~/.emacs}. Esto es un fichero de inicializaci@'on\n"
"personal; sus contenidos, escritos en Emacs Lisp, cuentan a Emacs qu@'e\n"
"hacer.@footnote{Tu puedes tambi@'en a@~nadir @file{.el} para\n"
"@file{~/.emacs} y llama a un fichero @file{~/.emacs}. En el pasado,\n"
"fu@'e prohibido escribir los atajos de teclado extra que el nombre\n"
"@file{~/.emacs.el} requiere, pero ahora puedes. El nuevo formato es\n"
"consistente con las conveniciones de nombre del fichero Emacs Lisp; el\n"
"viejo formato guarda la escritura.}"

#. type: Plain text
#: emacs-lisp-intro.texi:16898
msgid ""
"A @file{~/.emacs} file contains Emacs Lisp code.  You can write this code "
"yourself; or you can use Emacs's @code{customize} feature to write the code "
"for you.  You can combine your own expressions and auto-written Customize "
"expressions in your @file{.emacs} file."
msgstr ""
"Un fichero @file{~/.emacs} contiene c@'odigo Emacs Lisp. Se puede\n"
"escribir este c@'odigo por uno mismo; o se puede usar la funcionalidad\n"
"@code{customize} para escribir el c@'odigo para ti. Se puede combinar\n"
"tus propias expresiones y expresiones auto-escritas personalizadas en\n"
"tu fichero @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:16902
msgid ""
"(I myself prefer to write my own expressions, except for those, particularly "
"fonts, that I find easier to manipulate using the @code{customize} command.  "
"I combine the two methods.)"
msgstr ""
"(Yo prefiero por m@'{@dotless{i}} mismo escribir mis propias\n"
"expresiones, excepto para estas, fuentes particularmente, que se\n"
"encuentran f@'aciles de manipular usando el comando\n"
"@code{customize}. Yo combino los dos m@'etodos.)"

#. type: Plain text
#: emacs-lisp-intro.texi:16908
msgid ""
"Most of this chapter is about writing expressions yourself.  It describes a "
"simple @file{.emacs} file; for more information, see @ref{Init File, , The "
"Init File, emacs, The GNU Emacs Manual}, and @ref{Init File, , The Init "
"File, elisp, The GNU Emacs Lisp Reference Manual}."
msgstr ""
"La mayor@'{@dotless{i}}a de este cap@'{@dotless{i}}tulo es acerca de\n"
"escribir expresiones por uno mismo. Eso describe un fichero\n"
"@file{.emacs} simple; para m@'as informaci@'on, mira @ref{Fichero de\n"
"Inicio, , El Fichero de Inicio, emacs, El Manual GNU Emacs}, y la\n"
"@ref{Fichero de Inicio, , El Fichero de Inicio, elisp, El Manual de\n"
"Referencia GNU Emacs Lisp}."

#. type: section
#: emacs-lisp-intro.texi:16910
#, no-wrap
msgid "Site-wide Initialization Files"
msgstr "Fichero de inicializaci@'on site-wide"

#. type: cindex
#: emacs-lisp-intro.texi:16912
#, no-wrap
msgid "@file{default.el} init file"
msgstr "fichero de inicio @file{default.el}"

#. type: cindex
#: emacs-lisp-intro.texi:16913
#, no-wrap
msgid "@file{site-init.el} init file"
msgstr "fichero inicio @file{site-init.el}"

#. type: cindex
#: emacs-lisp-intro.texi:16914
#, no-wrap
msgid "@file{site-load.el} init file"
msgstr "fichero @file{site-load.el}"

#. type: Plain text
#: emacs-lisp-intro.texi:16919
msgid ""
"In addition to your personal initialization file, Emacs automatically loads "
"various site-wide initialization files, if they exist.  These have the same "
"form as your @file{.emacs} file, but are loaded by everyone."
msgstr ""
"Adem@'as de tu fichero de inicializaci@'on personal, Emacs\n"
"autom@'aticamente carga varios ficheros de inicializaci@'on amplios,\n"
"si existen. Tienen la misma forma que tu fichero @file{.emacs}, pero\n"
"se cargan por cualquiera."

#. type: Plain text
#: emacs-lisp-intro.texi:16928
msgid ""
"Two site-wide initialization files, @file{site-load.el} and @file{site-init."
"el}, are loaded into Emacs and then `dumped' if a `dumped' version of Emacs "
"is created, as is most common.  (Dumped copies of Emacs load more quickly.  "
"However, once a file is loaded and dumped, a change to it does not lead to a "
"change in Emacs unless you load it yourself or re-dump Emacs.  "
"@xref{Building Emacs, , Building Emacs, elisp, The GNU Emacs Lisp Reference "
"Manual}, and the @file{INSTALL} file.)"
msgstr ""
"Dos ficheros de incializaci@'on, @file{site-load.el} y\n"
"@file{site-init.el}, est@'an cargados dentro de Emacs y volcados\n"
"@emph{dumped} sin una versi@'on dumped de Emacs se cre@'o, como es\n"
"m@'as com@'un. (Las copias dumped de Emacs cargan m@'as\n"
"r@'apidamente. Sin embargo, puesto que un fichero se carga y compila,\n"
"un cambio no llega a ser un cambio en Emacs a menos que se cargue por\n"
"uno mismo o se recompile Emacs. @xref{Construyendo Emacs, ,\n"
"Construyendo Emacs, elisp, El Manual de Referencia de GNU Emacs Lisp},\n"
"y el fichero @file{INSTALL})"

#. type: Plain text
#: emacs-lisp-intro.texi:16934
msgid ""
"Three other site-wide initialization files are loaded automatically each "
"time you start Emacs, if they exist.  These are @file{site-start.el}, which "
"is loaded @emph{before} your @file{.emacs} file, and @file{default.el}, and "
"the terminal type file, which are both loaded @emph{after} your @file{."
"emacs} file."
msgstr ""
"Los otros tres ficheros de inicializaci@'on se cargan\n"
"autom@'aticamente cada vez que se inicia Emacs, si existen. Son\n"
"@file{site-start.el}, que se carga @emph{antes} que tu fichero\n"
"@file{.emacs}, y @file{default.el}, y el tipo de fichero terminal, que\n"
"se cargan @emph{despu@'es} de tu fichero @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:16942
msgid ""
"Settings and definitions in your @file{.emacs} file will overwrite "
"conflicting settings and definitions in a @file{site-start.el} file, if it "
"exists; but the settings and definitions in a @file{default.el} or terminal "
"type file will overwrite those in your @file{.emacs} file.  (You can prevent "
"interference from a terminal type file by setting @code{term-file-prefix} to "
"@code{nil}.  @xref{Simple Extension, , A Simple Extension}.)"
msgstr ""
"Las configuraciones y definiciones en tu fichero @file{.emacs}\n"
"sobreescribir@'an las configuraciones en conflicto y definiciones en\n"
"un fichero @file{site-start.el}, si eso existe; pero las\n"
"configuraciones y definiciones en un @file{default.el} o el tipo de\n"
"fichero terminal sobreescribir@'a estos en tu fichero\n"
"@file{.emacs}. (Se pueden prevenir interferencias desde un tipo de\n"
"fichero terminal configurando @code{term-file-prefix} para\n"
"@code{nil}. @xref{Extensi@'on simple, , Una extensi@'on simple}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:16946
msgid ""
"The @file{INSTALL} file that comes in the distribution contains descriptions "
"of the @file{site-init.el} and @file{site-load.el} files."
msgstr ""
"El fichero @file{INSTALL} que viene en la distribuci@'on contiene\n"
"descripciones de los fichero @file{site-init.el} y @file{site-load.el}."

#. type: Plain text
#: emacs-lisp-intro.texi:16950
msgid ""
"The @file{loadup.el}, @file{startup.el}, and @file{loaddefs.el} files "
"control loading.  These files are in the @file{lisp} directory of the Emacs "
"distribution and are worth perusing."
msgstr ""
"Los ficheros @file{loadup.el}, @file{startup.el}, y @file{loaddefs.el}\n"
"controlan la carga. Estos ficheros est@'an en el directorio\n"
"@file{lisp} de la distribuci@'on Emacs y tiene valor de uso."

#. type: Plain text
#: emacs-lisp-intro.texi:16954
msgid ""
"The @file{loaddefs.el} file contains a good many suggestions as to what to "
"put into your own @file{.emacs} file, or into a site-wide initialization "
"file."
msgstr ""
"El fichero @file{loaddefs.el} contiene buenas sugerencias como las que\n"
"poner dentro de tu propio fichero @file{.emacs}, o dentro de un\n"
"fichero de inicializaci@'on amplio."

#. type: section
#: emacs-lisp-intro.texi:16956
#, no-wrap
msgid "Specifying Variables using @code{defcustom}"
msgstr "Especificar variables usando @code{defcustom}"

#. type: Plain text
#: emacs-lisp-intro.texi:16965
msgid ""
"You can specify variables using @code{defcustom} so that you and others can "
"then use Emacs's @code{customize} feature to set their values.  (You cannot "
"use @code{customize} to write function definitions; but you can write "
"@code{defuns} in your @file{.emacs} file.  Indeed, you can write any Lisp "
"expression in your @file{.emacs} file.)"
msgstr ""
"Se pueden especificar variables usando @code{defcustom}\n"
"as@'{@dotless{i}} que la gente pueda usar la funcionalidad de\n"
"Emacs @code{customize} para asignar sus valores. (No se puede usar\n"
"@code{customize} para escribir definiciones de funci@'on; pero se\n"
"pueden escribir @code{defuns} en tu fichero @file{.emacs}. En vez de\n"
"eso, se puede escribir cualquier expresi@'on Lisp en tu fichero\n"
"@file{.emacs})."

#. type: Plain text
#: emacs-lisp-intro.texi:16970
msgid ""
"The @code{customize} feature depends on the @code{defcustom} special form.  "
"Although you can use @code{defvar} or @code{setq} for variables that users "
"set, the @code{defcustom} special form is designed for the job."
msgstr ""
"La funcionalidad @code{customize} depende de la forma especial\n"
"@code{defcustom}. Aunque se puede usar @code{defvar} o @code{setq}\n"
"para las variables que los usuarios asignan, la forma especial\n"
"@code{defcustom} est@'a dise@~nada para el trabajo."

#. type: Plain text
#: emacs-lisp-intro.texi:16977
msgid ""
"You can use your knowledge of @code{defvar} for writing the first three "
"arguments for @code{defcustom}.  The first argument to @code{defcustom} is "
"the name of the variable.  The second argument is the variable's initial "
"value, if any; and this value is set only if the value has not already been "
"set.  The third argument is the documentation."
msgstr ""
"Se puede usar tu conocimiento de @code{defvar} para escribir los\n"
"primeros tres argumentos para @code{defcustom}. El primer argumento\n"
"para @code{defcustom} es el nombre de la variable. El segundo\n"
"argumento es el valor inicial de la variable, cualquiera; y este\n"
"valor es asignado solo si el valor no ha sido ya asignado. El tercer\n"
"argumento es la documentaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:16981
msgid ""
"The fourth and subsequent arguments to @code{defcustom} specify types and "
"options; these are not featured in @code{defvar}.  (These arguments are "
"optional.)"
msgstr ""
"El cuarto y subsiguientes argumentos para @code{defcustom} especifican\n"
"los tipos y opciones; estos no son funcionales en @code{defvar}. (Estos\n"
"argumentos son opcionales.)"

#. type: Plain text
#: emacs-lisp-intro.texi:16984
msgid ""
"Each of these arguments consists of a keyword followed by a value.  Each "
"keyword starts with the colon character @samp{:}."
msgstr ""
"Cada uno de estos argumentos consiste de una palabra seguido de una\n"
"palabra por un valor. Cada palabra clave empieza con los dos puntos @samp{:}."

#. type: Plain text
#: emacs-lisp-intro.texi:16988
msgid ""
"For example, the customizable user option variable @code{text-mode-hook} "
"looks like this:"
msgstr ""
"Por ejemplo, la variable de opciones personalizable\n"
"@code{text-mode-hook} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:16996
#, no-wrap
msgid ""
"(defcustom text-mode-hook nil\n"
"  \"Normal hook run when entering Text mode and many related modes.\"\n"
"  :type 'hook\n"
"  :options '(turn-on-auto-fill flyspell-mode)\n"
"  :group 'wp)\n"
msgstr ""
"(defcustom text-mode-hook nil\n"
"  \"El hook normal se ejecuta cuando se introduce en modo texto y\n"
"  muchos modos relacionados.\"\n"
"  :type 'hook\n"
"  :options '(turn-on-auto-fill flyspell-mode)\n"
"  :group 'data)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17002
msgid ""
"The name of the variable is @code{text-mode-hook}; it has no default value; "
"and its documentation string tells you what it does."
msgstr ""
"El nombre de la variable es @code{text-mode-hook}; no tiene valor por\n"
"defecto; y su cadena de documentaci@'on cuenta lo que hace."

#. type: Plain text
#: emacs-lisp-intro.texi:17006
msgid ""
"The @code{:type} keyword tells Emacs the kind of data to which @code{text-"
"mode-hook} should be set and how to display the value in a Customization "
"buffer."
msgstr ""
"La palabra clave @code{:type} le cuenta a Emacs el tipo de datos para\n"
"los que @code{text-mode-hook} ser@'{@dotless{i}}a asignado y como\n"
"muestra el valor en un b@'uffer de Personalizaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:17013
msgid ""
"The @code{:options} keyword specifies a suggested list of values for the "
"variable.  Usually, @code{:options} applies to a hook.  The list is only a "
"suggestion; it is not exclusive; a person who sets the variable may set it "
"to other values; the list shown following the @code{:options} keyword is "
"intended to offer convenient choices to a user."
msgstr ""
"La palabra clave @code{:options} especifica una lista sugerida de\n"
"valores para la variable. Normalmente, @code{:options} se asocia a un\n"
"gancho (@emph{hook}. La lista es solo una sugerencia; esa no es\n"
"exclusiva; una persona quien asigna la variable puede asignarse a\n"
"otros valores; la lista mostrada siguiendo la palabra clave\n"
"@code{:options} se pretende ofrecer elecciones convenientes a un\n"
"usuario."

#. type: Plain text
#: emacs-lisp-intro.texi:17017
msgid ""
"Finally, the @code{:group} keyword tells the Emacs Customization command in "
"which group the variable is located.  This tells where to find it."
msgstr ""
"Finalmente, la palabra clave @code{:group} cuenta el comando de\n"
"Personalizaci@'on de Emacs en el que el grupo de la variable est@'a\n"
"localizado. Esto cuenta d@'onde encontralo."

#. type: Plain text
#: emacs-lisp-intro.texi:17021
msgid ""
"The @code{defcustom} function recognizes more than a dozen keywords.  For "
"more information, see @ref{Customization, , Writing Customization "
"Definitions, elisp, The GNU Emacs Lisp Reference Manual}."
msgstr ""
"La funci@'on @code{defcustom} reconoce m@'as de una docena de palabras\n"
"clave. Para m@'as informaci@'on, mire @ref{Personalizaci@'on, ,\n"
"Escribiendo las Definiciones de Personalizaci@'on, elisp, El Manual de\n"
"Referencia GNU Emacs Lisp}."

#. type: Plain text
#: emacs-lisp-intro.texi:17023
msgid "Consider @code{text-mode-hook} as an example."
msgstr "Considere @code{text-mode-hook} como un ejemplo."

#. type: Plain text
#: emacs-lisp-intro.texi:17026
msgid ""
"There are two ways to customize this variable.  You can use the "
"customization command or write the appropriate expressions yourself."
msgstr ""
"Hay dos caminos para personalizar esta variable. Se puede usar el\n"
"comando de personalizaci@'on o escribir las expresiones apropiadas por\n"
"uno mismo."

#. type: Plain text
#: emacs-lisp-intro.texi:17029
msgid "Using the customization command, you can type:"
msgstr "Usando el comando de personalizaci@'on, se puede escribir:"

#. type: smallexample
#: emacs-lisp-intro.texi:17032
#, no-wrap
msgid "M-x customize\n"
msgstr "M-x customize\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17039
msgid ""
"and find that the group for editing files of data is called `data'.  Enter "
"that group.  Text Mode Hook is the first member.  You can click on its "
"various options, such as @code{turn-on-auto-fill}, to set the values.  After "
"you click on the button to"
msgstr ""
"y encuentre que el grupo para editar ficheros de datos se llama\n"
"`datos'. Introduzca este grupo. El Hook @emph{Disparador} es el primer\n"
"miembro. Se puede hacer click en sus opciones varias, tal como\n"
"@code{turn-on-auto-fill}, para asignar los valores. Despu@'es de hacer\n"
"click en el bot@'on."

#. type: smallexample
#: emacs-lisp-intro.texi:17042 emacs-lisp-intro.texi:17094
#, no-wrap
msgid "Save for Future Sessions\n"
msgstr "Gu@'ardalo para Futuras Sesiones\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17047
msgid ""
"Emacs will write an expression into your @file{.emacs} file.  It will look "
"like this:"
msgstr ""
"Emacs escribir@'a una expresi@'on en tu fichero @file{.emacs}. Se\n"
"parecer@'a a esto:"

#. type: group
#: emacs-lisp-intro.texi:17056
#, no-wrap
msgid ""
"(custom-set-variables\n"
"  ;; custom-set-variables was added by Custom.\n"
"  ;; If you edit it by hand, you could mess it up, so be careful.\n"
"  ;; Your init file should contain only one such instance.\n"
"  ;; If there is more than one, they won't work right.\n"
" '(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify))))\n"
msgstr ""
"(custom-set-variables\n"
"  ;; custom-set-variables fu@'e a@~nadido por Custom.\n"
"  ;; Si se edita a mano, tu podr@'{@dotless{i}}as liarte,\n"
"  ;; as@'{@dotless{i}} que ten cuidado.\n"
"  ;; Tu fichero init contendr@'{@dotless{i}}a solo esta instancia.\n"
"  ;; Si hay m@'as de uno, ellos no quieren trabajar.\n"
" '(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17063
msgid ""
"(The @code{text-mode-hook-identify} function tells @code{toggle-text-mode-"
"auto-fill} which buffers are in Text mode.  It comes on automatically.)"
msgstr ""
"(La funci@'on @code{text-mode-hook-identify} cuenta\n"
"@code{toggle-text-mode-auto-fill} que buffers hay en modo Texto.  Eso\n"
"viene autom@'aticamente)"

#. type: Plain text
#: emacs-lisp-intro.texi:17070
msgid ""
"The @code{custom-set-variables} function works somewhat differently than a "
"@code{setq}.  While I have never learned the differences, I modify the "
"@code{custom-set-variables} expressions in my @file{.emacs} file by hand: I "
"make the changes in what appears to me to be a reasonable manner and have "
"not had any problems.  Others prefer to use the Customization command and "
"let Emacs do the work for them."
msgstr ""
"La funci@'on @code{custom-set-variables} funciona de alguna manera\n"
"diferente m@'as de un @code{setq}. Mientras yo nunca he aprendido las\n"
"diferencias, yo modifico las expresiones @code{custom-set-variable} en\n"
"mi fichero @file{.emacs} a mano: yo creo los cambios en los que\n"
"aparecen a mi para ser una manera razonable y no tener \n"
"problemas. Otros prefieren usar el comando de Personalizaci@'on y\n"
"permitir a Emacs hacer el trabajo para ellos."

#. type: Plain text
#: emacs-lisp-intro.texi:17076
msgid ""
"Another @code{custom-set-@dots{}} function is @code{custom-set-faces}.  This "
"function sets the various font faces.  Over time, I have set a considerable "
"number of faces.  Some of the time, I re-set them using @code{customize}; "
"other times, I simply edit the @code{custom-set-faces} expression in my "
"@file{.emacs} file itself."
msgstr ""
"Otra funci@'on @code{custom-set-@dots{}} es\n"
"@code{custom-set-faces}. Esta funci@'on asigna varios tipos de\n"
"fuentes. A trav@'es del tiempo, yo he asignado un considerable\n"
"n@'umero de tipos. Algo de tiempo, yo las reseteo usando\n"
"@code{customize}; otras veces, simplemente edito la expresi@'on\n"
"@code{custom-set-faces} en mi fichero @file{.emacs} en s@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:17080
msgid ""
"The second way to customize your @code{text-mode-hook} is to set it yourself "
"in your @file{.emacs} file using code that has nothing to do with the "
"@code{custom-set-@dots{}} functions."
msgstr ""
"El segundo modo de personalizar tu @code{text-mode-hook} es asignarte\n"
"a t@'{@dotless{i}} mismo en tu fichero @file{.emacs} usando c@'odigo\n"
"que no tiene nada que hacer con las funciones @code{custom-set-@dots{}}."

#. type: Plain text
#: emacs-lisp-intro.texi:17084
msgid ""
"When you do this, and later use @code{customize}, you will see a message "
"that says"
msgstr ""
"Cuando se hace esto, y despu@'es usa @code{customize}, se ver@'a un\n"
"mensaje que dice:"

#. type: smallexample
#: emacs-lisp-intro.texi:17087
#, no-wrap
msgid "CHANGED outside Customize; operating on it here may be unreliable.\n"
msgstr ""
"CHANGED fuera de Personalizar; operando dentro aqu@'{@dotless{i}}\n"
"puede ser no confiable.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17091
msgid "This message is only a warning.  If you click on the button to"
msgstr "Este mensaje es solo un aviso. Si se puede cliquear en el bot@'on a"

#. type: Plain text
#: emacs-lisp-intro.texi:17103
msgid ""
"Emacs will write a @code{custom-set-@dots{}} expression near the end of your "
"@file{.emacs} file that will be evaluated after your hand-written "
"expression.  It will, therefore, overrule your hand-written expression.  No "
"harm will be done.  When you do this, however, be careful to remember which "
"expression is active; if you forget, you may confuse yourself."
msgstr ""
"Emacs escribir@'a una expresi@'on @code{custom-set-@dots{}} cerca del\n"
"fin de tu fichero @file{.emacs} que ser@'a evaluado despu@'es de que\n"
"tu expresi@'on sea escrita a mano. Por esta raz@'on, se\n"
"sobreescribir@'a tu expresi@'on escrita a mano. Ning@'un da@~no ser@'a\n"
"hecho. Cuando se haga esto, sin embargo, ten cuidado para recordar que\n"
"expresi@'on est@'a activa; si olvidas, puedes confundirte por\n"
"t@'{@dotless{i}} mismo."

#. type: Plain text
#: emacs-lisp-intro.texi:17107
msgid ""
"So long as you remember where the values are set, you will have no trouble.  "
"In any event, the values are always set in your initialization file, which "
"is usually called @file{.emacs}."
msgstr ""
"Tan largo como se recuerda donde los valores son configurados, no\n"
"habr@'a problemas. En cualquier eventos, los valores son siempre\n"
"configurados en tu fichero de inicializaci@'on, que es normalmente\n"
"llamado @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:17110
msgid ""
"I myself use @code{customize} for hardly anything.  Mostly, I write "
"expressions myself."
msgstr ""
"Yo mismo hago un @code{customize} para cualquier\n"
"cosa. Mayoritariamente, escribo expresiones por m@'{@dotless{i}}\n"
"mismo."

#. type: findex
#: emacs-lisp-intro.texi:17111
#, no-wrap
msgid "defsubst"
msgstr "defsubst"

#. type: findex
#: emacs-lisp-intro.texi:17112
#, no-wrap
msgid "defconst"
msgstr "defconst"

#. type: Plain text
#: emacs-lisp-intro.texi:17119
msgid ""
"Incidentally, to be more complete concerning defines: @code{defsubst} "
"defines an inline function.  The syntax is just like that of @code{defun}.  "
"@code{defconst} defines a symbol as a constant.  The intent is that neither "
"programs nor users should ever change a value set by @code{defconst}.  (You "
"can change it; the value set is a variable; but please do not.)"
msgstr ""
"Incidentalmente, para ser una definici@'on concerniente m@'as\n"
"completa: @code{defsubst} define una funci@'on inline. La sintaxis es\n"
"solo como esta de @code{defun}. @code{defconst} define un\n"
"s@'{@dotless{i}}mbolo como una constante. El intento es que ning@'un\n"
"programa o usuario cambiar@'{@dotless{i}}an un valor asignado por\n"
"@code{defconst}. (Se puede cambiar; el valor asignado es una variable;\n"
"pero por favor no lo haga.)"

#. type: section
#: emacs-lisp-intro.texi:17121
#, no-wrap
msgid "Beginning a @file{.emacs} File"
msgstr "Empieza por un fichero @file{.emacs}"

#. type: cindex
#: emacs-lisp-intro.texi:17122
#, no-wrap
msgid "@file{.emacs} file, beginning of"
msgstr "fichero @file{.emacs}, empezando"

#. type: Plain text
#: emacs-lisp-intro.texi:17127
msgid ""
"When you start Emacs, it loads your @file{.emacs} file unless you tell it "
"not to by specifying @samp{-q} on the command line.  (The @code{emacs -q} "
"command gives you a plain, out-of-the-box Emacs.)"
msgstr ""
"Cuando se abre Emacs, se carga tu fichero @file{.emacs} a menos que\n"
"se cuente que no se especifique @samp{-q} en la l@'{@dotless{i}}nea de\n"
"comandos. (El comando @code{emacs -q} tu da un Emacs plano, fuera.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17131
msgid ""
"A @file{.emacs} file contains Lisp expressions.  Often, these are no more "
"than expressions to set values; sometimes they are function definitions."
msgstr ""
"Un fichero @file{.emacs} contiene expresiones Lisp. Con frecuencia, no\n"
"hay m@'as expresiones para configura valores; algunas veces esas son\n"
"definiciones de funciones."

#. type: Plain text
#: emacs-lisp-intro.texi:17134
msgid ""
"@xref{Init File, , The Init File @file{~/.emacs}, emacs, The GNU Emacs "
"Manual}, for a short description of initialization files."
msgstr ""
"@xref{Fichero de Inicio, , El Fichero de Inicio @file{~/.emacs},\n"
"emacs, El Manual GNU Emacs}, para una corta descripci@'on de fichero\n"
"de inicializaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:17137
msgid ""
"This chapter goes over some of the same ground, but is a walk among extracts "
"from a complete, long-used @file{.emacs} file---my own."
msgstr ""
"Este cap@'{@dotless{i}}tulo cubre algo del mismo suelo, pero es un\n"
"paseo entre extractos desde un completo, largamente usado fichero\n"
"@file{.emacs} --- por m@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:17141
msgid ""
"The first part of the file consists of comments: reminders to myself.  By "
"now, of course, I remember these things, but when I started, I did not."
msgstr ""
"La primera parte del fichero consiste en comentario: me recuerdo a\n"
"m@'{@dotless{i}} mismo. Por ahora, yo recuerdo estas cosas, pero\n"
"cuando empec@'e, no."

#. type: group
#: emacs-lisp-intro.texi:17148
#, no-wrap
msgid ""
";;;; Bob's .emacs file\n"
"; Robert J. Chassell\n"
"; 26 September 1985\n"
msgstr ""
";;;; fichero .emacs de Bob\n"
"; Robert J. Chassell\n"
"; 26 de Septiembre de 1985\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17154
msgid ""
"Look at that date! I started this file a long time ago.  I have been adding "
"to it ever since."
msgstr ""
"@exclamdown{}Mira en esta fecha! Yo empec@'e este fichero hace mucho\n"
"tiempo. Yo he estado a@~nadiendo cosas desde siempre."

#. type: group
#: emacs-lisp-intro.texi:17161
#, no-wrap
msgid ""
"; Each section in this file is introduced by a\n"
"; line beginning with four semicolons; and each\n"
"; entry is introduced by a line beginning with\n"
"; three semicolons.\n"
msgstr ""
"; Cada secci@'on en este fichero es introducido por una\n"
"; l@'{@dotless{i}}nea empezando con cuatro puntos y comas y cada\n"
"; entrada es introducida por una l@'{@dotless{i}}nea empezando con\n"
"; tres puntos y comas.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17170
msgid ""
"This describes the usual conventions for comments in Emacs Lisp.  Everything "
"on a line that follows a semicolon is a comment.  Two, three, and four "
"semicolons are used as subsection and section markers.  (@xref{Comments, ,, "
"elisp, The GNU Emacs Lisp Reference Manual}, for more about comments.)"
msgstr ""
"Esto describe las convenciones usuales para comentarios en Emacs\n"
"Lisp. Cada cosa en una l@'{@dotless{i}}nea que sigue un punto y coma\n"
"es un comentario. Dos, tres, y cuatro puntos y coma son usados como\n"
"subsecci@'on y marcas de secci@'on. (@xref{Comentarios, ,, elisp, El\n"
"Manual de Referencia GNU Emacs Lisp}, para m@'as comentarios.)"

#. type: group
#: emacs-lisp-intro.texi:17179
#, no-wrap
msgid ""
";;;; The Help Key\n"
"; Control-h is the help key;\n"
"; after typing control-h, type a letter to\n"
"; indicate the subject about which you want help.\n"
"; For an explanation of the help facility,\n"
"; type control-h two times in a row.\n"
msgstr ""
";;;; La Tecla de Ayuda\n"
"; Control-h es la tecla de ayuda;\n"
"; despu@'es escribiendo control-h, escribe una letra a\n"
"; indica el asunto acerca del que quieres ayuda.\n"
"; Para una explicaci@'on de la facilidad de ayuda,\n"
"; escribe control-h dos veces en una fila.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17184
msgid "Just remember: type @kbd{C-h} two times for help."
msgstr "Solo recuerda: escribe @kbd{C-h} dos veces para ayudar."

#. type: group
#: emacs-lisp-intro.texi:17191
#, no-wrap
msgid ""
"; To find out about any mode, type control-h m\n"
"; while in that mode.  For example, to find out\n"
"; about mail mode, enter mail mode and then type\n"
"; control-h m.\n"
msgstr ""
"; Para informarse acerca de cualquier modo, escribe control-h m\n"
"; mientras est@'e en este modo. Por ejemplo, para encontrar\n"
"; acerca del modo correo, introduce el modo correo y entonces\n"
"; escribe control-h m.\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17197
msgid ""
"`Mode help', as I call this, is very helpful.  Usually, it tells you all you "
"need to know."
msgstr ""
"`Modo ayuda', como yo llamo a esto, es muy @'util. Usualmente, se\n"
"cuenta todo lo que se necesita saber."

#. type: Plain text
#: emacs-lisp-intro.texi:17202
msgid ""
"Of course, you don't need to include comments like these in your @file{."
"emacs} file.  I included them in mine because I kept forgetting about Mode "
"help or the conventions for comments---but I was able to remember to look "
"here to remind myself."
msgstr ""
"De acuerdo, no se necesitan incluir comentarios y ficheros como estos \n"
"@file{.emacs}. Yo los inclu@'{@dotless{i}} en el m@'{@dotless{i}}o\n"
"porque se olvida el Modo ayuda o las convenciones para comentarios ---\n"
"pero era capaz de recordar ver aqu@'{@dotless{i}} record@'armelo a\n"
"m@'{@dotless{i}} mismo."

#. type: section
#: emacs-lisp-intro.texi:17204
#, no-wrap
msgid "Text and Auto Fill Mode"
msgstr "Modo texto y auto relleno"

#. type: Plain text
#: emacs-lisp-intro.texi:17208
msgid "Now we come to the part that `turns on' Text mode and Auto Fill mode."
msgstr ""
"Ahora regresa a la parte que `vuelve' al modo Texto y modo Auto Relleno."

#. type: group
#: emacs-lisp-intro.texi:17217
#, no-wrap
msgid ""
";;; Text mode and Auto Fill mode\n"
";; The next two lines put Emacs into Text mode\n"
";; and Auto Fill mode, and are for writers who\n"
";; want to start writing prose rather than code.\n"
"(setq-default major-mode 'text-mode)\n"
"(add-hook 'text-mode-hook 'turn-on-auto-fill)\n"
msgstr ""
";;; Modo texto modo Auto Fill\n"
";; Las siguiente dos l@'{@dotless{i}}neas puestas en Emacs dentro de\n"
";; modo Texto y en el modo Auto Fill, son para escritores que \n"
";; quieren empezar a escribir prosa en vez de c@'odigo.\n"
"(setq-default major-mode 'text-mode)\n"
"(add-hook 'text-mode-hook 'turn-on-auto-fill)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17222
msgid ""
"Here is the first part of this @file{.emacs} file that does something "
"besides remind a forgetful human!"
msgstr ""
"@exclamdown{}Aqu@'{@dotless{i}} est@'a la primera parte de este\n"
"fichero @file{.emacs} que hace alguna cosa bajo recuerdo de un humano\n"
"olvidado!"

#. type: Plain text
#: emacs-lisp-intro.texi:17226
msgid ""
"The first of the two lines in parentheses tells Emacs to turn on Text mode "
"when you find a file, @emph{unless} that file should go into some other "
"mode, such as C mode."
msgstr ""
"La primera de las dos l@'{@dotless{i}}neas entre par@'entesis cuentan a\n"
"Emacs a cambiar al modo Texto que se encuentra un fichero, @emph{a menos\n"
"que} el fichero ir@'{@dotless{i}}a dentro de alg@'un otro modo, tal\n"
"como el modo C."

#. type: cindex
#: emacs-lisp-intro.texi:17227
#, no-wrap
msgid "Per-buffer, local variables list"
msgstr "Por b@'uffer, lista de variables locales"

#. type: cindex
#: emacs-lisp-intro.texi:17228
#, no-wrap
msgid "Local variables list, per-buffer,"
msgstr "Lista de variables locales, por b@'uffer,"

#. type: cindex
#: emacs-lisp-intro.texi:17229
#, no-wrap
msgid "Automatic mode selection"
msgstr "Selecci@'on de modo autom@'atico"

#. type: cindex
#: emacs-lisp-intro.texi:17230
#, no-wrap
msgid "Mode selection, automatic"
msgstr "Modo de selecci@'on, autom@'atico"

#. type: Plain text
#: emacs-lisp-intro.texi:17239
msgid ""
"When Emacs reads a file, it looks at the extension to the file name, if "
"any.  (The extension is the part that comes after a @samp{.}.)  If the file "
"ends with a @samp{.c} or @samp{.h} extension then Emacs turns on C mode.  "
"Also, Emacs looks at first nonblank line of the file; if the line says "
"@w{@samp{-*- C -*-}}, Emacs turns on C mode.  Emacs possesses a list of "
"extensions and specifications that it uses automatically.  In addition, "
"Emacs looks near the last page for a per-buffer, ``local variables list'', "
"if any."
msgstr ""
"Cuando Emacs lee un fichero, eso parece la extensi@'on al nombre del\n"
"fichero. (La extensi@'on es la parte que viene despu@'es de un\n"
"@samp{.}.) Si el fichero finaliza con una extensi@'on @samp{.c} o\n"
"@samp{.h} entonces Emacs cambia al modo C. Tambi@'en, Emacs parece al\n"
"principio una l@'{@dotless{i}}nea no blanca del fichero; si la\n"
"l@'{@dotless{i}}nea dice @w{@samp{-*- C -*-}}, Emacs cambia al modo\n"
"C. Emacs posee una lista de extensiones y especificaciones que usa\n"
"autom@'aticamente. Adem@'as, Emacs se ve cerca de la @'ultima p@'agina\n"
"por buffer, ``lista variables locales''."

#. type: ifinfo
#: emacs-lisp-intro.texi:17243
msgid ""
"@xref{Choosing Modes, , How Major Modes are Chosen, emacs, The GNU Emacs "
"Manual}."
msgstr ""
"@xref{Eligiendo Modos, , Como los Modos Mayores son Elegidos, emacs,\n"
"El Manual GNU Emacs}."

#. type: ifinfo
#: emacs-lisp-intro.texi:17246 emacs-lisp-intro.texi:17390
msgid ""
"@xref{File Variables, , Local Variables in Files, emacs, The GNU Emacs "
"Manual}."
msgstr ""
"@xref{Variables de Fichero, , Variables Locales en Ficheros, emacs, El\n"
"Manual de GNU Emacs}."

#. type: iftex
#: emacs-lisp-intro.texi:17250
msgid ""
"See sections ``How Major Modes are Chosen'' and ``Local Variables in Files'' "
"in @cite{The GNU Emacs Manual}."
msgstr ""
"Mira las secciones ``C@'omo los Modos Mayores son Elegidos'' y\n"
"``Variables Locales en Fichero'' en @cite{El Manual GNU Emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:17253
msgid "Now, back to the @file{.emacs} file."
msgstr "Ahora, regresa al fichero @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:17256
msgid "Here is the line again; how does it work?"
msgstr ""
"Aqu@'{@dotless{i}} est@'a la l@'{@dotless{i}}nea de nuevo;\n"
"@questiondown{}c@'omo funciona?"

#. type: cindex
#: emacs-lisp-intro.texi:17257
#, no-wrap
msgid "Text Mode turned on"
msgstr "Modo Texto activado"

#. type: smallexample
#: emacs-lisp-intro.texi:17260
#, no-wrap
msgid "(setq major-mode 'text-mode)\n"
msgstr "(setq major-mode 'text-mode)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17264
msgid "This line is a short, but complete Emacs Lisp expression."
msgstr ""
"Esta l@'{@dotless{i}}nea es un resumen, pero completa la expresi@'on\n"
"Emacs Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:17274
msgid ""
"We are already familiar with @code{setq}.  It sets the following variable, "
"@code{major-mode}, to the subsequent value, which is @code{text-mode}.  The "
"single quote mark before @code{text-mode} tells Emacs to deal directly with "
"the @code{text-mode} symbol, not with whatever it might stand for.  "
"@xref{set & setq, , Setting the Value of a Variable}, for a reminder of how "
"@code{setq} works.  The main point is that there is no difference between "
"the procedure you use to set a value in your @file{.emacs} file and the "
"procedure you use anywhere else in Emacs."
msgstr ""
"Ya estamos familiarizados con @code{setq}. Eso asigna la siguiente\n"
"variable, @code{major-mode}, al subsiguiente valor, que es\n"
"@code{text-mode}. La marca de cita simple antes de @code{text-mode}\n"
"cuenta a Emacs como tratar directamente con el s@'{@dotless{i}}mbolo,\n"
"no con cualquier cosa que pudiera existir. @xref{set y setq, ,\n"
"Configurando el Valor de una Variable}, por un recuerdo de como\n"
"@code{setq} funciona. El principal punto es que no hay diferencia\n"
"entre el procedimiento que se usa para asignar un valor en su fichero\n"
"@file{.emacs} y el procedimiento que se usa en cualquier lugar m@'as\n"
"en Emacs."

#. type: Plain text
#: emacs-lisp-intro.texi:17277
msgid "Here is the next line:"
msgstr "Aqu@'{@dotless{i}} est@'a la siguiente l@'{@dotless{i}}nea:"

#. type: cindex
#: emacs-lisp-intro.texi:17278
#, no-wrap
msgid "Auto Fill mode turned on"
msgstr "Modo de autoajuste activado"

#. type: findex
#: emacs-lisp-intro.texi:17279
#, no-wrap
msgid "add-hook"
msgstr "add-hook"

#. type: smallexample
#: emacs-lisp-intro.texi:17282
#, no-wrap
msgid "(add-hook 'text-mode-hook 'turn-on-auto-fill)\n"
msgstr "(add-hook 'text-mode-hook 'turn-on-auto-fill)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17287
msgid ""
"In this line, the @code{add-hook} command adds @code{turn-on-auto-fill} to "
"the variable."
msgstr ""
"En esta l@'{@dotless{i}}nea, el comando @code{add-hook} a@~nade\n"
"@code{turn-on-auto-fill} para la variable."

#. type: Plain text
#: emacs-lisp-intro.texi:17290
msgid ""
"@code{turn-on-auto-fill} is the name of a program, that, you guessed it!, "
"turns on Auto Fill mode."
msgstr ""
"@exclamdown{}@code{turn-on-auto-fill} es el nombre de un programa,\n"
"que se adivina!, cambia al modo Auto Fill."

#. type: Plain text
#: emacs-lisp-intro.texi:17294
msgid ""
"Every time Emacs turns on Text mode, Emacs runs the commands `hooked' onto "
"Text mode.  So every time Emacs turns on Text mode, Emacs also turns on Auto "
"Fill mode."
msgstr ""
"Cada vez que Emacs cambia al modo texto, Emacs ejecuta el comando\n"
"`hooked' dentro de modo Texto. As@'{@dotless{i}} que cada vez que\n"
"Emacs cambia al modo Texto, Emacs tambi@'en cambia al modo de\n"
"autoajuste."

#. type: Plain text
#: emacs-lisp-intro.texi:17298
msgid ""
"In brief, the first line causes Emacs to enter Text mode when you edit a "
"file, unless the file name extension, a first non-blank line, or local "
"variables to tell Emacs otherwise."
msgstr ""
"En breve, la primera l@'{@dotless{i}}nea causa a Emacs a entrar en\n"
"modo Texto cuando se edite un fichero, a menos que la extensi@'on del\n"
"nombre del fichero, una l@'{@dotless{i}}nea no en blanco, variables\n"
"locales para contar a Emacs de otro modo."

#. type: Plain text
#: emacs-lisp-intro.texi:17305
msgid ""
"Text mode among other actions, sets the syntax table to work conveniently "
"for writers.  In Text mode, Emacs considers an apostrophe as part of a word "
"like a letter; but Emacs does not consider a period or a space as part of a "
"word.  Thus, @kbd{M-f} moves you over @samp{it's}.  On the other hand, in C "
"mode, @kbd{M-f} stops just after the @samp{t} of @samp{it's}."
msgstr ""
"El modo texto entre otras acciones, asigna la tabla de sintaxis para\n"
"trabajar adecuadamente a escritores. En modo texto, Emacs considera un\n"
"ap@'ostrofe como parte de una palabra como una letra; pero Emacs no\n"
"considera un per@'{@dotless{i}}odo o un espacio como parte de una\n"
"palabra. De este modo, @kbd{M-f} se mueve hacia t@'{@dotless{i}} a\n"
"trav@'es de @samp{eso}. Por otro lado, en modo C, @kbd{M-f} para solo\n"
"despu@'es del @samp{t} de @samp{eso}."

#. type: Plain text
#: emacs-lisp-intro.texi:17310
msgid ""
"The second line causes Emacs to turn on Auto Fill mode when it turns on Text "
"mode.  In Auto Fill mode, Emacs automatically breaks a line that is too wide "
"and brings the excessively wide part of the line down to the next line.  "
"Emacs breaks lines between words, not within them."
msgstr ""
"La segunda l@'{@dotless{i}}nea causa que Emacs active el modo Auto\n"
"Fill cuando cambia al modo Texto. En modo Auto Fill, Emacs\n"
"autom@'aticamente rompe una l@'{@dotless{i}}nea que es demasiado\n"
"amplio y trae la parte excesivamente amplia de la l@'{@dotless{i}}nea\n"
"de debajo a la siguiente l@'{@dotless{i}}nea. Emacs rompe\n"
"l@'{@dotless{i}}neas entre palabras con ellas."

#. type: Plain text
#: emacs-lisp-intro.texi:17316
msgid ""
"When Auto Fill mode is turned off, lines continue to the right as you type "
"them.  Depending on how you set the value of @code{truncate-lines}, the "
"words you type either disappear off the right side of the screen, or else "
"are shown, in a rather ugly and unreadable manner, as a continuation line on "
"the screen."
msgstr ""
"Cuando el modo Auto Fill est@'a desactivado, las l@'{@dotless{i}}neas\n"
"contin@'uan a la derecha como se escriben. Dependiendo de como\n"
"configuras el valor de @code{truncate-lines}, las palabras que se\n"
"escribe si desaparecen al lado derecho de la pantalla, o lo dem@'as\n"
"son mostradas, en un modo feo e ilegible, como una l@'{@dotless{i}}nea\n"
"de continuaci@'on en la pantalla."

#. type: Plain text
#: emacs-lisp-intro.texi:17320
msgid ""
"In addition, in this part of my @file{.emacs} file, I tell the Emacs fill "
"commands to insert two spaces after a colon:"
msgstr ""
"Adem@'as, en esta parte de mi fichero @file{.emacs}, yo cuento a Emacs\n"
"el ajuste de comandos para insertar dos espacios despu@'es de dos\n"
"puntos:"

#. type: smallexample
#: emacs-lisp-intro.texi:17323
#, no-wrap
msgid "(setq colon-double-space t)\n"
msgstr "(setq colon-double-space t)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17330
msgid ""
"Here is a @code{setq} that `turns on' mail aliases, along with more "
"reminders."
msgstr ""
"Aqu@'{@dotless{i}} hay un @code{setq} que `activa' el alias de correo,\n"
"para m@'as ocasiones."

#. type: group
#: emacs-lisp-intro.texi:17338
#, no-wrap
msgid ""
";;; Mail mode\n"
"; To enter mail mode, type `C-x m'\n"
"; To enter RMAIL (for reading mail),\n"
"; type `M-x rmail'\n"
"(setq mail-aliases t)\n"
msgstr ""
";;; Modo Correo\n"
"; Para entrar en el modo correo, escribe `C-x m'\n"
"; Para introducir RMAIL (para leer el correo),\n"
"; escribe `M-x rmail'\n"
"(setq mail-aliases t)\n"

#. type: cindex
#: emacs-lisp-intro.texi:17341
#, no-wrap
msgid "Mail aliases"
msgstr "Alias de correo"

#. type: Plain text
#: emacs-lisp-intro.texi:17346
msgid ""
"This @code{setq} command sets the value of the variable @code{mail-aliases} "
"to @code{t}.  Since @code{t} means true, the line says, in effect, ``Yes, "
"use mail aliases.''"
msgstr ""
"Este comando @code{setq} asigna el valor de la variable\n"
"@code{mail-aliases} al @code{t}. Desde que @code{t} significa cierto,\n"
"la l@'{@dotless{i}}nea dice, en efecto, ``S@'{@dotless{i}} uso alias\n"
"de correo.''"

#. type: Plain text
#: emacs-lisp-intro.texi:17350
msgid ""
"Mail aliases are convenient short names for long email addresses or for "
"lists of email addresses.  The file where you keep your `aliases' is "
"@file{~/.mailrc}.  You write an alias like this:"
msgstr ""
"Los alias de correo son nombres cortos convenientes para largas\n"
"direcciones de correo o para listas de direcciones de correo. El\n"
"fichero donde guardar tus `aliases' es @file{~/.mailrc}. Se escribe\n"
"un alias como este:"

#. type: smallexample
#: emacs-lisp-intro.texi:17353
#, no-wrap
msgid "alias geo george@@foobar.wiz.edu\n"
msgstr "alias geo george@@foobar.wiz.edu\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17358
msgid ""
"When you write a message to George, address it to @samp{geo}; the mailer "
"will automatically expand @samp{geo} to the full address."
msgstr ""
"Cuando se escribe un mensaje a Jorge, la direcci@'on a @samp{geo}; el\n"
"correo autom@'aticamente expandir@'a @samp{geo} a la direcci@'on completa."

#. type: cindex
#: emacs-lisp-intro.texi:17361
#, no-wrap
msgid "Tabs, preventing"
msgstr "Tabuladores, previniendo"

#. type: findex
#: emacs-lisp-intro.texi:17362
#, no-wrap
msgid "indent-tabs-mode"
msgstr "indent-tabs-mode"

#. type: Plain text
#: emacs-lisp-intro.texi:17369
msgid ""
"By default, Emacs inserts tabs in place of multiple spaces when it formats a "
"region.  (For example, you might indent many lines of text all at once with "
"the @code{indent-region} command.)  Tabs look fine on a terminal or with "
"ordinary printing, but they produce badly indented output when you use "
"@TeX{} or Texinfo since @TeX{} ignores tabs."
msgstr ""
"Por defecto, Emacs inserta tabulaciones en lugar en m@'ultiples\n"
"espacios cuando se formatea una regi@'on. (Por ejemplo, se\n"
"podr@'{@dotless{i}}an indentar muchas l@'{@dotless{i}}neas de texto\n"
"todo a la vez con el comando @code{indent-region}.) Los tabuladores se\n"
"ven bien en un terminal o con impresi@'on ordinaria, pero ellos\n"
"producen mala salida de indentaci@'on cuando se usa @TeX{} o Texinfo\n"
"puesto que @TeX{} ignora tabuladores."

#. type: Plain text
#: emacs-lisp-intro.texi:17372
msgid "The following turns off Indent Tabs mode:"
msgstr "Lo siguiente desactiva el modo de Indentar Tabulaciones:"

#. type: group
#: emacs-lisp-intro.texi:17377
#, no-wrap
msgid ""
";;; Prevent Extraneous Tabs\n"
"(setq-default indent-tabs-mode nil)\n"
msgstr ""
";;; Prevenir Tabulaciones Extra@~nas\n"
"(setq-default indent-tabs-mode nil)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17384
msgid ""
"Note that this line uses @code{setq-default} rather than the @code{setq} "
"command that we have seen before.  The @code{setq-default} command sets "
"values only in buffers that do not have their own local values for the "
"variable."
msgstr ""
"Note que esta l@'{@dotless{i}}nea usa @code{setq-default} en vez de el\n"
"comando @code{setq} que hemos visto antes. El comando\n"
"@code{setq-default} asigna valores solo en b@'uffers que no tienen sus\n"
"propios valores locales para la variable."

#. type: ifinfo
#: emacs-lisp-intro.texi:17387
msgid "@xref{Just Spaces, , Tabs vs. Spaces, emacs, The GNU Emacs Manual}."
msgstr ""
"@xref{Solo Espacios, Tabuladores versus Espacios, emacs, El Manual de GNU "
"Emacs}."

#. type: iftex
#: emacs-lisp-intro.texi:17394
msgid ""
"See sections ``Tabs vs.@: Spaces'' and ``Local Variables in Files'' in "
"@cite{The GNU Emacs Manual}."
msgstr ""
"Ver secciones ``Tabuladores versus Espacios'' y ``Variables Locales en\n"
"Ficheros'' en @cite{El Manual de GNU Emacs}."

#. type: section
#: emacs-lisp-intro.texi:17398
#, no-wrap
msgid "Some Keybindings"
msgstr "Algunos atajos"

#. type: Plain text
#: emacs-lisp-intro.texi:17401
msgid "Now for some personal keybindings:"
msgstr "Ahora para algunos atajos personales:"

#. type: group
#: emacs-lisp-intro.texi:17406
#, no-wrap
msgid ""
";;; Compare windows\n"
"(global-set-key \"\\C-cw\" 'compare-windows)\n"
msgstr ""
";;; Compara ventanas\n"
"(global-set-key \"\\C-cw\" 'compare-windows)\n"

#. type: findex
#: emacs-lisp-intro.texi:17409
#, no-wrap
msgid "compare-windows"
msgstr "compare-windows"

#. type: Plain text
#: emacs-lisp-intro.texi:17414
msgid ""
"@code{compare-windows} is a nifty command that compares the text in your "
"current window with text in the next window.  It makes the comparison by "
"starting at point in each window, moving over text in each window as far as "
"they match.  I use this command all the time."
msgstr ""
"@code{compare-windows} es un comando excelente que compara el texto en\n"
"tu ventana actual con texto de la siguiente ventana. Eso hace la\n"
"comparaci@'on empezando al punto en cada ventana, moviendo a trav@'es\n"
"del texto en cada ventana tan lejos como ellos asocian. Yo uso este\n"
"comando todo el tiempo."

#. type: Plain text
#: emacs-lisp-intro.texi:17416
msgid "This also shows how to set a key globally, for all modes."
msgstr ""
"Esto tambi@'en muestra como configurar una tecla globalmente, para\n"
"todo los modos"

#. type: cindex
#: emacs-lisp-intro.texi:17417
#, no-wrap
msgid "Setting a key globally"
msgstr "Configurando una tecla globalmente"

#. type: cindex
#: emacs-lisp-intro.texi:17418
#, no-wrap
msgid "Global set key"
msgstr "Asignar tecla global"

#. type: cindex
#: emacs-lisp-intro.texi:17419
#, no-wrap
msgid "Key setting globally"
msgstr "Asignando tecla globalmente"

#. type: findex
#: emacs-lisp-intro.texi:17420
#, no-wrap
msgid "global-set-key"
msgstr "global-set-key"

#. type: Plain text
#: emacs-lisp-intro.texi:17432
msgid ""
"The command is @code{global-set-key}.  It is followed by the keybinding.  In "
"a @file{.emacs} file, the keybinding is written as shown: @code{\\C-c} "
"stands for `control-c', which means `press the control key and the @key{c} "
"key at the same time'.  The @code{w} means `press the @key{w} key'.  The "
"keybinding is surrounded by double quotation marks.  In documentation, you "
"would write this as @w{@kbd{C-c w}}.  (If you were binding a @key{META} key, "
"such as @kbd{M-c}, rather than a @key{CTRL} key, you would write "
"@w{@code{\\M-c}} in your @file{.emacs} file.  @xref{Init Rebinding, , "
"Rebinding Keys in Your Init File, emacs, The GNU Emacs Manual}, for details.)"
msgstr ""
"El comando es @code{global-set-key}. Es seguido por el atajo. En un\n"
"fichero @file{.emacs}, el atajo es escrito como se ve: @code{\\C-c} que\n"
"se asocia a `control-c', que significa `presionar la tecla de control\n"
"y la tecla @key{c} al mismo tiempo'. La @code{w} significa `presionar\n"
"la tecla @key{w}'. El atajo es rodeado por dobles comillas. En la\n"
"documentaci@'on, se escribir@'{@dotless{i}}a esto como @w{@kbd{C-c\n"
"w}}. (Si estuviera asociando una tecla @key{META}, tal como @kbd{M-c},\n"
"en vez de una tecla de @key{CTRL}, se escribir@'{@dotless{i}}a\n"
"@w{@code{\\M-c}} en su fichero @file{.emacs}. @xref{Reasociando Init, ,\n"
"Reasociando Teclas en Su Fichero Init, emacs, El Manual de GNU Emacs},\n"
"para m@'as detalles.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17436
msgid ""
"The command invoked by the keys is @code{compare-windows}.  Note that "
"@code{compare-windows} is preceded by a single quote; otherwise, Emacs would "
"first try to evaluate the symbol to determine its value."
msgstr ""
"El comando invocado por las teclas es @code{compare-windows}. Note que\n"
"@code{compare-windows} es precedido por una comilla simple; de otro\n"
"modo, Emacs primero intentar@'{@dotless{i}}a evaluar el\n"
"s@'{@dotless{i}}mbolo para determinar su valor."

#. type: Plain text
#: emacs-lisp-intro.texi:17442
msgid ""
"These three things, the double quotation marks, the backslash before the "
"@samp{C}, and the single quote mark are necessary parts of keybinding that I "
"tend to forget.  Fortunately, I have come to remember that I should look at "
"my existing @file{.emacs} file, and adapt what is there."
msgstr ""
"Estas tres cosas, las marcas de dobles comillas, la barra invertida\n"
"antes de la @samp{C}, y la marca de comilla simple son partes\n"
"necesarias de atajos de teclado que tiendo a olvidar. Afortunadamente,\n"
"he llegado a recordar que mirar@'{@dotless{i}}a mi fichero\n"
"@file{.emacs} existente, y lo adaptar@'{@dotless{i}}a a lo que hay."

#. type: Plain text
#: emacs-lisp-intro.texi:17452
msgid ""
"As for the keybinding itself: @kbd{C-c w}.  This combines the prefix key, "
"@kbd{C-c}, with a single character, in this case, @kbd{w}.  This set of "
"keys, @kbd{C-c} followed by a single character, is strictly reserved for "
"individuals' own use.  (I call these `own' keys, since these are for my own "
"use.)  You should always be able to create such a keybinding for your own "
"use without stomping on someone else's keybinding.  If you ever write an "
"extension to Emacs, please avoid taking any of these keys for public use.  "
"Create a key like @kbd{C-c C-w} instead.  Otherwise, we will run out of "
"`own' keys."
msgstr ""
"Como para el atajo en s@'{@dotless{i}}: @kbd{C-c w}, combina la tecla\n"
"prefija, @kbd{C-c}, con un caracter simple, en este caso,\n"
"@kbd{w}. Este conjunto de teclas, @kbd{C-c} seguido por un caracter\n"
"simple, es estrictamente reservado para un uso propio\n"
"individual. (Esto se llama teclas `propias', puesto que estas son para\n"
"su propio uso). Siempre ser@'{@dotless{i}}a capaz de crear tal atajo\n"
"para el uso propio sin pisar fuerte en alg@'un atajo m@'as. Si siempre\n"
"se escribe una extensi@'on a Emacs, por favor, evite tomar cualquiera\n"
"de estas teclas para uso p@'ublico. Se cree que una tecla como\n"
"@kbd{C-c C-w} en vez de eso. De otra manera, ejecutar@'a sin sus\n"
"`propias' teclas."

#. type: Plain text
#: emacs-lisp-intro.texi:17455
msgid "Here is another keybinding, with a comment:"
msgstr "Aqu@'{@dotless{i}} hay otro atajo, con un comentario:"

#. type: group
#: emacs-lisp-intro.texi:17461
#, no-wrap
msgid ""
";;; Keybinding for `occur'\n"
"; I use occur a lot, so let's bind it to a key:\n"
"(global-set-key \"\\C-co\" 'occur)\n"
msgstr ""
";;; Atajo para `occur'\n"
"; Yo uso mucho occur, as@'{@dotless{i}} permite asignarlo a una tecla:\n"
"(global-set-key \"\\C-co\" 'occur)\n"

#. type: findex
#: emacs-lisp-intro.texi:17464
#, no-wrap
msgid "occur"
msgstr "occur"

#. type: Plain text
#: emacs-lisp-intro.texi:17469
msgid ""
"The @code{occur} command shows all the lines in the current buffer that "
"contain a match for a regular expression.  Matching lines are shown in a "
"buffer called @file{*Occur*}.  That buffer serves as a menu to jump to "
"occurrences."
msgstr ""
"El comando @code{occur} muestra todas las l@'{@dotless{i}}neas en el\n"
"buffer actual que contiene un emparejamiento para una expresi@'on\n"
"regular. Asociar las l@'{@dotless{i}}neas que se muestran en un\n"
"b@'uffer llamado @file{*Occur*}. Este buffer sirve como un menu para\n"
"saltar a ocurrencias."

#. type: findex
#: emacs-lisp-intro.texi:17470
#, no-wrap
msgid "global-unset-key"
msgstr "global-unset-key"

#. type: cindex
#: emacs-lisp-intro.texi:17471
#, no-wrap
msgid "Unbinding key"
msgstr "Disociando la tecla"

#. type: cindex
#: emacs-lisp-intro.texi:17472
#, no-wrap
msgid "Key unbinding"
msgstr "Desasociar Tecla a Comando"

#. type: Plain text
#: emacs-lisp-intro.texi:17476
msgid "Here is how to unbind a key, so it does not work:"
msgstr ""
"Aqu@'{@dotless{i}} se muestra como desasignar una tecla,\n"
"as@'{@dotless{i}} no funciona:"

#. type: group
#: emacs-lisp-intro.texi:17481
#, no-wrap
msgid ""
";;; Unbind `C-x f'\n"
"(global-unset-key \"\\C-xf\")\n"
msgstr ""
";;; Desasociar `C-x f'\n"
"(global-unset-key \"\\C-xf\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17489
msgid ""
"There is a reason for this unbinding: I found I inadvertently typed "
"@w{@kbd{C-x f}} when I meant to type @kbd{C-x C-f}.  Rather than find a "
"file, as I intended, I accidentally set the width for filled text, almost "
"always to a width I did not want.  Since I hardly ever reset my default "
"width, I simply unbound the key."
msgstr ""
"Hay una raz@'on para esta no asociaci@'on: Yo encontr@'e\n"
"inadvertidamente escrito @w{@kbd{C-x f}} cuando signific@'o escribir\n"
"@kbd{C-x C-f}. En vez de encontrar un fichero, como se pretende,\n"
"accidentalmente asigna el ancho para el fichero lleno, casi siempre a\n"
"un tama@~no que no quer@'{@dotless{i}}a. Puesto que duramente se\n"
"resete@'o mi ancho por defecto, yo simplemente disoci@'e la tecla."

#. type: findex
#: emacs-lisp-intro.texi:17490
#, no-wrap
msgid "list-buffers, @r{rebound}"
msgstr "list-buffers, @r{reasociar}"

#. type: findex
#: emacs-lisp-intro.texi:17491
#, no-wrap
msgid "buffer-menu, @r{bound to key}"
msgstr "buffer-menu, @r{asociado a tecla}"

#. type: Plain text
#: emacs-lisp-intro.texi:17494
msgid "The following rebinds an existing key:"
msgstr "Lo siguiente reasocia una tecla existente:"

#. type: group
#: emacs-lisp-intro.texi:17499
#, no-wrap
msgid ""
";;; Rebind `C-x C-b' for `buffer-menu'\n"
"(global-set-key \"\\C-x\\C-b\" 'buffer-menu)\n"
msgstr ""
";;; Reasocia `C-x C-b' al `buffer-menu'\n"
"(global-set-key \"\\C-x\\C-b\" 'buffer-menu)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17509
msgid ""
"By default, @kbd{C-x C-b} runs the @code{list-buffers} command.  This "
"command lists your buffers in @emph{another} window.  Since I almost always "
"want to do something in that window, I prefer the @code{buffer-menu} "
"command, which not only lists the buffers, but moves point into that window."
msgstr ""
"Por defecto, @kbd{C-x C-b} ejecute el comando\n"
"@code{list-buffers}. Este comando lista sus buffers en @emph{otra}\n"
"ventana. Desde que casi siempre se quiere hacer alguna cosa en esta\n"
"ventana, se prefiere el comando @code{buffer-menu}, que no solo lista\n"
"los buffers, pero mueve el punto dentro de esta ventana."

#. type: cindex
#: emacs-lisp-intro.texi:17513
#, no-wrap
msgid "Rebinding keys"
msgstr "Reasociando teclas"

#. type: Plain text
#: emacs-lisp-intro.texi:17519
msgid ""
"Emacs uses @dfn{keymaps} to record which keys call which commands.  When you "
"use @code{global-set-key} to set the keybinding for a single command in all "
"parts of Emacs, you are specifying the keybinding in @code{current-global-"
"map}."
msgstr ""
"Emacs usa @dfn{keymaps} para grabar qu@'e teclas llaman a qu@'e\n"
"comandos. Cuando se use @code{global-set-key} para asignar los atajos\n"
"de teclados a un simple comando en todo @code{current-global-map}."

#. type: Plain text
#: emacs-lisp-intro.texi:17523
msgid ""
"Specific modes, such as C mode or Text mode, have their own keymaps; the "
"mode-specific keymaps override the global map that is shared by all buffers."
msgstr ""
"Modos espec@'{@dotless{i}}ficos, tales como modo C o modo Texto, tiene\n"
"sus propios mapas de teclado; mapas de teclado de modo\n"
"espec@'{@dotless{i}}fico sobreescribe el mapa global que es compartido\n"
"por todos los buffers."

#. type: Plain text
#: emacs-lisp-intro.texi:17527
msgid ""
"The @code{global-set-key} function binds, or rebinds, the global keymap.  "
"For example, the following binds the key @kbd{C-x C-b} to the function "
"@code{buffer-menu}:"
msgstr ""
"La funci@'on @code{global-set-key} asocia, o reasocia, el mapa de\n"
"teclado global. Por ejemplo, las siguientes asociaciones la tecla\n"
"@kbd{C-x C-b} a la funci@'on @code{buffer-menu}:"

#. type: smallexample
#: emacs-lisp-intro.texi:17530
#, no-wrap
msgid "(global-set-key \"\\C-x\\C-b\" 'buffer-menu)\n"
msgstr "(global-set-key \"\\C-x\\C-b\" 'buffer-menu)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17537
msgid ""
"Mode-specific keymaps are bound using the @code{define-key} function, which "
"takes a specific keymap as an argument, as well as the key and the command.  "
"For example, my @file{.emacs} file contains the following expression to bind "
"the @code{texinfo-insert-@@group} command to @kbd{C-c C-c g}:"
msgstr ""
"Mapas de teclado espec@'{@dotless{i}}fico de modo son asociados usando\n"
"la funci@'on @code{define-key}, que toma un mapa de teclado\n"
"espec@'{@dotless{i}}fico como un argumento, tan bien como la tecla y\n"
"el comando. Por ejemplo, mi fichero @file{.emacs} contiene la\n"
"siguiente expresi@'on asociada al comando\n"
"@code{texinfo-insert-@@group} comando a @kbd{C-c C-c g}:"

#. type: group
#: emacs-lisp-intro.texi:17541
#, no-wrap
msgid "(define-key texinfo-mode-map \"\\C-c\\C-cg\" 'texinfo-insert-@@group)\n"
msgstr "(define-key texinfo-mode-map \"\\C-c\\C-cg\" 'texinfo-insert-@@group)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17552
msgid ""
"The @code{texinfo-insert-@@group} function itself is a little extension to "
"Texinfo mode that inserts @samp{@@group} into a Texinfo file.  I use this "
"command all the time and prefer to type the three strokes @kbd{C-c C-c g} "
"rather than the six strokes @kbd{@@ g r o u p}.  (@samp{@@group} and its "
"matching @samp{@@end group} are commands that keep all enclosed text "
"together on one page; many multi-line examples in this book are surrounded "
"by @samp{@@group @dots{} @@end group}.)"
msgstr ""
"La funci@'on @code{texinfo-insert-@@group} en s@'{@dotless{i}} es una\n"
"peque@~na extensi@'on del modo Texinfo que inserta @samp{@@group} dentro\n"
"de un fichero Texinfo. Se usa este comando todo el tiempo y se prefieren\n"
"escribir los tres atajos @kbd{C-c C-c g} en vez de los seis atajos\n"
"@kbd{@@ g r o u p}. (@samp{@@group} y su asociaci@'on @samp{@@end\n"
"group} son comandos que guarda todo el texto cerrado junto a una\n"
"p@'agina; muchos ejemplos multi-l@'{@dotless{i}}nea en este libro\n"
"est@'an rodeados por @samp{@@group @dots{} @@end group}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17555
msgid "Here is the @code{texinfo-insert-@@group} function definition:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a la definici@'on de funci@'on @code{texinfo-insert-"
"@@group}:"

#. type: group
#: emacs-lisp-intro.texi:17563
#, no-wrap
msgid ""
"(defun texinfo-insert-@@group ()\n"
"  \"Insert the string @@group in a Texinfo buffer.\"\n"
"  (interactive)\n"
"  (beginning-of-line)\n"
"  (insert \"@@group\\n\"))\n"
msgstr ""
"(defun texinfo-insert-@@group ()\n"
"  \"Inserta la cadena @@group en un b@'uffer Texinfo.\"\n"
"  (interactive)\n"
"  (beginning-of-line)\n"
"  (insert \"@@group\\n\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17569
msgid ""
"(Of course, I could have used Abbrev mode to save typing, rather than write "
"a function to insert a word; but I prefer key strokes consistent with other "
"Texinfo mode key bindings.)"
msgstr ""
"(De acuerdo, podr@'{@dotless{i}}a haber usado el modo Abbrev para\n"
"dejar de escribir, en vez de escribir una funci@'on para insertar una\n"
"palabra; pero prefiero atajos de teclado consitentes con otro modo\n"
"Texinfo para atajos de teclado.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17573
msgid ""
"You will see numerous @code{define-key} expressions in @file{loaddefs.el} as "
"well as in the various mode libraries, such as @file{cc-mode.el} and "
"@file{lisp-mode.el}."
msgstr ""
"Ver@'a numerosas expresiones @code{define-key} en @file{loaddefs.el}\n"
"tan bien como en varios modos de librer@'{@dotless{i}}as, tal como\n"
"@file{cc-mode.el} y @file{lisp-mode.el}."

#. type: Plain text
#: emacs-lisp-intro.texi:17577
msgid ""
"@xref{Key Bindings, , Customizing Key Bindings, emacs, The GNU Emacs "
"Manual}, and @ref{Keymaps, , Keymaps, elisp, The GNU Emacs Lisp Reference "
"Manual}, for more information about keymaps."
msgstr ""
"@xref{Atajos de Teclado, , Personalizando Atajos de Teclado, emacs, El\n"
"Manual  GNU Emacs}, y @ref{Mapas de Teclado, , Mapas de Teclado,\n"
"elisp, El Manual de Referencia GNU Emacs Lisp}, para m@'as\n"
"informaci@'on acerca de mapas de teclado."

#. type: cindex
#: emacs-lisp-intro.texi:17580
#, no-wrap
msgid "Loading files"
msgstr "Cargando ficheros"

#. type: Plain text
#: emacs-lisp-intro.texi:17587
msgid ""
"Many people in the GNU Emacs community have written extensions to Emacs.  As "
"time goes by, these extensions are often included in new releases.  For "
"example, the Calendar and Diary packages are now part of the standard GNU "
"Emacs, as is Calc."
msgstr ""
"Muchas personas en la comunidad de GNU Emacs han escrito extensiones a\n"
"Emacs. Hace tiempo, que estas extensiones son con frecuencia incluidas\n"
"en las nuevas entregas @emph{releases}. Por ejemplo, los paquetes\n"
"Calendario y Diario son ahora parte del est@'andar GNU Emacs, como es Calc."

#. type: Plain text
#: emacs-lisp-intro.texi:17591
msgid ""
"You can use a @code{load} command to evaluate a complete file and thereby "
"install all the functions and variables in the file into Emacs.  For example:"
msgstr ""
"Se puede usar un comando @code{load} para evaluar un fichero completo\n"
"que significa instalar todas las funciones y variables en el fichero\n"
"Emacs. Por ejemplo:"

#. type: smallexample
#: emacs-lisp-intro.texi:17596
#, no-wrap
msgid "(load \"~/emacs/slowsplit\")\n"
msgstr "(load \"~/emacs/slowsplit\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17603
msgid ""
"This evaluates, i.e., loads, the @file{slowsplit.el} file or if it exists, "
"the faster, byte compiled @file{slowsplit.elc} file from the @file{emacs} "
"sub-directory of your home directory.  The file contains the function "
"@code{split-window-quietly}, which John Robinson wrote in 1989."
msgstr ""
"Esto eval@'ua, por ej.@: carga, el fichero @file{slowsplit.el} o si\n"
"eso existe, lo m@'as r@'apido, el fichero compilado\n"
"@file{slowsplit.elc} desde el subdirectorio @file{emacs} del\n"
"directorio home. El fichero contiene la funci@'on\n"
"@code{split-window-quietly}, que John Robinson escribi@'o en 1989."

#. type: Plain text
#: emacs-lisp-intro.texi:17611
msgid ""
"The @code{split-window-quietly} function splits a window with the minimum of "
"redisplay.  I installed it in 1989 because it worked well with the slow 1200 "
"baud terminals I was then using.  Nowadays, I only occasionally come across "
"such a slow connection, but I continue to use the function because I like "
"the way it leaves the bottom half of a buffer in the lower of the new "
"windows and the top half in the upper window."
msgstr ""
"La funci@'on @code{split-window-quietly} divide una ventana con el\n"
"m@'{@dotless{i}}nimo de redisplay. Yo lo instal@'e en 1989 porque\n"
"trabaj@'o bien con los terminales de 1200 baudios que entonces estaba\n"
"usando. Ahora, ocasionalmente vengo a trav@'es de una conexi@'on\n"
"lenta, pero contin@'ua usando la funci@'on porque me gusta el camino\n"
"que deja arriba del b@'uffer en el bajo de las nuevas ventanas y\n"
"arriba en la ventana superior. "

#. type: Plain text
#: emacs-lisp-intro.texi:17616
msgid ""
"To replace the key binding for the default @code{split-window-vertically}, "
"you must also unset that key and bind the keys to @code{split-window-"
"quietly}, like this:"
msgstr ""
"Para reemplazar el atajo de teclado por defecto\n"
"@code{split-window-vertically}, se debe tambi@'en desasignar esta\n"
"tecla y asociar las teclas a @code{split-window-quietly}, como este:"

#. type: group
#: emacs-lisp-intro.texi:17621
#, no-wrap
msgid ""
"(global-unset-key \"\\C-x2\")\n"
"(global-set-key \"\\C-x2\" 'split-window-quietly)\n"
msgstr ""
"(global-unset-key \"\\C-x2\")\n"
"(global-set-key \"\\C-x2\" 'split-window-quietly)\n"

#. type: vindex
#: emacs-lisp-intro.texi:17624
#, no-wrap
msgid "load-path"
msgstr "load-path"

#. type: Plain text
#: emacs-lisp-intro.texi:17631
msgid ""
"If you load many extensions, as I do, then instead of specifying the exact "
"location of the extension file, as shown above, you can specify that "
"directory as part of Emacs's @code{load-path}.  Then, when Emacs loads a "
"file, it will search that directory as well as its default list of "
"directories.  (The default list is specified in @file{paths.h} when Emacs is "
"built.)"
msgstr ""
"Si se cargan muchas extensiones, como yo hago, entonces en vez de\n"
"especificar la posici@'on exacta del fichero, como se muestra arriba,\n"
"se puede especificar que directorio como parte del @code{load-path} de\n"
"Emacs. Entonces, cuando Emacs carga un fichero, buscar@'a que\n"
"directorio tan bien como su lista por defecto de directorios. (La\n"
"lista por defecto es especificada en @file{paths.h} cuando Emacs se\n"
"construye.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17635
msgid ""
"The following command adds your @file{~/emacs} directory to the existing "
"load path:"
msgstr ""
"El comando siguiente a@~nade tu directorio @file{~/emacs} a la ruta "
"existente:"

#. type: group
#: emacs-lisp-intro.texi:17640
#, no-wrap
msgid ""
";;; Emacs Load Path\n"
"(setq load-path (cons \"~/emacs\" load-path))\n"
msgstr ""
";;; Ruta Emacs\n"
"(setq load-path (cons \"~/emacs\" load-path))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17645
msgid ""
"Incidentally, @code{load-library} is an interactive interface to the "
"@code{load} function.  The complete function looks like this:"
msgstr ""
"Incidentalmente, @code{load-library} es un interfaz interactivo a la\n"
"funci@'on @code{load}. La funci@'on se parece a esto:"

#. type: findex
#: emacs-lisp-intro.texi:17646
#, no-wrap
msgid "load-library"
msgstr "load-library"

#. type: group
#: emacs-lisp-intro.texi:17658
#, no-wrap
msgid ""
"(defun load-library (library)\n"
"  \"Load the library named LIBRARY.\n"
"This is an interface to the function `load'.\"\n"
"  (interactive\n"
"   (list (completing-read \"Load library: \"\n"
"                          (apply-partially 'locate-file-completion-table\n"
"                                           load-path\n"
"                                           (get-load-suffixes)))))\n"
"  (load library))\n"
msgstr ""
"(defun load-library (library)\n"
"  \"Carga la librer@'{@dotless{i}}a llamada LIBRARY.\n"
"Esto es una interfaz a la funci@'on `load'.\"\n"
"  (interactive\n"
"   (list (completing-read \"Carga la librer@'{@dotless{i}}a: \"\n"
"                          (apply-partially 'locate-file-completion-table\n"
"                                           load-path\n"
"                                           (get-load-suffixes)))))\n"
"  (load library))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17664
msgid ""
"The name of the function, @code{load-library}, comes from the use of "
"`library' as a conventional synonym for `file'.  The source for the "
"@code{load-library} command is in the @file{files.el} library."
msgstr ""
"El nombre de la funci@'on, @code{load-libray}, viene desde el uso de\n"
"`library' como un sin@'onimo para `file'. La fuente para el comando\n"
"@code{load-library} est@'a en la librer@'{@dotless{i}}a @file{files.el}."

#. type: Plain text
#: emacs-lisp-intro.texi:17669
msgid ""
"Another interactive command that does a slightly different job is @code{load-"
"file}.  @xref{Lisp Libraries, , Libraries of Lisp Code for Emacs, emacs, The "
"GNU Emacs Manual}, for information on the distinction between @code{load-"
"library} and this command."
msgstr ""
"Otro comando interactivo que hace un trabajo ligeramente diferente es\n"
"@code{load-file}. @xref{Librer@'{@dotless{i}}as Lisp, ,\n"
"Librer@'{@dotless{i}}as de C@'odigo Lisp para Emacs, emacs, El Manual\n"
"GNU Emacs}, para informaci@'on en la distinci@'on entre\n"
"@code{load-library} y este comando."

#. type: section
#: emacs-lisp-intro.texi:17671
#, no-wrap
msgid "Autoloading"
msgstr "Autoloading"

#. type: findex
#: emacs-lisp-intro.texi:17672
#, no-wrap
msgid "autoload"
msgstr "autoload"

#. type: Plain text
#: emacs-lisp-intro.texi:17678
msgid ""
"Instead of installing a function by loading the file that contains it, or by "
"evaluating the function definition, you can make the function available but "
"not actually install it until it is first called.  This is called "
"@dfn{autoloading}."
msgstr ""
"En vez de instalar una funci@'on cargando el fichero que lo contiene,\n"
"o evaluando la definici@'on de funci@'on, se puede hacer la funci@'on\n"
"disponible pero actualmente no se instala hasta la primera vez\n"
"llamada. Este proceso se llama @dfn{autocarga} (@emph{autoloading})."

#. type: Plain text
#: emacs-lisp-intro.texi:17681
msgid ""
"When you execute an autoloaded function, Emacs automatically evaluates the "
"file that contains the definition, and then calls the function."
msgstr ""
"Cuando se ejecuta una funci@'on de autocarga, Emacs autom@'aticamente\n"
"eval@'ua el fichero que contiene la definici@'on, y entonces llama a\n"
"la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:17685
msgid ""
"Emacs starts quicker with autoloaded functions, since their libraries are "
"not loaded right away; but you need to wait a moment when you first use such "
"a function, while its containing file is evaluated."
msgstr ""
"Emacs empieza r@'apido con funciones de autocarga, puesto que sus\n"
"librer@'{@dotless{i}}as no se cargan bien; pero si necesita esperar un\n"
"momento cuando su primer uso tal como una funci@'on, mientras que el\n"
"fichero que lo contiene se eval@'ua."

#. type: Plain text
#: emacs-lisp-intro.texi:17692
msgid ""
"Rarely used functions are frequently autoloaded.  The @file{loaddefs.el} "
"library contains hundreds of autoloaded functions, from @code{bookmark-set} "
"to @code{wordstar-mode}.  Of course, you may come to use a `rare' function "
"frequently.  When you do, you should load that function's file with a "
"@code{load} expression in your @file{.emacs} file."
msgstr ""
"Raramente las funciones usadas son frecuentemente autocargadas. La\n"
"librer@'{@dotless{i}}a @file{loaddefs.el} coniene cientos de funciones\n"
"autocargadas, desde @code{bookmark-set} a @code{wordstar-mode}. Si se\n"
"usa una funci@'on `rara' frecuentemente, se deber@'{@dotless{i}}a\n"
"cargar este fichero de funci@'on con una expresi@'on de @code{load} en\n"
"tu fichero @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:17699
msgid ""
"In my @file{.emacs} file, I load 14 libraries that contain functions that "
"would otherwise be autoloaded.  (Actually, it would have been better to "
"include these files in my `dumped' Emacs, but I forgot.  @xref{Building "
"Emacs, , Building Emacs, elisp, The GNU Emacs Lisp Reference Manual}, and "
"the @file{INSTALL} file for more about dumping.)"
msgstr ""
"En mi fichero @file{.emacs}, se cargan 14 librer@'{@dotless{i}}as que\n"
"contienen funciones que de otro modo ser@'{@dotless{i}}an\n"
"autocargadas. (Actualmente, eso habr@'{@dotless{i}}a sido mejor para\n"
"incluir estos ficheros en mi Emacs `volcado', pero se\n"
"olvida. @xref{Construyendo Emacs, , Construyendo Emacs, elisp, El\n"
"Manual de Referencia GNU Emacs Lisp}, y el fichero @file{INSTALL} para\n"
"m@'as acerca de volcados.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17709
msgid ""
"You may also want to include autoloaded expressions in your @file{.emacs} "
"file.  @code{autoload} is a built-in function that takes up to five "
"arguments, the final three of which are optional.  The first argument is the "
"name of the function to be autoloaded; the second is the name of the file to "
"be loaded.  The third argument is documentation for the function, and the "
"fourth tells whether the function can be called interactively.  The fifth "
"argument tells what type of object---@code{autoload} can handle a keymap or "
"macro as well as a function (the default is a function)."
msgstr ""
"Se puede tambi@'en querer incluir expresiones autocargadas en tu\n"
"fichero @file{.emacs}. @code{autoload} es una funci@'on construida que\n"
"toma cinco argumento, los tres finales de los que son opcionales. El\n"
"primer argumento es el nombre de la funci@'on para ser autocargada. El\n"
"segundo es el nombre del fichero para ser cargado. El tercer\n"
"argumento es documentaci@'on para la funci@'on, y el cuarto cuenta si\n"
"la funci@'on puede ser llamada interactivmente. El quinto argumento\n"
"cuenta que tipo de objeto --- @code{autoload} puede manejar un mapa de\n"
"teclado o macro tan bien como una funci@'on (por defecto es una funci@'on)."

#. type: Plain text
#: emacs-lisp-intro.texi:17712
msgid "Here is a typical example:"
msgstr "Aqu@'{@dotless{i}} hay un ejemplo t@'{@dotless{i}}pico:"

#. type: group
#: emacs-lisp-intro.texi:17717
#, no-wrap
msgid ""
"(autoload 'html-helper-mode\n"
"  \"html-helper-mode\" \"Edit HTML documents\" t)\n"
msgstr ""
"(autoload 'html-helper-mode\n"
"  \"html-helper-mode\" \"Editar documentos HTML\" t)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17723
msgid ""
"(@code{html-helper-mode} is an older alternative to @code{html-mode}, which "
"is a standard part of the distribution.)"
msgstr ""
"(@code{html-helper-mode} es una vieja alternativa a @code{html-mode},\n"
"que es una parte est@'andar de la distribuci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17735
msgid ""
"This expression autoloads the @code{html-helper-mode} function.  It takes it "
"from the @file{html-helper-mode.el} file (or from the byte compiled version "
"@file{html-helper-mode.elc}, if that exists.)  The file must be located in a "
"directory specified by @code{load-path}.  The documentation says that this "
"is a mode to help you edit documents written in the HyperText Markup "
"Language.  You can call this mode interactively by typing @kbd{M-x html-"
"helper-mode}.  (You need to duplicate the function's regular documentation "
"in the autoload expression because the regular function is not yet loaded, "
"so its documentation is not available.)"
msgstr ""
"Esta expresi@'on autocarga la funci@'on @code{html-helper-mode}. Esto\n"
"se toma desde el fichero @file{html-helper-mode-el} (o desde la\n"
"versi@'on compilada @file{html-helper-mode.elc}, si eso existe). El\n"
"fichero debe ser localizado en un directorio espec@'{@dotless{i}}fico\n"
"por @code{load-path}. La documentaci@'on dice que esto es un modo para\n"
"ayudar a editar documentos escritos en Lenguaje de Marcas de Hiper\n"
"Texto. Se puede llamar este modo interactivamente escribiendo @kbd{M-x\n"
"html-helper-mode}. (Se necesitan duplicar las funciones regulares de\n"
"documentaci@'on en la expresi@'on de autocarga porque la funci@'on\n"
"regular no est@'a todav@'{@dotless{i}}a cargada, as@'{@dotless{i}} su\n"
"documentaci@'on no est@'a disponible.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17738
msgid ""
"@xref{Autoload, , Autoload, elisp, The GNU Emacs Lisp Reference Manual}, for "
"more information."
msgstr ""
"@xref{Autocarga, , Autocarga, elisp, El Manual de Referencia de GNU\n"
"Emacs Lisp}, para m@'as informaci@'on."

#. type: section
#: emacs-lisp-intro.texi:17740
#, no-wrap
msgid "A Simple Extension: @code{line-to-top-of-window}"
msgstr "Una extensi@'on simple: @code{line-to-top-of-window}"

#. type: findex
#: emacs-lisp-intro.texi:17741
#, no-wrap
msgid "line-to-top-of-window"
msgstr "line-to-top-of-window"

#. type: cindex
#: emacs-lisp-intro.texi:17742
#, no-wrap
msgid "Simple extension in @file{.emacs} file"
msgstr "Extensi@'on simple en fichero @file{.emacs}"

#. type: Plain text
#: emacs-lisp-intro.texi:17747
msgid ""
"Here is a simple extension to Emacs that moves the line point is on to the "
"top of the window.  I use this all the time, to make text easier to read."
msgstr ""
"Aqu@'{@dotless{i}} hay una simple extensi@'on a Emacs que mueve el\n"
"punto de l@'{@dotless{i}}nea arriba de la ventana. Yo uso esto todo el\n"
"tiempo, para hacer f@'acil de leer el texto."

#. type: Plain text
#: emacs-lisp-intro.texi:17751
msgid ""
"You can put the following code into a separate file and then load it from "
"your @file{.emacs} file, or you can include it within your @file{.emacs} "
"file."
msgstr ""
"Se puede poner el siguiente c@'odigo dentro de un fichero separado y\n"
"entonce cargarlo desde tu fichero @file{.emacs}, o se puede incluir\n"
"con tu fichero @file{.emacs}."

#. type: Plain text
#: emacs-lisp-intro.texi:17754
msgid "Here is the definition:"
msgstr "Aqu@'{@dotless{i}} est@'a la definici@'on"

#. type: group
#: emacs-lisp-intro.texi:17763
#, no-wrap
msgid ""
";;; Line to top of window;\n"
";;; replace three keystroke sequence  C-u 0 C-l\n"
"(defun line-to-top-of-window ()\n"
"  \"Move the line point is on to top of window.\"\n"
"  (interactive)\n"
"  (recenter 0))\n"
msgstr ""
";;; L@'{@dotless{i}}nea a lo alto de la ventana;\n"
";;; reemplaza tres secuencias de atajos de teclado  C-u 0 C-l\n"
"(defun line-to-top-of-window ()\n"
"  \"Mueve la l@'{@dotless{i}}nea que apunta a lo alto de la ventana.\"\n"
"  (interactive)\n"
"  (recenter 0))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17768
msgid "Now for the keybinding."
msgstr "Ahora el atajo."

#. type: Plain text
#: emacs-lisp-intro.texi:17773
msgid ""
"Nowadays, function keys as well as mouse button events and non-@sc{ascii} "
"characters are written within square brackets, without quotation marks.  (In "
"Emacs version 18 and before, you had to write different function key "
"bindings for each different make of terminal.)"
msgstr ""
"En estos d@'{@dotless{i}}as, las teclas de funci@'on as@'{@dotless{i}}\n"
"como los eventos del rat@'on y caracteres no @sc{ascii} son escritos\n"
"con corchetes, sin marcas de citas. (En Emacs versi@'on 18 y\n"
"anteriores, se ten@'{@dotless{i}}a que escribir diferentes teclas de\n"
"funci@'on asignadas por cada diferente creaci@'on del terminal.)"

#. type: Plain text
#: emacs-lisp-intro.texi:17776
msgid ""
"I bind @code{line-to-top-of-window} to my @key{F6} function key like this:"
msgstr ""
"Se puede asociar @code{line-to-top-of-window} a la tecla de funci@'on\n"
"@key{F6} as@'{@dotless{i}}:"

#. type: smallexample
#: emacs-lisp-intro.texi:17779
#, no-wrap
msgid "(global-set-key [f6] 'line-to-top-of-window)\n"
msgstr "(global-set-key [f6] 'line-to-top-of-window)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17783
msgid ""
"For more information, see @ref{Init Rebinding, , Rebinding Keys in Your Init "
"File, emacs, The GNU Emacs Manual}."
msgstr ""
"Para m@'as informaci@'on, mira @ref{Reasociando el Init, , Reasociando\n"
"Teclas en tu fichero init, emacs, El Manual GNU Emacs}."

#. type: cindex
#: emacs-lisp-intro.texi:17784
#, no-wrap
msgid "Conditional 'twixt two versions of Emacs"
msgstr "Condicional marcar@'an estas dos versiones de Emacs"

#. type: cindex
#: emacs-lisp-intro.texi:17785
#, no-wrap
msgid "Version of Emacs, choosing"
msgstr "Versi@'on de Emacs, eligiendo"

#. type: cindex
#: emacs-lisp-intro.texi:17786
#, no-wrap
msgid "Emacs version, choosing"
msgstr "Versi@'on de Emacs, eligiendo"

#. type: Plain text
#: emacs-lisp-intro.texi:17790
msgid ""
"If you run two versions of GNU Emacs, such as versions 22 and 23, and use "
"one @file{.emacs} file, you can select which code to evaluate with the "
"following conditional:"
msgstr ""
"Si ejecutas dos versiones de GNU Emacs, tal como las versiones 22 y\n"
"23, y usas un fichero @file{.emacs}, se puede seleccionar qu@'e c@'odigo\n"
"eval@'ua el siguiente condicional:"

#. type: group
#: emacs-lisp-intro.texi:17800
#, no-wrap
msgid ""
"(cond\n"
" ((= 22 emacs-major-version)\n"
"  ;; evaluate version 22 code\n"
"  ( @dots{} ))\n"
" ((= 23 emacs-major-version)\n"
"  ;; evaluate version 23 code\n"
"  ( @dots{} )))\n"
msgstr ""
"(cond\n"
" ((= 22 emacs-major-version)\n"
"  ;; eval@'ua la version 22\n"
"  ( @dots{} ))\n"
" ((= 23 emacs-major-version)\n"
"  ;; eval@'ua la version 23 \n"
"  ( @dots{} )))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17817
msgid ""
"For example, recent versions blink their cursors by default.  I hate such "
"blinking, as well as other features, so I placed the following in my @file{."
"emacs} file@footnote{When I start instances of Emacs that do not load my "
"@file{.emacs} file or any site file, I also turn off blinking: @smallexample "
"emacs -q --no-site-file -eval '(blink-cursor-mode nil)' @exdent Or nowadays, "
"using an even more sophisticated set of options, emacs -Q -D @end "
"smallexample }:"
msgstr ""
"Por ejemplo, en versiones m@'as recientes se ocultan los cursores por\n"
"defecto. Si se odia tal ocultaci@'on se escribe lo siguiente en mi\n"
"fichero @file{.emacs}@footnote{Cuando se empiezan las instancias de\n"
"Emacs que no cargan mi fichero @file{.emacs} o cualquier fichero,\n"
"tambi@'en se puede deshabilitar la ocultaci@'on:\n"
"@smallexample\n"
"emacs -q --no-site-file -eval '(blink-cursor-mode nil)'\n"
"@exdent O ahora,\n"
"usando un conjunto m@'as sofisticado de opciones, emacs -Q - D \n"
"@end smallexample\n"
" }:"

#. type: group
#: emacs-lisp-intro.texi:17825
#, no-wrap
msgid ""
"(when (>= emacs-major-version 21)\n"
"  (blink-cursor-mode 0)\n"
"  ;; Insert newline when you press `C-n' (next-line)\n"
"  ;; at the end of the buffer\n"
"  (setq next-line-add-newlines t)\n"
msgstr ""
"(when (>= emacs-major-version 21)\n"
"  (blink-cursor-mode 0)\n"
"  ;; Inserta la nueva l@'{@dotless{i}}nea cuando se presiona `C-n' (next-line)\n"
"  ;; al fin del b@'uffer\n"
"  (setq next-line-add-newlines t)\n"

#. type: group
#: emacs-lisp-intro.texi:17829
#, no-wrap
msgid ""
"  ;; Turn on image viewing\n"
"  (auto-image-file-mode t)\n"
msgstr ""
"  ;; Cambia la imagen viendo\n"
"  (auto-image-file-mode t)\n"

#. type: group
#: emacs-lisp-intro.texi:17834
#, no-wrap
msgid ""
"  ;; Turn on menu bar (this bar has text)\n"
"  ;; (Use numeric argument to turn on)\n"
"  (menu-bar-mode 1)\n"
msgstr ""
"  ;; Activa la barra de menu (esta barra tiene texto)\n"
"  ;; (Usa un argumento num@'erico para activarlo)\n"
"  (menu-bar-mode 1)\n"

#. type: group
#: emacs-lisp-intro.texi:17839
#, no-wrap
msgid ""
"  ;; Turn off tool bar (this bar has icons)\n"
"  ;; (Use numeric argument to turn on)\n"
"  (tool-bar-mode nil)\n"
msgstr ""
"   ;; Desactiva la barra de herramientas (esta barra tiene iconos)\n"
"   ;; (Usa argumentos num@'ericos para activarlo)\n"
"   (tool-bar-mode nil)\n"

#. type: group
#: emacs-lisp-intro.texi:17848
#, no-wrap
msgid ""
"  ;; Turn off tooltip mode for tool bar\n"
"  ;; (This mode causes icon explanations to pop up)\n"
"  ;; (Use numeric argument to turn on)\n"
"  (tooltip-mode nil)\n"
"  ;; If tooltips turned on, make tips appear promptly\n"
"  (setq tooltip-delay 0.1)  ; default is 0.7 second\n"
"   )\n"
msgstr ""
"  ;; Desactiva el modo tooltip para la tool bar\n"
"  ;; (Este modo causa explicaciones de iconos al pop up)\n"
"  ;; (Usa el argumento num@'erico para activarlo)\n"
"  (tooltip-mode nil)\n"
"  ;; Si los tooltips activados, crea consejos aparecen en el prompt\n"
"  (setq tooltip-delay 0.1)  ; por defecto es de 0.7 segundos\n"
"   )\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17856
msgid ""
"You can specify colors when you use Emacs with the MIT X Windowing system."
msgstr ""
"Se pueden especificar colores cuando se usa Emacs con el Sistema de\n"
"Ventanas X del MIT."

#. type: Plain text
#: emacs-lisp-intro.texi:17858
msgid "I dislike the default colors and specify my own."
msgstr "Si disgustan los colores por defecto y especifica unos propios."

#. type: Plain text
#: emacs-lisp-intro.texi:17862
msgid "Here are the expressions in my @file{.emacs} file that set values:"
msgstr ""
"Aqu@'{@dotless{i}} est@'an las expresiones en un fichero @file{.emacs}\n"
"que establecen los valores:"

#. type: group
#: emacs-lisp-intro.texi:17867
#, no-wrap
msgid ""
";; Set cursor color\n"
"(set-cursor-color \"white\")\n"
"\n"
msgstr ""
";; Asigna el color del cursor\n"
"(set-cursor-color \"white\")\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:17870
#, no-wrap
msgid ""
";; Set mouse color\n"
"(set-mouse-color \"white\")\n"
"\n"
msgstr ""
";; Asigna el color del rat@'on\n"
"(set-mouse-color \"white\")\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:17874
#, no-wrap
msgid ""
";; Set foreground and background\n"
"(set-foreground-color \"white\")\n"
"(set-background-color \"darkblue\")\n"
msgstr ""
";; Asigna foreground y background\n"
"(set-foreground-color \"white\")\n"
"(set-background-color \"darkblue\")\n"

#. type: group
#: emacs-lisp-intro.texi:17880
#, no-wrap
msgid ""
";;; Set highlighting colors for isearch and drag\n"
"(set-face-foreground 'highlight \"white\")\n"
"(set-face-background 'highlight \"blue\")\n"
msgstr ""
";;; Asigna colores para isearch y drag\n"
"(set-face-foreground 'highlight \"white\")\n"
"(set-face-background 'highlight \"blue\")\n"

#. type: group
#: emacs-lisp-intro.texi:17885
#, no-wrap
msgid ""
"(set-face-foreground 'region \"cyan\")\n"
"(set-face-background 'region \"blue\")\n"
msgstr ""
"(set-face-foreground 'region \"cyan\")\n"
"(set-face-background 'region \"blue\")\n"

#. type: group
#: emacs-lisp-intro.texi:17890
#, no-wrap
msgid ""
"(set-face-foreground 'secondary-selection \"skyblue\")\n"
"(set-face-background 'secondary-selection \"darkblue\")\n"
msgstr ""
"(set-face-foreground 'secondary-selection \"skyblue\")\n"
"(set-face-background 'secondary-selection \"darkblue\")\n"

#. type: group
#: emacs-lisp-intro.texi:17899
#, no-wrap
msgid ""
";; Set calendar highlighting colors\n"
"(setq calendar-load-hook\n"
"      (lambda ()\n"
"        (set-face-foreground 'diary-face   \"skyblue\")\n"
"        (set-face-background 'holiday-face \"slate blue\")\n"
"        (set-face-foreground 'holiday-face \"white\")))\n"
msgstr ""
";; Asigna colores al calendario\n"
"(setq calendar-load-hook\n"
"      '(lambda ()\n"
"         (set-face-foreground 'diary-face   \"skyblue\")\n"
"         (set-face-background 'holiday-face \"slate blue\")\n"
"         (set-face-foreground 'holiday-face \"white\")))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17904
msgid ""
"The various shades of blue soothe my eye and prevent me from seeing the "
"screen flicker."
msgstr ""
"Las varias sombras de azul disparan mi ojo y me preveen de ver la\n"
"ventana desplegada."

#. type: Plain text
#: emacs-lisp-intro.texi:17909
msgid ""
"Alternatively, I could have set my specifications in various X "
"initialization files.  For example, I could set the foreground, background, "
"cursor, and pointer (i.e., mouse) colors in my @file{~/.Xresources} file "
"like this:"
msgstr ""
"Alternativamente, se podr@'{@dotless{i}}an haber configurado mis\n"
"especificaciones en varios ficheros inicializaci@'on de X. Por\n"
"ejemplo, se podr@'{@dotless{i}}a asignar el foreground, background,\n"
"cursor y puntero (por ej., rat@'on) colores en mi fichero\n"
"@file{~/.Xresources} como esto:"

#. type: group
#: emacs-lisp-intro.texi:17916
#, no-wrap
msgid ""
"Emacs*foreground:   white\n"
"Emacs*background:   darkblue\n"
"Emacs*cursorColor:  white\n"
"Emacs*pointerColor: white\n"
msgstr ""
"Emacs*foreground:   white\n"
"Emacs*background:   darkblue\n"
"Emacs*cursorColor:  white\n"
"Emacs*pointerColor: white\n"

#. type: Plain text
#: emacs-lisp-intro.texi:17923
msgid ""
"In any event, since it is not part of Emacs, I set the root color of my X "
"window in my @file{~/.xinitrc} file, like this@footnote{I also run more "
"modern window managers, such as Enlightenment, Gnome, or KDE; in those "
"cases, I often specify an image rather than a plain color.}:"
msgstr ""
"En cualquier evento que no es parte de Emacs, se asigna el color\n"
"ra@'{@dotless{i}}z de mi ventana X en mi fichero @file{~/.xinitrc},\n"
"como este@footnote{tambi@'en se ejecutan gestores de ventanas m@'as\n"
"modernos, tales como Enlightenment, Gnome, o KDE; en estos casos, con\n"
"frecuencia se especifica una imagen en vez de un color plano.}"

#. type: smallexample
#: emacs-lisp-intro.texi:17926
#, no-wrap
msgid "xsetroot -solid Navy -fg white &\n"
msgstr "xsetroot -solid Navy -fg white &\n"

#. type: node
#: emacs-lisp-intro.texi:17929
#, no-wrap
msgid "Miscellaneous"
msgstr "Miscel@'anea"

#. type: section
#: emacs-lisp-intro.texi:17930
#, no-wrap
msgid "Miscellaneous Settings for a @file{.emacs} File"
msgstr "Configuraciones miscel@'aneas para un fichero @file{.emacs}"

#. type: Plain text
#: emacs-lisp-intro.texi:17934
msgid "Here are a few miscellaneous settings:"
msgstr "Aqu@'{@dotless{i}} hay unas pocas configuraciones miscel@'aneas:"

#. type: itemize
#: emacs-lisp-intro.texi:17939
msgid "Set the shape and color of the mouse cursor:"
msgstr "Asigna la forma y color del rat@'on del cursor:"

#. type: group
#: emacs-lisp-intro.texi:17946
#, no-wrap
msgid ""
"; Cursor shapes are defined in\n"
"; `/usr/include/X11/cursorfont.h';\n"
"; for example, the `target' cursor is number 128;\n"
"; the `top_left_arrow' cursor is number 132.\n"
msgstr ""
"; Formas de Cursor est@'an definidas en\n"
"; `/usr/include/X11/cursorfont.h';\n"
"; por ejemplo, el cursor `objetivo' es n@'umero 128;\n"
"; el cursor `top_left_arrow' es el n@'umero 132.\n"

#. type: group
#: emacs-lisp-intro.texi:17955
#, no-wrap
msgid ""
"(let ((mpointer (x-get-resource \"*mpointer\"\n"
"                                \"*emacs*mpointer\")))\n"
"  ;; If you have not set your mouse pointer\n"
"  ;;     then set it, otherwise leave as is:\n"
"  (if (eq mpointer nil)\n"
"      (setq mpointer \"132\")) ; top_left_arrow\n"
msgstr ""
"(let ((mpointer (x-get-resource \"*mpointer\"\n"
"                                \"*emacs*mpointer\")))\n"
"  ;; Si no se ha asignado tu puntero de rat@'on\n"
"  ;; entonces asignalo, de otro modo, d@'ejalo as@'{@dotless{i}}:\n"
"  (if (eq mpointer nil)\n"
"      (setq mpointer \"132\")) ; top_left_arrow\n"

#. type: group
#: emacs-lisp-intro.texi:17959
#, no-wrap
msgid ""
"  (setq x-pointer-shape (string-to-int mpointer))\n"
"  (set-mouse-color \"white\"))\n"
msgstr ""
"  (setq x-pointer-shape (string-to-int mpointer))\n"
"  (set-mouse-color \"white\"))\n"

#. type: itemize
#: emacs-lisp-intro.texi:17965
msgid ""
"Or you can set the values of a variety of features in an alist, like this:"
msgstr ""
"O se pueden asignar los valores de una variedad de funcionalidades en\n"
"una alist, como esta:"

#. type: group
#: emacs-lisp-intro.texi:17976
#, no-wrap
msgid ""
"(setq-default\n"
" default-frame-alist\n"
" '((cursor-color . \"white\")\n"
"   (mouse-color . \"white\")\n"
"   (foreground-color . \"white\")\n"
"   (background-color . \"DodgerBlue4\")\n"
"   ;; (cursor-type . bar)\n"
"   (cursor-type . box)\n"
msgstr ""
"(setq-default\n"
" default-frame-alist\n"
" '((cursor-color . \"white\")\n"
"   (mouse-color . \"white\")\n"
"   (foreground-color . \"white\")\n"
"   (background-color . \"DodgerBlue4\")\n"
"   ;; (cursor-type . bar)\n"
"   (cursor-type . box)\n"

#. type: group
#: emacs-lisp-intro.texi:17985
#, no-wrap
msgid ""
"   (tool-bar-lines . 0)\n"
"   (menu-bar-lines . 1)\n"
"   (width . 80)\n"
"   (height . 58)\n"
"   (font .\n"
"         \"-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1\")\n"
"   ))\n"
msgstr ""
"   (tool-bar-lines . 0)\n"
"   (menu-bar-lines . 1)\n"
"   (width . 80)\n"
"   (height . 58)\n"
"   (font .\n"
"         \"-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1\")\n"
"   ))\n"

#. type: itemize
#: emacs-lisp-intro.texi:17993
msgid ""
"Convert @kbd{@key{CTRL}-h} into @key{DEL} and @key{DEL} into @kbd{@key{CTRL}-"
"h}.@* (Some older keyboards needed this, although I have not seen the "
"problem recently.)"
msgstr ""
"Convierte @kbd{@key{CTRL}-h} dentro @key{DEL} y @key{DEL} dentro de\n"
"@kbd{@key{CTRL}-h}.@* (Algunos viejos teclados lo necesitan, aunque yo\n"
"no he visto el problema recientemente.)"

#. type: group
#: emacs-lisp-intro.texi:17998
#, no-wrap
msgid ""
";; Translate `C-h' to <DEL>.\n"
"; (keyboard-translate ?\\C-h ?\\C-?)\n"
"\n"
msgstr ""
";; Traducir `C-h' a <DEL>.\n"
"; (keyboard-translate ?\\C-h ?\\C-?)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:18001
#, no-wrap
msgid ""
";; Translate <DEL> to `C-h'.\n"
"(keyboard-translate ?\\C-? ?\\C-h)\n"
msgstr ""
";; Traducir <DEL> a `C-h'.\n"
"(keyboard-translate ?\\C-? ?\\C-h)\n"

#. type: item
#: emacs-lisp-intro.texi:18004
#, no-wrap
msgid "Turn off a blinking cursor!"
msgstr "@exclamdown{}Desactiva un cursor oculto!"

#. type: group
#: emacs-lisp-intro.texi:18010
#, no-wrap
msgid ""
"(if (fboundp 'blink-cursor-mode)\n"
"    (blink-cursor-mode -1))\n"
msgstr ""
"(if (fboundp 'blink-cursor-mode)\n"
"    (blink-cursor-mode -1))\n"

#. type: itemize
#: emacs-lisp-intro.texi:18015
msgid "or start GNU Emacs with the command @code{emacs -nbc}."
msgstr "o empieza GNU Emacs con el comando @code{emacs -nbc}."

#. type: item
#: emacs-lisp-intro.texi:18017
#, no-wrap
msgid "When using `grep'@*"
msgstr "Cuando se usa `grep'@*"

#. type: itemize
#: emacs-lisp-intro.texi:18022
msgid ""
"@samp{-i}@w{ } Ignore case distinctions@* @samp{-n}@w{ } Prefix each line of "
"output with line number@* @samp{-H}@w{ } Print the filename for each match."
"@* @samp{-e}@w{ } Protect patterns beginning with a hyphen character, "
"@samp{-}"
msgstr ""
"@samp{-i}@w{ } Ignore distinciones de letras@* @samp{-n}@w{ } El\n"
"prefijo de cada l@'{@dotless{i}}nea de la salida con el n@'umero de\n"
"l@'{@dotless{i}}neas@* @samp{-H}@w{ } Imprime el nombre de fichero\n"
"para cada cadena encontrada.@* @samp{-e}@w{ } Protege patrones\n"
"empezando con un caracter de gui@'on, @samp{-}"

#. type: smallexample
#: emacs-lisp-intro.texi:18025
#, no-wrap
msgid "(setq grep-command \"grep -i -nH -e \")\n"
msgstr "(setq grep-command \"grep -i -nH -e \")\n"

#. type: item
#: emacs-lisp-intro.texi:18038
#, no-wrap
msgid "Find an existing buffer, even if it has a different name@*"
msgstr ""
"Encuentra un b@'uffer existente, incluso si eso tiene un nombre\n"
"diferente@*"

#. type: itemize
#: emacs-lisp-intro.texi:18040
msgid "This avoids problems with symbolic links."
msgstr "Esto evita problemas con enlaces simb@'olicos."

#. type: smallexample
#: emacs-lisp-intro.texi:18043
#, no-wrap
msgid "(setq find-file-existing-other-name t)\n"
msgstr "(setq find-file-existing-other-name t)\n"

#. type: item
#: emacs-lisp-intro.texi:18045
#, no-wrap
msgid "Set your language environment and default input method"
msgstr "Configura tu entorno de lenguaje y el m@'etodo de entrada por defecto"

#. type: group
#: emacs-lisp-intro.texi:18053
#, no-wrap
msgid ""
"(set-language-environment \"latin-1\")\n"
";; Remember you can enable or disable multilingual text input\n"
";; with the @code{toggle-input-method'} (@kbd{C-\\}) command\n"
"(setq default-input-method \"latin-1-prefix\")\n"
msgstr ""
"(set-language-environment \"latin-1\")\n"
";; Recuerda que se puede habilitar o deshabilitar el texto de lenguaje\n"
";; multilingüe con el comando @code{toggle-input-method'} (@kbd{C-\\})\n"
"(setq default-input-method \"latin-1-prefix\")\n"

#. type: itemize
#: emacs-lisp-intro.texi:18057
msgid "If you want to write with Chinese `GB' characters, set this instead:"
msgstr "Si se quiere escribir con el caracter Chino `GB', asigna esto:"

#. type: group
#: emacs-lisp-intro.texi:18062
#, no-wrap
msgid ""
"(set-language-environment \"Chinese-GB\")\n"
"(setq default-input-method \"chinese-tonepy\")\n"
msgstr ""
"(set-language-environment \"Chinese-GB\")\n"
"(setq default-input-method \"chinese-tonepy\")\n"

#. type: subsubheading
#: emacs-lisp-intro.texi:18066
#, no-wrap
msgid "Fixing Unpleasant Key Bindings"
msgstr "Arreglando Atajos de Teclados"

#. type: cindex
#: emacs-lisp-intro.texi:18067
#, no-wrap
msgid "Key bindings, fixing"
msgstr "Atajos de Teclado, arreglando"

#. type: cindex
#: emacs-lisp-intro.texi:18068
#, no-wrap
msgid "Bindings, key, fixing unpleasant"
msgstr "Asociaciones, teclas, arreglando"

#. type: Plain text
#: emacs-lisp-intro.texi:18073
msgid ""
"Some systems bind keys unpleasantly.  Sometimes, for example, the @key{CTRL} "
"key appears in an awkward spot rather than at the far left of the home row."
msgstr ""
"Algunos sistemas asocian teclas de maneras no agradables. Algunas\n"
"veces, por ejemplo, la tecla @key{CTRL} en un modo perverso en vez de\n"
"la lejan@'{@dotless{i}}a a la izquierda de la fila."

#. type: Plain text
#: emacs-lisp-intro.texi:18079
msgid ""
"Usually, when people fix these sorts of keybindings, they do not change "
"their @file{~/.emacs} file.  Instead, they bind the proper keys on their "
"consoles with the @code{loadkeys} or @code{install-keymap} commands in their "
"boot script and then include @code{xmodmap} commands in their @file{."
"xinitrc} or @file{.Xsession} file for X Windows."
msgstr ""
"Normalmente, cuando las personas arreglan estos atajos de teclado, no\n"
"se cambia su fichero @file{~/.emacs}. En vez de eso, se asocian las\n"
"teclas apropiadas en sus consolas con los comandos @code{loadkeys} o\n"
"@code{install-keymap} en su script de inicio y entonces incluyen\n"
"comandos @code{xmodmap} en su fichero @file{.xinitrc} o\n"
"@file{.Xsession} para X Windows."

#. type: Plain text
#: emacs-lisp-intro.texi:18083
msgid "For a boot script:"
msgstr "Para un script de inicio:"

#. type: group
#: emacs-lisp-intro.texi:18087
#, no-wrap
msgid "loadkeys /usr/share/keymaps/i386/qwerty/emacs2.kmap.gz\n"
msgstr "loadkeys /usr/share/keymaps/i386/qwerty/emacs2.kmap.gz\n"

#. type: group
#: emacs-lisp-intro.texi:18089
#, no-wrap
msgid "install-keymap emacs2\n"
msgstr "install-keymap emacs2\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18096
msgid ""
"For a @file{.xinitrc} or @file{.Xsession} file when the @key{Caps Lock} key "
"is at the far left of the home row:"
msgstr ""
"Para un fichero @file{.xinitrc} o un fichero @file{.Xsession} cuando la\n"
"tecla @key{Caps Lock} es que tan lejos de la fila del home:"

#. type: group
#: emacs-lisp-intro.texi:18102
#, no-wrap
msgid ""
"# Bind the key labeled `Caps Lock' to `Control'\n"
"# (Such a broken user interface suggests that keyboard manufacturers\n"
"# think that computers are typewriters from 1885.)\n"
"\n"
msgstr ""
"# Asocia la tecla etiquetada `Caps Lock' a `Control'\n"
"# (Tal como un interfaz de usuario roto sugiere que el teclado hecho\n"
"# piensa que los ordenadores son m@'aquinas de escribir desde 1885.)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:18105
#, no-wrap
msgid ""
"xmodmap -e \"clear Lock\"\n"
"xmodmap -e \"add Control = Caps_Lock\"\n"
msgstr ""
"xmodmap -e \"clear Lock\"\n"
"xmodmap -e \"add Control = Caps_Lock\"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18112
msgid ""
"In a @file{.xinitrc} or @file{.Xsession} file, to convert an @key{ALT} key "
"to a @key{META} key:"
msgstr ""
"En un @file{.xinitrc} o @file{.Xsession}, para convertir una tecla\n"
"@key{ALT} a una tecla @key{META}:"

#. type: group
#: emacs-lisp-intro.texi:18117
#, no-wrap
msgid ""
"# Some ill designed keyboards have a key labeled ALT and no Meta\n"
"xmodmap -e \"keysym Alt_L = Meta_L Alt_L\"\n"
msgstr ""
"# Algunos teclados mal dise@~nados tienen una tecla etiquetada ALT y no Meta\n"
"xmodmap -e \"keysym Alt_L = Meta_L Alt_L\"\n"

#. type: section
#: emacs-lisp-intro.texi:18122
#, no-wrap
msgid "A Modified Mode Line"
msgstr "Una l@'{@dotless{i}}nea modificada"

#. type: vindex
#: emacs-lisp-intro.texi:18123
#, no-wrap
msgid "mode-line-format"
msgstr "mode-line-format"

#. type: cindex
#: emacs-lisp-intro.texi:18124
#, no-wrap
msgid "Mode line format"
msgstr "Formato de Modo L@'{@dotless{i}}nea"

#. type: Plain text
#: emacs-lisp-intro.texi:18127
msgid "Finally, a feature I really like: a modified mode line."
msgstr ""
"Finalmente, una funcionalidad que realmente me gusta: un mode line "
"modificado."

#. type: Plain text
#: emacs-lisp-intro.texi:18130
msgid ""
"When I work over a network, I forget which machine I am using.  Also, I tend "
"to I lose track of where I am, and which line point is on."
msgstr ""
"Cuando se trabaja a trav@'es de una red, se olvida que m@'aquina se\n"
"est@'a usando. Tambi@'en, se tiende a perder la traza de donde se\n"
"est@'a, y a qu@'e l@'{@dotless{i}}nea se apunta."

#. type: Plain text
#: emacs-lisp-intro.texi:18132
msgid "So I reset my mode line to look like this:"
msgstr "As@'{@dotless{i}} se resetea mi mode line para que se parezca a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:18135
#, no-wrap
msgid "-:-- foo.texi   rattlesnake:/home/bob/  Line 1  (Texinfo Fill) Top\n"
msgstr "-:-- foo.texi   rattlesnake:/home/bob/  Line 1  (Texinfo Fill) Top\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18140
msgid ""
"I am visiting a file called @file{foo.texi}, on my machine "
"@file{rattlesnake} in my @file{/home/bob} buffer.  I am on line 1, in "
"Texinfo mode, and am at the top of the buffer."
msgstr ""
"Estoy visitando un fichero llamado @file{foo.texi}, en mi m@'aquina\n"
"@file{rattlesnake} en mi b@'uffer @file{/home/bob}. Yo estoy en la\n"
"l@'{@dotless{i}}nea 1, en modo Texinfo, y estoy arriba del b@'uffer."

#. type: Plain text
#: emacs-lisp-intro.texi:18143
msgid "My @file{.emacs} file has a section that looks like this:"
msgstr "Mi fichero @file{.emacs} tiene una secci@'on que se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:18157
#, no-wrap
msgid ""
";; Set a Mode Line that tells me which machine, which directory,\n"
";; and which line I am on, plus the other customary information.\n"
"(setq-default mode-line-format\n"
" (quote\n"
"  (#(\"-\" 0 1\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   mode-line-mule-info\n"
"   mode-line-modified\n"
"   mode-line-frame-identification\n"
"   \"    \"\n"
msgstr ""
";; Asigna un Mode Line que nos cuente que m@'aquina, que directorio, \n"
";; y que l@'{@dotless{i}}nea estoy on, m@'as la informaci@'on de client.\n"
"(setq-default mode-line-format\n"
" (quote\n"
"  (#(\"-\" 0 1\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   mode-line-mule-info\n"
"   mode-line-modified\n"
"   mode-line-frame-identification\n"
"   \"    \"\n"

#. type: group
#: emacs-lisp-intro.texi:18170
#, no-wrap
msgid ""
"   mode-line-buffer-identification\n"
"   \"    \"\n"
"   (:eval (substring\n"
"           (system-name) 0 (string-match \"\\\\..+\" (system-name))))\n"
"   \":\"\n"
"   default-directory\n"
"   #(\" \" 0 1\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   (line-number-mode \" Line %l \")\n"
"   global-mode-string\n"
msgstr ""
"   mode-line-buffer-identification\n"
"   \"    \"\n"
"   (:eval (substring\n"
"           (system-name) 0 (string-match \"\\\\..+\" (system-name))))\n"
"   \":\"\n"
"   default-directory\n"
"   #(\" \" 0 1\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   (line-number-mode \" Line %l \")\n"
"   global-mode-string\n"

#. type: group
#: emacs-lisp-intro.texi:18183
#, no-wrap
msgid ""
"   #(\"   %[(\" 0 6\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   (:eval (mode-line-mode-name))\n"
"   mode-line-process\n"
"   minor-mode-alist\n"
"   #(\"%n\" 0 2 (help-echo \"mouse-2: widen\" local-map (keymap ...)))\n"
"   \")%] \"\n"
"   (-3 . \"%P\")\n"
"   ;;   \"-%-\"\n"
"   )))\n"
msgstr ""
"   #(\"   %[(\" 0 6\n"
"     (help-echo\n"
"      \"mouse-1: select window, mouse-2: delete others ...\"))\n"
"   (:eval (mode-line-mode-name))\n"
"   mode-line-process\n"
"   minor-mode-alist\n"
"   #(\"%n\" 0 2 (help-echo \"mouse-2: widen\" local-map (keymap ...)))\n"
"   \")%] \"\n"
"   (-3 . \"%P\")\n"
"   ;;   \"-%-\"\n"
"   )))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18191
msgid ""
"Here, I redefine the default mode line.  Most of the parts are from the "
"original; but I make a few changes.  I set the @emph{default} mode line "
"format so as to permit various modes, such as Info, to override it."
msgstr ""
"Aqu@'{@dotless{i}}, se redefine el mode line por defecto. La\n"
"mayor@'{@dotless{i}}a de las partes son desde el original; pero yo\n"
"creo unos pocos cambios. Yo asigno el formato de mode line\n"
"@emph{default} as@'{@dotless{i}} como permitir varios modos, tales\n"
"como Info, para sobreescribirlo."

#. type: Plain text
#: emacs-lisp-intro.texi:18197
msgid ""
"Many elements in the list are self-explanatory: @code{mode-line-modified} is "
"a variable that tells whether the buffer has been modified, @code{mode-name} "
"tells the name of the mode, and so on.  However, the format looks "
"complicated because of two features we have not discussed."
msgstr ""
"Muchos elementos en la lista son auto-explicativos:\n"
"@code{mode-line-modified} es una variable que cuenta si el b@'uffer ha\n"
"sido modificado, @code{mode-name} cuenta el nombre del modo, y\n"
"as@'{@dotless{i}}. Sin embargo, el formato parece complicado porque\n"
"las dos funcionalidades no han sido discutidas."

#. type: cindex
#: emacs-lisp-intro.texi:18198
#, no-wrap
msgid "Properties, in mode line example"
msgstr "Propiedades, en el ejemplo del modo l@'{@dotless{i}}nea"

#. type: Plain text
#: emacs-lisp-intro.texi:18206
msgid ""
"The first string in the mode line is a dash or hyphen, @samp{-}.  In the old "
"days, it would have been specified simply as @code{\"-\"}.  But nowadays, "
"Emacs can add properties to a string, such as highlighting or, as in this "
"case, a help feature.  If you place your mouse cursor over the hyphen, some "
"help information appears (By default, you must wait seven-tenths of a second "
"before the information appears.  You can change that timing by changing the "
"value of @code{tooltip-delay}.)"
msgstr ""

#. type: Plain text
#: emacs-lisp-intro.texi:18209
msgid "The new string format has a special syntax:"
msgstr "La nueva cadena de formato tiene una sintaxis especial:"

#. type: smallexample
#: emacs-lisp-intro.texi:18212
#, no-wrap
msgid "#(\"-\" 0 1 (help-echo \"mouse-1: select window, ...\"))\n"
msgstr "#(\"-\" 0 1 (help-echo \"mouse-1: select window, ...\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18225
msgid ""
"The @code{#(} begins a list.  The first element of the list is the string "
"itself, just one @samp{-}.  The second and third elements specify the range "
"over which the fourth element applies.  A range starts @emph{after} a "
"character, so a zero means the range starts just before the first character; "
"a 1 means that the range ends just after the first character.  The third "
"element is the property for the range.  It consists of a property list, a "
"property name, in this case, @samp{help-echo}, followed by a value, in this "
"case, a string.  The second, third, and fourth elements of this new string "
"format can be repeated."
msgstr ""
"El @code{#(} empieza una lista. El primer elemento de la lista es la\n"
"cadena en s@'{@dotless{i}}, solo un @samp{-}. El segundo y tercer\n"
"elemento especifica el rango a trav@'es del cuarto elemento\n"
"aplicado. Un rango empieza @emph{despu@'es} un car@'acter,\n"
"as@'{@dotless{i}} un cero significa el rango que empieza solo\n"
"despu@'es del primer caracter; un 1 significa que el rango finaliza\n"
"solo despu@'es del primer caracter. El tercer elemento es la propiedad\n"
"para el rango. Eso consiste en una lista de propiedades, un nombre de\n"
"propiedad, en este caso, @samp{help-echo}, seguido por un valor, en\n"
"este caso, una cadena. El segundo, tercer y cuarto elemento de este\n"
"nuevo formato de cadena puede ser repetido."

#. type: Plain text
#: emacs-lisp-intro.texi:18229
msgid ""
"@xref{Text Properties, , Text Properties, elisp, The GNU Emacs Lisp "
"Reference Manual}, and see @ref{Mode Line Format, , Mode Line Format, elisp, "
"The GNU Emacs Lisp Reference Manual}, for more information."
msgstr ""
"@xref{Propiedades de Texto, , Propiedades de Texto, elisp, El Manual\n"
"de Referencia de GNU Emacs Lisp}, y ver @ref{Formato Mode Line, ,\n"
"Formato Mode Line, elisp, El Manual de Referencia de GNU Emacs Lisp},\n"
"para m@'as informaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:18234
msgid ""
"@code{mode-line-buffer-identification} displays the current buffer name.  It "
"is a list beginning @code{(#(\"%12b\" 0 4 @dots{}}.  The @code{#(} begins "
"the list."
msgstr ""
"@code{mode-line-buffer-identification} muestra el nombre del\n"
"buffer. Eso es una lista empezando por @code{(#(\"%12b\" 0 4\n"
"@dots{}}. El @code{#(} empieza la lista."

#. type: Plain text
#: emacs-lisp-intro.texi:18242
msgid ""
"The @samp{\"%12b\"} displays the current buffer name, using the @code{buffer-"
"name} function with which we are familiar; the `12' specifies the maximum "
"number of characters that will be displayed.  When a name has fewer "
"characters, whitespace is added to fill out to this number.  (Buffer names "
"can and often should be longer than 12 characters; this length works well in "
"a typical 80 column wide window.)"
msgstr ""
"El @samp{\"%12b\"} muestra el nombre del actual b@'uffer, usando la\n"
"funci@'on @code{buffer-name} con la que estamos familiarizados; el\n"
"`12' especifica el n@'umero m@'aximo de caracteres que ser@'an\n"
"mostrados. Cuando un nombre tiene pocos caracteres, el espacio en\n"
"blanco se a@~nade para rellenar este n@'umero. (Los nombres del\n"
"b@'uffer puede y con frecuencia ser@'an m@'as largos de 12 caracteres;\n"
"esta longitud funciona bien en la t@'{@dotless{i}}pica ventana de 80\n"
"columnas de ancho.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18249
msgid ""
"@code{:eval} says to evaluate the following form and use the result as a "
"string to display.  In this case, the expression displays the first "
"component of the full system name.  The end of the first component is a "
"@samp{.} (`period'), so I use the @code{string-match} function to tell me "
"the length of the first component.  The substring from the zeroth character "
"to that length is the name of the machine."
msgstr ""
"@code{:eval} dice evaluar la siguiente forma y usa el resultado como\n"
"una cadena para mostrarse. En este caso, la expresi@'on muestra el\n"
"primer componente del sistema completo. El fin del primer componente\n"
"es un @samp{.} (`periodo'), as@'{@dotless{i}} se usa la funci@'on\n"
"@code{string-match} para contar el tama@~no del primer componente. La\n"
"subcadena desde el caracter cero a este tama@~no del primer\n"
"componente. La subcadena desde el caracter cero a este tama@~no es el\n"
"nombre de la m@'aquina."

#. type: Plain text
#: emacs-lisp-intro.texi:18252
msgid "This is the expression:"
msgstr "Esta es la expresi@'on:"

#. type: group
#: emacs-lisp-intro.texi:18257
#, no-wrap
msgid ""
"(:eval (substring\n"
"        (system-name) 0 (string-match \"\\\\..+\" (system-name))))\n"
msgstr ""
"(:eval (substring\n"
"        (system-name) 0 (string-match \"\\\\..+\" (system-name))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18267
msgid ""
"@samp{%[} and @samp{%]} cause a pair of square brackets to appear for each "
"recursive editing level.  @samp{%n} says `Narrow' when narrowing is in "
"effect.  @samp{%P} tells you the percentage of the buffer that is above the "
"bottom of the window, or `Top', `Bottom', or `All'.  (A lower case @samp{p} "
"tell you the percentage above the @emph{top} of the window.)  @samp{%-} "
"inserts enough dashes to fill out the line."
msgstr ""
"@samp{%[} y @samp{%]} causa un par de corchetes que aparezcan por cada\n"
"edici@'on nivel de edici@'on recursiva editando el nivel. @samp{%n}\n"
"dice `Encoger' cuando esto puede hacerse. @samp{%P} te cuenta el\n"
"porcentaje del b@'uffer que est@'a debajo de la ventana, o `arriba',\n"
"`abajo', o `todo'. (Una min@'uscula @samp{p} cuenta el porcentaje bajo\n"
"el alto de la ventana.) @samp{%-} inserta suficientes guiones para\n"
"rellenar la l@'{@dotless{i}}nea."

#. type: Plain text
#: emacs-lisp-intro.texi:18271
msgid ""
"Remember, ``You don't have to like Emacs to like it''---your own Emacs can "
"have different colors, different commands, and different keys than a default "
"Emacs."
msgstr ""
"Recuerda, ``No tiene que gustarte Emacs para que le gustes'' --- Emacs\n"
"puede tener diferentes colores, diferentes comandos, y diferentes\n"
"teclas que un Emacs por defecto."

#. type: Plain text
#: emacs-lisp-intro.texi:18274
msgid ""
"On the other hand, if you want to bring up a plain `out of the box' Emacs, "
"with no customization, type:"
msgstr ""
"Por otro lado, si se quiere traer un plano `fuera de la caja' Emacs,\n"
"sin personalizaci@'on, escribe:"

#. type: smallexample
#: emacs-lisp-intro.texi:18277
#, no-wrap
msgid "emacs -q\n"
msgstr "emacs -q\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18283
msgid ""
"This will start an Emacs that does @emph{not} load your @file{~/.emacs} "
"initialization file.  A plain, default Emacs.  Nothing more."
msgstr ""
"Esto inicializar@'a un Emacs que @emph{no} cargue tu @file{~/.emacs}\n"
"fichero de inicializaci@'on. Uno plano, el que trae Emacs por\n"
"defecto. Nada m@'as."

#. type: cindex
#: emacs-lisp-intro.texi:18286
#, no-wrap
msgid "debugging"
msgstr "depurando"

#. type: Plain text
#: emacs-lisp-intro.texi:18291
msgid ""
"GNU Emacs has two debuggers, @code{debug} and @code{edebug}.  The first is "
"built into the internals of Emacs and is always with you; the second "
"requires that you instrument a function before you can use it."
msgstr ""
"GNU Emacs tiene dos depuradores, @code{debug} y @code{edebug}. El\n"
"primero es construido dentro de las tripas de Emacs y est@'a siempre\n"
"contigo; el segundo requiere que exista una funci@'on antes de que se\n"
"pueda usar."

#. type: Plain text
#: emacs-lisp-intro.texi:18295
msgid ""
"Both debuggers are described extensively in @ref{Debugging, , Debugging Lisp "
"Programs, elisp, The GNU Emacs Lisp Reference Manual}.  In this chapter, I "
"will walk through a short example of each."
msgstr ""
"Ambos depuradores son descritos extensivamente en @ref{Depurando, ,\n"
"Depurando Programas Lisp, elisp, El Manual de Referencia GNU Emacs\n"
"Lisp}. En este cap@'{@dotless{i}}tulo, se explicar@'a un breve ejemplo\n"
"de esto."

#. type: Plain text
#: emacs-lisp-intro.texi:18313
msgid ""
"Suppose you have written a function definition that is intended to return "
"the sum of the numbers 1 through a given number.  (This is the "
"@code{triangle} function discussed earlier.  @xref{Decrementing Example, , "
"Example with Decrementing Counter}, for a discussion.)"
msgstr ""
"Sup@'on que se ha escrito una definici@'on de funci@'on que se\n"
"pretende devolver la suma de los n@'umeros 1 a trav@'es de un n@'umero\n"
"dado. (Esta es la funci@'on @code{triangle} discutida\n"
"pronto. @xref{Ejemplo de Decremento, , Ejemplo con Contador de\n"
"Decremento}, para una discusi@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18316
msgid ""
"However, your function definition has a bug.  You have mistyped @samp{1=} "
"for @samp{1-}.  Here is the broken definition:"
msgstr ""
"Sin embargo, tu definici@'on de funci@'on tiene un error. Se ha\n"
"malescrito @samp{1=} por @samp{1-}. Aqu@'{@dotless{i}} est@'a la\n"
"definici@'on rota:"

#. type: findex
#: emacs-lisp-intro.texi:18317
#, no-wrap
msgid "triangle-bugged"
msgstr "triangle-bugged"

#. type: group
#: emacs-lisp-intro.texi:18327
#, no-wrap
msgid ""
"(defun triangle-bugged (number)\n"
"  \"Return sum of numbers 1 through NUMBER inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (setq number (1= number)))      ; @r{Error here.}\n"
"    total))\n"
msgstr ""
"(defun triangle-bugged (number)\n"
"  \"Devuelve suma de n@'umeros 1 a trav@'es de NUMBER inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (setq number (1= number)))      ; @r{Error aqu@'{@dotless{i}}.}\n"
"    total))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18333
msgid ""
"If you are reading this in Info, you can evaluate this definition in the "
"normal fashion.  You will see @code{triangle-bugged} appear in the echo area."
msgstr ""
"Si se est@'a leyendo esto en Info, se puede evaluar esta definici@'on\n"
"en el modo normal. Se ver@'a que @code{triangle-bugged} aparece en el\n"
"@'area echo."

#. type: Plain text
#: emacs-lisp-intro.texi:18337
msgid "Now evaluate the @code{triangle-bugged} function with an argument of 4:"
msgstr ""
"Ahora eval@'ua la funci@'on @code{triangle-bugged} con un argumento de\n"
"4:"

#. type: smallexample
#: emacs-lisp-intro.texi:18340
#, no-wrap
msgid "(triangle-bugged 4)\n"
msgstr "(triangle-bugged 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18345
msgid ""
"In a recent GNU Emacs, you will create and enter a @file{*Backtrace*} buffer "
"that says:"
msgstr ""
"En un GNU Emacs reciente, se crear@'a e introducir@'a un b@'uffer\n"
"@file{*Backtrace*} que dice:"

#. type: group
#: emacs-lisp-intro.texi:18358
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function 1=)\n"
"  (1= number)\n"
"  (setq number (1= number))\n"
"  (while (> number 0) (setq total (+ total number))\n"
"        (setq number (1= number)))\n"
"  (let ((total 0)) (while (> number 0) (setq total ...)\n"
"    (setq number ...)) total)\n"
"  triangle-bugged(4)\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function 1=)\n"
"  (1= number)\n"
"  (setq number (1= number))\n"
"  (while (> number 0) (setq total (+ total number))\n"
"        (setq number (1= number)))\n"
"  (let ((total 0)) (while (> number 0) (setq total ...)\n"
"    (setq number ...)) total)\n"
"  triangle-bugged(4)\n"

#. type: group
#: emacs-lisp-intro.texi:18365
#, no-wrap
msgid ""
"  eval((triangle-bugged 4))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"  eval((triangle-bugged 4))\n"
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18372
msgid ""
"(I have reformatted this example slightly; the debugger does not fold long "
"lines.  As usual, you can quit the debugger by typing @kbd{q} in the "
"@file{*Backtrace*} buffer.)"
msgstr ""
"(Se ha reformateado este ejemplo ligeramente; el depurador no contiene\n"
"muchas l@'{@dotless{i}}neas. As@'{@dotless{i}}, se puede salir del\n"
"depurador escribiendo @kbd{q} en el buffer @file{*Backtrace*}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18376
msgid ""
"In practice, for a bug as simple as this, the `Lisp error' line will tell "
"you what you need to know to correct the definition.  The function @code{1=} "
"is `void'."
msgstr ""
"En la pr@'actica, debido a un error tan simple como este, la\n"
"l@'{@dotless{i}}nea de `error Lisp' explica lo que se necesita saber\n"
"para corregir la definici@'on. La funci@'on @code{1=} est@'a\n"
"`vac@'{@dotless{i}}a'."

#. type: smallexample
#: emacs-lisp-intro.texi:18383 emacs-lisp-intro.texi:18723
#, no-wrap
msgid "Symbol's function definition is void:@: 1=\n"
msgstr "La definici@'on de la funci@'on est@'a vac@'{@dotless{i}}o:@: 1=\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18392
msgid ""
"However, suppose you are not quite certain what is going on? You can read "
"the complete backtrace."
msgstr ""
"Sin embargo, si no se conoce con bastante certeza lo que est@'a\n"
"pasando, se puede leer la traza completa."

#. type: Plain text
#: emacs-lisp-intro.texi:18396
msgid ""
"In this case, you need to run a recent GNU Emacs, which automatically starts "
"the debugger that puts you in the @file{*Backtrace*} buffer; or else, you "
"need to start the debugger manually as described below."
msgstr ""
"En este caso, se necesita ejecutar una versi@'on reciente de GNU\n"
"Emacs, que autom@'aticamente empieza el depurador que pone en el\n"
"b@'uffer @file{*Backtrace*}; o adem@'as, se necesita para empezar el\n"
"depurador manualmente como se describe debajo."

#. type: Plain text
#: emacs-lisp-intro.texi:18402
msgid ""
"Read the @file{*Backtrace*} buffer from the bottom up; it tells you what "
"Emacs did that led to the error.  Emacs made an interactive call to @kbd{C-x "
"C-e} (@code{eval-last-sexp}), which led to the evaluation of the "
"@code{triangle-bugged} expression.  Each line above tells you what the Lisp "
"interpreter evaluated next."
msgstr ""
"Lee el b@'uffer @file{*Backtrace*} de abajo a arriba; eso cuenta lo\n"
"que le hizo a Emacs tener un error. Emacs hace una llamada interactiva\n"
"a @kbd{C-x C-e} (@code{eval-last-sexp}), que lleva a la evaluaci@'on\n"
"de la expresi@'on @code{triangle-bugged}. Cada l@'{@dotless{i}}nea de\n"
"debajo cuenta lo que el int@'erprete Lisp evalu@'o."

#. type: Plain text
#: emacs-lisp-intro.texi:18405
msgid "The third line from the top of the buffer is"
msgstr "La tercera l@'{@dotless{i}}nea desde lo alto del b@'uffer es"

#. type: smallexample
#: emacs-lisp-intro.texi:18408
#, no-wrap
msgid "(setq number (1= number))\n"
msgstr "(setq number (1= number))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18414
msgid ""
"Emacs tried to evaluate this expression; in order to do so, it tried to "
"evaluate the inner expression shown on the second line from the top:"
msgstr ""
"Emacs intent@'o evaluar esta expresi@'on; para hacerlo\n"
"as@'{@dotless{i}}, se intent@'o evaluar la expresi@'on interna para\n"
"ser mostrada en la segunda l@'{@dotless{i}}nea desde arriba:"

#. type: smallexample
#: emacs-lisp-intro.texi:18417
#, no-wrap
msgid "(1= number)\n"
msgstr "(1= number)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18422
msgid "This is where the error occurred; as the top line says:"
msgstr ""
"Aqu@'{@dotless{i}} es donde el error ocurre; como se dice en la\n"
"l@'{@dotless{i}}nea de arriba:"

#. type: smallexample
#: emacs-lisp-intro.texi:18425
#, no-wrap
msgid "Debugger entered--Lisp error: (void-function 1=)\n"
msgstr "Debugger entered--Lisp error: (void-function 1=)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18430
msgid ""
"You can correct the mistake, re-evaluate the function definition, and then "
"run your test again."
msgstr ""
"Se puede corregir el error, reeval@'ua la definici@'on de funci@'on, y\n"
"entonces se puede testear de nuevo."

#. type: Plain text
#: emacs-lisp-intro.texi:18437
msgid ""
"A recent GNU Emacs starts the debugger automatically when your function has "
"an error."
msgstr ""
"Un GNU Emacs actual abre el depurador autom@'aticamente cuando la\n"
"funci@'on tiene un error."

#. type: Plain text
#: emacs-lisp-intro.texi:18447
msgid ""
"Incidentally, you can start the debugger manually for all versions of Emacs; "
"the advantage is that the debugger runs even if you do not have a bug in "
"your code.  Sometimes your code will be free of bugs!"
msgstr ""
"Incidentalmente, se puede empezar el depurador manualmente para todas\n"
"las versiones de Emacs; la ventaja es que el depurador se ejecuta\n"
"incluso si no se tiene un error en su c@'odigo. Algunas veces,\n"
"@exclamdown{}su c@'odigo estar@'a libre de errores!"

#. type: Plain text
#: emacs-lisp-intro.texi:18450
msgid ""
"You can enter the debugger when you call the function by calling @code{debug-"
"on-entry}."
msgstr ""
"Se puede introducir el depurador cuando se llama a la funci@'on\n"
"llamando @code{debug-on-entry}."

#. type: Plain text
#: emacs-lisp-intro.texi:18454
msgid "Type:"
msgstr "Tipo:"

#. type: smallexample
#: emacs-lisp-intro.texi:18457
#, no-wrap
msgid "M-x debug-on-entry RET triangle-bugged RET\n"
msgstr "M-x debug-on-entry RET triangle-bugged RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18462
msgid "Now, evaluate the following:"
msgstr "Ahora, eval@'ua lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:18465
#, no-wrap
msgid "(triangle-bugged 5)\n"
msgstr "(triangle-bugged 5)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18471
msgid ""
"All versions of Emacs will create a @file{*Backtrace*} buffer and tell you "
"that it is beginning to evaluate the @code{triangle-bugged} function:"
msgstr ""
"Todas las versiones de Emacs crear@'an un b@'uffer @file{*Backtrace*}\n"
"y cuenta tu que eso es el principio para evaluar la funci@'on @code{triangle-"
"bugged}:"

#. type: group
#: emacs-lisp-intro.texi:18478
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--entering a function:\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--entering a function:\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"

#. type: group
#: emacs-lisp-intro.texi:18484 emacs-lisp-intro.texi:18505
#: emacs-lisp-intro.texi:18535
#, no-wrap
msgid ""
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"  eval-last-sexp-1(nil)\n"
"  eval-last-sexp(nil)\n"
"  call-interactively(eval-last-sexp)\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18490
msgid ""
"In the @file{*Backtrace*} buffer, type @kbd{d}.  Emacs will evaluate the "
"first expression in @code{triangle-bugged}; the buffer will look like this:"
msgstr ""
"En el b@'uffer @file{*Backtrace*}, escribe @kbd{d}. Emacs evaluar@'a\n"
"la primera expresi@'on en @code{triangle-bugged}; el b@'uffer se\n"
"parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:18499
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--beginning evaluation of function call form:\n"
"* (let ((total 0)) (while (> number 0) (setq total ...)\n"
"        (setq number ...)) total)\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--beginning evaluation of function call form:\n"
"* (let ((total 0)) (while (> number 0) (setq total ...)\n"
"        (setq number ...)) total)\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18512
msgid ""
"Now, type @kbd{d} again, eight times, slowly.  Each time you type @kbd{d}, "
"Emacs will evaluate another expression in the function definition."
msgstr ""
"Ahora, escribe @kbd{d} de nuevo, ocho veces, lentamente. Cada vez que\n"
"se escribe @kbd{d} Emacs evaluar@'a otra expresi@'on en la\n"
"definici@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:18515
msgid "Eventually, the buffer will look like this:"
msgstr "Eventualmente, el b@'uffer se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:18523
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--beginning evaluation of function call form:\n"
"* (setq number (1= number))\n"
"* (while (> number 0) (setq total (+ total number))\n"
"        (setq number (1= number)))\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--beginning evaluation of function call form:\n"
"* (setq number (1= number))\n"
"* (while (> number 0) (setq total (+ total number))\n"
"        (setq number (1= number)))\n"

#. type: group
#: emacs-lisp-intro.texi:18529
#, no-wrap
msgid ""
"* (let ((total 0)) (while (> number 0) (setq total ...)\n"
"        (setq number ...)) total)\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"
msgstr ""
"* (let ((total 0)) (while (> number 0) (setq total ...)\n"
"        (setq number ...)) total)\n"
"* triangle-bugged(5)\n"
"  eval((triangle-bugged 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18543
msgid ""
"Finally, after you type @kbd{d} two more times, Emacs will reach the error, "
"and the top two lines of the @file{*Backtrace*} buffer will look like this:"
msgstr ""
"Finalmente, despu@'es se escribe @kbd{d} dos veces m@'as, Emacs lograr@'a\n"
"el error y las dos l@'{@dotless{i}}neas superiores del buffer\n"
"@file{*Backtrace*} se ve as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:18551
#, no-wrap
msgid ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function 1=)\n"
"* (1= number)\n"
"@dots{}\n"
"---------- Buffer: *Backtrace* ----------\n"
msgstr ""
"---------- Buffer: *Backtrace* ----------\n"
"Debugger entered--Lisp error: (void-function 1=)\n"
"* (1= number)\n"
"@dots{}\n"
"---------- Buffer: *Backtrace* ----------\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18555
msgid "By typing @kbd{d}, you were able to step through the function."
msgstr ""
"Escribiendo @kbd{d}, ser@'{@dotless{i}}a capaz de pasear a trav@'es de\n"
"la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:18558
msgid ""
"You can quit a @file{*Backtrace*} buffer by typing @kbd{q} in it; this quits "
"the trace, but does not cancel @code{debug-on-entry}."
msgstr ""
"Se puede salir de un buffer @file{*Backtrace*} escribiendo @kbd{q};\n"
"esto se sale de la traza, pero no cancela @code{debug-on-entry}."

#. type: findex
#: emacs-lisp-intro.texi:18559
#, no-wrap
msgid "cancel-debug-on-entry"
msgstr "cancel-debug-on-entry"

#. type: Plain text
#: emacs-lisp-intro.texi:18562
msgid ""
"To cancel the effect of @code{debug-on-entry}, call @code{cancel-debug-on-"
"entry} and the name of the function, like this:"
msgstr ""
"Para cancelar el efecto de @code{debug-on-entry}, llama a\n"
"@code{cancel-debug-on-entry} y el nombre de la funci@'on, como esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:18565
#, no-wrap
msgid "M-x cancel-debug-on-entry RET triangle-bugged RET\n"
msgstr "M-x cancel-debug-on-entry RET triangle-bugged RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18569
msgid "(If you are reading this in Info, cancel @code{debug-on-entry} now.)"
msgstr "(Si est@'a leyendo esto en Info, cancela @code{debug-on-entry} ahora.)"

#. type: section
#: emacs-lisp-intro.texi:18571
#, no-wrap
msgid "@code{debug-on-quit} and @code{(debug)}"
msgstr "@code{debug-on-quit} y @code{(debug)}"

#. type: Plain text
#: emacs-lisp-intro.texi:18575
msgid ""
"In addition to setting @code{debug-on-error} or calling @code{debug-on-"
"entry}, there are two other ways to start @code{debug}."
msgstr ""
"Adici@'on a la configuraci@'on @code{debug-on-error} o llamando\n"
"@code{debug-on-entry}, hay otros dos caminos para empezar @code{debug}."

#. type: Plain text
#: emacs-lisp-intro.texi:18580
msgid ""
"You can start @code{debug} whenever you type @kbd{C-g} (@code{keyboard-"
"quit}) by setting the variable @code{debug-on-quit} to @code{t}.  This is "
"useful for debugging infinite loops."
msgstr ""
"Se puede empezar @code{debug} siempre y cuando se escribe @kbd{C-g}\n"
"(@code{keyboard-quit}) se configura la variable @code{debug-on-quit}\n"
"para @code{t}. Esto es @'util para depurar bucles infinitos."

#. type: cindex
#: emacs-lisp-intro.texi:18582
#, no-wrap
msgid "@code{(debug)} in code"
msgstr "@code{(debug)} en c@'odigo"

#. type: Plain text
#: emacs-lisp-intro.texi:18585
msgid ""
"Or, you can insert a line that says @code{(debug)} into your code where you "
"want the debugger to start, like this:"
msgstr ""
"O, se puede insertar un l@'{@dotless{i}}nea que dice @code{(debug)}\n"
"dentro de tu c@'odigo donde se quiere que el depurador empiece,\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:18596
#, no-wrap
msgid ""
"(defun triangle-bugged (number)\n"
"  \"Return sum of numbers 1 through NUMBER inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (debug)                         ; @r{Start debugger.}\n"
"      (setq number (1= number)))      ; @r{Error here.}\n"
"    total))\n"
msgstr ""
"(defun triangle-bugged (number)\n"
"  \"Devuelve suma de n@'umeros 1 a trav@'es de NUMERO inclusive.\"\n"
"  (let ((total 0))\n"
"    (while (> number 0)\n"
"      (setq total (+ total number))\n"
"      (debug)                         ; @r{Empieza el depurador.}\n"
"      (setq number (1= number)))      ; @r{Error aqu@'{@dotless{i}}.}\n"
"    total))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18601
msgid ""
"The @code{debug} function is described in detail in @ref{Debugger, , The "
"Lisp Debugger, elisp, The GNU Emacs Lisp Reference Manual}."
msgstr ""
"La funci@'on @code{debug} se describe en detalle en @ref{Depurador, ,\n"
"El Depurador Lisp, elisp, El Manual de Referencia GNU Emacs Lisp}."

#. type: section
#: emacs-lisp-intro.texi:18603
#, no-wrap
msgid "The @code{edebug} Source Level Debugger"
msgstr "El depurador de nivel de fuentes @code{edebug}"

#. type: cindex
#: emacs-lisp-intro.texi:18604
#, no-wrap
msgid "Source level debugger"
msgstr "Depurador de nivel de c@'odigo"

#. type: Plain text
#: emacs-lisp-intro.texi:18610
msgid ""
"Edebug is a source level debugger.  Edebug normally displays the source of "
"the code you are debugging, with an arrow at the left that shows which line "
"you are currently executing."
msgstr ""
"Edebug es un depurador a nivel de fuentes Edebug que normalmente\n"
"muestra las fuentes del c@'odigo que se est@'a depurando, con una\n"
"flecha a la izquierda que muestra que l@'{@dotless{i}}nea se est@'a\n"
"actualmente ejecutando."

#. type: Plain text
#: emacs-lisp-intro.texi:18613
msgid ""
"You can walk through the execution of a function, line by line, or run "
"quickly until reaching a @dfn{breakpoint} where execution stops."
msgstr ""
"Se puede pasear a trav@'es de la ejecuci@'on de una funci@'on,\n"
"l@'{@dotless{i}}nea a l@'{@dotless{i}}nea, o ejecutarse r@'apidamente\n"
"hasta lograr un @dfn{punto de ruptura} donde la ejecuci@'on pare."

#. type: Plain text
#: emacs-lisp-intro.texi:18616 emacs-lisp-intro.texi:18743
msgid ""
"Edebug is described in @ref{edebug, , Edebug, elisp, The GNU Emacs Lisp "
"Reference Manual}."
msgstr ""
"Edebug se describe en @ref{edebug, , Edebug, elisp, El Manual de\n"
"Referencia de GNU Emacs Lisp}."

#. type: Plain text
#: emacs-lisp-intro.texi:18621
msgid ""
"Here is a bugged function definition for @code{triangle-recursively}.  "
"@xref{Recursive triangle function, , Recursion in place of a counter}, for a "
"review of it."
msgstr ""
"Aqu@'{@dotless{i}} hay una funci@'on con errores para\n"
"@code{triangle-recursively}. @xref{Funci@'on recursiva tri@'angulo,\n"
", Recursi@'on en lugar de un contador}, para una revisi@'on de eso."

#. type: group
#: emacs-lisp-intro.texi:18632
#, no-wrap
msgid ""
"(defun triangle-recursively-bugged (number)\n"
"  \"Return sum of numbers 1 through NUMBER inclusive.\n"
"Uses recursion.\"\n"
"  (if (= number 1)\n"
"      1\n"
"    (+ number\n"
"       (triangle-recursively-bugged\n"
"        (1= number)))))               ; @r{Error here.}\n"
msgstr ""
"(defun triangle-recursively-bugged (number)\n"
"  \"Devuelve la suma of n@'umeros 1 a trav@'es de NUMBER inclusive.\n"
"Usa recursi@'on.\"\n"
"  (if (= number 1)\n"
"      1\n"
"    (+ number\n"
"       (triangle-recursively-bugged\n"
"        (1= number)))))               ; @r{Error aqu@'{@dotless{i}}.}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18642
msgid ""
"Normally, you would install this definition by positioning your cursor after "
"the function's closing parenthesis and typing @kbd{C-x C-e} (@code{eval-last-"
"sexp}) or else by positioning your cursor within the definition and typing "
"@kbd{C-M-x} (@code{eval-defun}).  (By default, the @code{eval-defun} command "
"works only in Emacs Lisp mode or in Lisp Interaction mode.)"
msgstr ""
"Normalmente, se instalar@'{@dotless{i}}a esta definici@'on\n"
"posicionando su cursor despu@'es de la funci@'on cerrando par@'entesis\n"
"y escribiendo @kbd{C-x C-e} (@code{eval-last-sexp}) o lo dem@'as\n"
"posicionando tu cursor con la definici@'on y escribiendo @kbd{C-M-x}\n"
"(@code{eval-defun}). (Por defecto, el comando @code{eval-defun}\n"
"funciona solo en modo Emacs Lisp o en el modo de interacci@'on de\n"
"Lisp.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18648
msgid ""
"However, to prepare this function definition for Edebug, you must first "
"@dfn{instrument} the code using a different command.  You can do this by "
"positioning your cursor within or just after the definition and typing"
msgstr ""
"Sin embargo, para preparar esta definici@'on de funci@'on para Edebug,\n"
"se debe primero @dfn{instrumentar} el c@'odigo usando un comando\n"
"diferente. Se puede hacer esto posicionando el cursor dentro o\n"
"despu@'es de la definici@'on y escribiendo"

#. type: smallexample
#: emacs-lisp-intro.texi:18651
#, no-wrap
msgid "M-x edebug-defun RET\n"
msgstr "M-x edebug-defun RET\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18656
msgid ""
"This will cause Emacs to load Edebug automatically if it is not already "
"loaded, and properly instrument the function."
msgstr ""
"Esto causar@'a que Emacs cargue Edebug autom@'aticamente si eso no\n"
"est@'a ya cargado y, apropiadamente prepara la funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:18659
msgid ""
"After instrumenting the function, place your cursor after the following "
"expression and type @kbd{C-x C-e} (@code{eval-last-sexp}):"
msgstr ""
"Despu@'es de preparar la funci@'on, emplaza tu cursor despu@'es\n"
"de la siguiente expresi@'on y escribe @kbd{C-x C-e} (@code{eval-last-sexp}):"

#. type: smallexample
#: emacs-lisp-intro.texi:18662
#, no-wrap
msgid "(triangle-recursively-bugged 3)\n"
msgstr "(triangle-recursively-bugged 3)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18672
msgid ""
"You will be jumped back to the source for @code{triangle-recursively-bugged} "
"and the cursor positioned at the beginning of the @code{if} line of the "
"function.  Also, you will see an arrowhead at the left hand side of that "
"line.  The arrowhead marks the line where the function is executing.  (In "
"the following examples, we show the arrowhead with @samp{=>}; in a windowing "
"system, you may see the arrowhead as a solid triangle in the window "
"`fringe'.)"
msgstr ""
"Se vuelve a las fuentes de @code{triangle-recursively-bugged} y el\n"
"cursor se posiciona al principio del @code{if} de la\n"
"l@'{@dotless{i}}nea de la funci@'on. Tambi@'en, se ver@'a una flecha\n"
"en la mano izquierda al lado de esta l@'{@dotless{i}}nea donde la\n"
"funci@'on se est@'a ejecutando. (En los siguientes ejemplos, se\n"
"muestra la flecha con @samp{=>}; en un sistema de ventanas, se puede\n"
"ver la flecha como un tri@'angulo s@'olido en el `borde' de la\n"
"ventana.)"

#. type: smallexample
#: emacs-lisp-intro.texi:18675
#, no-wrap
msgid "=>@point{}(if (= number 1)\n"
msgstr "=>@point{}(if (= number 1)\n"

#. type: iftex
#: emacs-lisp-intro.texi:18681
msgid ""
"In the example, the location of point is displayed with a star, "
"@samp{@point{}} (in Info, it is displayed as @samp{-!-})."
msgstr ""
"En el ejemplo, la posici@'on del punto es mostrado con una estrella,\n"
"@samp{@point{}} (en Info, eso es mostrado como @samp{-!-})."

#. type: ifnottex
#: emacs-lisp-intro.texi:18685
msgid ""
"In the example, the location of point is displayed as @samp{@point{}} (in a "
"printed book, it is displayed with a five pointed star)."
msgstr ""
"En el ejemplo, la localizaci@'on del punto es mostrado como\n"
"@samp{@point{}} (en un libro impreso, eso es mostrado con una estrella\n"
"apuntada)."

#. type: Plain text
#: emacs-lisp-intro.texi:18689
msgid ""
"If you now press @key{SPC}, point will move to the next expression to be "
"executed; the line will look like this:"
msgstr ""
"Si ahora se presiona @key{SPC}, el punto se mover@'a a la siguiente\n"
"expresi@'on para ejecutarse; la l@'{@dotless{i}}nea se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:18692
#, no-wrap
msgid "=>(if @point{}(= number 1)\n"
msgstr "=>(if @point{}(= number 1)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18699
msgid ""
"As you continue to press @key{SPC}, point will move from expression to "
"expression.  At the same time, whenever an expression returns a value, that "
"value will be displayed in the echo area.  For example, after you move point "
"past @code{number}, you will see the following:"
msgstr ""
"Como se continua presionando @key{SPC}, el puntero se mover@'a desde\n"
"la expresi@'on a la expresi@'on. Al mismo tiempo, siempre y cuando una\n"
"expresi@'on devuelva un valor, este valor ser@'a mostrado en el @'area\n"
"echo. Por ejemplo, despu@'es de mover el punto pasado @code{number},\n"
"se ver@'a lo siguiente:"

#. type: smallexample
#: emacs-lisp-intro.texi:18702
#, no-wrap
msgid "Result: 3 (#o3, #x3, ?\\C-c)\n"
msgstr "Resultado: 3 (#o3, #x3, ?\\C-c)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18708
msgid ""
"This means the value of @code{number} is 3, which is octal three, "
"hexadecimal three, and @sc{ascii} `control-c' (the third letter of the "
"alphabet, in case you need to know this information)."
msgstr ""
"Esto significa el valor de @code{number} es 3, que son tres octales,\n"
"tres hexadecimales, y @sc{ascii} `control-c' (la tercera letra del\n"
"alfabeto, en caso de que se necesite conocer esta informaci@'on)."

#. type: Plain text
#: emacs-lisp-intro.texi:18711
msgid ""
"You can continue moving through the code until you reach the line with the "
"error.  Before evaluation, that line looks like this:"
msgstr ""
"Uno puede continuar movi@'endose a trav@'es del c@'odigo hasta que\n"
"logre la l@'{@dotless{i}}nea con el error. Antes de la evaluaci@'on,\n"
"esta l@'{@dotless{i}}nea se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:18714
#, no-wrap
msgid "=>        @point{}(1= number)))))               ; @r{Error here.}\n"
msgstr "=>        @point{}(1= number)))))               ; @r{Error aqu@'{@dotless{i}}.}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18720
msgid ""
"When you press @key{SPC} once again, you will produce an error message that "
"says:"
msgstr ""
"Cuando se presiona @key{SPC} una vez de nuevo, se producir@'a un\n"
"mensaje de error que dice:"

#. type: Plain text
#: emacs-lisp-intro.texi:18727
msgid "This is the bug."
msgstr "Este es el error."

#. type: Plain text
#: emacs-lisp-intro.texi:18729
msgid "Press @kbd{q} to quit Edebug."
msgstr "Presiona @kbd{q} para salir de Edebug."

#. type: Plain text
#: emacs-lisp-intro.texi:18734
msgid ""
"To remove instrumentation from a function definition, simply re-evaluate it "
"with a command that does not instrument it.  For example, you could place "
"your cursor after the definition's closing parenthesis and type @kbd{C-x C-"
"e}."
msgstr ""
"Para eliminar la instrumentaci@'on desde una definici@'on de\n"
"funci@'on, simplemente se reeval@'ua con un comando que no lo\n"
"instrumente. Por ejemplo, se podr@'{@dotless{i}}a posicionar su cursor\n"
"despu@'es de la definici@'on cerrando par@'entesis y escribiendo\n"
"@kbd{C-x C-e}. "

#. type: Plain text
#: emacs-lisp-intro.texi:18740
msgid ""
"Edebug does a great deal more than walk with you through a function.  You "
"can set it so it races through on its own, stopping only at an error or at "
"specified stopping points; you can cause it to display the changing values "
"of various expressions; you can find out how many times a function is "
"called, and more."
msgstr ""
"Edebug hace un gran trato antes de entrar en una funci@'on. Se puede\n"
"dirigir as@'{@dotless{i}} mismo, parando solo en un error o en puntos\n"
"espec@'{@dotless{i}}ficos, se puede causar para mostrar los valores\n"
"cambiantes de varias expresiones; se puede encontrar cuantas veces una\n"
"funci@'on se llama, y m@'as."

#. type: itemize
#: emacs-lisp-intro.texi:18757
msgid ""
"Install the @code{@value{COUNT-WORDS}} function and then cause it to enter "
"the built-in debugger when you call it.  Run the command on a region "
"containing two words.  You will need to press @kbd{d} a remarkable number of "
"times.  On your system, is a `hook' called after the command finishes? (For "
"information on hooks, see @ref{Command Overview, , Command Loop Overview, "
"elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"Instale la funci@'on @code{@value{COUNT-WORDS}} y provoque que se\n"
"introduzca el depurador construido cuando se llame. Ejecute el comando\n"
"en una regi@'on conteniendo dos palabras. Se necesitar@'a presionar\n"
"@kbd{d} un n@'umero remarcable de veces. En el sistema, es un `hook'\n"
"llamado despu@'es que el comando se finaliza. (Para informaci@'on sobre\n"
"hooks, mira @ref{Resumen de Comandos, , Resumen del Comando Bucle,\n"
"elisp, El Manual de Referencia GNU Emacs Lisp}.)"

#. type: itemize
#: emacs-lisp-intro.texi:18764
msgid ""
"Copy @code{@value{COUNT-WORDS}} into the @file{*scratch*} buffer, instrument "
"the function for Edebug, and walk through its execution.  The function does "
"not need to have a bug, although you can introduce one if you wish.  If the "
"function lacks a bug, the walk-through completes without problems."
msgstr ""
"Copie @code{@value{COUNT-WORDS}} dentro del b@'uffer @file{*scratch*},\n"
"instrumente la funci@'on para Edebug, y navegue a trav@'es de su\n"
"ejecuci@'on. La funci@'on no necesita tener un error, aunque se puede\n"
"introducir uno si se desea. Si a la funci@'on le falta un error, el\n"
"paseo se completa sin problemas."

#. type: itemize
#: emacs-lisp-intro.texi:18770
msgid ""
"While running Edebug, type @kbd{?} to see a list of all the Edebug "
"commands.  (The @code{global-edebug-prefix} is usually @kbd{C-x X}, i.e., "
"@kbd{@key{CTRL}-x} followed by an upper case @kbd{X}; use this prefix for "
"commands made outside of the Edebug debugging buffer.)"
msgstr ""
"Mientras se ejecuta Edebug, escriba @kbd{?} para ver una lista de todos\n"
"los comandos Edebug. (El @code{global-edebug-prefix} normalmente es\n"
"@kbd{C-x X}, por ej@: @kbd{@key{CTRL}-x} seguido por una tecla\n"
"may@'uscula @kbd{X}; use este prefijo para comandos hechos fuera del\n"
"b@'uffer de depuraci@'on Edebug.)"

#. type: itemize
#: emacs-lisp-intro.texi:18775
msgid ""
"In the Edebug debugging buffer, use the @kbd{p} (@code{edebug-bounce-point}) "
"command to see where in the region the @code{@value{COUNT-WORDS}} is working."
msgstr ""
"En el b@'uffer de depuraci@'on Edebug, usa el comando @kbd{p}\n"
"(@code{edebug-bounce-point}) para ver si @code{@value{COUNT-WORDS}}\n"
"est@'a funcionando."

#. type: itemize
#: emacs-lisp-intro.texi:18779
msgid ""
"Move point to some spot further down the function and then type the @kbd{h} "
"(@code{edebug-goto-here}) command to jump to that location."
msgstr ""
"Mueve el punto a alg@'un sitio debajo de la funci@'on y entonces\n"
"escribe el comando @kbd{h} (@code{edebug-goto-here}) para saltar a\n"
"esta localizaci@'on."

#. type: itemize
#: emacs-lisp-intro.texi:18784
msgid ""
"Use the @kbd{t} (@code{edebug-trace-mode}) command to cause Edebug to walk "
"through the function on its own; use an upper case @kbd{T} for @code{edebug-"
"Trace-fast-mode}."
msgstr ""
"Usa el comando @kbd{t} (@code{edebug-trace-mode}) para causar que\n"
"Edebug pasee a trav@'es de la funci@'on en s@'{@dotless{i}}; usa una\n"
"letra may@'uscula @kbd{T} para @code{edebug-Trace-fast-mode}."

#. type: itemize
#: emacs-lisp-intro.texi:18788
msgid ""
"Set a breakpoint, then run Edebug in Trace mode until it reaches the "
"stopping point."
msgstr ""
"Asigna un punto de ruptura, entonces ejecuta Edebug en modo Traza\n"
"hasta que se logre el punto de parada."

#. type: Plain text
#: emacs-lisp-intro.texi:18797
msgid ""
"We have now reached the end of this Introduction.  You have now learned "
"enough about programming in Emacs Lisp to set values, to write simple @file{."
"emacs} files for yourself and your friends, and write simple customizations "
"and extensions to Emacs."
msgstr ""
"Ahora se ha llegado al fin de esta Introducci@'on. Se ha aprendido lo\n"
"suficiente acerca de programaci@'on en Emacs Lisp para asignar\n"
"valores, para escribir ficheros @file{.emacs} para t@'{@dotless{i}}\n"
"mismo y tus amigos, y escribir personalizaciones simples y extensiones\n"
"a Emacs."

#. type: Plain text
#: emacs-lisp-intro.texi:18800
msgid ""
"This is a place to stop.  Or, if you wish, you can now go onward, and teach "
"yourself."
msgstr ""
"Este es un lugar para parar. O, si se desea, se puede ir adelante, y\n"
"aprender m@'as por uno mismo."

#. type: Plain text
#: emacs-lisp-intro.texi:18804
msgid ""
"You have learned some of the basic nuts and bolts of programming.  But only "
"some.  There are a great many more brackets and hinges that are easy to use "
"that we have not touched."
msgstr ""
"Se han aprendido algunas bases de programaci@'on. Pero solo\n"
"algunas. Todav@'{@dotless{i}}a hay muchas cosas que son f@'aciles de\n"
"usar que no se han tocado."

#. type: Plain text
#: emacs-lisp-intro.texi:18807
msgid ""
"A path you can follow right now lies among the sources to GNU Emacs and in"
msgstr "Otra idea para seguir es leer las fuentes de Emacs o "

#. type: Plain text
#: emacs-lisp-intro.texi:18818
msgid ""
"The Emacs Lisp sources are an adventure.  When you read the sources and come "
"across a function or expression that is unfamiliar, you need to figure out "
"or find out what it does."
msgstr ""
"Las fuentes de Emacs Lisp son una aventura. Cuando se leen las fuentes\n"
"vienen a trav@'es de una funci@'on o expresi@'on que nos es familiar,\n"
"se necesita imaginar o encontrar qu@'e se hace."

#. type: Plain text
#: emacs-lisp-intro.texi:18825
msgid ""
"Go to the Reference Manual.  It is a thorough, complete, and fairly easy-to-"
"read description of Emacs Lisp.  It is written not only for experts, but for "
"people who know what you know.  (The @cite{Reference Manual} comes with the "
"standard GNU Emacs distribution.  Like this introduction, it comes as a "
"Texinfo source file, so you can read it on-line and as a typeset, printed "
"book.)"
msgstr ""
"Ir al Manual de Referencia. Eso est@'a a trav@'es del completo, limpio\n"
"y f@'acil de leer descripci@'on de Emacs Lisp. Est@'a escrito no solo\n"
"para expertos, pero s@'{@dotless{i}} para gente que conoce lo que\n"
"usted conoce. (El @cite{Manual de Referencia} viene con la\n"
"distribuci@'on de GNU Emacs. Como esta introducci@'on, viene como un\n"
"fichero fuente Texinfo, as@'{@dotless{i}} se puede leer on-line como\n"
"un libro impreso.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18829
msgid ""
"Go to the other on-line help that is part of GNU Emacs: the on-line "
"documentation for all functions and variables, and @code{find-tag}, the "
"program that takes you to sources."
msgstr ""
"Ir a otra ayuda on-line que sea parte de GNU Emacs: la documentaci@'on\n"
"on-line para todas las funciones y variables, y @code{find-tag}, el\n"
"programa que va a las fuentes."

#. type: Plain text
#: emacs-lisp-intro.texi:18835
msgid ""
"Here is an example of how I explore the sources.  Because of its name, "
"@file{simple.el} is the file I looked at first, a long time ago.  As it "
"happens some of the functions in @file{simple.el} are complicated, or at "
"least look complicated at first sight.  The @code{open-line} function, for "
"example, looks complicated."
msgstr ""
"Aqu@'{@dotless{i}} hay un ejemplo de c@'omo explorar las\n"
"fuentes. Porque su nombre, @file{simple.el} es el fichero que se vi@'o\n"
"primero, hace tiempo. Como eso ocurre alguna de las funciones en\n"
"@file{simple.el} son complicadas, o al menos parece complicado a\n"
"primera vista. La funci@'on @code{open-line}, por ejemplo, parece complicada."

#. type: Plain text
#: emacs-lisp-intro.texi:18843
msgid ""
"You may want to walk through this function slowly, as we did with the "
"@code{forward-sentence} function.  (@xref{forward-sentence, The "
"@code{forward-sentence} function}.)  Or you may want to skip that function "
"and look at another, such as @code{split-line}.  You don't need to read all "
"the functions.  According to @code{count-words-in-defun}, the @code{split-"
"line} function contains 102 words and symbols."
msgstr ""
"Se puede querer pasear a trav@'es de esta funci@'on lentamente, como\n"
"nosotros hicimos la funci@'on\n"
"@code{forward-sentence}. (@xref{forward-sentence, La funci@'on\n"
"@code{forward-sentence}}.) O se puede querer salir de esta funci@'on\n"
"y mirar en otra, tal como @code{split-line}. No se necesita leer todas\n"
"las funciones. De acuerdo a @code{count-words-in-defun}, la funci@'on\n"
"@code{split-line} contiene 102 palabras y s@'{@dotless{i}}mbolos."

#. type: Plain text
#: emacs-lisp-intro.texi:18847
msgid ""
"Even though it is short, @code{split-line} contains expressions we have not "
"studied: @code{skip-chars-forward}, @code{indent-to}, @code{current-column} "
"and @code{insert-and-inherit}."
msgstr ""
"Incluso aunque sean pocas, @code{split-line} contiene expresiones que\n"
"no se han estudiado: @code{skip-chars-forward}, @code{indent-to},\n"
"@code{current-column} y @code{insert-and-inherit}."

#. type: Plain text
#: emacs-lisp-intro.texi:18851
msgid ""
"Consider the @code{skip-chars-forward} function.  (It is part of the "
"function definition for @code{back-to-indentation}, which is shown in "
"@ref{Review, , Review}.)"
msgstr ""
"Considera la funci@'on @code{skip-chars-forward}. (Eso es parte de la\n"
"definici@'on de funci@'on para @code{back-to-indentation}, que\n"
"muestra la @ref{Revisar, , Revisar}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18855
msgid ""
"In GNU Emacs, you can find out more about @code{skip-chars-forward} by "
"typing @kbd{C-h f} (@code{describe-function}) and the name of the function.  "
"This gives you the function documentation."
msgstr ""
"En GNU Emacs, se puede encontrar m@'as acerca de\n"
"@code{skip-chars-forward} escribiendo @kbd{C-h f}\n"
"(@code{describe-function}) y el nombre de la funci@'on. Esto te da la\n"
"documentaci@'on de funci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:18861
msgid ""
"You may be able to guess what is done by a well named function such as "
"@code{indent-to}; or you can look it up, too.  Incidentally, the "
"@code{describe-function} function itself is in @file{help.el}; it is one of "
"those long, but decipherable functions.  You can look up @code{describe-"
"function} using the @kbd{C-h f} command!"
msgstr ""
"Se puede ser capaz de adivinar que se hace por una funci@'on bien\n"
"llamada tal como @code{indent-to}; o se puede buscar,\n"
"tambi@'en. Incidentalmente, la funci@'on @code{describe-function} en\n"
"s@'{@dotless{i}} est@'a en @file{help.el}; esta es una de estas largas,\n"
"pero descifrables funciones. @exclamdown{}Se puede buscar\n"
"@code{describe-function} usando el comando @kbd{C-h f}!"

#. type: Plain text
#: emacs-lisp-intro.texi:18868
msgid ""
"In this instance, since the code is Lisp, the @file{*Help*} buffer contains "
"the name of the library containing the function's source.  You can put point "
"over the name of the library and press the RET key, which in this situation "
"is bound to @code{help-follow}, and be taken directly to the source, in the "
"same way as @kbd{M-.} (@code{find-tag})."
msgstr ""
"En esta instancia, desde el c@'odigo es Lisp, el b@'uffer\n"
"@file{*Help*} contiene el nombre de la librer@'{@dotless{i}}a\n"
"conteniendo las fuentes de la funci@'on. Se puede poner el punto a\n"
"trav@'es del nombre de la librer@'{@dotless{i}}a y presiona la tecla\n"
"RET, que est@'a en esta situaci@'on est@'a asociado a\n"
"@code{help-follow}, y se toma directamente de las fuentes, en el mismo\n"
"camino que @kbd{M-.} (@code{find-tag})."

#. type: Plain text
#: emacs-lisp-intro.texi:18872
msgid ""
"The definition for @code{describe-function} illustrates how to customize the "
"@code{interactive} expression without using the standard character codes; "
"and it shows how to create a temporary buffer."
msgstr ""
"La definici@'on para @code{describe-function} ilustra como\n"
"personalizar las expresiones @code{interactive} sin usar los c@'odigos\n"
"de caracter est@'andar y eso muestra como crear un b@'uffer temporal."

#. type: Plain text
#: emacs-lisp-intro.texi:18876
msgid ""
"(The @code{indent-to} function is written in C rather than Emacs Lisp; it is "
"a `built-in' function.  @code{help-follow} takes you to its source as does "
"@code{find-tag}, when properly set up.)"
msgstr ""
"(La funci@'on @code{indent-to} es escrita en C en vez de Emacs Lisp;\n"
"eso es una funci@'on `construida'. @code{help-follow} toma su fuente\n"
"como @code{find-tag}, cuando se configura apropiadamente.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18882
msgid ""
"You can look at a function's source using @code{find-tag}, which is bound to "
"@kbd{M-.} Finally, you can find out what the Reference Manual has to say by "
"visiting the manual in Info, and typing @kbd{i} (@code{Info-index}) and the "
"name of the function, or by looking up the function in the index to a "
"printed copy of the manual."
msgstr ""
"Se puede mirar en las fuentes de la funci@'on usando @code{find-tag},\n"
"que est@'a asociado a @kbd{M-.}. Finalmente, se puede encontrar que el\n"
"Manual de Referencia tiene que decir visitando el manual en Info, y\n"
"escribiendo @kbd{i} (@code{Info-index}) y el nombre de la funci@'on, o\n"
"buscando la funci@'on en el @'{@dotless{i}}ndice a una copia impresa\n"
"del manual."

#. type: Plain text
#: emacs-lisp-intro.texi:18885
msgid "Similarly, you can find out what is meant by @code{insert-and-inherit}."
msgstr ""
"Similarmente, se puede encontrar que significa por @code{insert-and-inherit}."

#. type: Plain text
#: emacs-lisp-intro.texi:18895
msgid ""
"Other interesting source files include @file{paragraphs.el}, @file{loaddefs."
"el}, and @file{loadup.el}.  The @file{paragraphs.el} file includes short, "
"easily understood functions as well as longer ones.  The @file{loaddefs.el} "
"file contains the many standard autoloads and many keymaps.  I have never "
"looked at it all; only at parts.  @file{loadup.el} is the file that loads "
"the standard parts of Emacs; it tells you a great deal about how Emacs is "
"built.  (@xref{Building Emacs, , Building Emacs, elisp, The GNU Emacs Lisp "
"Reference Manual}, for more about building.)"
msgstr ""
"Otros ficheros fuente interesantes incluyen @file{paragraphs.el},\n"
"@file{loaddefs.el} y @file{loadup.el}. El fichero @file{paragraphs.el}\n"
"incluye ordenar, funciones f@'acilmente comprendidas tan bien como las\n"
"largas. El fichero @file{loaddefs.el} contiene muchos autoloads\n"
"est@'andar y muchos mapas de teclado. Nunca se ha buscado en todo;\n"
"solo en las partes. @file{loadup.el} es el fichero que carga las\n"
"partes est@'andar de Emacs; eso cuenta un gran trato acerca de c@'omo\n"
"Emacs est@'a construido. (@xref{Construyendo Emacs, , Construyendo\n"
"Emacs, elisp, El Manual de Referencia GNU Emacs Lisp}, para m@'as\n"
"acerca de construcci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18903
msgid ""
"As I said, you have learned some nuts and bolts; however, and very "
"importantly, we have hardly touched major aspects of programming; I have "
"said nothing about how to sort information, except to use the predefined "
"@code{sort} function; I have said nothing about how to store information, "
"except to use variables and lists; I have said nothing about how to write "
"programs that write programs.  These are topics for another, and different "
"kind of book, a different kind of learning."
msgstr ""
"Como dije, se han aprendido algunas cosas; sin embargo, y de manera\n"
"muy importante, se han tocado fuertes aspectos de la programaci@'on;\n"
"no se ha dicho nada acerca de como ordenar la informaci@'on, excepto\n"
"para usar la funci@'on predefinida @code{sort}; no se ha dicho nada\n"
"acerca de c@'omo almacenar la informaci@'on, excepto para usar\n"
"variables y listas; no se ha dicho nada acerca de como escribir\n"
"programas que escriben programas. Esto son asuntos para otro tipo\n"
"diferente de libro, un diferente tipo de aprendizaje."

#. type: Plain text
#: emacs-lisp-intro.texi:18907
msgid ""
"What you have done is learn enough for much practical work with GNU Emacs.  "
"What you have done is get started.  This is the end of a beginning."
msgstr ""
"Lo que se ha hecho es aprender lo suficiente para hacer mucho trabajo\n"
"pr@'actico con GNU Emacs. Lo que se ha hecho es comenzar. Este es el\n"
"fin del principio de una gran amistad."

#. type: appendix
#: emacs-lisp-intro.texi:18911
#, no-wrap
msgid "The @code{the-the} Function"
msgstr "La funci@'on @code{the-the}"

#. type: cindex
#: emacs-lisp-intro.texi:18913
#, no-wrap
msgid "Duplicated words function"
msgstr "Funci@'on de palabras duplicadas"

#. type: cindex
#: emacs-lisp-intro.texi:18914
#, no-wrap
msgid "Words, duplicated"
msgstr "Palabras, duplicadas"

#. type: Plain text
#: emacs-lisp-intro.texi:18920
msgid ""
"Sometimes when you you write text, you duplicate words---as with ``you you'' "
"near the beginning of this sentence.  I find that most frequently, I "
"duplicate ``the''; hence, I call the function for detecting duplicated "
"words, @code{the-the}."
msgstr ""
"Algunas veces cuando se se escribe texto, se duplican palabras --- como\n"
"con ``se se'' cerca del principio de esta frase. Se encuentra que lo\n"
"m@'as frecuente, es duplicar ``el''; aqu@'{@dotless{i}}, se llama a la\n"
"funci@'on para detectar las palabras duplicadas, @code{the-the}."

#. type: Plain text
#: emacs-lisp-intro.texi:18924
msgid ""
"As a first step, you could use the following regular expression to search "
"for duplicates:"
msgstr ""
"Como primer paso, se podr@'{@dotless{i}}an usar las siguientes\n"
"expresiones regulares para buscar duplicados:"

#. type: smallexample
#: emacs-lisp-intro.texi:18927
#, no-wrap
msgid "\\\\(\\\\w+[ \\t\\n]+\\\\)\\\\1\n"
msgstr "\\\\(\\\\w+[ \\t\\n]+\\\\)\\\\1\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18939
msgid ""
"This regexp matches one or more word-constituent characters followed by one "
"or more spaces, tabs, or newlines.  However, it does not detect duplicated "
"words on different lines, since the ending of the first word, the end of the "
"line, is different from the ending of the second word, a space.  (For more "
"information about regular expressions, see @ref{Regexp Search, , Regular "
"Expression Searches}, as well as @ref{Regexps, , Syntax of Regular "
"Expressions, emacs, The GNU Emacs Manual}, and @ref{Regular Expressions, , "
"Regular Expressions, elisp, The GNU Emacs Lisp Reference Manual}.)"
msgstr ""
"Este regexp asocia uno o m@'as caracteres que constituyen palabras\n"
"seguidas por uno o m@'as espacios, tabuladores, o nuevas\n"
"l@'{@dotless{i}}neas. Sin embargo, eso no detecta palabras duplicadas\n"
"en diferentes l@'{@dotless{i}}neas, desde la finalizaci@'on de la\n"
"primera palabra, el fin de la l@'{@dotless{i}}nea, es diferente desde\n"
"el fin de la segunda palabra, un espacio. (Para m@'as informaci@'on\n"
"acerca de expresiones regulares, mira el @ref{Buscar regexp, , B@'usquedas\n"
"de Expresiones Regulares}, tan bien como la @ref{Regexps, , Sintaxis de\n"
"Expresiones Regulares, emacs, El Manual de GNU Emacs}, y la\n"
"@ref{Expresiones Regulares, , Expresiones Regulares, elisp, El Manual\n"
"de Referencia GNU Emacs Lisp}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:18943
msgid ""
"You might try searching just for duplicated word-constituent characters but "
"that does not work since the pattern detects doubles such as the two "
"occurrences of `th' in `with the'."
msgstr ""
"Se podr@'{@dotless{i}}an intentar buscar caracteres duplicados pero no\n"
"si el patr@'on detecta dobles tales como las dos ocurrencias de `th'\n"
"en `with the'."

#. type: Plain text
#: emacs-lisp-intro.texi:18948
msgid ""
"Another possible regexp searches for word-constituent characters followed by "
"non-word-constituent characters, reduplicated.  Here, @w{@samp{\\\\w+}} "
"matches one or more word-constituent characters and @w{@samp{\\\\W*}} "
"matches zero or more non-word-constituent characters."
msgstr ""
"Otro posible regexp busca caracteres constituyentes de palabras\n"
"seguidos por caracteres de no palabras constituyentes,\n"
"reduplicadas. Aqu@'{@dotless{i}}, @w{@samp{\\\\w+}} asocia a una o m@'as\n"
"caracteres de palabras constituyente y @w{@samp{\\\\W*}} asocia cero o\n"
"m@'as caracteres que no constituyen palabras."

#. type: smallexample
#: emacs-lisp-intro.texi:18951
#, no-wrap
msgid "\\\\(\\\\(\\\\w+\\\\)\\\\W*\\\\)\\\\1\n"
msgstr "\\\\(\\\\(\\\\w+\\\\)\\\\W*\\\\)\\\\1\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18955
msgid "Again, not useful."
msgstr "De nuevo, no @'util."

#. type: Plain text
#: emacs-lisp-intro.texi:18960
msgid ""
"Here is the pattern that I use.  It is not perfect, but good enough.  "
"@w{@samp{\\\\b}} matches the empty string, provided it is at the beginning "
"or end of a word; @w{@samp{[^@@ \\n\\t]+}} matches one or more occurrences "
"of any characters that are @emph{not} an @@-sign, space, newline, or tab."
msgstr ""
"Aqu@'{@dotless{i}} est@'a el patr@'on que uso. No es perfecto, pero\n"
"suficientemente bueno. @w{@samp{\\\\b}} asocia la cadena\n"
"vac@'{@dotless{i}}a provista al principio o fin de una palabra;\n"
"@w{@samp{[^@@ \\n\\t]+}} asocia una o m@'as ocurrencias de qu@'e\n"
"caracteres que @emph{no} son un @@-signo, espacio, nueva\n"
"l@'{@dotless{i}}nea, o tabulador."

#. type: smallexample
#: emacs-lisp-intro.texi:18963
#, no-wrap
msgid "\\\\b\\\\([^@@ \\n\\t]+\\\\)[ \\n\\t]+\\\\1\\\\b\n"
msgstr "\\\\b\\\\([^@@ \\n\\t]+\\\\)[ \\n\\t]+\\\\1\\\\b\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18967
msgid ""
"One can write more complicated expressions, but I found that this expression "
"is good enough, so I use it."
msgstr ""
"Uno puede escribir expresiones m@'as complicadas, pero esta\n"
"expresi@'on es suficientemente buena as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:18970
msgid ""
"Here is the @code{the-the} function, as I include it in my @file{.emacs} "
"file, along with a handy global key binding:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a la funci@'on @code{the-the}, como se incluye\n"
"en mi fichero @file{.emacs}, a lo largo de un atajo global manejable:"

#. type: group
#: emacs-lisp-intro.texi:18978
#, no-wrap
msgid ""
"(defun the-the ()\n"
"  \"Search forward for for a duplicated word.\"\n"
"  (interactive)\n"
"  (message \"Searching for for duplicated words ...\")\n"
"  (push-mark)\n"
msgstr ""
"(defun the-the ()\n"
"  \"Busca hacia adelante para una palabra duplicada.\"\n"
"  (interactive)\n"
"  (message \"Buscando palabras duplicadas ...\")\n"
"  (push-mark)\n"

#. type: group
#: emacs-lisp-intro.texi:18986
#, no-wrap
msgid ""
"  ;; This regexp is not perfect\n"
"  ;; but is fairly good over all:\n"
"  (if (re-search-forward\n"
"       \"\\\\b\\\\([^@@ \\n\\t]+\\\\)[ \\n\\t]+\\\\1\\\\b\" nil 'move)\n"
"      (message \"Found duplicated word.\")\n"
"    (message \"End of buffer\")))\n"
msgstr ""
"  ;; Este regexp no es perfecto\n"
"  ;; pero es limpiamente bueno a pesar de todo:\n"
"  (if (re-search-forward\n"
"       \"\\\\b\\\\([^@@ \\n\\t]+\\\\)[ \\n\\t]+\\\\1\\\\b\" nil 'move)\n"
"      (message \"Palabra encontrada duplicada.\")\n"
"    (message \"Fin de b@'uffer\")))\n"

#. type: group
#: emacs-lisp-intro.texi:18991
#, no-wrap
msgid ""
";; Bind `the-the' to  C-c \\\n"
"(global-set-key \"\\C-c\\\\\" 'the-the)\n"
msgstr ""
";; Asocia `the-the' a  C-c \\\n"
"(global-set-key \"\\C-c\\\\\" 'the-the)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:18996
msgid "Here is test text:"
msgstr "Aqu@'{@dotless{i}} est@'a el test del texto:"

#. type: group
#: emacs-lisp-intro.texi:19001
#, no-wrap
msgid ""
"one two two three four five\n"
"five six seven\n"
msgstr ""
"uno dos tres cuatro cinco\n"
"cinco seis siete\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19006
msgid ""
"You can substitute the other regular expressions shown above in the function "
"definition and try each of them on this list."
msgstr ""
"Se pueden sustituir las otras expresiones regulares mostradas debajo en\n"
"la definici@'on de funci@'on y se prueba cada una de ellas en esta lista."

#. type: cindex
#: emacs-lisp-intro.texi:19009
#, no-wrap
msgid "Kill ring handling"
msgstr "Manejando el anillo de la muerte"

#. type: cindex
#: emacs-lisp-intro.texi:19010
#, no-wrap
msgid "Handling the kill ring"
msgstr "Manejando el anillo de la muerte"

#. type: cindex
#: emacs-lisp-intro.texi:19011
#, no-wrap
msgid "Ring, making a list like a"
msgstr "Anillo, creando un lista como un"

#. type: Plain text
#: emacs-lisp-intro.texi:19016
msgid ""
"The kill ring is a list that is transformed into a ring by the workings of "
"the @code{current-kill} function.  The @code{yank} and @code{yank-pop} "
"commands use the @code{current-kill} function."
msgstr ""
"El anillo de la muerte es una lista que es transformada dentro de un\n"
"anillo que trabaja con la funci@'on @code{current-kill}. Los comandos\n"
"@code{yank} y @code{yank-pop} usan la funci@'on @code{current-kill}."

#. type: Plain text
#: emacs-lisp-intro.texi:19020
msgid ""
"This appendix describes the @code{current-kill} function as well as both the "
"@code{yank} and the @code{yank-pop} commands, but first, consider the "
"workings of the kill ring."
msgstr ""
"Este ap@'endice describe la funci@'on @code{current-kill} y los\n"
"comandos @code{yank} y @code{yank-pop}, pero primero, considere los\n"
"trabajo del kill ring. "

#. type: unnumberedsec
#: emacs-lisp-intro.texi:19030 emacs-lisp-intro.texi:19031
#, no-wrap
msgid "What the Kill Ring Does"
msgstr "Qu@'e hace el anillo de la muerte"

#. type: Plain text
#: emacs-lisp-intro.texi:19038
msgid ""
"The kill ring has a default maximum length of sixty items; this number is "
"too large for an explanation.  Instead, set it to four.  Please evaluate the "
"following:"
msgstr ""
"El anillo de la muerte @emph{kill ring} tiene el tama@~no m@'aximo de\n"
"sesenta elementos; hacer una explicaci@'on con este n@'umero m@'aximo\n"
"quedar@'{@dotless{i}}a demasiado larga. En vez de eso, pensemos qu@'e\n"
"ocurre si se as@'{@dotless{i}}gna a cuatro. Por favor, eval@'ue lo\n"
"siguiente:"

#. type: group
#: emacs-lisp-intro.texi:19043
#, no-wrap
msgid ""
"(setq old-kill-ring-max kill-ring-max)\n"
"(setq kill-ring-max 4)\n"
msgstr ""
"(setq old-kill-ring-max kill-ring-max)\n"
"(setq kill-ring-max 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19050
msgid ""
"Then, please copy each line of the following indented example into the kill "
"ring.  You may kill each line with @kbd{C-k} or mark it and copy it with "
"@kbd{M-w}."
msgstr ""
"Entonces, por favor, copie cada l@'{@dotless{i}}nea del siguiente\n"
"ejemplo indentado dentro del anillo de la muerte @emph{kill ring}. Se\n"
"puede cortar cada l@'{@dotless{i}}nea con @kbd{C-k} o marcarla y\n"
"copiarla con @kbd{M-w}."

#. type: Plain text
#: emacs-lisp-intro.texi:19059
msgid ""
"(In a read-only buffer, such as the @file{*info*} buffer, the kill command, "
"@kbd{C-k} (@code{kill-line}), will not remove the text, merely copy it to "
"the kill ring.  However, your machine may beep at you.  Alternatively, for "
"silence, you may copy the region of each line with the @kbd{M-w} (@code{kill-"
"ring-save}) command.  You must mark each line for this command to succeed, "
"but it does not matter at which end you put point or mark.)"
msgstr ""
"(En un b@'uffer de solo lectura, tal como el b@'uffer @file{*info*}, el\n"
"comando kill, @kbd{C-k} (@code{kill-line}), no eliminar@'a el texto,\n"
"solamente lo mueve al anillo de la muerte @emph{kill ring}. Sin\n"
"embargo, el ordenador puede avisar con un beep. Alternativamente, para\n"
"silenciar, se puede copiar la regi@'on de cada l@'{@dotless{i}}nea con\n"
"el comando @kbd{M-w} (@code{kill-ring-save}). Se debe marcar cada\n"
"l@'{@dotless{i}}nea de este comando para tener @'exito, pero no\n"
"importa si al final se posiciona en el punto o la marca)."

#. type: Plain text
#: emacs-lisp-intro.texi:19064
msgid ""
"Please invoke the calls in order, so that five elements attempt to fill the "
"kill ring:"
msgstr ""
"Por favor, invoque las llamadas en orden, de modo que los cinco\n"
"elementos rellenen el anillo de la muerte @emph{kill ring}."

#. type: group
#: emacs-lisp-intro.texi:19072
#, no-wrap
msgid ""
"first some text\n"
"second piece of text\n"
"third line\n"
"fourth line of text\n"
"fifth bit of text\n"
msgstr ""
"primero algo de texto\n"
"segunda pieza de texto\n"
"tercera l@'{@dotless{i}}nea\n"
"cuarta l@'{@dotless{i}}nea de texto\n"
"quinto bit de texto\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19078
msgid "Then find the value of @code{kill-ring} by evaluating"
msgstr "Entonces encuentra el valor de @code{kill-ring} evaluando"

#. type: smallexample
#: emacs-lisp-intro.texi:19081
#, no-wrap
msgid "kill-ring\n"
msgstr "kill-ring\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19086
msgid "It is:"
msgstr "Eso es:"

#. type: group
#: emacs-lisp-intro.texi:19091
#, no-wrap
msgid ""
"(\"fifth bit of text\" \"fourth line of text\"\n"
"\"third line\" \"second piece of text\")\n"
msgstr ""
"(\"quinto bit de texto\" \"cuarta l@'{@dotless{i}}nea de texto\"\n"
"\"tercera l@'{@dotless{i}}nea\" \"segunda pieza de texto\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19096
msgid "The first element, @samp{first some text}, was dropped."
msgstr "El primer elemento, @samp{primero algo de texto}, fu@'e borrado."

#. type: Plain text
#: emacs-lisp-intro.texi:19099
msgid "To return to the old value for the length of the kill ring, evaluate:"
msgstr "Para devolver el viejo valor para el tama@~no del kill ring, eval@'ue:"

#. type: smallexample
#: emacs-lisp-intro.texi:19102
#, no-wrap
msgid "(setq kill-ring-max old-kill-ring-max)\n"
msgstr "(setq kill-ring-max old-kill-ring-max)\n"

#. type: findex
#: emacs-lisp-intro.texi:19104 emacs-lisp-intro.texi:19106
#, no-wrap
msgid "current-kill"
msgstr "current-kill"

#. type: Plain text
#: emacs-lisp-intro.texi:19115
msgid ""
"The @code{current-kill} function changes the element in the kill ring to "
"which @code{kill-ring-yank-pointer} points.  (Also, the @code{kill-new} "
"function sets @code{kill-ring-yank-pointer} to point to the latest element "
"of the kill ring.  The @code{kill-new} function is used directly or "
"indirectly by @code{kill-append}, @code{copy-region-as-kill}, @code{kill-"
"ring-save}, @code{kill-line}, and @code{kill-region}.)"
msgstr ""
"La funci@'on @code{current-kill} cambia el elemento en el anillo de la\n"
"muerte @emph{kill ring} para el que el @code{kill-ring-yank-pointer}\n"
"apunta. (Tambi@'en, la funci@'on @code{kill-new} asigna\n"
"@code{kill-ring-yank-pointer} para apuntar al @'ultimo elemento del\n"
"anillo de la muerte @emph{kill ring}. La funci@'on @code{kill-new} se\n"
"usa directamente o indirectamente por @code{kill-append},\n"
"@code{copy-region-as-kill}, @code{kill-ring-save}, @code{kill-line}, y\n"
"@code{kill-region}.)"

#. type: node
#: emacs-lisp-intro.texi:19122
#, no-wrap
msgid "Code for current-kill"
msgstr "C@'odigo para current-kill"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:19123
#, no-wrap
msgid "The code for @code{current-kill}"
msgstr "El c@'odigo @code{current-kill}"

#. type: Plain text
#: emacs-lisp-intro.texi:19130
msgid ""
"The @code{current-kill} function is used by @code{yank} and by @code{yank-"
"pop}.  Here is the code for @code{current-kill}:"
msgstr ""
"La funci@'on @code{current-kill} es usada por @code{yank} y por\n"
"@code{yank-pop}. Aqu@'{@dotless{i}} est@'a el c@'odigo para @code{current-"
"kill}:"

#. type: group
#: emacs-lisp-intro.texi:19138
#, no-wrap
msgid ""
"(defun current-kill (n &optional do-not-move)\n"
"  \"Rotate the yanking point by N places, and then return that kill.\n"
"If N is zero, `interprogram-paste-function' is set, and calling it\n"
"returns a string, then that string is added to the front of the\n"
"kill ring and returned as the latest kill.\n"
msgstr ""
"(defun current-kill (n &optional do-not-move) \n"
"\"Rota el punto de pegue por N lugares, y entonces devuelve lo cortado.\n"
"Si N es cero, `interprogram-paste-function' se asigna, y si se llama\n"
"devuelve una cadena, entonces esta cadena se a@~nade al frente del\n"
"anillo de la muerte @emph{kill ring} y devuelve el @'ultimo corte.\n"

#. type: group
#: emacs-lisp-intro.texi:19145
#, no-wrap
msgid ""
"If optional arg DO-NOT-MOVE is non-nil, then don't actually move the\n"
"yanking point; just return the Nth kill forward.\"\n"
"  (let ((interprogram-paste (and (= n 0)\n"
"                                 interprogram-paste-function\n"
"                                 (funcall interprogram-paste-function))))\n"
msgstr ""
"Si el argumento opcional DO-NOT-MOVE es no nulo, entonces no muevas el\n"
"punto de pegue; solo devuelve el Nth corte hacia adelante.\n"
"   (let ((interprogram-paste (and (= n 0)\n"
"                                  interprogram-paste-function\n"
"                                  (funcall interprogram-paste-function))))) \n"

#. type: group
#: emacs-lisp-intro.texi:19155
#, no-wrap
msgid ""
"    (if interprogram-paste\n"
"        (progn\n"
"          ;; Disable the interprogram cut function when we add the new\n"
"          ;; text to the kill ring, so Emacs doesn't try to own the\n"
"          ;; selection, with identical text.\n"
"          (let ((interprogram-cut-function nil))\n"
"            (kill-new interprogram-paste))\n"
"          interprogram-paste)\n"
msgstr ""
"    (if interprogram-paste\n"
"        (progn\n"
"          ;; Deshabilita el programa de la funci@'on de corte cuando se\n"
"          ;; a@~nade el nuevo texto al anillo de la muerte @emph{kill ring},\n"
"          ;; as@'{@dotless{i}} Emacs no intenta poseer la selecci@'on\n"
"          ;; con id@'entico texto.\n"
"          (let ((interprogram-cut-function nil))\n"
"            (kill-new interprogram-paste))\n"
"          interprogram-paste)\n"

#. type: group
#: emacs-lisp-intro.texi:19165
#, no-wrap
msgid ""
"      (or kill-ring (error \"Kill ring is empty\"))\n"
"      (let ((ARGth-kill-element\n"
"             (nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"                          (length kill-ring))\n"
"                     kill-ring)))\n"
"        (or do-not-move\n"
"            (setq kill-ring-yank-pointer ARGth-kill-element))\n"
"        (car ARGth-kill-element)))))\n"
msgstr ""
"      (or kill-ring (error \"Kill ring is empty\"))\n"
"      (let ((ARGth-kill-element\n"
"             (nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"                          (length kill-ring))\n"
"                     kill-ring)))\n"
"        (or do-not-move\n"
"            (setq kill-ring-yank-pointer ARGth-kill-element))\n"
"        (car ARGth-kill-element)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19173
msgid ""
"Remember also that the @code{kill-new} function sets @code{kill-ring-yank-"
"pointer} to the latest element of the kill ring, which means that all the "
"functions that call it set the value indirectly: @code{kill-append}, "
"@code{copy-region-as-kill}, @code{kill-ring-save}, @code{kill-line}, and "
"@code{kill-region}."
msgstr ""
"Recuerde tambi@'en que la funci@'on @code{kill-new} asigna\n"
"@code{kill-ring-yank-pointer} al @'ultimo elemento del anillo de la\n"
"muerte @emph{kill ring}, que significa que todas las funciones lo\n"
"llaman y asigna el valor de manera indirecta: @code{kill-append},\n"
"@code{copy-region-as-kill}, @code{kill-ring-save}, @code{kill-line} y\n"
"@code{kill-region}. "

#. type: Plain text
#: emacs-lisp-intro.texi:19177
msgid ""
"Here is the line in @code{kill-new}, which is explained in @ref{kill-new "
"function, , The @code{kill-new} function}."
msgstr ""
"Aqu@'{@dotless{i}} est@'a la l@'{@dotless{i}}nea en @code{kill-new},\n"
"que se explica en la @ref{Funci@'on kill-new, , La funci@'on\n"
"@code{kill-new}}."

#. type: Plain text
#: emacs-lisp-intro.texi:19190
msgid ""
"The @code{current-kill} function looks complex, but as usual, it can be "
"understood by taking it apart piece by piece.  First look at it in skeletal "
"form:"
msgstr ""
"La funci@'on @code{current-kill} parece compleja, pero usual, eso\n"
"puede ser comprendido tom@'andolo aparte pieza por pieza. Primero\n"
"m@'{@dotless{i}}ralo en la forma esquel@'etica:"

#. type: group
#: emacs-lisp-intro.texi:19197
#, no-wrap
msgid ""
"(defun current-kill (n &optional do-not-move)\n"
"  \"Rotate the yanking point by N places, and then return that kill.\"\n"
"  (let @var{varlist}\n"
"    @var{body}@dots{})\n"
msgstr ""
"(defun current-kill (n &optional do-not-move)\n"
"  \"Rota el punto a pegar por N lugares, y entonces devuelve el texto cortado.\"\n"
"  (let @var{varlist}\n"
"    @var{body}@dots{})\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19202
msgid ""
"This function takes two arguments, one of which is optional.  It has a "
"documentation string.  It is @emph{not} interactive."
msgstr ""
"Esta funci@'on tiene dos argumentos, uno es opcional. Hay una cadena\n"
"de documentaci@'on. @emph{No} es una funci@'on interactiva."

#. type: node
#: emacs-lisp-intro.texi:19210
#, no-wrap
msgid "Body of current-kill"
msgstr "Cuerpo de current-kill"

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:19211
#, no-wrap
msgid "The Body of @code{current-kill}"
msgstr "El cuerpo de @code{current-kill}"

#. type: Plain text
#: emacs-lisp-intro.texi:19216
msgid ""
"The body of the function definition is a @code{let} expression, which itself "
"has a body as well as a @var{varlist}."
msgstr ""
"El cuerpo de la definici@'on de funci@'on es una expresi@'on\n"
"@code{let}, que por s@'{@dotless{i}} misma tiene tanto un cuerpo como\n"
"una @var{varlist}."

#. type: Plain text
#: emacs-lisp-intro.texi:19225
msgid ""
"The @code{let} expression declares a variable that will be only usable "
"within the bounds of this function.  This variable is called "
"@code{interprogram-paste} and is for copying to another program.  It is not "
"for copying within this instance of GNU Emacs.  Most window systems provide "
"a facility for interprogram pasting.  Sadly, that facility usually provides "
"only for the last element.  Most windowing systems have not adopted a ring "
"of many possibilities, even though Emacs has provided it for decades."
msgstr ""
"La expresi@'on @code{let} declara una variable que ser@'a solo usable\n"
"con las asociaciones de esta funci@'on. Esta variable se llama\n"
"@code{interprogram-paste} y se copia a otro programa. No se copia con\n"
"esta instancia de GNU Emacs. La mayor@'{@dotless{i}}a de los sistemas\n"
"de ventanas proveen una facilidad para pegar el\n"
"interprograma. Tristemente, esta facilidad normalmente provee solo el\n"
"@'ultimo elemento. La mayor@'{@dotless{i}}a de los sistemas de\n"
"ventanas no han adoptado un anillo de muchas posibilidades, incluso\n"
"aunque Emacs haya provisto esto durante d@'ecadas."

#. type: Plain text
#: emacs-lisp-intro.texi:19228
msgid ""
"The @code{if} expression has two parts, one if there exists "
"@code{interprogram-paste} and one if not."
msgstr ""
"La expresi@'on @code{if} tiene dos partes, una si existe\n"
"@code{interprogram-paste} y otra si no."

#. type: Plain text
#: emacs-lisp-intro.texi:19234
msgid ""
"Let us consider the `if not' or else-part of the @code{current-kill} "
"function.  (The then-part uses the @code{kill-new} function, which we have "
"already described.  @xref{kill-new function, , The @code{kill-new} "
"function}.)"
msgstr ""
"Perm@'{@dotless{i}}tenos considerar el `si no' o la parte else de la\n"
"funci@'on @code{current-kill}. (La parte then usa la funci@'on\n"
"@code{kill-new}, que ya hemos descrito. @xref{Funci@'on kill-new, , La\n"
"funci@'on @code{kill-new}.})"

#. type: group
#: emacs-lisp-intro.texi:19245
#, no-wrap
msgid ""
"(or kill-ring (error \"Kill ring is empty\"))\n"
"(let ((ARGth-kill-element\n"
"       (nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"                    (length kill-ring))\n"
"               kill-ring)))\n"
"  (or do-not-move\n"
"      (setq kill-ring-yank-pointer ARGth-kill-element))\n"
"  (car ARGth-kill-element))\n"
msgstr ""
"(or kill-ring (error \"El Kill ring est@'a vac@'{@dotless{i}}o\"))\n"
"(let ((ARGth-kill-element\n"
"       (nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"                    (length kill-ring))\n"
"               kill-ring)))\n"
"  (or do-not-move\n"
"      (setq kill-ring-yank-pointer ARGth-kill-element))\n"
"  (car ARGth-kill-element))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19251
msgid ""
"The code first checks whether the kill ring has content; otherwise it "
"signals an error."
msgstr ""
"El c@'odigo primero chequea si el kill ring @emph{anillo de la muerte}\n"
"tiene contenido; de otro modo se@~nala un error."

#. type: Plain text
#: emacs-lisp-intro.texi:19255
msgid ""
"Note that the @code{or} expression is very similar to testing length with an "
"@code{if}:"
msgstr ""
"Note que la expresi@'on @code{or} es muy similar para testear el\n"
"tama@~no con un @code{if}:"

#. type: findex
#: emacs-lisp-intro.texi:19256
#, no-wrap
msgid "zerop"
msgstr "zerop"

#. type: findex
#: emacs-lisp-intro.texi:19257
#, no-wrap
msgid "error"
msgstr "error"

#. type: group
#: emacs-lisp-intro.texi:19263
#, no-wrap
msgid ""
"(if (zerop (length kill-ring))          ; @r{if-part}\n"
"    (error \"Kill ring is empty\"))       ; @r{then-part}\n"
"  ;; No else-part\n"
msgstr ""
"(if (zerop (length kill-ring))          ; @r{parte-si}\n"
"    (error \"Anillo de la muerte vac@'{@dotless{i}}o\"))       ; @r{parte-entonces}\n"
"  ;; No hay parte-resto\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19271
msgid ""
"If there is not anything in the kill ring, its length must be zero and an "
"error message sent to the user: @samp{Kill ring is empty}.  The "
"@code{current-kill} function uses an @code{or} expression which is simpler.  "
"But an @code{if} expression reminds us what goes on."
msgstr ""
"Si no hay nada en el kill ring @emph{anillo de la muerte}, su tama@~no\n"
"debe ser cero y un mensaje de error se env@'{@dotless{i}}a al usuario:\n"
"@samp{El kill ring est@'a vac@'{@dotless{i}}o}. La funci@'on\n"
"@code{current-kill} usa una expresi@'on @code{or} que es simple. Pero\n"
"una expresi@'on @code{if} recuerda lo que lleva."

#. type: Plain text
#: emacs-lisp-intro.texi:19282
msgid ""
"This @code{if} expression uses the function @code{zerop} which returns true "
"if the value it is testing is zero.  When @code{zerop} tests true, the then-"
"part of the @code{if} is evaluated.  The then-part is a list starting with "
"the function @code{error}, which is a function that is similar to the "
"@code{message} function (@pxref{message, , The @code{message} Function}) in "
"that it prints a one-line message in the echo area.  However, in addition to "
"printing a message, @code{error} also stops evaluation of the function "
"within which it is embedded.  This means that the rest of the function will "
"not be evaluated if the length of the kill ring is zero."
msgstr ""
"Esta expresi@'on @code{if} usa la funci@'on @code{zerop} que devuelve\n"
"cierto si el valor que se chequea es cero. Cuando @code{zerop} chequea\n"
"cierto, la parte then del @code{if} se eval@'ua. La parte then es una\n"
"lista empezando con la funci@'on @code{error}, que es una funci@'on\n"
"que es similar a la funci@'on @code{message} (@pxref{message, , La\n"
"Funci@'on @code{message}}) que imprime un mensaje de una\n"
"l@'{@dotless{i}}nea en el @'area echo. Sin embargo, adem@'as de\n"
"imprimir un mensaje, @code{error} tambi@'en eval@'ua la funci@'on que\n"
"est@'a embebida. Esto significa que el resto de la funci@'on no ser@'a\n"
"evaluada si el tama@~no del anillo de la muerte @emph{kill ring} es\n"
"cero."

#. type: Plain text
#: emacs-lisp-intro.texi:19286
msgid ""
"Then the @code{current-kill} function selects the element to return.  The "
"selection depends on the number of places that @code{current-kill} rotates "
"and on where @code{kill-ring-yank-pointer} points."
msgstr ""
"Entonces la funci@'on @code{current-kill} selecciona el elemento a\n"
"devolver. La selecci@'on depende del n@'umero de lugares que\n"
"@code{current-kill} rota y donde @code{kill-ring-yank-pointer} apunta."

#. type: Plain text
#: emacs-lisp-intro.texi:19291
msgid ""
"Next, either the optional @code{do-not-move} argument is true or the current "
"value of @code{kill-ring-yank-pointer} is set to point to the list.  "
"Finally, another expression returns the first element of the list even if "
"the @code{do-not-move} argument is true."
msgstr ""
"Lo siguiente, si el argumento @code{do-not-move} opcional es verdadero\n"
"o el actual valor de @code{kill-ring-yank-pointer} se establece al\n"
"punto de la lista. Finalmente, otra expresi@'on devuelve el primer\n"
"elemento de la lista incluso si el argumento @code{do-not-move} es\n"
"verdadero."

#. type: unnumberedsubsubsec
#: emacs-lisp-intro.texi:19294
#, no-wrap
msgid "Digression about the word `error'"
msgstr "Disgresi@'on acerca de la palabra `error'"

#. type: Plain text
#: emacs-lisp-intro.texi:19305
msgid ""
"In my opinion, it is slightly misleading, at least to humans, to use the "
"term `error' as the name of the @code{error} function.  A better term would "
"be `cancel'.  Strictly speaking, of course, you cannot point to, much less "
"rotate a pointer to a list that has no length, so from the point of view of "
"the computer, the word `error' is correct.  But a human expects to attempt "
"this sort of thing, if only to find out whether the kill ring is full or "
"empty.  This is an act of exploration."
msgstr ""
"En mi opini@'on, es ligeramente err@'oneo, al menos para humanos, usar\n"
"el t@'ermino `error' como el nombre de la funci@'on @code{error}. Un\n"
"t@'ermino mejor ser@'{@dotless{i}}a `cancelar'. Estrictamente\n"
"hablando, de acuerdo, no se puede apuntar, mucho menos rotar un\n"
"puntero a una lista que no tiene tama@~no, as@'{@dotless{i}} desde el\n"
"punto de vista del ordenador, la palabra `error' es correcta. Pero un\n"
"humano espera intentar algo, si solo si se encuentra el anillo de la\n"
"muerte @emph{kill ring} est@'e lleno o vac@'{@dotless{i}}o. Esto es un\n"
"acto de exploraci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:19313
msgid ""
"From the human point of view, the act of exploration and discovery is not "
"necessarily an error, and therefore should not be labeled as one, even in "
"the bowels of a computer.  As it is, the code in Emacs implies that a human "
"who is acting virtuously, by exploring his or her environment, is making an "
"error.  This is bad.  Even though the computer takes the same steps as it "
"does when there is an `error', a term such as `cancel' would have a clearer "
"connotation."
msgstr ""
"Desde el punto de vista humano, el acto de exploraci@'on y\n"
"descubrimiento no es necesariamente un error, y por esta raz@'on no\n"
"ser@'{@dotless{i}}a etiquetado como tal, incluso las vocales de un\n"
"ordenador. Como tal, el c@'odigo en Emacs implica que un humano que\n"
"est@'a actuando virtuosamente, explorando su entorno, est@'a teniendo\n"
"un error. Esto est@'a mal. Incluso aunque el ordenador tome los mismos\n"
"pasos como cuando hay `error', un t@'ermino tal como `cancelar'\n"
"tendr@'{@dotless{i}}a una clara connotaci@'on."

#. type: Plain text
#: emacs-lisp-intro.texi:19323
msgid ""
"Among other actions, the else-part of the @code{if} expression sets the "
"value of @code{kill-ring-yank-pointer} to @code{ARGth-kill-element} when the "
"kill ring has something in it and the value of @code{do-not-move} is "
"@code{nil}."
msgstr ""
"Entre otras acciones, la else-part de la expresi@'on @code{if} asigna\n"
"el valor de @code{kill-ring-yank-pointer} a @code{ARGth-kill-element}\n"
"cuando el kill ring @emph{anillo de la muerte} tiene alguna cosa\n"
"dentro y el valor de @code{do-not-move} es @code{nil}."

#. type: group
#: emacs-lisp-intro.texi:19332
#, no-wrap
msgid ""
"(nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"             (length kill-ring))\n"
"        kill-ring)))\n"
msgstr ""
"(nthcdr (mod (- n (length kill-ring-yank-pointer))\n"
"             (length kill-ring))\n"
"        kill-ring)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19344
msgid ""
"This needs some examination.  Unless it is not supposed to move the pointer, "
"the @code{current-kill} function changes where @code{kill-ring-yank-pointer} "
"points.  That is what the @w{@code{(setq kill-ring-yank-pointer ARGth-kill-"
"element))}} expression does.  Also, clearly, @code{ARGth-kill-element} is "
"being set to be equal to some @sc{cdr} of the kill ring, using the "
"@code{nthcdr} function that is described in an earlier section.  (@xref{copy-"
"region-as-kill}.)  How does it do this?"
msgstr ""
"Esto necesita alg@'un examen. A menos que no se suponga mover el\n"
"puntero, la funci@'on @code{current-kill} cambia donde\n"
"@code{kill-ring-yank-pointer} apunta. Esto es lo que la expresi@'on\n"
"@w{@code{(setq kill-ring-yank-pointer ARGth-kill-element)}}\n"
"hace. Tambi@'en, claramente, @code{ARGth-kill-element} est@'a siendo\n"
"asignado para ser igual a alg@'un @sc{cdr} del anillo de la muerte\n"
"@emph{kill ring}, usando la funci@'on @code{nthcdr} que est@'a\n"
"descrita en una secci@'on temprana. (@xref{copy-region-as-kill}.)\n"
"¿C@'omo se hace?"

#. type: Plain text
#: emacs-lisp-intro.texi:19348
msgid ""
"As we have seen before (@pxref{nthcdr}), the @code{nthcdr} function works by "
"repeatedly taking the @sc{cdr} of a list---it takes the @sc{cdr} of the "
"@sc{cdr} of the @sc{cdr} @dots{}"
msgstr ""
"Como se ha visto antes (@pxref{nthcdr}), la funci@'on @code{nthcdr}\n"
"funciona repetidamente tomando el @sc{cdr} de una lista --- eso toma\n"
"el @sc{cdr}, del @sc{cdr}, del @sc{cdr}, @dots{}"

#. type: Plain text
#: emacs-lisp-intro.texi:19351
msgid "The two following expressions produce the same result:"
msgstr "Las siguientes dos expresiones producen el mismo resultado:"

#. type: group
#: emacs-lisp-intro.texi:19355
#, no-wrap
msgid ""
"(setq kill-ring-yank-pointer (cdr kill-ring))\n"
"\n"
msgstr ""
"(setq kill-ring-yank-pointer (cdr kill-ring))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19357
#, no-wrap
msgid "(setq kill-ring-yank-pointer (nthcdr 1 kill-ring))\n"
msgstr "(setq kill-ring-yank-pointer (nthcdr 1 kill-ring))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19362
msgid ""
"However, the @code{nthcdr} expression is more complicated.  It uses the "
"@code{mod} function to determine which @sc{cdr} to select."
msgstr ""
"Sin embargo, la expresi@'on @code{nthcdr} es m@'as complicada. Usa la\n"
"funci@'on @code{mod} para determinar que @sc{cdr} para seleccionar."

#. type: Plain text
#: emacs-lisp-intro.texi:19365
msgid ""
"(You will remember to look at inner functions first; indeed, we will have to "
"go inside the @code{mod}.)"
msgstr ""
"(Se recordar@'a buscar funciones propias primero, en vez de esto,\n"
"tendremos que ir dentro del @code{mod}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:19370
msgid ""
"The @code{mod} function returns the value of its first argument modulo the "
"second; that is to say, it returns the remainder after dividing the first "
"argument by the second.  The value returned has the same sign as the second "
"argument."
msgstr ""
"La funci@'on @code{mod} devuelve el valor de su primer argumento\n"
"m@'odulo el segundo; que es decir, eso devuelve el resto despu@'es de\n"
"dividir el primer argumento por el segundo. El valor devuelto tiene el\n"
"mismo signo que el segundo argumento."

#. type: Plain text
#: emacs-lisp-intro.texi:19373 emacs-lisp-intro.texi:20949
msgid "Thus,"
msgstr "De este modo,"

#. type: group
#: emacs-lisp-intro.texi:19380
#, no-wrap
msgid ""
"(mod 12 4)\n"
"  @result{} 0  ;; @r{because there is no remainder}\n"
"(mod 13 4)\n"
"  @result{} 1\n"
msgstr ""
"(mod 12 4)\n"
"  @result{} 0  ;; @r{porque no hay resto}\n"
"(mod 13 4)\n"
"  @result{} 1\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19386
msgid ""
"In this case, the first argument is often smaller than the second.  That is "
"fine."
msgstr ""
"En este caso, el primer argumento es con frecuencia peque@~no que el\n"
"segundo. Que est@'a bien."

#. type: group
#: emacs-lisp-intro.texi:19393
#, no-wrap
msgid ""
"(mod 0 4)\n"
"  @result{} 0\n"
"(mod 1 4)\n"
"  @result{} 1\n"
msgstr ""
"(mod 0 4)\n"
"  @result{} 0\n"
"(mod 1 4)\n"
"  @result{} 1\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19400
msgid ""
"We can guess what the @code{-} function does.  It is like @code{+} but "
"subtracts instead of adds; the @code{-} function subtracts its second "
"argument from its first.  Also, we already know what the @code{length} "
"function does (@pxref{length}).  It returns the length of a list."
msgstr ""
"Se puede adivinar lo que la funci@'on @code{-} hace. Eso es como\n"
"@code{+} pero sustrae en vez de a@~nadir; la funci@'on @code{-}\n"
"sustrae su segundo argumento desde el primero. Tambi@'en, ya se sabe\n"
"que la funci@'on @code{length} hace (@pxref{length}). Eso devuelve el\n"
"tama@~no de una lista."

#. type: Plain text
#: emacs-lisp-intro.texi:19403
msgid ""
"And @code{n} is the name of the required argument to the @code{current-kill} "
"function."
msgstr ""
"Y @code{n} es el nombre del argumento requerido a la funci@'on @code{current-"
"kill}."

#. type: Plain text
#: emacs-lisp-intro.texi:19408
msgid ""
"So when the first argument to @code{nthcdr} is zero, the @code{nthcdr} "
"expression returns the whole list, as you can see by evaluating the "
"following:"
msgstr ""
"As@'{@dotless{i}} cuando el primer argumento a @code{nthcdr} es cero,\n"
"la expresi@'on @code{nthcdr} devuelve la lista entera, como se puede\n"
"ver evaluando lo siguiente:"

#. type: group
#: emacs-lisp-intro.texi:19418
#, no-wrap
msgid ""
";; kill-ring-yank-pointer @r{and} kill-ring @r{have a length of four}\n"
";; @r{and} (mod (- 0 4) 4) @result{} 0\n"
"(nthcdr (mod (- 0 4) 4)\n"
"        '(\"fourth line of text\"\n"
"          \"third line\"\n"
"          \"second piece of text\"\n"
"          \"first some text\"))\n"
msgstr ""
";; kill-ring-yank-pointer @r{and} kill-ring @r{tener un tama@~no de cuatro}\n"
";; @r{and} (mod (- 0 4) 4) @result{} 0\n"
"(nthcdr (mod (- 0 4) 4)\n"
"        '(\"cuarta l@'{@dotless{i}}nea de texto\"\n"
"          \"tercera l@'{@dotless{i}}nea\"\n"
"          \"segunda pieza de texto\"\n"
"          \"primero algo de texto\"))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19425
msgid ""
"When the first argument to the @code{current-kill} function is one, the "
"@code{nthcdr} expression returns the list without its first element."
msgstr ""
"Cuando el primer argumento a la funci@'on @code{current-kill} es uno,\n"
"la expresi@'on @code{nthcdr} devuelve la lista sin su primer elemento."

#. type: group
#: emacs-lisp-intro.texi:19433
#, no-wrap
msgid ""
"(nthcdr (mod (- 1 4) 4)\n"
"        '(\"fourth line of text\"\n"
"          \"third line\"\n"
"          \"second piece of text\"\n"
"          \"first some text\"))\n"
msgstr ""
"(nthcdr (mod (- 1 4) 4)\n"
"        '(\"cuarta l@'{@dotless{i}}nea de texto\"\n"
"          \"tercera l@'{@dotless{i}}nea\"\n"
"          \"segunda pieza de texto\"\n"
"          \"primero algo de texto\"))\n"

#. type: cindex
#: emacs-lisp-intro.texi:19436
#, no-wrap
msgid "@samp{global variable} defined"
msgstr "@samp{variable global} definida"

#. type: cindex
#: emacs-lisp-intro.texi:19437
#, no-wrap
msgid "@samp{variable, global}, defined"
msgstr "@samp{variable, global}, definida"

#. type: Plain text
#: emacs-lisp-intro.texi:19445
msgid ""
"Incidentally, both @code{kill-ring} and @code{kill-ring-yank-pointer} are "
"@dfn{global variables}.  That means that any expression in Emacs Lisp can "
"access them.  They are not like the local variables set by @code{let} or "
"like the symbols in an argument list.  Local variables can only be accessed "
"within the @code{let} that defines them or the function that specifies them "
"in an argument list (and within expressions called by them)."
msgstr ""
"Incidentalmente, tanto @code{kill-ring} y\n"
"@code{kill-ring-yank-pointer} son @dfn{variables globales}. Esto\n"
"significa que cualquier expresi@'on en Emacs Lisp puede acceder a\n"
"ellas. Ellas no son como las variables locales asignadas por\n"
"@code{let} o como los s@'{@dotless{i}}mbolos en una lista de\n"
"argumentos. Las variables locales pueden solo ser accedidas con el\n"
"@code{let} que los define o la funci@'on que los especifica en una\n"
"lista de argumentos (y con expresiones llamadas por ellos)."

#. type: Plain text
#: emacs-lisp-intro.texi:19458
msgid ""
"After learning about @code{current-kill}, the code for the @code{yank} "
"function is almost easy."
msgstr ""
"Despu@'es de aprender acerca de @code{current-kill}, el c@'odigo para\n"
"la funci@'on @code{yank} es casi f@'acil."

#. type: Plain text
#: emacs-lisp-intro.texi:19463
msgid ""
"The @code{yank} function does not use the @code{kill-ring-yank-pointer} "
"variable directly.  It calls @code{insert-for-yank} which calls "
"@code{current-kill} which sets the @code{kill-ring-yank-pointer} variable."
msgstr ""
"La funci@'on @code{yank} no usa la variable @code{kill-ring-yank-pointer}\n"
"directamente. Eso llama a @code{insert-for-yank} que llama a\n"
"@code{current-kill} que asigna la variable @code{kill-ring-yank-pointer}."

#. type: group
#: emacs-lisp-intro.texi:19477
#, no-wrap
msgid ""
"(defun yank (&optional arg)\n"
"  \"Reinsert (\\\"paste\\\") the last stretch of killed text.\n"
"More precisely, reinsert the stretch of killed text most recently\n"
"killed OR yanked.  Put point at end, and set mark at beginning.\n"
"With just \\\\[universal-argument] as argument, same but put point at\n"
"beginning (and mark at end).  With argument N, reinsert the Nth most\n"
"recently killed stretch of killed text.\n"
"\n"
msgstr ""
"(defun yank (&optional arg)\n"
"  \"Reinserta (\\\"pega\\\") el @'ultimo logro del texto cortado.\n"
"M@'as precisamente, reinserta el texto cortado m@'as recientemente. \n"
"Pon el punto al final, y asigna la marca al principio.\n"
"Solo con \\\\[universal-argument] como argumento, lo mismo pero pon el \n"
"punto al principio (y la marca al final). Con el argumento N, reinserta \n"
"el N m@'as recientemente cortado.\n"

#. type: group
#: emacs-lisp-intro.texi:19481
#, no-wrap
msgid ""
"When this command inserts killed text into the buffer, it honors\n"
"`yank-excluded-properties' and `yank-handler' as described in the\n"
"doc string for `insert-for-yank-1', which see.\n"
"\n"
msgstr ""
"Cuando este comando inserta texto cortado dentro del b@'uffer, eso\n"
"honra a `yank-excluded-properties' y `yank-handler' como se describe\n"
"la cadena de documentaci@'on para `insert-for-yank-1', que se ve.\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19483
#, no-wrap
msgid "See also the command \\\\[yank-pop].\"\n"
msgstr "Ver tambi@'en el comando \\\\[yank-pop].\"\n"

#. type: group
#: emacs-lisp-intro.texi:19491
#, no-wrap
msgid ""
"  (interactive \"*P\")\n"
"  (setq yank-window-start (window-start))\n"
"  ;; If we don't get all the way thru, make last-command indicate that\n"
"  ;; for the following command.\n"
"  (setq this-command t)\n"
"  (push-mark (point))\n"
msgstr ""
"  (interactive \"*P\")\n"
"  (setq yank-window-start (window-start))\n"
"  ;; Si no tenemos todo el camino a trav@'es, crea last-command que\n"
"  ;; indique esto para el siguiente comando.\n"
"  (setq this-command t)\n"
"  (push-mark (point))\n"

#. type: group
#: emacs-lisp-intro.texi:19504
#, no-wrap
msgid ""
"  (insert-for-yank (current-kill (cond\n"
"                                  ((listp arg) 0)\n"
"                                  ((eq arg '-) -2)\n"
"                                  (t (1- arg)))))\n"
"  (if (consp arg)\n"
"      ;; This is like exchange-point-and-mark,\n"
"      ;;     but doesn't activate the mark.\n"
"      ;; It is cleaner to avoid activation, even though the command\n"
"      ;; loop would deactivate the mark because we inserted text.\n"
"      (goto-char (prog1 (mark t)\n"
"                   (set-marker (mark-marker) (point) (current-buffer)))))\n"
msgstr ""
"  (insert-for-yank (current-kill (cond\n"
"                                  ((listp arg) 0)\n"
"                                  ((eq arg '-) -2)\n"
"                                  (t (1- arg)))))\n"
"  (if (consp arg)\n"
"      ;; Esto es como like exchange-point-and-mark,\n"
"      ;;     pero no activa la marca.\n"
"      ;; Es limpio evitar la activaci@'on, incluso aunque el comando\n"
"      ;; loop would desactivar@'{@dotless{i}}a la marca porque se\n"
"      ;; insertara el texto.\n"
"      (goto-char (prog1 (mark t)\n"
"                   (set-marker (mark-marker) (point) (current-buffer)))))\n"

#. type: group
#: emacs-lisp-intro.texi:19510
#, no-wrap
msgid ""
"  ;; If we do get all the way thru, make this-command indicate that.\n"
"  (if (eq this-command t)\n"
"      (setq this-command 'yank))\n"
"  nil)\n"
msgstr ""
"  ;; Si tenemos todo el camino, haz que this-command lo indique.\n"
"  (if (eq this-command t)\n"
"      (setq this-command 'yank))\n"
"  nil)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19516
msgid ""
"The key expression is @code{insert-for-yank}, which inserts the string "
"returned by @code{current-kill}, but removes some text properties from it."
msgstr ""
"La expresi@'on clave es @code{insert-for-yank}, que inserta la cadena\n"
"devuelta por @code{current-kill}, pero elimina algo de propiedades de\n"
"texto desde eso."

#. type: Plain text
#: emacs-lisp-intro.texi:19522
msgid ""
"However, before getting to that expression, the function sets the value of "
"@code{yank-window-start} to the position returned by the @code{(window-"
"start)} expression, the position at which the display currently starts.  The "
"@code{yank} function also sets @code{this-command} and pushes the mark."
msgstr ""
"Sin embargo, antes de tener esta expresi@'on, la funci@'on asigna el\n"
"valor de @code{yank-window-start} a la posici@'on devuelta por la\n"
"expresi@'on @code{(window-start)}, la posici@'on que muestra lo\n"
"que actualmente empieza. La funci@'on @code{yank} tambi@'en asigna\n"
"@code{this-command} y empuja la marca."

#. type: Plain text
#: emacs-lisp-intro.texi:19526
msgid ""
"After it yanks the appropriate element, if the optional argument is a "
"@sc{cons} rather than a number or nothing, it puts point at beginning of the "
"yanked text and mark at its end."
msgstr ""
"Despu@'es de pegar el elemento apropiado, si el argumento opcional es\n"
"un @sc{cons} en vez de un n@'umero o nada, se pone el punto al principio\n"
"del texto pegado y se marca al final."

#. type: Plain text
#: emacs-lisp-intro.texi:19534
msgid ""
"(The @code{prog1} function is like @code{progn} but returns the value of its "
"first argument rather than the value of its last argument.  Its first "
"argument is forced to return the buffer's mark as an integer.  You can see "
"the documentation for these functions by placing point over them in this "
"buffer and then typing @kbd{C-h f} (@code{describe-function}) followed by a "
"@kbd{RET}; the default is the function.)"
msgstr ""
"(La funci@'on @code{prog1} es como @code{progn} pero devuelve el valor\n"
"de su primer argumento en vez del valor de su @'ultimo argumento. Su\n"
"primer argumento fuerza devolver la marca del b@'uffer como un\n"
"entero. Se puede ver la documentaci@'on para estas funciones\n"
"emplazando el punto a trav@'es de ellas en este b@'uffer y entonces\n"
"escribiendo @kbd{C-h f} (@code{describe-function}) seguido por un\n"
"@kbd{RET}; por defecto es la funci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:19536
msgid "The last part of the function tells what to do when it succeeds."
msgstr "La @'ultima parte de la funci@'on cuenta que hacer cuando eso sucede."

#. type: Plain text
#: emacs-lisp-intro.texi:19544
msgid ""
"After understanding @code{yank} and @code{current-kill}, you know how to "
"approach the @code{yank-pop} function.  Leaving out the documentation to "
"save space, it looks like this:"
msgstr ""
"Despu@'es de comprender @code{yank} y @code{current-kill}, se conoce\n"
"como enfocar la funci@'on @code{yank-pop}. Dejando fuera la\n"
"documentaci@'on para guardar el espacio, se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:19553
#, no-wrap
msgid ""
"(defun yank-pop (&optional arg)\n"
"  \"@dots{}\"\n"
"  (interactive \"*p\")\n"
"  (if (not (eq last-command 'yank))\n"
"      (error \"Previous command was not a yank\"))\n"
msgstr ""
"(defun yank-pop (&optional arg)\n"
"  \"@dots{}\"\n"
"  (interactive \"*p\")\n"
"  (if (not (eq last-command 'yank))\n"
"      (error \"El comando previo no fu@'e un corte\"))\n"

#. type: group
#: emacs-lisp-intro.texi:19559
#, no-wrap
msgid ""
"  (setq this-command 'yank)\n"
"  (unless arg (setq arg 1))\n"
"  (let ((inhibit-read-only t)\n"
"        (before (< (point) (mark t))))\n"
msgstr ""
"  (setq this-command 'yank)\n"
"  (unless arg (setq arg 1))\n"
"  (let ((inhibit-read-only t)\n"
"        (before (< (point) (mark t))))\n"

#. type: group
#: emacs-lisp-intro.texi:19565
#, no-wrap
msgid ""
"    (if before\n"
"        (funcall (or yank-undo-function 'delete-region) (point) (mark t))\n"
"      (funcall (or yank-undo-function 'delete-region) (mark t) (point)))\n"
"    (setq yank-undo-function nil)\n"
msgstr ""
"    (if before\n"
"        (funcall (or yank-undo-function 'delete-region) (point) (mark t))\n"
"      (funcall (or yank-undo-function 'delete-region) (mark t) (point)))\n"
"    (setq yank-undo-function nil)\n"

#. type: group
#: emacs-lisp-intro.texi:19572
#, no-wrap
msgid ""
"    (set-marker (mark-marker) (point) (current-buffer))\n"
"    (insert-for-yank (current-kill arg))\n"
"    ;; Set the window start back where it was in the yank command,\n"
"    ;; if possible.\n"
"    (set-window-start (selected-window) yank-window-start t)\n"
msgstr ""
"    (set-marker (mark-marker) (point) (current-buffer))\n"
"    (insert-for-yank (current-kill arg))\n"
"    ;; Asigna la ventana a volver donde estaba el comando yank,\n"
"    ;; si es posible\n"
"    (set-window-start (selected-window) yank-window-start t)\n"

#. type: group
#: emacs-lisp-intro.texi:19584
#, no-wrap
msgid ""
"    (if before\n"
"        ;; This is like exchange-point-and-mark,\n"
"        ;;     but doesn't activate the mark.\n"
"        ;; It is cleaner to avoid activation, even though the command\n"
"        ;; loop would deactivate the mark because we inserted text.\n"
"        (goto-char (prog1 (mark t)\n"
"                     (set-marker (mark-marker)\n"
"                                 (point)\n"
"                                 (current-buffer))))))\n"
"  nil)\n"
msgstr ""
"    (if before\n"
"        ;; Esto es como exchange-point-and-mark,\n"
"        ;; pero no activa la marca.\n"
"        ;; Es limpio evitar la activaci@'on, incluso aunque el comando\n"
"        ;; desactivase la marca porque se insertara el texto.\n"
"        (goto-char (prog1 (mark t)\n"
"                     (set-marker (mark-marker)\n"
"                                 (point)\n"
"                                 (current-buffer))))))\n"
"  nil)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19593
msgid ""
"The function is interactive with a small @samp{p} so the prefix argument is "
"processed and passed to the function.  The command can only be used after a "
"previous yank; otherwise an error message is sent.  This check uses the "
"variable @code{last-command} which is set by @code{yank} and is discussed "
"elsewhere.  (@xref{copy-region-as-kill}.)"
msgstr ""
"La funci@'on es interactive con una peque@~na @samp{p}\n"
"as@'{@dotless{i}} el argumento prefijo es procesado y pasado a la\n"
"funci@'on. El comando puede solo ser usado despu@'es del yank previo;\n"
"de otro modo un mensaje de error se env@'{@dotless{i}}a. Este chequeo\n"
"usa la variable @code{last-command} que se asigna por @code{yank} y\n"
"discutida de alg@'un modo. (@xref{copy-region-as-kill}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:19599
msgid ""
"The @code{let} clause sets the variable @code{before} to true or false "
"depending whether point is before or after mark and then the region between "
"point and mark is deleted.  This is the region that was just inserted by the "
"previous yank and it is this text that will be replaced."
msgstr ""
"La cl@'ausula @code{let} asigna la variable @code{before} a cierto o\n"
"falso dependiendo de si el punto est@'a antes o despu@'es de la marca\n"
"y entonce la regi@'on entre punto y marca se borra. Esta es la\n"
"regi@'on que fu@'e insertada por el yank previo y eso es este texto\n"
"que ser@'a reemplazado."

#. type: Plain text
#: emacs-lisp-intro.texi:19604
msgid ""
"@code{funcall} calls its first argument as a function, passing remaining "
"arguments to it.  The first argument is whatever the @code{or} expression "
"returns.  The two remaining arguments are the positions of point and mark "
"set by the preceding @code{yank} command."
msgstr ""
"@code{funcall} llama a su primer argumento como una funci@'on, pasando\n"
"los argumentos que permanecen. El primer argumento es el que la\n"
"expresi@'on @code{or} devuelve. Los dos argumentos que permanecen son\n"
"las posiciones de punto y marca asignadas por el comando @code{yank}\n"
"precedente."

#. type: Plain text
#: emacs-lisp-intro.texi:19606
msgid "There is more, but that is the hardest part."
msgstr "Hay m@'as, pero esta es la parte m@'as dura."

#. type: appendixsec
#: emacs-lisp-intro.texi:19608
#, no-wrap
msgid "The @file{ring.el} File"
msgstr "El fichero @file{ring.el}"

#. type: cindex
#: emacs-lisp-intro.texi:19609
#, no-wrap
msgid "@file{ring.el} file"
msgstr "fichero @file{ring.el}"

#. type: Plain text
#: emacs-lisp-intro.texi:19615
msgid ""
"Interestingly, GNU Emacs posses a file called @file{ring.el} that provides "
"many of the features we just discussed.  But functions such as @code{kill-"
"ring-yank-pointer} do not use this library, possibly because they were "
"written earlier."
msgstr ""
"De manera interesante, GNU Emacs posee un fichero llamado\n"
"@file{ring.el} que provee muchas de las funcionalidades que ahora se\n"
"discuten. Pero las funciones tales como @code{kill-ring-yank-pointer}\n"
"no usan esta librer@'{@dotless{i}}a, posiblemente porque fueron\n"
"escritas pronto."

#. type: Plain text
#: emacs-lisp-intro.texi:19624
msgid ""
"Printed axes help you understand a graph.  They convey scale.  In an earlier "
"chapter (@pxref{Readying a Graph, , Readying a Graph}), we wrote the code to "
"print the body of a graph.  Here we write the code for printing and labeling "
"vertical and horizontal axes, along with the body itself."
msgstr ""
"Los ejes impresos ayudan a comprender un grafo. Para crear escalas. En\n"
"un cap@'{@dotless{i}}tulo anterior (@pxref{Leyendo un grafo, , Leyendo\n"
"un grafo}), se escribi@'o el c@'odigo para imprimir el cuerpo de un\n"
"grafo. Aqu@'{@dotless{i}} se escribe el c@'odigo para imprimir y\n"
"etiquetar ejes horizontales y verticales, a lo largo del cuerpo en\n"
"s@'{@dotless{i}}."

#. type: node
#: emacs-lisp-intro.texi:19634
#, no-wrap
msgid "Labeled Example"
msgstr "Ejemplo etiquetado"

#. type: unnumberedsec
#: emacs-lisp-intro.texi:19635
#, no-wrap
msgid "Labeled Example Graph"
msgstr "Grafo de ejemplo etiquetado"

#. type: Plain text
#: emacs-lisp-intro.texi:19642
msgid ""
"Since insertions fill a buffer to the right and below point, the new graph "
"printing function should first print the Y or vertical axis, then the body "
"of the graph, and finally the X or horizontal axis.  This sequence lays out "
"for us the contents of the function:"
msgstr ""
"Puesto que las inserciones rellenan un b@'uffer a la derecha y debajo\n"
"del punto, el nuevo grafo imprime la funci@'on que primero\n"
"imprimir@'{@dotless{i}}a el eje vertical Y, despu@'es el cuerpo del\n"
"grafo, y finalmente el eje horizontal X. Esta secuencia nos da los\n"
"contenidos de la funci@'on:"

#. type: enumerate
#: emacs-lisp-intro.texi:19646
msgid "Set up code."
msgstr "Configura c@'odigo."

#. type: enumerate
#: emacs-lisp-intro.texi:19649
msgid "Print Y axis."
msgstr "Imprime el eje Y."

#. type: enumerate
#: emacs-lisp-intro.texi:19652
msgid "Print body of graph."
msgstr "Imprime el cuerpo del grafo."

#. type: enumerate
#: emacs-lisp-intro.texi:19655
msgid "Print X axis."
msgstr "Imprime el eje X."

#. type: Plain text
#: emacs-lisp-intro.texi:19659
msgid "Here is an example of how a finished graph should look:"
msgstr "Aqu@'{@dotless{i}} hay un ejemplo de como se ve un grafo finalizado:"

#. type: group
#: emacs-lisp-intro.texi:19674
#, no-wrap
msgid ""
"    10 -\n"
"                  *\n"
"                  *  *\n"
"                  *  **\n"
"                  *  ***\n"
"     5 -      *   *******\n"
"            * *** *******\n"
"            *************\n"
"          ***************\n"
"     1 - ****************\n"
"         |   |    |    |\n"
"         1   5   10   15\n"
msgstr ""
"    10 -\n"
"                  *\n"
"                  *  *\n"
"                  *  **\n"
"                  *  ***\n"
"     5 -      *   *******\n"
"            * *** *******\n"
"            *************\n"
"          ***************\n"
"     1 - ****************\n"
"         |   |    |    |\n"
"         1   5   10   15\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19681
msgid ""
"In this graph, both the vertical and the horizontal axes are labeled with "
"numbers.  However, in some graphs, the horizontal axis is time and would be "
"better labeled with months, like this:"
msgstr ""
"En este grafo, en ambos ejes vertical y horizontal se etiquetan con\n"
"n@'umeros. Sin embargo, en algunos grafos, el eje horizontal es tiempo\n"
"y estar@'{@dotless{i}}a mejor etiquetarlo con meses,\n"
"as@'{@dotless{i}}:"

#. type: group
#: emacs-lisp-intro.texi:19691
#, no-wrap
msgid ""
"     5 -      *\n"
"            * ** *\n"
"            *******\n"
"          ********** **\n"
"     1 - **************\n"
"         |    ^      |\n"
"         Jan  June   Jan\n"
msgstr ""
"     5 -      *\n"
"            * ** *\n"
"            *******\n"
"          ********** **\n"
"     1 - **************\n"
"         |    ^      |\n"
"       Enero Junio Enero\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19699
msgid ""
"Indeed, with a little thought, we can easily come up with a variety of "
"vertical and horizontal labeling schemes.  Our task could become "
"complicated.  But complications breed confusion.  Rather than permit this, "
"it is better choose a simple labeling scheme for our first effort, and to "
"modify or replace it later."
msgstr ""
"Dentro, con un peque@~no pensamiento, se puede f@'acilmente venir con\n"
"una variedad de esquemas de etiquetado verticales y\n"
"horizontales. Nuestra tarea podr@'{@dotless{i}}a llegar a ser\n"
"complicada. Pero las complicaciones generan confusi@'on. En vez de\n"
"permitir esto, es mejor elegir un simple esquema de etiquetado para\n"
"nuestro primer esfuerzo, y modificarlo o reemplazarlo despu@'es."

#. type: Plain text
#: emacs-lisp-intro.texi:19703
msgid ""
"These considerations suggest the following outline for the @code{print-"
"graph} function:"
msgstr ""
"Estas consideraciones sugieren el siguiente outline para la funci@'on\n"
"@code{print-graph}:"

#. type: group
#: emacs-lisp-intro.texi:19710 emacs-lisp-intro.texi:20589
#, no-wrap
msgid ""
"(defun print-graph (numbers-list)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let ((height  @dots{}\n"
"        @dots{}))\n"
msgstr ""
"(defun print-graph (numbers-list)\n"
"  \"@var{documentation}@dots{}\"\n"
"  (let ((height  @dots{}\n"
"        @dots{}))\n"

#. type: group
#: emacs-lisp-intro.texi:19715 emacs-lisp-intro.texi:20594
#, no-wrap
msgid ""
"    (print-Y-axis height @dots{} )\n"
"    (graph-body-print numbers-list)\n"
"    (print-X-axis @dots{} )))\n"
msgstr ""
"    (print-Y-axis height @dots{} )\n"
"    (graph-body-print numbers-list)\n"
"    (print-X-axis @dots{} )))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19720
msgid ""
"We can work on each part of the @code{print-graph} function definition in "
"turn."
msgstr ""
"Nosotros podemos trabajar en cada parte de la definici@'on de funci@'on\n"
"@code{print-graph}."

#. type: appendixsec
#: emacs-lisp-intro.texi:19722
#, no-wrap
msgid "The @code{print-graph} Varlist"
msgstr "La varlist @code{print-graph}"

#. type: cindex
#: emacs-lisp-intro.texi:19723
#, no-wrap
msgid "@code{print-graph} varlist"
msgstr "@code{print-graph} varlist"

#. type: Plain text
#: emacs-lisp-intro.texi:19729
msgid ""
"In writing the @code{print-graph} function, the first task is to write the "
"varlist in the @code{let} expression.  (We will leave aside for the moment "
"any thoughts about making the function interactive or about the contents of "
"its documentation string.)"
msgstr ""
"Para escribir la funci@'on @code{print-graph}, la primera tarea es\n"
"escribir la varlist en la expresi@'on @code{let}. (Nosotros dejaremos\n"
"por ahora cualquier pensamiento acerca de hacer la funci@'on\n"
"interactive o acerca de los contenidos de su cadena de documentaci@'on.)"

#. type: Plain text
#: emacs-lisp-intro.texi:19737
msgid ""
"The varlist should set several values.  Clearly, the top of the label for "
"the vertical axis must be at least the height of the graph, which means that "
"we must obtain this information here.  Note that the @code{print-graph-body} "
"function also requires this information.  There is no reason to calculate "
"the height of the graph in two different places, so we should change "
"@code{print-graph-body} from the way we defined it earlier to take advantage "
"of the calculation."
msgstr ""
"La varlist asignar@'{@dotless{i}}a varios valores. Claramente, la\n"
"etiqueta superior del eje vertical debe ser al menos la altura del\n"
"grafo, que significa que debe obtener esta informaci@'on\n"
"aqu@'{@dotless{i}}. Note que la funci@'on @code{print-graph-body}\n"
"tambi@'en requiere esta informaci@'on. No hay raz@'on para calcular la\n"
"altura del grafo en dos lugares diferentes, as@'{@dotless{i}}\n"
"cambiar@'{@dotless{i}}a @code{print-graph-body} desde el camino que\n"
"definimos pronto para tomar ventaja del c@'alculo."

#. type: Plain text
#: emacs-lisp-intro.texi:19743
msgid ""
"Similarly, both the function for printing the X axis labels and the "
"@code{print-graph-body} function need to learn the value of the width of "
"each symbol.  We can perform the calculation here and change the definition "
"for @code{print-graph-body} from the way we defined it in the previous "
"chapter."
msgstr ""
"De manera similar, tanto la funci@'on para imprimir la etiqueta del\n"
"eje X y la funci@'on @code{print-graph-body} se necesita aprender el\n"
"valor del ancho de cada s@'{@dotless{i}}mbolo. Se puede desarrollar el\n"
"c@'alculo aqu@'{@dotless{i}} y cambiar la definici@'on para\n"
"@code{print-graph-body} desde el camino que se defini@'o en el\n"
"cap@'{@dotless{i}}tulo previo."

#. type: Plain text
#: emacs-lisp-intro.texi:19747
msgid ""
"The length of the label for the horizontal axis must be at least as long as "
"the graph.  However, this information is used only in the function that "
"prints the horizontal axis, so it does not need to be calculated here."
msgstr ""
"El tama@~no de la etiqueta para el eje horizontal debe ser al menos\n"
"tan largo como el grafo. Sin embargo, esta informaci@'on es usada solo\n"
"en la funci@'on que imprime el eje horizontal, as@'{@dotless{i}} no\n"
"necesita calcularse aqu@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:19750
msgid ""
"These thoughts lead us directly to the following form for the varlist in the "
"@code{let} for @code{print-graph}:"
msgstr ""
"Estos pensamientos nos llevan directamente a la siguiente forma para\n"
"la varlist en el @code{let} para @code{print-graph}:"

#. type: group
#: emacs-lisp-intro.texi:19755
#, no-wrap
msgid ""
"(let ((height (apply 'max numbers-list)) ; @r{First version.}\n"
"      (symbol-width (length graph-blank)))\n"
msgstr ""
"(let ((height (apply 'max numbers-list)) ; @r{Primera versi@'on.}\n"
"      (symbol-width (length graph-blank)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19760
msgid "As we shall see, this expression is not quite right."
msgstr "Como se ver@'a, esta expresi@'on no es bastante correcta."

#. type: cindex
#: emacs-lisp-intro.texi:19764
#, no-wrap
msgid "Axis, print vertical"
msgstr "Ejes, imprimir vertical"

#. type: cindex
#: emacs-lisp-intro.texi:19765
#, no-wrap
msgid "Y axis printing"
msgstr "imprimiendo eje Y"

#. type: cindex
#: emacs-lisp-intro.texi:19766
#, no-wrap
msgid "Vertical axis printing"
msgstr "Imprimiendo Ejes Verticales"

#. type: cindex
#: emacs-lisp-intro.texi:19767
#, no-wrap
msgid "Print vertical axis"
msgstr "Imprimir eje vertical"

#. type: Plain text
#: emacs-lisp-intro.texi:19771
msgid ""
"The job of the @code{print-Y-axis} function is to print a label for the "
"vertical axis that looks like this:"
msgstr ""
"El trabajo de la funci@'on @code{print-Y-axis} es imprimir una etiqueta\n"
"para el eje vertical que se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:19775
#, no-wrap
msgid ""
"    10 -\n"
"\n"
msgstr ""
"    10 -\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19780
#, no-wrap
msgid ""
"     5 -\n"
"\n"
msgstr ""
"     5 -\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19784
#, no-wrap
msgid "     1 -\n"
msgstr "     1 -\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19790
msgid ""
"The function should be passed the height of the graph, and then should "
"construct and insert the appropriate numbers and marks."
msgstr ""
"La funci@'on se pasar@'{@dotless{i}}a a lo alto del grafo, y "
"as@'{@dotless{i}}\n"
"construyen e insertan los n@'umeros y marcas apropiados."

#. type: node
#: emacs-lisp-intro.texi:19801
#, no-wrap
msgid "print-Y-axis in Detail"
msgstr "print-Y-axis en Detalle"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:19802
#, no-wrap
msgid "The @code{print-Y-axis} Function in Detail"
msgstr "La funci@'on @code{print-Y-axis} en detalle"

#. type: Plain text
#: emacs-lisp-intro.texi:19815
msgid ""
"It is easy enough to see in the figure what the Y axis label should look "
"like; but to say in words, and then to write a function definition to do the "
"job is another matter.  It is not quite true to say that we want a number "
"and a tic every five lines: there are only three lines between the @samp{1} "
"and the @samp{5} (lines 2, 3, and 4), but four lines between the @samp{5} "
"and the @samp{10} (lines 6, 7, 8, and 9).  It is better to say that we want "
"a number and a tic mark on the base line (number 1) and then that we want a "
"number and a tic on the fifth line from the bottom and on every line that is "
"a multiple of five."
msgstr ""
"Es suficientemente f@'acil ver en la figura que la etiqueta del eje Y\n"
"pero se puede decir en palabras, y entonces escribir una definici@'on\n"
"de funci@'on para hacer el trabajo es otra materia. No es bastante\n"
"verdad decir que se quiere un n@'umero y un tic cada cinco\n"
"l@'{@dotless{i}}neas: solo hay tres l@'{@dotless{i}}neas entre el\n"
"@samp{1} y el @samp{5} (l@'{@dotless{i}}neas 2, 3 y 4), pero cuatro\n"
"l@'{@dotless{i}}neas entre el @samp{5} y el @samp{10}\n"
"(l@'{@dotless{i}}neas 6, 7, 8 y 9). Es mejor decir que se quiere un\n"
"n@'umero y un tic en la quinta l@'{@dotless{i}}nea desde abajo a cada\n"
"l@'{@dotless{i}}nea que es un m@'ultiplo de cinco."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:19818
#, no-wrap
msgid "What height should the label be?"
msgstr "@questiondown{}A qu@'e altura se deber@'{@dotless{i}}a etiquetar?"

#. type: Plain text
#: emacs-lisp-intro.texi:19827
msgid ""
"The next issue is what height the label should be? Suppose the maximum "
"height of tallest column of the graph is seven.  Should the highest label on "
"the Y axis be @samp{5 -}, and should the graph stick up above the label? Or "
"should the highest label be @samp{7 -}, and mark the peak of the graph? Or "
"should the highest label be @code{10 -}, which is a multiple of five, and be "
"higher than the topmost value of the graph?"
msgstr ""
"La siguiente cuesti@'on es a que altura se\n"
"etiquetar@'{@dotless{i}}a. Sup@'on que la m@'axima altura de la columna\n"
"mayor del grafo es siete. La etiqueta superior en el eje Y\n"
"ser@'{@dotless{i}}a @samp{5 -}, ¿y el grafo se pegar@'{@dotless{i}}a\n"
"debajo de la etiqueta?, ¿o la etiqueta superior ser@'{@dotless{i}}a\n"
"@samp{7 -}, y marcar la vertical del grafo? ¿o ser@'{@dotless{i}}a la\n"
"etiqueta superior @code{10 -}, que es m@'ultiplo de cinco, y es\n"
"superior al valor m@'as alto del grafo?"

#. type: Plain text
#: emacs-lisp-intro.texi:19837
msgid ""
"The latter form is preferred.  Most graphs are drawn within rectangles whose "
"sides are an integral number of steps long---5, 10, 15, and so on for a step "
"distance of five.  But as soon as we decide to use a step height for the "
"vertical axis, we discover that the simple expression in the varlist for "
"computing the height is wrong.  The expression is @code{(apply 'max numbers-"
"list)}.  This returns the precise height, not the maximum height plus "
"whatever is necessary to round up to the nearest multiple of five.  A more "
"complex expression is required."
msgstr ""
"La @'ultima forma es preferida. La mayor@'{@dotless{i}}a de los grafos\n"
"son rect@'angulos cuyos lados son un n@'umero integral de pasos a lo\n"
"largo --- 5, 10, 15, y as@'{@dotless{i}} para un paso a distancia de\n"
"cinco. Pero tan pronto se decide usar un paso alto para el eje\n"
"vertical, se descubre que la expresi@'on simple en la varlist para la\n"
"altura de la computaci@'on es err@'onea. La expresi@'on es\n"
"@code{(apply 'max numbers-list)}. Esto devuelve la altura precisa, no\n"
"la altura m@'axima m@'as de lo que es necesario para redondear el\n"
"m@'ultiplo de cinco. Una expresi@'on m@'as compleja es requerida."

#. type: Plain text
#: emacs-lisp-intro.texi:19840
msgid ""
"As usual in cases like this, a complex problem becomes simpler if it is "
"divided into several smaller problems."
msgstr ""
"Como es normal en casos como este, un problema complejo llega a ser\n"
"simple si est@'a dividido en varios problemas peque@~nos."

#. type: Plain text
#: emacs-lisp-intro.texi:19844
msgid ""
"First, consider the case when the highest value of the graph is an integral "
"multiple of five---when it is 5, 10, 15, or some higher multiple of five.  "
"We can use this value as the Y axis height."
msgstr ""
"Primero, considere el caso cuando el valor superior del grafo es un\n"
"m@'ultiplo integral de cinco --- cuando eso es 5, 10, 15, o alg@'un\n"
"m@'ultiplo de cinco. Se puede usar este valor como la altura del eje Y."

#. type: Plain text
#: emacs-lisp-intro.texi:19853
msgid ""
"A fairly simply way to determine whether a number is a multiple of five is "
"to divide it by five and see if the division results in a remainder.  If "
"there is no remainder, the number is a multiple of five.  Thus, seven "
"divided by five has a remainder of two, and seven is not an integral "
"multiple of five.  Put in slightly different language, more reminiscent of "
"the classroom, five goes into seven once, with a remainder of two.  However, "
"five goes into ten twice, with no remainder: ten is an integral multiple of "
"five."
msgstr ""
"Un camino simple y limpio para determinar si un n@'umero es m@'ultiplo\n"
"de cinco se divide por cinco y mira si la divisi@'on devuelve\n"
"resto. Si no hay resto, el n@'umero es un m@'ultiplo de cinco. De este\n"
"modo, siete dividido tiene un resto de dos, y siete no es un entero\n"
"m@'ultiplo de cinco. Dicho de otra manera, recordando la escuela,\n"
"cinco entre siete es uno y me llevo dos. Sin embargo, diez entre dos,\n"
"no tiene resto: diez es un m@'ultiplo entero de cinco."

#. type: appendixsubsec
#: emacs-lisp-intro.texi:19855
#, no-wrap
msgid "Side Trip: Compute a Remainder"
msgstr "Viaje lateral: Calcula un resto"

#. type: findex
#: emacs-lisp-intro.texi:19857
#, no-wrap
msgid "% @r{(remainder function)}"
msgstr "% @r{(funci@'on resto)}"

#. type: cindex
#: emacs-lisp-intro.texi:19858
#, no-wrap
msgid "Remainder function, @code{%}"
msgstr "Funci@'on resto, @code{%}"

#. type: Plain text
#: emacs-lisp-intro.texi:19866
msgid ""
"In Lisp, the function for computing a remainder is @code{%}.  The function "
"returns the remainder of its first argument divided by its second argument.  "
"As it happens, @code{%} is a function in Emacs Lisp that you cannot discover "
"using @code{apropos}: you find nothing if you type @kbd{M-x apropos "
"@key{RET} remainder @key{RET}}.  The only way to learn of the existence of "
"@code{%} is to read about it in a book such as this or in the Emacs Lisp "
"sources."
msgstr ""
"En Lisp, la funci@'on para calcular un resto es @code{%}. La funci@'on\n"
"devuelve el resto de su primer argumento dividido por su segundo\n"
"argumento. Como ocurre, @code{%} es una funci@'on en Emacs Lisp que no\n"
"se puede implementar usando @code{apropos}: no se puede encontrar nada si\n"
"se escribe @kbd{M-x apropos @key{RET} resto @key{RET}}. El @'unico\n"
"camino para aprender la existencia de @code{%} es leer acerca de eso\n"
"en un libro tal como este o en las fuentes de Emacs Lisp."

#. type: Plain text
#: emacs-lisp-intro.texi:19869
msgid ""
"You can try the @code{%} function by evaluating the following two "
"expressions:"
msgstr ""
"Se puede probar la funci@'on @code{%} evaluando las siguientes dos "
"expresiones:"

#. type: group
#: emacs-lisp-intro.texi:19873
#, no-wrap
msgid ""
"(% 7 5)\n"
"\n"
msgstr ""
"(% 7 5)\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19875
#, no-wrap
msgid "(% 10 5)\n"
msgstr "(% 10 5)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19880
msgid "The first expression returns 2 and the second expression returns 0."
msgstr "La primera expresi@'on devuelve 2 y la segunda expresi@'on devuelve 0."

#. type: Plain text
#: emacs-lisp-intro.texi:19884
msgid ""
"To test whether the returned value is zero or some other number, we can use "
"the @code{zerop} function.  This function returns @code{t} if its argument, "
"which must be a number, is zero."
msgstr ""
"Para chequear si el valor devuelto es cero o alg@'un otro n@'umero, se\n"
"puede usar la funci@'on @code{zerop}. Esta funci@'on devuelve @code{t}\n"
"si su argumento debe ser un n@'umero, es cero."

#. type: group
#: emacs-lisp-intro.texi:19889
#, no-wrap
msgid ""
"(zerop (% 7 5))\n"
"     @result{} nil\n"
"\n"
msgstr ""
"(zerop (% 7 5))\n"
"     @result{} nil\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:19892
#, no-wrap
msgid ""
"(zerop (% 10 5))\n"
"     @result{} t\n"
msgstr ""
"(zerop (% 10 5))\n"
"     @result{} t\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19897
msgid ""
"Thus, the following expression will return @code{t} if the height of the "
"graph is evenly divisible by five:"
msgstr ""
"De este modo, la siguiente expresi@'on devolver@'a @code{t} si la\n"
"altura del grafo es divisible por cinco:"

#. type: smallexample
#: emacs-lisp-intro.texi:19900
#, no-wrap
msgid "(zerop (% height 5))\n"
msgstr "(zerop (% height 5))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19905
msgid ""
"(The value of @code{height}, of course, can be found from @code{(apply 'max "
"numbers-list)}.)"
msgstr ""
"(El valor de @code{height}, de acuerdo, puede ser encontrado desde\n"
"@code{(apply 'max numbers-list)}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:19916
msgid ""
"On the other hand, if the value of @code{height} is not a multiple of five, "
"we want to reset the value to the next higher multiple of five.  This is "
"straightforward arithmetic using functions with which we are already "
"familiar.  First, we divide the value of @code{height} by five to determine "
"how many times five goes into the number.  Thus, five goes into twelve "
"twice.  If we add one to this quotient and multiply by five, we will obtain "
"the value of the next multiple of five that is larger than the height.  Five "
"goes into twelve twice.  Add one to two, and multiply by five; the result is "
"fifteen, which is the next multiple of five that is higher than twelve.  The "
"Lisp expression for this is:"
msgstr ""
"Por otro lado, si el valor de @code{height} no es un m@'ultiplo de\n"
"cinco, nosotros queremos resetear el valor al siguiente m@'ultiplo de\n"
"cinco. Esta es la aritm@'etica sencilla usando funciones con las que\n"
"ya se est@'a familiarizado. Primero, se divide el valor de\n"
"@code{height} por cinco para determinar cuantas veces cinco va dentro\n"
"del n@'umero. De este modo, cinco va dentro doce veces. Si se a@~nade\n"
"uno a este cociente y se multiplica por cinco, obtendremos el valor\n"
"del siguiente m@'ultiplo de cinco que es m@'as largo que el\n"
"mayor. Cinco va dentro de doce dos veces. A@~nade uno a dos, y\n"
"multiplica por cinco; el resultado es quince, que es el siguiente\n"
"m@'ultiplo de cinco que es mayor de doce. La expresi@'on Lisp para\n"
"esto es:"

#. type: smallexample
#: emacs-lisp-intro.texi:19919
#, no-wrap
msgid "(* (1+ (/ height 5)) 5)\n"
msgstr "(* (1+ (/ height 5)) 5)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19923
msgid "For example, if you evaluate the following, the result is 15:"
msgstr "Por ejemplo, si se eval@'ua lo siguiente, el resultado es 15:"

#. type: smallexample
#: emacs-lisp-intro.texi:19926
#, no-wrap
msgid "(* (1+ (/ 12 5)) 5)\n"
msgstr "(* (1+ (/ 12 5)) 5)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19933
msgid ""
"All through this discussion, we have been using `five' as the value for "
"spacing labels on the Y axis; but we may want to use some other value.  For "
"generality, we should replace `five' with a variable to which we can assign "
"a value.  The best name I can think of for this variable is @code{Y-axis-"
"label-spacing}."
msgstr ""
"Todo a trav@'es de esta discusi@'on, se ha estado usando `cinco' como\n"
"el valor para las etiquetas espaciadas en el eje Y; pero se puede\n"
"querer usar alg@'un otro valor. Generalmente,\n"
"reemplazar@'{@dotless{i}}a `cinco' con una variable a la que poder\n"
"asignar un valor. El mejor nombre que puedo pensar para esta variable\n"
"es @code{Y-axis-label-spacing}."

#. type: Plain text
#: emacs-lisp-intro.texi:19937
msgid "Using this term, and an @code{if} expression, we produce the following:"
msgstr ""
"Usando este t@'ermino, y una expresi@'on @code{if}, se produce lo siguiente:"

#. type: group
#: emacs-lisp-intro.texi:19945
#, no-wrap
msgid ""
"(if (zerop (% height Y-axis-label-spacing))\n"
"    height\n"
"  ;; @r{else}\n"
"  (* (1+ (/ height Y-axis-label-spacing))\n"
"     Y-axis-label-spacing))\n"
msgstr ""
"(if (zerop (% height Y-axis-label-spacing))\n"
"    height\n"
"  ;; @r{else}\n"
"  (* (1+ (/ height Y-axis-label-spacing))\n"
"     Y-axis-label-spacing))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19953
msgid ""
"This expression returns the value of @code{height} itself if the height is "
"an even multiple of the value of the @code{Y-axis-label-spacing} or else it "
"computes and returns a value of @code{height} that is equal to the next "
"higher multiple of the value of the @code{Y-axis-label-spacing}."
msgstr ""
"Esta expresi@'on devuelve el valor de @code{height} en\n"
"s@'{@dotless{i}} si la altura es incluso un m@'ultiplo del valor del\n"
"@code{Y-axis-label-spacing} o lo dem@'as computa y devuelve un valor\n"
"de @code{height} que es igual al siguiente m@'ultiplo mayor del valor\n"
"del @code{Y-axis-label-spacing}."

#. type: Plain text
#: emacs-lisp-intro.texi:19957
msgid ""
"We can now include this expression in the @code{let} expression of the "
"@code{print-graph} function (after first setting the value of @code{Y-axis-"
"label-spacing}):"
msgstr ""
"Se puede ahora incluir esta expresi@'on en la expresi@'on @code{let}\n"
"de la funci@'on @code{print-graph} (despu@'es de la primera\n"
"configuraci@'on del valor de @code{Y-axis-label-spacing}):"

#. type: vindex
#: emacs-lisp-intro.texi:19957
#, no-wrap
msgid "Y-axis-label-spacing"
msgstr "Y-axis-label-spacing"

#. type: group
#: emacs-lisp-intro.texi:19963 emacs-lisp-intro.texi:21418
#, no-wrap
msgid ""
"(defvar Y-axis-label-spacing 5\n"
"  \"Number of lines from one Y axis label to next.\")\n"
msgstr ""
"(defvar Y-axis-label-spacing 5\n"
"  \"N@'umero de l@'{@dotless{i}}neas desde una etiqueta del eje Y al siguiente.\")\n"

#. type: group
#: emacs-lisp-intro.texi:19971
#, no-wrap
msgid ""
"@dots{}\n"
"(let* ((height (apply 'max numbers-list))\n"
"       (height-of-top-line\n"
"        (if (zerop (% height Y-axis-label-spacing))\n"
"            height\n"
msgstr ""
"@dots{}\n"
"(let* ((height (apply 'max numbers-list))\n"
"       (height-of-top-line\n"
"        (if (zerop (% height Y-axis-label-spacing))\n"
"            height\n"

#. type: group
#: emacs-lisp-intro.texi:19978
#, no-wrap
msgid ""
"          ;; @r{else}\n"
"          (* (1+ (/ height Y-axis-label-spacing))\n"
"             Y-axis-label-spacing)))\n"
"       (symbol-width (length graph-blank))))\n"
"@dots{}\n"
msgstr ""
"          ;; @r{else}\n"
"          (* (1+ (/ height Y-axis-label-spacing))\n"
"             Y-axis-label-spacing)))\n"
"       (symbol-width (length graph-blank))))\n"
"@dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:19987
msgid ""
"(Note use of the @code{let*} function: the initial value of height is "
"computed once by the @code{(apply 'max numbers-list)} expression and then "
"the resulting value of @code{height} is used to compute its final value.  "
"@xref{fwd-para let, , The @code{let*} expression}, for more about "
"@code{let*}.)"
msgstr ""
"(Note que el uso de la funci@'on @code{let*}: el valor inicial de la\n"
"altura es calculada una vez por la expresi@'on @code{(apply 'max\n"
"numbers-list)} y entonces el valor resultado de @code{height} es\n"
"usado para computar su valor final. @xref{fwd-para let, , La\n"
"expresi@'on @code{let*}}, para m@'as acerca de @code{let*}.)"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:19989
#, no-wrap
msgid "Construct a Y Axis Element"
msgstr "Construye un elemento del eje Y"

#. type: Plain text
#: emacs-lisp-intro.texi:19997
msgid ""
"When we print the vertical axis, we want to insert strings such as "
"@w{@samp{5 -}} and @w{@samp{10 - }} every five lines.  Moreover, we want the "
"numbers and dashes to line up, so shorter numbers must be padded with "
"leading spaces.  If some of the strings use two digit numbers, the strings "
"with single digit numbers must include a leading blank space before the "
"number."
msgstr ""
"Cuando se imprime el eje vertical, se quieren insertar cadenas tales\n"
"como @w{@samp{5 -}} y @w{@samp{10 - }} cada cinco\n"
"l@'{@dotless{i}}neas. M@'as all@'a, se quieren los n@'umeros agitados\n"
"para alinear, as@'{@dotless{i}} pocos n@'umeros deben ser acu@~nados\n"
"con espacios de gu@'{@dotless{i}}a. Si alguna de las cadenas usan dos\n"
"d@'{@dotless{i}}gitos, las cadenas con un simple d@'{@dotless{i}}gito\n"
"deben incluir una gu@'{@dotless{i}}a en blanco antes del n@'umero."

#. type: findex
#: emacs-lisp-intro.texi:19998
#, no-wrap
msgid "number-to-string"
msgstr "number-to-string"

#. type: Plain text
#: emacs-lisp-intro.texi:20004
msgid ""
"To figure out the length of the number, the @code{length} function is used.  "
"But the @code{length} function works only with a string, not with a number.  "
"So the number has to be converted from being a number to being a string.  "
"This is done with the @code{number-to-string} function.  For example,"
msgstr ""
"Para figurarse el tama@~no del n@'umero, se usa la funci@'on\n"
"@code{length}. Pero la funci@'on @code{length} funciona solo con una\n"
"cadena, no con un n@'umero. As@'{@dotless{i}} el n@'umero tiene que\n"
"ser convertido desde un n@'umero a una cadena. Esto se hace con la\n"
"funci@'on @code{number-to-string}. Por ejemplo,"

#. type: group
#: emacs-lisp-intro.texi:20009
#, no-wrap
msgid ""
"(length (number-to-string 35))\n"
"     @result{} 2\n"
"\n"
msgstr ""
"(length (number-to-string 35))\n"
"     @result{} 2\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:20012
#, no-wrap
msgid ""
"(length (number-to-string 100))\n"
"     @result{} 3\n"
msgstr ""
"(length (number-to-string 100))\n"
"     @result{} 3\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20018
msgid ""
"(@code{number-to-string} is also called @code{int-to-string}; you will see "
"this alternative name in various sources.)"
msgstr ""
"(@code{number-to-string} se llama @code{int-to-string}; se ver@'a este\n"
"nombre alternativo en varias fuentes.)"

#. type: Plain text
#: emacs-lisp-intro.texi:20022
msgid ""
"In addition, in each label, each number is followed by a string such as "
"@w{@samp{ - }}, which we will call the @code{Y-axis-tic} marker.  This "
"variable is defined with @code{defvar}:"
msgstr ""
"Adem@'as, en cada etiqueta, cada n@'umero es seguido por una cadena\n"
"tal como @w{@samp{ - }}, que llamar@'a al marcador\n"
"@code{Y-axis-tic}. Esta variable est@'a definida con @code{defvar}:"

#. type: vindex
#: emacs-lisp-intro.texi:20023
#, no-wrap
msgid "Y-axis-tic"
msgstr "Y-axis-tic"

#. type: group
#: emacs-lisp-intro.texi:20028 emacs-lisp-intro.texi:21413
#, no-wrap
msgid ""
"(defvar Y-axis-tic \" - \"\n"
"   \"String that follows number in a Y axis label.\")\n"
msgstr ""
"(defvar Y-axis-tic \" - \"\n"
"   \"La Cadena que sigue el n@'umero en una etiqueta del eje Y.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20033
msgid ""
"The length of the Y label is the sum of the length of the Y axis tic mark "
"and the length of the number of the top of the graph."
msgstr ""
"El tama@~no de la etiqueta Y es la suma del tama@~no del eje Y y el\n"
"tama@~no del n@'umero del alto del grafo."

#. type: smallexample
#: emacs-lisp-intro.texi:20036
#, no-wrap
msgid "(length (concat (number-to-string height) Y-axis-tic)))\n"
msgstr "(length (concat (number-to-string height) Y-axis-tic)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20041
msgid ""
"This value will be calculated by the @code{print-graph} function in its "
"varlist as @code{full-Y-label-width} and passed on.  (Note that we did not "
"think to include this in the varlist when we first proposed it.)"
msgstr ""
"Este valor ser@'a calculado por la funci@'on @code{print-graph} en su\n"
"varlist como @code{full-Y-label-width} y se pasa dentro. (Note que no\n"
"se pensaba en incluir esto en el varlist cuando se propuso.)"

#. type: Plain text
#: emacs-lisp-intro.texi:20049
msgid ""
"To make a complete vertical axis label, a tic mark is concatenated with a "
"number; and the two together may be preceded by one or more spaces depending "
"on how long the number is.  The label consists of three parts: the "
"(optional) leading spaces, the number, and the tic mark.  The function is "
"passed the value of the number for the specific row, and the value of the "
"width of the top line, which is calculated (just once) by @code{print-graph}."
msgstr ""
"Para crear un eje vertical completo, una marca de tic es concatenada\n"
"con un n@'umero; y los dos juntos pueden ser precedidos por uno o\n"
"m@'as espacios dependiendo de c@'omo de largo es el n@'umero. La\n"
"etiqueta consiste de tres partes: los espacios que se lideran\n"
"(opcional), el n@'umero, y la marca tic. La funci@'on se pasa al\n"
"valor del n@'umero para la fila espec@'{@dotless{i}}fica, y el valor\n"
"del ancho de la l@'{@dotless{i}}nea de arriba, que es calculada (solo\n"
"una vez) por @code{print-graph}."

#. type: group
#: emacs-lisp-intro.texi:20057 emacs-lisp-intro.texi:21596
#, no-wrap
msgid ""
"(defun Y-axis-element (number full-Y-label-width)\n"
"  \"Construct a NUMBERed label element.\n"
"A numbered element looks like this `  5 - ',\n"
"and is padded as needed so all line up with\n"
"the element for the largest number.\"\n"
msgstr ""
"(defun Y-axis-element (number full-Y-label-width)\n"
"  \"Construye una etiqueta NUMERADA\n"
"Un elemento numerado se parece a esto ` 5 - ', \n"
"y est@'a tan acu@~nado como se necesita as@'{@dotless{i}} todo se\n"
"alinea con el elemento para el n@'umero mayor.\"\n"

#. type: group
#: emacs-lisp-intro.texi:20064 emacs-lisp-intro.texi:21603
#, no-wrap
msgid ""
"  (let* ((leading-spaces\n"
"         (- full-Y-label-width\n"
"            (length\n"
"             (concat (number-to-string number)\n"
"                     Y-axis-tic)))))\n"
msgstr ""
"  (let* ((leading-spaces\n"
"         (- full-Y-label-width\n"
"            (length\n"
"             (concat (number-to-string number)\n"
"                     Y-axis-tic)))))\n"

#. type: group
#: emacs-lisp-intro.texi:20070 emacs-lisp-intro.texi:21609
#, no-wrap
msgid ""
"    (concat\n"
"     (make-string leading-spaces ? )\n"
"     (number-to-string number)\n"
"     Y-axis-tic)))\n"
msgstr ""
"    (concat\n"
"     (make-string leading-spaces ? )\n"
"     (number-to-string number)\n"
"     Y-axis-tic)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20075
msgid ""
"The @code{Y-axis-element} function concatenates together the leading spaces, "
"if any; the number, as a string; and the tic mark."
msgstr ""
"La funci@'on @code{Y-axis-element} concatena junto los espacios que se\n"
"lideran si cualquiera; el n@'umero, como una cadena; y la marca tic."

#. type: Plain text
#: emacs-lisp-intro.texi:20079
msgid ""
"To figure out how many leading spaces the label will need, the function "
"subtracts the actual length of the label---the length of the number plus the "
"length of the tic mark---from the desired label width."
msgstr ""
"Para imaginarnos cuantos espacios gu@'{@dotless{i}}a la etiqueta\n"
"necesita, la funci@'on sustrae el tama@~no de la etiqueta --- el\n"
"tama@~no del n@'umero m@'as el tama@~no de la marca tic --- desde el\n"
"ancho de la etiqueta deseada."

#. type: findex
#: emacs-lisp-intro.texi:20080
#, no-wrap
msgid "make-string"
msgstr "make-string"

#. type: Plain text
#: emacs-lisp-intro.texi:20089
msgid ""
"Blank spaces are inserted using the @code{make-string} function.  This "
"function takes two arguments: the first tells it how long the string will be "
"and the second is a symbol for the character to insert, in a special "
"format.  The format is a question mark followed by a blank space, like this, "
"@samp{? }.  @xref{Character Type, , Character Type, elisp, The GNU Emacs "
"Lisp Reference Manual}, for a description of the syntax for characters.  (Of "
"course, you might want to replace the blank space by some other character "
"@dots{} You know what to do.)"
msgstr ""
"Los espacios en blanco se insertan usando la funci@'on\n"
"@code{make-string}. Esta funci@'on tiene dos argumentos: lo primero\n"
"cuenta como de larga ser@'a a cadena y el segundo es un\n"
"s@'{@dotless{i}}mbolo para el caracter a insertar, en un formato\n"
"espcial. El formato es una marca de pregunta seguida por un espacio en\n"
"blanco, como este, @samp{?}. @xref{Tipo de Caracter, , Tipo de\n"
"Caracter, elisp, El Manual de Referencia Emacs Lisp}, para una\n"
"descripci@'on de la sintaxis para caracteres. (De acuerdo, se\n"
"podr@'{@dotless{i}}a querer reemplazar el espacio en blanco por\n"
"alg@'un otro caracter @dots{}. Tu sabes qu@'e hacer.)"

#. type: Plain text
#: emacs-lisp-intro.texi:20093
msgid ""
"The @code{number-to-string} function is used in the concatenation "
"expression, to convert the number to a string that is concatenated with the "
"leading spaces and the tic mark."
msgstr ""
"La funci@'on @code{number-to-string} es usada en la expresi@'on de\n"
"concatenaci@'on, para convertir el n@'umero a una cadena que es\n"
"concatenada con los espacios que se lideran y la marca de tic."

#. type: appendixsubsec
#: emacs-lisp-intro.texi:20095
#, no-wrap
msgid "Create a Y Axis Column"
msgstr "Crea un eje de la columna Y"

#. type: Plain text
#: emacs-lisp-intro.texi:20100
msgid ""
"The preceding functions provide all the tools needed to construct a function "
"that generates a list of numbered and blank strings to insert as the label "
"for the vertical axis:"
msgstr ""
"Las funciones precedentes proporcionan todas las herramientas\n"
"necesarias para construir una funci@'on que genera una lista de\n"
"cadenas enumeradas y en blanco para inserta como la etiqueta para el\n"
"eje vertical:"

#. type: group
#: emacs-lisp-intro.texi:20108
#, no-wrap
msgid ""
"(defun Y-axis-column (height width-of-label)\n"
"  \"Construct list of Y axis labels and blank strings.\n"
"For HEIGHT of line above base and WIDTH-OF-LABEL.\"\n"
"  (let (Y-axis)\n"
msgstr ""
"(defun Y-axis-column (height width-of-label)\n"
"  \"Construye la lista de ejes Y etiquetadas y cadenas en blanco.\n"
"Para height @emph{la altura} de la l@'{@dotless{i}}nea de debajo y width-of-label.\"\n"
"  (let (Y-axis)\n"

#. type: group
#: emacs-lisp-intro.texi:20117
#, no-wrap
msgid ""
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"
"          ;; @r{Insert label.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element height width-of-label)\n"
"                 Y-axis))\n"
msgstr ""
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"
"          ;; @r{Insertar etiqueta.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element height width-of-label)\n"
"                 Y-axis))\n"

#. type: group
#: emacs-lisp-intro.texi:20129
#, no-wrap
msgid ""
"        ;; @r{Else, insert blanks.}\n"
"        (setq Y-axis\n"
"              (cons\n"
"               (make-string width-of-label ? )\n"
"               Y-axis)))\n"
"      (setq height (1- height)))\n"
"    ;; @r{Insert base line.}\n"
"    (setq Y-axis\n"
"          (cons (Y-axis-element 1 width-of-label) Y-axis))\n"
"    (nreverse Y-axis)))\n"
msgstr ""
"        ;; @r{Else, insertar blancos.}\n"
"        (setq Y-axis\n"
"              (cons\n"
"               (make-string width-of-label ? )\n"
"               Y-axis)))\n"
"      (setq height (1- height)))\n"
"    ;; @r{Insertar la l@'{@dotless{i}}nea base.}\n"
"    (setq Y-axis\n"
"          (cons (Y-axis-element 1 width-of-label) Y-axis))\n"
"    (nreverse Y-axis)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20139
msgid ""
"In this function, we start with the value of @code{height} and repetitively "
"subtract one from its value.  After each subtraction, we test to see whether "
"the value is an integral multiple of the @code{Y-axis-label-spacing}.  If it "
"is, we construct a numbered label using the @code{Y-axis-element} function; "
"if not, we construct a blank label using the @code{make-string} function.  "
"The base line consists of the number one followed by a tic mark."
msgstr ""
"En esta funci@'on, nosotros empezamos con el valor de @code{height} y\n"
"repetitivamente sustrae uno desde su valor. Despu@'es de cada\n"
"sustraci@'on, se chequea para ver si el valor es una integral\n"
"m@'ultiple del @code{Y-axis-label-spacing}. Si eso es, se construye\n"
"una etiqueta numerada usando la funci@'on @code{Y-axis-element}; si\n"
"no, se construye una etiqueta blanca usando la funci@'on\n"
"@code{make-string}. La l@'{@dotless{i}}nea base consiste del n@'umero\n"
"uno seguido por una marca tic."

#. type: appendixsubsec
#: emacs-lisp-intro.texi:20142
#, no-wrap
msgid "The Not Quite Final Version of @code{print-Y-axis}"
msgstr "La versi@'on no demasiado final de @code{print-Y-axis}"

#. type: Plain text
#: emacs-lisp-intro.texi:20146
msgid ""
"The list constructed by the @code{Y-axis-column} function is passed to the "
"@code{print-Y-axis} function, which inserts the list as a column."
msgstr ""
"La lista construida por la funci@'on @code{Y-axis-column} est@'a pasada\n"
"a la funci@'on @code{print-Y-axis}, que inserta la lista como una columna."

#. type: group
#: emacs-lisp-intro.texi:20156
#, no-wrap
msgid ""
"(defun print-Y-axis (height full-Y-label-width)\n"
"  \"Insert Y axis using HEIGHT and FULL-Y-LABEL-WIDTH.\n"
"Height must be the maximum height of the graph.\n"
"Full width is the width of the highest label element.\"\n"
";; Value of height and full-Y-label-width\n"
";; are passed by `print-graph'.\n"
msgstr ""
"(defun print-Y-axis (height full-Y-label-width)\n"
"  \"Inserta el eje Y usando HEIGHT y FULL-Y-LABEL-WIDTH.\n"
"La altura debe ser la m@'axima altura del grafo.\n"
"El ancho completo es el ancho del mayor elemento de la\n"
"etiqueta\"\n"
";; El valor del alto y full-Y-label-width\n"
";; son pasadas por `print-graph'.\n"

#. type: group
#: emacs-lisp-intro.texi:20165
#, no-wrap
msgid ""
"  (let ((start (point)))\n"
"    (insert-rectangle\n"
"     (Y-axis-column height full-Y-label-width))\n"
"    ;; @r{Place point ready for inserting graph.}\n"
"    (goto-char start)\n"
"    ;; @r{Move point forward by value of} full-Y-label-width\n"
"    (forward-char full-Y-label-width)))\n"
msgstr ""
"  (let ((start (point)))\n"
"    (insert-rectangle\n"
"     (Y-axis-column height full-Y-label-width))\n"
"    ;; @r{Posiciona el punto listo para inserta el grafo.}\n"
"    (goto-char start)\n"
"    ;; @r{Mueve el punto hacia adelante por valor de} full-Y-label-width\n"
"    (forward-char full-Y-label-width)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20172
msgid ""
"The @code{print-Y-axis} uses the @code{insert-rectangle} function to insert "
"the Y axis labels created by the @code{Y-axis-column} function.  In "
"addition, it places point at the correct position for printing the body of "
"the graph."
msgstr ""
"El @code{print-Y-axis} usa la funci@'on @code{insert-rectangle} para\n"
"inserta el eje Y creado por la funci@'on\n"
"@code{Y-axis-column}. Adem@'as, eso emplaza el punto en la posici@'on\n"
"correcta para imprimir el cuerpo del grafo."

#. type: Plain text
#: emacs-lisp-intro.texi:20174
msgid "You can test @code{print-Y-axis}:"
msgstr "Se puede chequear @code{print-Y-axis}:"

#. type: group
#: emacs-lisp-intro.texi:20186
#, no-wrap
msgid ""
"Y-axis-label-spacing\n"
"Y-axis-tic\n"
"Y-axis-element\n"
"Y-axis-column\n"
"print-Y-axis\n"
msgstr ""
"Y-axis-label-spacing\n"
"Y-axis-tic\n"
"Y-axis-element\n"
"Y-axis-column\n"
"print-Y-axis\n"

#. type: smallexample
#: emacs-lisp-intro.texi:20194
#, no-wrap
msgid "(print-Y-axis 12 5)\n"
msgstr "(print-Y-axis 12 5)\n"

#. type: enumerate
#: emacs-lisp-intro.texi:20199 emacs-lisp-intro.texi:20545
#: emacs-lisp-intro.texi:20781
msgid ""
"Switch to the @file{*scratch*} buffer and place the cursor where you want "
"the axis labels to start."
msgstr ""
"Cambia al b@'uffer @file{*scratch*} y emplaza el cursor donde se\n"
"quiere el eje etiquetado para empezar. "

#. type: enumerate
#: emacs-lisp-intro.texi:20209 emacs-lisp-intro.texi:20555
#: emacs-lisp-intro.texi:20791
msgid "Press @key{RET} to evaluate the expression."
msgstr "Presiona @key{RET} para evaluar la expresi@'on"

#. type: Plain text
#: emacs-lisp-intro.texi:20215
msgid ""
"Emacs will print labels vertically, the top one being @w{@samp{10 -@w{ }}}.  "
"(The @code{print-graph} function will pass the value of @code{height-of-top-"
"line}, which in this case will end up as 15, thereby getting rid of what "
"might appear as a bug.)"
msgstr ""
"Emacs imprimir@'a etiquetas verticalmente, el primero siendo\n"
"@w{@samp{10 -@w{ }}}. (La funci@'on @code{print-graph} pasar@'a el\n"
"valor de @code{height-of-top-line}, que en este caso finalizar@'a en\n"
"15, por esto lo que se obtiene podr@'{@dotless{i}}a aparecer como un error.)"

#. type: cindex
#: emacs-lisp-intro.texi:20219
#, no-wrap
msgid "Axis, print horizontal"
msgstr "Ejes, imprime horizontal"

#. type: cindex
#: emacs-lisp-intro.texi:20220
#, no-wrap
msgid "X axis printing"
msgstr "imprimiendo eje X"

#. type: cindex
#: emacs-lisp-intro.texi:20221
#, no-wrap
msgid "Print horizontal axis"
msgstr "Imprime eje horizontal"

#. type: cindex
#: emacs-lisp-intro.texi:20222
#, no-wrap
msgid "Horizontal axis printing"
msgstr "Imprimiendo eje horizontal"

#. type: Plain text
#: emacs-lisp-intro.texi:20226
msgid ""
"X axis labels are much like Y axis labels, except that the ticks are on a "
"line above the numbers.  Labels should look like this:"
msgstr ""
"Las etiquetas del eje X son como las etiquetas del eje Y, excepto que\n"
"los ticks son un l@'{@dotless{i}}nea debajo de los n@'umeros. Las\n"
"etiquetas se parece como esto:"

#. type: group
#: emacs-lisp-intro.texi:20231
#, no-wrap
msgid ""
"    |   |    |    |\n"
"    1   5   10   15\n"
msgstr ""
"    |   |    |    |\n"
"    1   5   10   15\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20238
msgid ""
"The first tic is under the first column of the graph and is preceded by "
"several blank spaces.  These spaces provide room in rows above for the Y "
"axis labels.  The second, third, fourth, and subsequent ticks are all spaced "
"equally, according to the value of @code{X-axis-label-spacing}."
msgstr ""
"El primer tic est@'a bajo la primera columna del grafo y est@'a\n"
"precedido por varios espacios en blanco. Estos espacios proporcionan\n"
"la habitaci@'on en filas de debajo para las etiquetas del eje Y. El\n"
"segundo, tercer, cuarto, y subsiguientes ticks son todos espaciados\n"
"igualmente, de acuerdo al valor de @code{X-axis-label-spacing}."

#. type: Plain text
#: emacs-lisp-intro.texi:20242
msgid ""
"The second row of the X axis consists of numbers, preceded by several blank "
"spaces and also separated according to the value of the variable @code{X-"
"axis-label-spacing}."
msgstr ""
"La segunda fila del eje X consiste de n@'umeros, precedidos por varios\n"
"espacios en blanco y tambi@'en separado de acuerdo al valor de la\n"
"variable @code{X-axis-label-spacing}."

#. type: Plain text
#: emacs-lisp-intro.texi:20247
msgid ""
"The value of the variable @code{X-axis-label-spacing} should itself be "
"measured in units of @code{symbol-width}, since you may want to change the "
"width of the symbols that you are using to print the body of the graph "
"without changing the ways the graph is labeled."
msgstr ""
"El valor de la variable @code{X-axis-label-spacing}\n"
"ser@'{@dotless{i}}a medido en unidades de @code{symbol-width}, puesto\n"
"que se puede querer cambiar el ancho de los s@'{@dotless{i}}mbolos que\n"
"est@'as usando para imprimir el cuerpo del grafo sin cambiar los\n"
"caminos del grafo que est@'a etiquetado."

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:20255
#, no-wrap
msgid "Similarities and differences"
msgstr "Similaridades y diferencias"

#. type: Plain text
#: emacs-lisp-intro.texi:20263
msgid ""
"The @code{print-X-axis} function is constructed in more or less the same "
"fashion as the @code{print-Y-axis} function except that it has two lines: "
"the line of tic marks and the numbers.  We will write a separate function to "
"print each line and then combine them within the @code{print-X-axis} "
"function."
msgstr ""
"La funci@'on @code{print-X-axis} est@'a construida m@'as o menos del\n"
"mismo modo como que la funci@'on @code{print-Y-axis} excepto que tiene\n"
"dos l@'{@dotless{i}}neas: la l@'{@dotless{i}}nea de marcas tic y los\n"
"n@'umeros. Nosotros escribiremos una funci@'on separado a imprimir\n"
"cada l@'{@dotless{i}}nea y entonces combinarlo con la funci@'on\n"
"@code{print-X-axis}."

#. type: Plain text
#: emacs-lisp-intro.texi:20265
msgid "This is a three step process:"
msgstr "Esto es un proceso de tres pasos:"

#. type: enumerate
#: emacs-lisp-intro.texi:20269
msgid ""
"Write a function to print the X axis tic marks, @code{print-X-axis-tic-line}."
msgstr ""
"Escribe una funci@'on para imprimir el eje X marca tic, @code{print-X-axis-"
"tic-line}."

#. type: enumerate
#: emacs-lisp-intro.texi:20272
msgid ""
"Write a function to print the X numbers, @code{print-X-axis-numbered-line}."
msgstr ""
"Escribe una funci@'on imprime los n@'umeros X, @code{print-X-axis-numbered-"
"line}."

#. type: enumerate
#: emacs-lisp-intro.texi:20277
msgid ""
"Write a function to print both lines, the @code{print-X-axis} function, "
"using @code{print-X-axis-tic-line} and @code{print-X-axis-numbered-line}."
msgstr ""
"Escribe una funci@'on para imprimir ambas l@'{@dotless{i}}neas, la\n"
"funci@'on @code{print-X-axis}, usando @code{print-X-axis-tic-line} y "
"@code{print-X-axis-numbered-line}."

#. type: Plain text
#: emacs-lisp-intro.texi:20284
msgid ""
"The first function should print the X axis tic marks.  We must specify the "
"tic marks themselves and their spacing:"
msgstr ""
"La primera funci@'on imprimir@'{@dotless{i}}a las marcas de tic del eje\n"
"X. Se deben especificar las marcas en s@'{@dotless{i}} y su espacio:"

#. type: group
#: emacs-lisp-intro.texi:20291 emacs-lisp-intro.texi:21430
#, no-wrap
msgid ""
"(defvar X-axis-label-spacing\n"
"  (if (boundp 'graph-blank)\n"
"      (* 5 (length graph-blank)) 5)\n"
"  \"Number of units from one X axis label to next.\")\n"
msgstr ""
"(defvar X-axis-label-spacing\n"
"  (if (boundp 'graph-blank)\n"
"      (* 5 (length graph-blank)) 5)\n"
"  \"N@'umeros de unidades desde un eje X al siguiente.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20302
msgid ""
"(Note that the value of @code{graph-blank} is set by another @code{defvar}.  "
"The @code{boundp} predicate checks whether it has already been set; "
"@code{boundp} returns @code{nil} if it has not.  If @code{graph-blank} were "
"unbound and we did not use this conditional construction, in a recent GNU "
"Emacs, we would enter the debugger and see an error message saying "
"@samp{@w{Debugger entered--Lisp error:} @w{(void-variable graph-blank)}}.)"
msgstr ""
"(Note que el valor de @code{graph-blank} est'a asignado por otro\n"
"@code{defvar}. El predicado @code{boundp} chequea si ya ha sido\n"
"asignado; @code{boundp} devuelve @code{nil} si no lo tiene. Si\n"
"@code{graph-blank} fuera disociado y no usara esta construcci@'on\n"
"condicional, en un GNU Emacs reciente, se introducir@'{@dotless{i}}a\n"
"el depurador y mirar@'a un mensaje de error diciendo @samp{@w{Debugger\n"
"entered--Lisp error:} @w{(void-variable graph-blank)}}"

#. type: Plain text
#: emacs-lisp-intro.texi:20305
msgid "Here is the @code{defvar} for @code{X-axis-tic-symbol}:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el @code{defvar} para @code{X-axis-tic-symbol}:"

#. type: group
#: emacs-lisp-intro.texi:20310 emacs-lisp-intro.texi:21423
#, no-wrap
msgid ""
"(defvar X-axis-tic-symbol \"|\"\n"
"  \"String to insert to point to a column in X axis.\")\n"
msgstr ""
"(defvar X-axis-tic-symbol \"|\"\n"
"  \"Cadena para insertar para apuntar a una columna en el eje X.\")\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20315
msgid "The goal is to make a line that looks like this:"
msgstr "El objetivo es crear una l@'{@dotless{i}}nea que se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:20318
#, no-wrap
msgid "       |   |    |    |\n"
msgstr "       |   |    |    |\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20322
msgid ""
"The first tic is indented so that it is under the first column, which is "
"indented to provide space for the Y axis labels."
msgstr ""
"El primer tic es indentado as@'{@dotless{i}} que est@'a bajo la\n"
"primera columna, que es indentado para proveer espacio para las\n"
"etiquetas del eje Y."

#. type: Plain text
#: emacs-lisp-intro.texi:20326
msgid ""
"A tic element consists of the blank spaces that stretch from one tic to the "
"next plus a tic symbol.  The number of blanks is determined by the width of "
"the tic symbol and the @code{X-axis-label-spacing}."
msgstr ""
"Un elemento tic consiste en espacios en blanco que se extienden desde\n"
"un tic al siguiente m@'as un s@'{@dotless{i}}mbolo tic. El n@'umero de\n"
"espacios en blanco se determinan por el ancho del\n"
"s@'{@dotless{i}}mbolo tic y el @code{X-axis-label-spacing}."

#. type: group
#: emacs-lisp-intro.texi:20343
#, no-wrap
msgid ""
";;; X-axis-tic-element\n"
"@dots{}\n"
"(concat\n"
" (make-string\n"
"  ;; @r{Make a string of blanks.}\n"
"  (-  (* symbol-width X-axis-label-spacing)\n"
"      (length X-axis-tic-symbol))\n"
"  ? )\n"
" ;; @r{Concatenate blanks with tic symbol.}\n"
" X-axis-tic-symbol)\n"
"@dots{}\n"
msgstr ""
";;; X-axis-tic-element\n"
"@dots{}\n"
"(concat\n"
" (make-string\n"
"  ;; @r{Crea una cadena de blancos.}\n"
"  (-  (* symbol-width X-axis-label-spacing)\n"
"      (length X-axis-tic-symbol))\n"
"  ? )\n"
" ;; @r{Concatena blancos con s@'{@dotless{i}}mbolos.}\n"
" X-axis-tic-symbol)\n"
"@dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20349
msgid ""
"Next, we determine how many blanks are needed to indent the first tic mark "
"to the first column of the graph.  This uses the value of @code{full-Y-label-"
"width} passed it by the @code{print-graph} function."
msgstr ""
"Lo siguiente, determina cuantos espacios en blanco son necesarios para\n"
"indentar la primera marca tic a la primera del grafo. Esto usa el\n"
"valor de @code{full-Y-label-width} pasaba por la funci@'on @code{print-"
"graph}."

#. type: Plain text
#: emacs-lisp-intro.texi:20353
msgid "The code to make @code{X-axis-leading-spaces} looks like this:"
msgstr "El c@'odigo para crear @code{X-axis-leading-spaces} se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:20360
#, no-wrap
msgid ""
";; X-axis-leading-spaces\n"
"@dots{}\n"
"(make-string full-Y-label-width ? )\n"
"@dots{}\n"
msgstr ""
";; X-axis-leading-spaces\n"
"@dots{}\n"
"(make-string full-Y-label-width ? )\n"
"@dots{}\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20366
msgid ""
"We also need to determine the length of the horizontal axis, which is the "
"length of the numbers list, and the number of ticks in the horizontal axis:"
msgstr ""
"Tambi@'en necesita determinar el tama@~no del eje horizontal, que es\n"
"el tama@~no de la lista de n@'umeros, y el n@'umero de ticks en el eje\n"
"horizontal:"

#. type: group
#: emacs-lisp-intro.texi:20372
#, no-wrap
msgid ""
";; X-length\n"
"@dots{}\n"
"(length numbers-list)\n"
msgstr ""
";; X-length\n"
"@dots{}\n"
"(length numbers-list)\n"

#. type: group
#: emacs-lisp-intro.texi:20378
#, no-wrap
msgid ""
";; tic-width\n"
"@dots{}\n"
"(* symbol-width X-axis-label-spacing)\n"
msgstr ""
";; tic-width\n"
"@dots{}\n"
"(* symbol-width X-axis-label-spacing)\n"

#. type: group
#: emacs-lisp-intro.texi:20385
#, no-wrap
msgid ""
";; number-of-X-ticks\n"
"(if (zerop (% (X-length tic-width)))\n"
"    (/ (X-length tic-width))\n"
"  (1+ (/ (X-length tic-width))))\n"
msgstr ""
";; number-of-X-ticks\n"
"(if (zerop (% (X-length tic-width)))\n"
"    (/ (X-length tic-width))\n"
"  (1+ (/ (X-length tic-width))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20390
msgid ""
"All this leads us directly to the function for printing the X axis tic line:"
msgstr "Todo esto lidera directamente a la funci@'on para imprimir el eje X:"

#. type: findex
#: emacs-lisp-intro.texi:20391
#, no-wrap
msgid "print-X-axis-tic-line"
msgstr "print-X-axis-tic-line"

#. type: group
#: emacs-lisp-intro.texi:20399 emacs-lisp-intro.texi:21643
#, no-wrap
msgid ""
"(defun print-X-axis-tic-line\n"
"  (number-of-X-tics X-axis-leading-spaces X-axis-tic-element)\n"
"  \"Print ticks for X axis.\"\n"
"    (insert X-axis-leading-spaces)\n"
"    (insert X-axis-tic-symbol)  ; @r{Under first column.}\n"
msgstr ""
"(defun print-X-axis-tic-line\n"
"  (number-of-X-tics X-axis-leading-spaces X-axis-tic-element)\n"
"  \"Imprime ticks para el eje X.\"\n"
"    (insert X-axis-leading-spaces)\n"
"    (insert X-axis-tic-symbol)  ; @r{En la primera columna.}\n"

#. type: group
#: emacs-lisp-intro.texi:20409 emacs-lisp-intro.texi:21653
#, no-wrap
msgid ""
"    ;; @r{Insert second tic in the right spot.}\n"
"    (insert (concat\n"
"             (make-string\n"
"              (-  (* symbol-width X-axis-label-spacing)\n"
"                  ;; @r{Insert white space up to second tic symbol.}\n"
"                  (* 2 (length X-axis-tic-symbol)))\n"
"              ? )\n"
"             X-axis-tic-symbol))\n"
msgstr ""
"    ;; @r{Inserta el segundo tic en el lugar adecuado.}\n"
"    (insert (concat\n"
"             (make-string\n"
"              (-  (* symbol-width X-axis-label-spacing)\n"
"                  ;; @r{Inserta el espacio en blanco al segundo s@'{@dotless{i}}mbolo tic.}\n"
"                  (* 2 (length X-axis-tic-symbol)))\n"
"              ? )\n"
"             X-axis-tic-symbol))\n"

#. type: group
#: emacs-lisp-intro.texi:20415 emacs-lisp-intro.texi:21659
#, no-wrap
msgid ""
"    ;; @r{Insert remaining ticks.}\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert X-axis-tic-element)\n"
"      (setq number-of-X-tics (1- number-of-X-tics))))\n"
msgstr ""
"    ;; @r{Inserta los ticks que permanecen.}\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert X-axis-tic-element)\n"
"      (setq number-of-X-tics (1- number-of-X-tics))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20419
msgid "The line of numbers is equally straightforward:"
msgstr "La l@'{@dotless{i}}nea de n@'umeros es igualmente simple:"

#. type: Plain text
#: emacs-lisp-intro.texi:20422
msgid ""
"First, we create a numbered element with blank spaces before each number:"
msgstr ""
"Primero, creamos un elemento numerado con espacios en blanco antes de\n"
"cada n@'umero:"

#. type: findex
#: emacs-lisp-intro.texi:20423
#, no-wrap
msgid "X-axis-element"
msgstr "X-axis-element"

#. type: group
#: emacs-lisp-intro.texi:20433 emacs-lisp-intro.texi:21671
#, no-wrap
msgid ""
"(defun X-axis-element (number)\n"
"  \"Construct a numbered X axis element.\"\n"
"  (let ((leading-spaces\n"
"         (-  (* symbol-width X-axis-label-spacing)\n"
"             (length (number-to-string number)))))\n"
"    (concat (make-string leading-spaces ? )\n"
"            (number-to-string number))))\n"
msgstr ""
"(defun X-axis-element (number)\n"
"  \"Construye un elemento del eje X numerado.\"\n"
"  (let ((leading-spaces\n"
"         (-  (* symbol-width X-axis-label-spacing)\n"
"             (length (number-to-string number)))))\n"
"    (concat (make-string leading-spaces ? )\n"
"            (number-to-string number))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20438
msgid ""
"Next, we create the function to print the numbered line, starting with the "
"number ``1'' under the first column:"
msgstr ""
"Lo siguiente, se crea la funci@'on para imprimir la\n"
"l@'{@dotless{i}}nea numerada, empezando con el n@'umero ``1'' para la\n"
"primera columna:"

#. type: findex
#: emacs-lisp-intro.texi:20439
#, no-wrap
msgid "print-X-axis-numbered-line"
msgstr "print-X-axis-numbered-line"

#. type: group
#: emacs-lisp-intro.texi:20448
#, no-wrap
msgid ""
"(defun print-X-axis-numbered-line\n"
"  (number-of-X-tics X-axis-leading-spaces)\n"
"  \"Print line of X-axis numbers\"\n"
"  (let ((number X-axis-label-spacing))\n"
"    (insert X-axis-leading-spaces)\n"
"    (insert \"1\")\n"
msgstr ""
"(defun print-X-axis-numbered-line\n"
"  (number-of-X-tics X-axis-leading-spaces)\n"
"  \"Imprime la l@'{@dotless{i}}neas de n@'umeros del eje X\"\n"
"  (let ((number X-axis-label-spacing))\n"
"    (insert X-axis-leading-spaces)\n"
"    (insert \"1\")\n"

#. type: group
#: emacs-lisp-intro.texi:20456
#, no-wrap
msgid ""
"    (insert (concat\n"
"             (make-string\n"
"              ;; @r{Insert white space up to next number.}\n"
"              (-  (* symbol-width X-axis-label-spacing) 2)\n"
"              ? )\n"
"             (number-to-string number)))\n"
msgstr ""
"    (insert (concat\n"
"             (make-string\n"
"              ;; @r{Inserta espacios en blanco al siguiente n@'umero.}\n"
"              (-  (* symbol-width X-axis-label-spacing) 2)\n"
"              ? )\n"
"             (number-to-string number)))\n"

#. type: group
#: emacs-lisp-intro.texi:20464
#, no-wrap
msgid ""
"    ;; @r{Insert remaining numbers.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element number))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"
msgstr ""
"    ;; @r{Insertar n@'umeros.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element number))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20470
msgid ""
"Finally, we need to write the @code{print-X-axis} that uses @code{print-X-"
"axis-tic-line} and @code{print-X-axis-numbered-line}."
msgstr ""
"Finalmente, se necesita escribir lo que @code{print-X-axis} que usa\n"
"@code{print-X-axis-tic-line} y @code{print-X-axis-numbered-line}."

#. type: Plain text
#: emacs-lisp-intro.texi:20475
msgid ""
"The function must determine the local values of the variables used by both "
"@code{print-X-axis-tic-line} and @code{print-X-axis-numbered-line}, and then "
"it must call them.  Also, it must print the carriage return that separates "
"the two lines."
msgstr ""
"La funci@'on debe determinar los valores locales de las variables\n"
"usadas por @code{print-X-axis-tic-line} y\n"
"@code{print-X-axis-numbered-line}, y entonces eso debe\n"
"llamarlas. Tambi@'en, debe imprimir el retorno de carro que separe las\n"
"dos l@'{@dotless{i}}neas."

#. type: Plain text
#: emacs-lisp-intro.texi:20478
msgid ""
"The function consists of a varlist that specifies five local variables, and "
"calls to each of the two line printing functions:"
msgstr ""
"La funci@'on consiste de una varlist que especifica cinco variables\n"
"locales, y llama cada una de las dos l@'{@dotless{i}}neas imprimiendo "
"funciones:"

#. type: group
#: emacs-lisp-intro.texi:20486
#, no-wrap
msgid ""
"(defun print-X-axis (numbers-list)\n"
"  \"Print X axis labels to length of NUMBERS-LIST.\"\n"
"  (let* ((leading-spaces\n"
"          (make-string full-Y-label-width ? ))\n"
msgstr ""
"(defun print-X-axis (numbers-list)\n"
"  \"Imprime el eje X etique al tama@~no de NUMBERS-LIST.\"\n"
"  (let* ((leading-spaces\n"
"          (make-string full-Y-label-width ? ))\n"

#. type: group
#: emacs-lisp-intro.texi:20491
#, no-wrap
msgid ""
"       ;; symbol-width @r{is provided by} graph-body-print\n"
"       (tic-width (* symbol-width X-axis-label-spacing))\n"
"       (X-length (length numbers-list))\n"
msgstr ""
"       ;; symbol-width @r{se provee por} graph-body-print\n"
"       (tic-width (* symbol-width X-axis-label-spacing))\n"
"       (X-length (length numbers-list))\n"

#. type: group
#: emacs-lisp-intro.texi:20496
#, no-wrap
msgid ""
"       (X-tic\n"
"        (concat\n"
"         (make-string\n"
msgstr ""
"       (X-tic\n"
"        (concat\n"
"         (make-string\n"

#. type: group
#: emacs-lisp-intro.texi:20502
#, no-wrap
msgid ""
"          ;; @r{Make a string of blanks.}\n"
"          (-  (* symbol-width X-axis-label-spacing)\n"
"              (length X-axis-tic-symbol))\n"
"          ? )\n"
msgstr ""
"          ;; @r{Crea una cadena de espacios en blanco.}\n"
"          (-  (* symbol-width X-axis-label-spacing)\n"
"              (length X-axis-tic-symbol))\n"
"          ? )\n"

#. type: group
#: emacs-lisp-intro.texi:20506
#, no-wrap
msgid ""
"         ;; @r{Concatenate blanks with tic symbol.}\n"
"         X-axis-tic-symbol))\n"
msgstr ""
"         ;; @r{Concatena espacio en blanco con s@'{@dotless{i}}mbolos\n"
"         tic.}\n"
"         X-axis-tic-symbol))\n"

#. type: group
#: emacs-lisp-intro.texi:20512
#, no-wrap
msgid ""
"       (tic-number\n"
"        (if (zerop (% X-length tic-width))\n"
"            (/ X-length tic-width)\n"
"          (1+ (/ X-length tic-width)))))\n"
msgstr ""
"       (tic-number\n"
"        (if (zerop (% X-length tic-width))\n"
"            (/ X-length tic-width)\n"
"          (1+ (/ X-length tic-width)))))\n"

#. type: group
#: emacs-lisp-intro.texi:20517
#, no-wrap
msgid ""
"    (print-X-axis-tic-line tic-number leading-spaces X-tic)\n"
"    (insert \"\\n\")\n"
"    (print-X-axis-numbered-line tic-number leading-spaces)))\n"
msgstr ""
"    (print-X-axis-tic-line tic-number leading-spaces X-tic)\n"
"    (insert \"\\n\")\n"
"    (print-X-axis-numbered-line tic-number leading-spaces)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20522
msgid "You can test @code{print-X-axis}:"
msgstr "Se puede testear @code{print-X-axis}:"

#. type: enumerate
#: emacs-lisp-intro.texi:20528
msgid ""
"Install @code{X-axis-tic-symbol}, @code{X-axis-label-spacing}, @code{print-X-"
"axis-tic-line}, as well as @code{X-axis-element}, @code{print-X-axis-"
"numbered-line}, and @code{print-X-axis}."
msgstr ""
"Instale @code{X-axis-tic-symbol}, @code{X-axis-label-spacing},\n"
"@code{print-X-axis-tic-line}, tanto como @code{X-axis-element},\n"
"@code{print-X-axis-numbered-line}, y @code{print-X-axis}."

#. type: group
#: emacs-lisp-intro.texi:20539
#, no-wrap
msgid ""
"(progn\n"
" (let ((full-Y-label-width 5)\n"
"       (symbol-width 1))\n"
"   (print-X-axis\n"
"    '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))))\n"
msgstr ""
"(progn\n"
" (let ((full-Y-label-width 5)\n"
"       (symbol-width 1))\n"
"   (print-X-axis\n"
"    '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))))\n"

#. type: enumerate
#: emacs-lisp-intro.texi:20552 emacs-lisp-intro.texi:20788
msgid ""
"Yank the test expression into the minibuffer with @kbd{C-y} (@code{yank)}."
msgstr ""
"Pegue la expresi@'on de test dentro del minibuffer con @kbd{C-y} "
"(@code{yank})."

#. type: Plain text
#: emacs-lisp-intro.texi:20559
msgid "Emacs will print the horizontal axis like this:"
msgstr "Emacs imprimir@'a el eje horizontal as@'{@dotless{i}}"

#. type: group
#: emacs-lisp-intro.texi:20565
#, no-wrap
msgid ""
"     |   |    |    |    |\n"
"     1   5   10   15   20\n"
msgstr ""
"     |   |    |    |    |\n"
"     1   5   10   15   20\n"

#. type: cindex
#: emacs-lisp-intro.texi:20570
#, no-wrap
msgid "Printing the whole graph"
msgstr "Imprimiendo el grafo entero"

#. type: cindex
#: emacs-lisp-intro.texi:20571
#, no-wrap
msgid "Whole graph printing"
msgstr "Imprimiendo el grafo entero"

#. type: cindex
#: emacs-lisp-intro.texi:20572
#, no-wrap
msgid "Graph, printing all"
msgstr "Grafo, imprimiendo todo"

#. type: Plain text
#: emacs-lisp-intro.texi:20575
msgid "Now we are nearly ready to print the whole graph."
msgstr "Ahora estamos listos para imprimir el grafo completo."

#. type: Plain text
#: emacs-lisp-intro.texi:20579
msgid ""
"The function to print the graph with the proper labels follows the outline "
"we created earlier (@pxref{Full Graph, , A Graph with Labeled Axes}), but "
"with additions."
msgstr ""
"La funci@'on para imprimir el grafo con las etiquetas apropiadas sigue\n"
"el esquema que creamos antes (@pxref{Grafo completo, , Un Grafo con\n"
"Ejes Etiquetados}), pero con adiciones."

#. type: Plain text
#: emacs-lisp-intro.texi:20582
msgid "Here is the outline:"
msgstr "Aqu@'{@dotless{i}} est@'a el esquema:"

#. type: unnumberedsubsec
#: emacs-lisp-intro.texi:20609
#, no-wrap
msgid "Changes for the Final Version"
msgstr "Cambios para la versi@'on final"

#. type: Plain text
#: emacs-lisp-intro.texi:20617
msgid ""
"The final version is different from what we planned in two ways: first, it "
"contains additional values calculated once in the varlist; second, it "
"carries an option to specify the labels' increment per row.  This latter "
"feature turns out to be essential; otherwise, a graph may have more rows "
"than fit on a display or on a sheet of paper."
msgstr ""
"La versi@'on final es diferente desde que se planea en dos caminos:\n"
"primero, contiene los valores adicionales calculadas una vez que en la\n"
"varlist; segundo, eso trae una opci@'on para espec@'{@dotless{i}}ficar\n"
"las etiquetas se incrementa la fila. Esta @'ultima funcionalidad\n"
"cambia a ser esencial; de otro modo, un grafo puede tener m@'as filas\n"
"que ajustarse en una muestra o en una hoja de papel."

#. type: Plain text
#: emacs-lisp-intro.texi:20622
msgid ""
"This new feature requires a change to the @code{Y-axis-column} function, to "
"add @code{vertical-step} to it.  The function looks like this:"
msgstr ""
"Esta nueva funcionalidad requiere un cambio a la funci@'on\n"
"@code{Y-axis-column}, para a@~nadir @code{vertical-step} para\n"
"eso. Esta funci@'on es parece a esto:"

#. type: findex
#: emacs-lisp-intro.texi:20623
#, no-wrap
msgid "Y-axis-column @r{Final version.}"
msgstr "Y-axis-column @r{Versi@'on Final.}"

#. type: group
#: emacs-lisp-intro.texi:20636
#, no-wrap
msgid ""
";;; @r{Final version.}\n"
"(defun Y-axis-column\n"
"  (height width-of-label &optional vertical-step)\n"
"  \"Construct list of labels for Y axis.\n"
"HEIGHT is maximum height of graph.\n"
"WIDTH-OF-LABEL is maximum width of label.\n"
"VERTICAL-STEP, an option, is a positive integer\n"
"that specifies how much a Y axis label increments\n"
"for each line.  For example, a step of 5 means\n"
"that each line is five units of the graph.\"\n"
msgstr ""
";;; @r{Versi@'on Final.}\n"
"(defun Y-axis-column\n"
"  (height width-of-label &optional vertical-step)\n"
"  \"Construye una lista de etiquetas para el eje Y.\n"
"HEIGHT es la m@'axima altura del grafo.\n"
"WIDTH-OF-LABEL es el m@'aximo ancho de la etiqueta.\n"
"VERTICAL-STEP, una opci@'on, es un entero positivo\n"
"que especifica cuanto una etiqueta de eje Y incrementa\n"
"cada l@'{@dotless{i}}nea. Por ejemplo, un paso de 5 \n"
"significa que cada l@'{@dotless{i}}nea es cinco unidades\n"
"del grafo.\"\n"

#. type: group
#: emacs-lisp-intro.texi:20642
#, no-wrap
msgid ""
"  (let (Y-axis\n"
"        (number-per-line (or vertical-step 1)))\n"
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"
msgstr ""
"  (let (Y-axis\n"
"        (number-per-line (or vertical-step 1)))\n"
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"

#. type: group
#: emacs-lisp-intro.texi:20651
#, no-wrap
msgid ""
"          ;; @r{Insert label.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element\n"
"                  (* height number-per-line)\n"
"                  width-of-label)\n"
"                 Y-axis))\n"
msgstr ""
"          ;; @r{Inserta etiqueta.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element\n"
"                  (* height number-per-line)\n"
"                  width-of-label)\n"
"                 Y-axis))\n"

#. type: group
#: emacs-lisp-intro.texi:20659 emacs-lisp-intro.texi:21735
#, no-wrap
msgid ""
"        ;; @r{Else, insert blanks.}\n"
"        (setq Y-axis\n"
"              (cons\n"
"               (make-string width-of-label ? )\n"
"               Y-axis)))\n"
"      (setq height (1- height)))\n"
msgstr ""
"        ;; @r{Else, inserta espacios en blanco.}\n"
"        (setq Y-axis\n"
"              (cons\n"
"               (make-string width-of-label ? )\n"
"               Y-axis)))\n"
"      (setq height (1- height)))\n"

#. type: group
#: emacs-lisp-intro.texi:20667 emacs-lisp-intro.texi:21743
#, no-wrap
msgid ""
"    ;; @r{Insert base line.}\n"
"    (setq Y-axis (cons (Y-axis-element\n"
"                        (or vertical-step 1)\n"
"                        width-of-label)\n"
"                       Y-axis))\n"
"    (nreverse Y-axis)))\n"
msgstr ""
"    ;; @r{Inserta l@'{@dotless{i}}nea base.}\n"
"    (setq Y-axis (cons (Y-axis-element\n"
"                        (or vertical-step 1)\n"
"                        width-of-label)\n"
"                       Y-axis))\n"
"    (nreverse Y-axis)))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20673
msgid ""
"The values for the maximum height of graph and the width of a symbol are "
"computed by @code{print-graph} in its @code{let} expression; so @code{graph-"
"body-print} must be changed to accept them."
msgstr ""
"Los valores para la m@'axima altura del grafo y el ancho de un\n"
"s@'{@dotless{i}}mbolo se computan por @code{print-graph} es su\n"
"expresi@'on @code{let}; as@'{@dotless{i}} @code{graph-body-print} debe\n"
"ser cambiado para aceptarlos."

#. type: findex
#: emacs-lisp-intro.texi:20674
#, no-wrap
msgid "graph-body-print @r{Final version.}"
msgstr "graph-body-print @r{Versi@'on Final.}"

#. type: group
#: emacs-lisp-intro.texi:20683
#, no-wrap
msgid ""
";;; @r{Final version.}\n"
"(defun graph-body-print (numbers-list height symbol-width)\n"
"  \"Print a bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\n"
"HEIGHT is maximum height of graph.\n"
"SYMBOL-WIDTH is number of each column.\"\n"
msgstr ""
";;; @r{Versi@'on Final.}\n"
"(defun graph-body-print (numbers-list height symbol-width)\n"
"  \"Imprime una gr@'afica de barras del NUMBERS-LIST.\n"
"El numbers-list consiste en los valores del eje Y.\n"
"HEIGHT es la m@'axisma altura del grafo.\n"
"SYMBOL-WIDTH es el n@'umero de cada columna.\"\n"

#. type: group
#: emacs-lisp-intro.texi:20692 emacs-lisp-intro.texi:21690
#, no-wrap
msgid ""
"  (let (from-position)\n"
"    (while numbers-list\n"
"      (setq from-position (point))\n"
"      (insert-rectangle\n"
"       (column-of-graph height (car numbers-list)))\n"
"      (goto-char from-position)\n"
"      (forward-char symbol-width)\n"
msgstr ""
"  (let (from-position)\n"
"    (while numbers-list\n"
"      (setq from-position (point))\n"
"      (insert-rectangle\n"
"       (column-of-graph height (car numbers-list)))\n"
"      (goto-char from-position)\n"
"      (forward-char symbol-width)\n"

#. type: group
#: emacs-lisp-intro.texi:20700 emacs-lisp-intro.texi:21698
#, no-wrap
msgid ""
"      ;; @r{Draw graph column by column.}\n"
"      (sit-for 0)\n"
"      (setq numbers-list (cdr numbers-list)))\n"
"    ;; @r{Place point for X axis labels.}\n"
"    (forward-line height)\n"
"    (insert \"\\n\")))\n"
msgstr ""
"      ;; @r{Dibuja el grafo columna por columna.}\n"
"      (sit-for 0)\n"
"      (setq numbers-list (cdr numbers-list)))\n"
"    ;; @r{Posiciona el punto para las etiquetas del eje X.}\n"
"    (forward-line height)\n"
"    (insert \"\\n\")))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20705
msgid "Finally, the code for the @code{print-graph} function:"
msgstr "Finalmente, el c@'odigo para la funci@'on @code{print-graph}:"

#. type: findex
#: emacs-lisp-intro.texi:20706
#, no-wrap
msgid "print-graph @r{Final version.}"
msgstr "print-graph @r{Versi@'on Final.}"

#. type: group
#: emacs-lisp-intro.texi:20714
#, no-wrap
msgid ""
";;; @r{Final version.}\n"
"(defun print-graph\n"
"  (numbers-list &optional vertical-step)\n"
"  \"Print labeled bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\n"
msgstr ""
";;; @r{Versi@'on Final.}\n"
"(defun print-graph\n"
"  (numbers-list &optional vertical-step)\n"
"  \"El gr@'afico de barras etiquetadas del NUMBERS-LIST.\n"
"El numbers-list consiste en los valores de eje Y.\n"

#. type: group
#: emacs-lisp-intro.texi:20721
#, no-wrap
msgid ""
"Optionally, VERTICAL-STEP, a positive integer,\n"
"specifies how much a Y axis label increments for\n"
"each line.  For example, a step of 5 means that\n"
"each row is five units.\"\n"
msgstr ""
"Opcionalmente, VERTICAL-STEP, un entero positivo, especifica cuanto el\n"
"eje Y incrementa cada l@'{@dotless{i}}nea. Por ejemplo, un paso de 5\n"
"significa que cada fila es de cinco unidades.\n"

#. type: group
#: emacs-lisp-intro.texi:20727
#, no-wrap
msgid ""
"  (let* ((symbol-width (length graph-blank))\n"
"         ;; @code{height} @r{is both the largest number}\n"
"         ;; @r{and the number with the most digits.}\n"
"         (height (apply 'max numbers-list))\n"
msgstr ""
"  (let* ((symbol-width (length graph-blank))\n"
"         ;; @code{height} @r{en ambos es el n@'umero m@'as largo}\n"
"         ;; @r{y el n@'umero con la mayor@'{@dotless{i}}a de los digitos.}\n"
"         (height (apply 'max numbers-list))\n"

#. type: group
#: emacs-lisp-intro.texi:20735 emacs-lisp-intro.texi:21360
#: emacs-lisp-intro.texi:21861
#, no-wrap
msgid ""
"         (height-of-top-line\n"
"          (if (zerop (% height Y-axis-label-spacing))\n"
"              height\n"
"            ;; @r{else}\n"
"            (* (1+ (/ height Y-axis-label-spacing))\n"
"               Y-axis-label-spacing)))\n"
msgstr ""
"         (height-of-top-line\n"
"          (if (zerop (% height Y-axis-label-spacing))\n"
"              height\n"
"            ;; @r{else}\n"
"            (* (1+ (/ height Y-axis-label-spacing))\n"
"               Y-axis-label-spacing)))\n"

#. type: group
#: emacs-lisp-intro.texi:20740
#, no-wrap
msgid ""
"         (vertical-step (or vertical-step 1))\n"
"         (full-Y-label-width\n"
"          (length\n"
msgstr ""
"         (vertical-step (or vertical-step 1))\n"
"         (full-Y-label-width\n"
"          (length\n"

#. type: group
#: emacs-lisp-intro.texi:20746
#, no-wrap
msgid ""
"           (concat\n"
"            (number-to-string\n"
"             (* height-of-top-line vertical-step))\n"
"            Y-axis-tic))))\n"
msgstr ""
"           (concat\n"
"            (number-to-string\n"
"             (* height-of-top-line vertical-step))\n"
"            Y-axis-tic))))\n"

#. type: group
#: emacs-lisp-intro.texi:20751
#, no-wrap
msgid ""
"    (print-Y-axis\n"
"     height-of-top-line full-Y-label-width vertical-step)\n"
msgstr ""
"    (print-Y-axis\n"
"     height-of-top-line full-Y-label-width vertical-step)\n"

#. type: group
#: emacs-lisp-intro.texi:20756
#, no-wrap
msgid ""
"    (graph-body-print\n"
"     numbers-list height-of-top-line symbol-width)\n"
"    (print-X-axis numbers-list)))\n"
msgstr ""
"    (graph-body-print\n"
"     numbers-list height-of-top-line symbol-width)\n"
"    (print-X-axis numbers-list)))\n"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:20760
#, no-wrap
msgid "Testing @code{print-graph}"
msgstr "Testeando @code{print-graph}"

#. type: Plain text
#: emacs-lisp-intro.texi:20764
msgid ""
"We can test the @code{print-graph} function with a short list of numbers:"
msgstr ""
"Se puede chequear la funci@'on @code{print-graph} con una lista\n"
"ordenada de n@'umeros:"

#. type: enumerate
#: emacs-lisp-intro.texi:20770
msgid ""
"Install the final versions of @code{Y-axis-column}, @code{graph-body-print}, "
"and @code{print-graph} (in addition to the rest of the code.)"
msgstr ""
"Instala las versiones finales de @code{Y-axis-column},\n"
"@code{graph-body-print}, y @code{print-graph} (adem@'as del resto del "
"c@'odigo.)"

#. type: smallexample
#: emacs-lisp-intro.texi:20776
#, no-wrap
msgid "(print-graph '(3 2 5 6 7 5 3 4 6 4 3 2 1))\n"
msgstr "(print-graph '(3 2 5 6 7 5 3 4 6 4 3 2 1))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20795
msgid "Emacs will print a graph that looks like this:"
msgstr "Emacs imprimir@'a un grafo que se parece a:"

#. type: group
#: emacs-lisp-intro.texi:20799
#, no-wrap
msgid ""
"10 -\n"
"\n"
msgstr ""
"10 -\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:20808
#, no-wrap
msgid ""
"         *\n"
"        **   *\n"
" 5 -   ****  *\n"
"       **** ***\n"
"     * *********\n"
"     ************\n"
" 1 - *************\n"
"\n"
msgstr ""
"         *\n"
"        **   *\n"
" 5 -   ****  *\n"
"       **** ***\n"
"     * *********\n"
"     ************\n"
" 1 - *************\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:20811 emacs-lisp-intro.texi:20841
#, no-wrap
msgid ""
"     |   |    |    |\n"
"     1   5   10   15\n"
msgstr ""
"     |   |    |    |\n"
"     1   5   10   15\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20817
msgid ""
"On the other hand, if you pass @code{print-graph} a @code{vertical-step} "
"value of 2, by evaluating this expression:"
msgstr ""
"Por otro lado, si se pasa a @code{print-graph} un @code{vertical-step}\n"
"valor de 2, evaluando esta expresi@'on:"

#. type: smallexample
#: emacs-lisp-intro.texi:20820
#, no-wrap
msgid "(print-graph '(3 2 5 6 7 5 3 4 6 4 3 2 1) 2)\n"
msgstr "(print-graph '(3 2 5 6 7 5 3 4 6 4 3 2 1) 2)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20825
msgid "The graph looks like this:"
msgstr "El grafo se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:20829
#, no-wrap
msgid ""
"20 -\n"
"\n"
msgstr ""
"20 -\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:20838
#, no-wrap
msgid ""
"         *\n"
"        **   *\n"
"10 -   ****  *\n"
"       **** ***\n"
"     * *********\n"
"     ************\n"
" 2 - *************\n"
"\n"
msgstr ""
"         *\n"
"        **   *\n"
"10 -   ****  *\n"
"       **** ***\n"
"     * *********\n"
"     ************\n"
" 2 - *************\n"
"\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20848
msgid ""
"(A question: is the `2' on the bottom of the vertical axis a bug or a "
"feature? If you think it is a bug, and should be a `1' instead, (or even a "
"`0'), you can modify the sources.)"
msgstr ""
"(Una pregunta: ¿es el `2' debajo del eje vertical un error o una\n"
"funcionalidad? Si se piensa que es un error, y ser@'{@dotless{i}}a un\n"
"`1', (o incluso un `0'), se pueden modificar las fuentes.)"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:20850
#, no-wrap
msgid "Graphing Numbers of Words and Symbols"
msgstr "Creando gr@'aficas de n@'umeros de palabras y s@'{@dotless{i}}mbolos"

#. type: Plain text
#: emacs-lisp-intro.texi:20856
msgid ""
"Now for the graph for which all this code was written: a graph that shows "
"how many function definitions contain fewer than 10 words and symbols, how "
"many contain between 10 and 19 words and symbols, how many contain between "
"20 and 29 words and symbols, and so on."
msgstr ""
"Ahora para el gr@'afico para el que todo este c@'odigo fu@'e escrito:\n"
"un gr@'afico que muestra cuantas definiciones de funci@'on contienen\n"
"unas pocas 10 palabras y s@'{@dotless{i}}mbolos, cuantas contienen\n"
"entre 10 y 19 palabras y s@'{@dotless{i}}mbolos, cuantos contienen\n"
"entre 20 y 29 palabras y s@'{@dotless{i}}mbolos, y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:20859
msgid ""
"This is a multi-step process.  First make sure you have loaded all the "
"requisite code."
msgstr ""
"Esto es un proceso de m@'ultiples pasos. Primero aseg@'urate que has\n"
"cargado todo el requisito del c@'odigo."

#. type: Plain text
#: emacs-lisp-intro.texi:20864
msgid ""
"It is a good idea to reset the value of @code{top-of-ranges} in case you "
"have set it to some different value.  You can evaluate the following:"
msgstr ""
"Eso es una buena idea para eliminar el valor de @code{top-of-ranges}\n"
"en caso de que has asignado a alg@'un valor diferente. Se puede\n"
"evaluar lo siguiente:"

#. type: group
#: emacs-lisp-intro.texi:20874
#, no-wrap
msgid ""
"(setq top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250\n"
"  260 270 280 290 300)\n"
msgstr ""
"(setq top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250\n"
"  260 270 280 290 300)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20879
msgid "Next create a list of the number of words and symbols in each range."
msgstr ""
"Lo siguiente crea una lista del n@'umero de palabras y\n"
"s@'{@dotless{i}}mbolos en cada rango."

#. type: Plain text
#: emacs-lisp-intro.texi:20883
msgid "Evaluate the following:"
msgstr "Eval@'ua lo siguiente:"

#. type: group
#: emacs-lisp-intro.texi:20894
#, no-wrap
msgid ""
"(setq list-for-graph\n"
"       (defuns-per-range\n"
"         (sort\n"
"          (recursive-lengths-list-many-files\n"
"           (directory-files \"/usr/local/emacs/lisp\"\n"
"                            t \".+el$\"))\n"
"          '<)\n"
"         top-of-ranges))\n"
msgstr ""
"(setq list-for-graph\n"
"       (defuns-per-range\n"
"         (sort\n"
"          (recursive-lengths-list-many-files\n"
"           (directory-files \"/usr/local/emacs/lisp\"\n"
"                            t \".+el$\"))\n"
"          '<)\n"
"         top-of-ranges))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20901
msgid ""
"On my old machine, this took about an hour.  It looked though 303 Lisp files "
"in my copy of Emacs version 19.23.  After all that computing, the @code{list-"
"for-graph} had this value:"
msgstr ""
"En mi vieja m@'aquina, esto lleva como una hora. Se parece a 303\n"
"ficheros Lisp en mi copia de Emacs version 19.23. Despu@'es de toda\n"
"esta computaci@'on, el @code{list-for-graph} ten@'{@dotless{i}}a este\n"
"valor:"

#. type: group
#: emacs-lisp-intro.texi:20906
#, no-wrap
msgid ""
"(537 1027 955 785 594 483 349 292 224 199 166 120 116 99\n"
"90 80 67 48 52 45 41 33 28 26 25 20 12 28 11 13 220)\n"
msgstr ""
"(537 1027 955 785 594 483 349 292 224 199 166 120 116 99\n"
"90 80 67 48 52 45 41 33 28 26 25 20 12 28 11 13 220)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20914
msgid ""
"This means that my copy of Emacs had 537 function definitions with fewer "
"than 10 words or symbols in them, 1,027 function definitions with 10 to 19 "
"words or symbols in them, 955 function definitions with 20 to 29 words or "
"symbols in them, and so on."
msgstr ""
"Esto significa que mi copia de Emacs tiene 537 definiciones de\n"
"funciones con poco menos de 10 palabras o s@'{@dotless{i}}mbolos en\n"
"s@'{@dotless{i}}, 1027 definiciones de funci@'on con 10 a 19 palabras\n"
"o s@'{@dotless{i}}mbolos dentro, 955 definiciones de funci@'on con 20\n"
"a 29 palabras o s@'{@dotless{i}}mbolos dentro, y as@'{@dotless{i}}."

#. type: Plain text
#: emacs-lisp-intro.texi:20917
msgid ""
"Clearly, just by looking at this list we can see that most function "
"definitions contain ten to thirty words and symbols."
msgstr ""
"Claramente, solo buscando esta lista se puede ver que la\n"
"mayor@'{@dotless{i}}a de definiciones de funci@'on contienen de diez a\n"
"treinta palabras y s@'{@dotless{i}}mbolos."

#. type: Plain text
#: emacs-lisp-intro.texi:20922
msgid ""
"Now for printing.  We do @emph{not} want to print a graph that is 1,030 "
"lines high @dots{} Instead, we should print a graph that is fewer than "
"twenty-five lines high.  A graph that height can be displayed on almost any "
"monitor, and easily printed on a sheet of paper."
msgstr ""
"Ahora para imprimir. Nosotros @emph{no} queremos imprimir un grafo que\n"
"es de 1030 l@'{@dotless{i}}neas de alto @dots{}. En vez de eso,\n"
"imprimir@'{@dotless{i}}a un grafo que es mejor que venticinco\n"
"l@'{@dotless{i}}neas de alto. Un grafo cuya altura puede ser mostrada\n"
"en casi cualquier monitor, y f@'acilmente impreso en una hoja de papel."

#. type: Plain text
#: emacs-lisp-intro.texi:20925
msgid ""
"This means that each value in @code{list-for-graph} must be reduced to one-"
"fiftieth its present value."
msgstr ""
"Esto significa que cada valor en @code{list-for-graph} debe ser\n"
"reducido a un quinceavo de su valor presente."

#. type: Plain text
#: emacs-lisp-intro.texi:20928
msgid ""
"Here is a short function to do just that, using two functions we have not "
"yet seen, @code{mapcar} and @code{lambda}."
msgstr ""
"Aqu@'{@dotless{i}} hay una corta funci@'on para hacer esto, usando dos\n"
"funciones que no se han visto todav@'{@dotless{i}}a, @code{mapcar} y "
"@code{lambda}."

#. type: group
#: emacs-lisp-intro.texi:20934
#, no-wrap
msgid ""
"(defun one-fiftieth (full-range)\n"
"  \"Return list, each number one-fiftieth of previous.\"\n"
" (mapcar (lambda (arg) (/ arg 50)) full-range))\n"
msgstr ""
"(defun one-fiftieth (full-range)\n"
"  \"Devuelve la lista, con el cincuenteavo de cada elemento.\"\n"
" (mapcar '(lambda (arg) (/ arg 50)) full-range))\n"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:20938
#, no-wrap
msgid "A @code{lambda} Expression: Useful Anonymity"
msgstr "Una expresi@'on @code{lambda}: Anonimicidad @'util"

#. type: cindex
#: emacs-lisp-intro.texi:20939
#, no-wrap
msgid "Anonymous function"
msgstr "Funci@'on An@'onima"

#. type: Plain text
#: emacs-lisp-intro.texi:20945
msgid ""
"@code{lambda} is the symbol for an anonymous function, a function without a "
"name.  Every time you use an anonymous function, you need to include its "
"whole body."
msgstr ""
"@code{lambda} es el s@'{@dotless{i}}mbolo para una funci@'on\n"
"an@'onima, una funci@'on sin un nombre. Cada vez que se use una\n"
"funci@'on an@'onima, se necesita incluir su cuerpo completo."

#. type: smallexample
#: emacs-lisp-intro.texi:20952 emacs-lisp-intro.texi:21144
#, no-wrap
msgid "(lambda (arg) (/ arg 50))\n"
msgstr "(lambda (arg) (/ arg 50))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20957
msgid ""
"is a function definition that says `return the value resulting from dividing "
"whatever is passed to me as @code{arg} by 50'."
msgstr ""
"es una definici@'on de funci@'on que dice `devuelve el valor\n"
"resultante de dividir cualquier cosa que es pasada como @code{arg} por\n"
"50'."

#. type: Plain text
#: emacs-lisp-intro.texi:20963
msgid ""
"Earlier, for example, we had a function @code{multiply-by-seven}; it "
"multiplied its argument by 7.  This function is similar, except it divides "
"its argument by 50; and, it has no name.  The anonymous equivalent of "
"@code{multiply-by-seven} is:"
msgstr ""
"Pronto, por ejemplo, se ten@'{@dotless{i}}a una funci@'on\n"
"@code{multiply-by-seven}; se multiplica su argumento por 7. Esta\n"
"funci@'on es similar, excepto que divide su argumento por 50; y, no\n"
"tiene nombre. El equivalente an@'onimo de @code{multiply-by-seven} es:"

#. type: smallexample
#: emacs-lisp-intro.texi:20966
#, no-wrap
msgid "(lambda (number) (* 7 number))\n"
msgstr "(lambda (number) (* 7 number))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:20970
msgid "(@xref{defun, , The @code{defun} Special Form}.)"
msgstr "(@xref{defun, , La forma especial @code{defun}}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:20974
msgid "If we want to multiply 3 by 7, we can write:"
msgstr "Si queremos multiplicar 3 por 7, podemos escribir:"

#. type: group
#: emacs-lisp-intro.texi:20987 emacs-lisp-intro.texi:21009
#, no-wrap
msgid ""
"(multiply-by-seven 3)\n"
" \\_______________/ ^\n"
"         |         |\n"
"      function  argument\n"
msgstr ""
"(multiply-by-seven 3)\n"
" \\_______________/ ^\n"
"         |         |\n"
"      funci@'on  argumento\n"

#. type: center
#: emacs-lisp-intro.texi:20993
#, no-wrap
msgid "@image{lambda-1}"
msgstr "@image{lambda-1}"

#. type: tex
#: emacs-lisp-intro.texi:20998
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-1.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% el viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-1.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21016
msgid "This expression returns 21."
msgstr "Esta expresi@'on devuelve 21."

#. type: Plain text
#: emacs-lisp-intro.texi:21020
msgid "Similarly, we can write:"
msgstr "De manera similar, se puede escribir:"

#. type: group
#: emacs-lisp-intro.texi:21029 emacs-lisp-intro.texi:21051
#, no-wrap
msgid ""
"((lambda (number) (* 7 number)) 3)\n"
" \\____________________________/ ^\n"
"               |                |\n"
"      anonymous function     argument\n"
msgstr ""
"((lambda (number) (* 7 number)) 3)\n"
" \\____________________________/ ^\n"
"               |                |\n"
"      funci@'on an@'onima     argumento\n"

#. type: center
#: emacs-lisp-intro.texi:21035
#, no-wrap
msgid "@image{lambda-2}"
msgstr "@image{lambda-2}"

#. type: tex
#: emacs-lisp-intro.texi:21040
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-2.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-2.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21059
msgid "If we want to divide 100 by 50, we can write:"
msgstr "Si queremos dividir 100 por 50, se puede escribir:"

#. type: group
#: emacs-lisp-intro.texi:21068 emacs-lisp-intro.texi:21090
#, no-wrap
msgid ""
"((lambda (arg) (/ arg 50)) 100)\n"
" \\______________________/  \\_/\n"
"             |              |\n"
"    anonymous function   argument\n"
msgstr ""
"((lambda (arg) (/ arg 50)) 100)\n"
" \\______________________/  \\_/\n"
"             |              |\n"
"     funci@'on an@'onima   argumento\n"

#. type: center
#: emacs-lisp-intro.texi:21074
#, no-wrap
msgid "@image{lambda-3}"
msgstr "@image{lambda-3}"

#. type: tex
#: emacs-lisp-intro.texi:21079
#, no-wrap
msgid ""
"%%%% old method of including an image\n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-3.eps}}\n"
"% \\catcode`\\@=0 %\n"
msgstr ""
"%%%% viejo m@'etodo de incluir una imagen \n"
"% \\input /usr/local/lib/tex/inputs/psfig.tex\n"
"% \\centerline{\\psfig{figure=/usr/local/lib/emacs/man/lambda-3.eps}}\n"
"% \\catcode`\\@=0 %\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21098
msgid ""
"This expression returns 2.  The 100 is passed to the function, which divides "
"that number by 50."
msgstr ""
"Esta expresi@'on devuelve 2. El 100 es pasado para la funci@'on, que\n"
"divide este n@'umero por 50."

#. type: Plain text
#: emacs-lisp-intro.texi:21102
msgid ""
"@xref{Lambda Expressions, , Lambda Expressions, elisp, The GNU Emacs Lisp "
"Reference Manual}, for more about @code{lambda}.  Lisp and lambda "
"expressions derive from the Lambda Calculus."
msgstr ""
"@xref{Expresiones Lambda, , Expresiones Lambda, elisp, El Manual de\n"
"Referencia GNU Emacs Lisp}, para m@'as acerca de @code{lambda}. Lisp y\n"
"expresiones Lambda se derivan del C@'alculo Lambda."

#. type: appendixsubsec
#: emacs-lisp-intro.texi:21104
#, no-wrap
msgid "The @code{mapcar} Function"
msgstr "La funci@'on @code{mapcar}"

#. type: Plain text
#: emacs-lisp-intro.texi:21110
msgid ""
"@code{mapcar} is a function that calls its first argument with each element "
"of its second argument, in turn.  The second argument must be a sequence."
msgstr ""
"@code{mapcar} es una funci@'on que llama a su primer argumento con\n"
"cada elemento de su segundo argumento. El segundo argumento debe ser\n"
"una secuencia."

#. type: Plain text
#: emacs-lisp-intro.texi:21117
msgid ""
"The @samp{map} part of the name comes from the mathematical phrase, `mapping "
"over a domain', meaning to apply a function to each of the elements in a "
"domain.  The mathematical phrase is based on the metaphor of a surveyor "
"walking, one step at a time, over an area he is mapping.  And @samp{car}, of "
"course, comes from the Lisp notion of the first of a list."
msgstr ""
"La parte @samp{map} del nombre viene de la frase matem@'atica,\n"
"`mapeando a trav@'es de un dominio', significa hace apply a una\n"
"funci@'on a cada uno de los elementos en un dominio. La frase\n"
"matem@'atica est@'a basada en la met@'afora de un superviviente\n"
"paseando, un paso en un momento, a trav@'es de un @'area @'el est@'a\n"
"mapeando. Y @samp{car}, de acuerdo, viene desde la noci@'on Lisp del\n"
"primero de una lista."

#. type: group
#: emacs-lisp-intro.texi:21126
#, no-wrap
msgid ""
"(mapcar '1+ '(2 4 6))\n"
"     @result{} (3 5 7)\n"
msgstr ""
"(mapcar '1+ '(2 4 6))\n"
"     @result{} (3 5 7)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21132
msgid ""
"The function @code{1+} which adds one to its argument, is executed on "
"@emph{each} element of the list, and a new list is returned."
msgstr ""
"La funci@'on @code{1+} a@~nade uno a su argumento, es ejecutada en\n"
"@emph{each} de la lista, y una nueva lista es devuelta."

#. type: Plain text
#: emacs-lisp-intro.texi:21137
msgid ""
"Contrast this with @code{apply}, which applies its first argument to all the "
"remaining.  (@xref{Readying a Graph, , Readying a Graph}, for a explanation "
"of @code{apply}.)"
msgstr ""
"En contraste con esto @code{apply}, se aplica su primer argumento a todo\n"
"lo que permanece. (@xref{Leyendo un grafo, , Leyendo un grafo}, para\n"
"una explicaci@'on de @code{apply}.)"

#. type: Plain text
#: emacs-lisp-intro.texi:21141
msgid ""
"In the definition of @code{one-fiftieth}, the first argument is the "
"anonymous function:"
msgstr ""
"En la definici@'on de @code{one-fiftieth}, el primer argumento es la\n"
"funci@'on an@'onima:"

#. type: Plain text
#: emacs-lisp-intro.texi:21149
msgid ""
"and the second argument is @code{full-range}, which will be bound to "
"@code{list-for-graph}."
msgstr ""
"y el segundo argumento es @code{full-range}, que ser@'a asociado para\n"
"@code{list-for-graph}."

#. type: Plain text
#: emacs-lisp-intro.texi:21152
msgid "The whole expression looks like this:"
msgstr "La expresi@'on completa se parece a esto:"

#. type: smallexample
#: emacs-lisp-intro.texi:21155
#, no-wrap
msgid "(mapcar (lambda (arg) (/ arg 50)) full-range))\n"
msgstr "(mapcar (lambda (arg) (/ arg 50)) full-range))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21159
msgid ""
"@xref{Mapping Functions, , Mapping Functions, elisp, The GNU Emacs Lisp "
"Reference Manual}, for more about @code{mapcar}."
msgstr ""
"@xref{Funciones de Mapeo, , Mapeando Funciones, elisp, El Manual de\n"
"Referencia de GNU Emacs Lisp}, para m@'as acerca de @code{mapcar}."

#. type: Plain text
#: emacs-lisp-intro.texi:21163
msgid ""
"Using the @code{one-fiftieth} function, we can generate a list in which each "
"element is one-fiftieth the size of the corresponding element in @code{list-"
"for-graph}."
msgstr ""
"Usando la funci@'on @code{one-fiftieth}, se puede generar una lista en\n"
"el que cada elemento es un cincuenteavo del tama@~no del\n"
"correspondiente elemento en @code{list-for-graph}."

#. type: group
#: emacs-lisp-intro.texi:21168
#, no-wrap
msgid ""
"(setq fiftieth-list-for-graph\n"
"      (one-fiftieth list-for-graph))\n"
msgstr ""
"(setq fiftieth-list-for-graph\n"
"      (one-fiftieth list-for-graph))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21173
msgid "The resulting list looks like this:"
msgstr "La lista resultante se parece a esto:"

#. type: group
#: emacs-lisp-intro.texi:21178
#, no-wrap
msgid ""
"(10 20 19 15 11 9 6 5 4 3 3 2 2\n"
"1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 4)\n"
msgstr ""
"(10 20 19 15 11 9 6 5 4 3 3 2 2\n"
"1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 4)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21186
msgid ""
"This, we are almost ready to print! (We also notice the loss of information: "
"many of the higher ranges are 0, meaning that fewer than 50 defuns had that "
"many words or symbols---but not necessarily meaning that none had that many "
"words or symbols.)"
msgstr ""
"As@'{@dotless{i}}, @exclamdown{}ya estamos casi listos para imprimir!\n"
"(Tambi@'en se notifica la p@'erdida de informaci@'on: muchos de los\n"
"rangos superiores son 0, esto significa que menos de 50 funciones\n"
"ten@'{@dotless{i}}an muchas palabras o s@'{@dotless{i}}mbolos --- pero\n"
"no necesariamente significando que niguna ten@'{@dotless{i}}a muchas\n"
"palabras o s@'{@dotless{i}}mbolos.)"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:21188
#, no-wrap
msgid "Another Bug @dots{} Most Insidious"
msgstr "Otro error @dots{} m@'as insidioso"

#. type: cindex
#: emacs-lisp-intro.texi:21189
#, no-wrap
msgid "Bug, most insidious type"
msgstr "Error, del tipo m@'as insidioso"

#. type: cindex
#: emacs-lisp-intro.texi:21190
#, no-wrap
msgid "Insidious type of bug"
msgstr "Insidioso tipo de error"

#. type: Plain text
#: emacs-lisp-intro.texi:21197
msgid ""
"I said `almost ready to print'! Of course, there is a bug in the @code{print-"
"graph} function @dots{} It has a @code{vertical-step} option, but not a "
"@code{horizontal-step} option.  The @code{top-of-range} scale goes from 10 "
"to 300 by tens.  But the @code{print-graph} function will print only by ones."
msgstr ""
"@exclamdown{}Se dijo `casi listo para imprimir'! De acuerdo, hay un\n"
"error en la funci@'on @code{print-graph} @dots{}. Esta tiene una\n"
"opci@'on @code{vertical-step}, pero no una opci@'on\n"
"@code{horizontal-step}. La escala @code{top-of-range} va desde 10 a\n"
"300 por decenas. Pero la funci@'on @code{print-graph} imprimir@'a solo\n"
" uno por uno."

#. type: Plain text
#: emacs-lisp-intro.texi:21206
msgid ""
"This is a classic example of what some consider the most insidious type of "
"bug, the bug of omission.  This is not the kind of bug you can find by "
"studying the code, for it is not in the code; it is an omitted feature.  "
"Your best actions are to try your program early and often; and try to "
"arrange, as much as you can, to write code that is easy to understand and "
"easy to change.  Try to be aware, whenever you can, that whatever you have "
"written, @emph{will} be rewritten, if not soon, eventually.  A hard maxim to "
"follow."
msgstr ""
"Esto es un ejemplo cl@'asico de lo que algunos consideramos el tipo\n"
"m@'as insidioso de error, el error de omisi@'on. Este no es el tipo de\n"
"error que se puede encontrar estudiando el c@'odigo, para eso no es el\n"
"c@'odigo; es una funcionalidad omitida. Tus mejores acciones son\n"
"probar tu programa pronto y con frecuencia; e intentar poner en orden,\n"
"tanto como se pueda, escribir c@'odigo que sea f@'acil de comprender y\n"
"f@'acil de cambiar. Intenta ser consciente, siempre y cuando se pueda,\n"
"esto es siempre que tengas que escribir, @emph{ser@'a} reescrito, si\n"
"no pronto, eventualmente. Un m@'aximo duro de seguir."

#. type: Plain text
#: emacs-lisp-intro.texi:21212
msgid ""
"It is the @code{print-X-axis-numbered-line} function that needs the work; "
"and then the @code{print-X-axis} and the @code{print-graph} functions need "
"to be adapted.  Not much needs to be done; there is one nicety: the numbers "
"ought to line up under the tic marks.  This takes a little thought."
msgstr ""
"Esta es la funci@'on @code{print-X-axis-numbered-line} que necesita el\n"
"trabajo; y entonces el @code{print-X-axis} y la funci@'on\n"
"@code{print-graph} necesita ser adaptada. No se necesita mucho para\n"
"ser hecho; hay uno simp@'atico: los n@'umeros podr@'{@dotless{i}}an\n"
"alinearse con marcas de tic. Esto toma un peque@~no pensamiento."

#. type: Plain text
#: emacs-lisp-intro.texi:21215
msgid "Here is the corrected @code{print-X-axis-numbered-line}:"
msgstr ""
"Aqu@'{@dotless{i}} est@'a el @code{print-X-axis-numbered-line} corregido:"

#. type: group
#: emacs-lisp-intro.texi:21224 emacs-lisp-intro.texi:21754
#, no-wrap
msgid ""
"(defun print-X-axis-numbered-line\n"
"  (number-of-X-tics X-axis-leading-spaces\n"
"   &optional horizontal-step)\n"
"  \"Print line of X-axis numbers\"\n"
"  (let ((number X-axis-label-spacing)\n"
"        (horizontal-step (or horizontal-step 1)))\n"
msgstr ""
"(defun print-X-axis-numbered-line\n"
"  (number-of-X-tics X-axis-leading-spaces\n"
"   &optional horizontal-step)\n"
"  \"Imprime la l@'{@dotless{i}}neas de n@'umeros X-axis\"\n"
"  (let ((number X-axis-label-spacing)\n"
"        (horizontal-step (or horizontal-step 1)))\n"

#. type: group
#: emacs-lisp-intro.texi:21233
#, no-wrap
msgid ""
"    (insert X-axis-leading-spaces)\n"
"    ;; @r{Delete extra leading spaces.}\n"
"    (delete-char\n"
"     (- (1-\n"
"         (length (number-to-string horizontal-step)))))\n"
"    (insert (concat\n"
"             (make-string\n"
msgstr ""
"    (insert X-axis-leading-spaces)\n"
"    ;; @r{Elimina espacios extra de gu@'{@dotless{i}}a.}\n"
"    (delete-char\n"
"     (- (1-\n"
"         (length (number-to-string horizontal-step)))))\n"
"    (insert (concat\n"
"             (make-string\n"

#. type: group
#: emacs-lisp-intro.texi:21245
#, no-wrap
msgid ""
"              ;; @r{Insert white space.}\n"
"              (-  (* symbol-width\n"
"                     X-axis-label-spacing)\n"
"                  (1-\n"
"                   (length\n"
"                    (number-to-string horizontal-step)))\n"
"                  2)\n"
"              ? )\n"
"             (number-to-string\n"
"              (* number horizontal-step))))\n"
msgstr ""
"              ;; @r{Inserta espacio en blanco.}\n"
"              (-  (* symbol-width\n"
"                     X-axis-label-spacing)\n"
"                  (1-\n"
"                   (length\n"
"                    (number-to-string horizontal-step)))\n"
"                  2)\n"
"              ? )\n"
"             (number-to-string\n"
"              (* number horizontal-step))))\n"

#. type: group
#: emacs-lisp-intro.texi:21254
#, no-wrap
msgid ""
"    ;; @r{Insert remaining numbers.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element\n"
"               (* number horizontal-step)))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"
msgstr ""
"    ;; @r{Insertar los n@'umeros que permanecen.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element\n"
"               (* number horizontal-step)))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21262
msgid ""
"If you are reading this in Info, you can see the new versions of @code{print-"
"X-axis} @code{print-graph} and evaluate them.  If you are reading this in a "
"printed book, you can see the changed lines here (the full text is too much "
"to print)."
msgstr ""
"Si se est@'a leyendo esto en Info, se pueden ver las nuevas versiones\n"
"@code{print-X-axis} y @code{print-graph} y los evaluarlas. Si se\n"
"est@'a leyendo esto en un libro impreso, se pueden ver las\n"
"l@'{@dotless{i}}neas cambiadas aqu@'{@dotless{i}} (el texto completo\n"
"es mucho para imprimir)."

#. type: group
#: emacs-lisp-intro.texi:21270
#, no-wrap
msgid ""
"(defun print-X-axis (numbers-list horizontal-step)\n"
"  @dots{}\n"
"    (print-X-axis-numbered-line\n"
"     tic-number leading-spaces horizontal-step))\n"
msgstr ""
"(defun print-X-axis (numbers-list horizontal-step)\n"
"  @dots{}\n"
"    (print-X-axis-numbered-line\n"
"     tic-number leading-spaces horizontal-step))\n"

#. type: group
#: emacs-lisp-intro.texi:21280
#, no-wrap
msgid ""
"(defun print-graph\n"
"  (numbers-list\n"
"   &optional vertical-step horizontal-step)\n"
"  @dots{}\n"
"    (print-X-axis numbers-list horizontal-step))\n"
msgstr ""
"(defun print-graph\n"
"  (numbers-list\n"
"   &optional vertical-step horizontal-step)\n"
"  @dots{}\n"
"    (print-X-axis numbers-list horizontal-step))\n"

#. type: group
#: emacs-lisp-intro.texi:21292 emacs-lisp-intro.texi:21785
#, no-wrap
msgid ""
"(defun print-X-axis (numbers-list horizontal-step)\n"
"  \"Print X axis labels to length of NUMBERS-LIST.\n"
"Optionally, HORIZONTAL-STEP, a positive integer,\n"
"specifies how much an X  axis label increments for\n"
"each column.\"\n"
msgstr ""
"(defun print-X-axis (numbers-list horizontal-step)\n"
"  \"Imprime etiquetas del eje X a la longitud de NUMBERS-LIST.\n"
"Opcionalmente, HORIZONTAL-STEP, un entero positivo,\n"
"especifica cuanto una etiqueta del eje X incrementa \n"
"cada columna.\"\n"

#. type: group
#: emacs-lisp-intro.texi:21301 emacs-lisp-intro.texi:21794
#, no-wrap
msgid ""
";; Value of symbol-width and full-Y-label-width\n"
";; are passed by `print-graph'.\n"
"  (let* ((leading-spaces\n"
"          (make-string full-Y-label-width ? ))\n"
"       ;; symbol-width @r{is provided by} graph-body-print\n"
"       (tic-width (* symbol-width X-axis-label-spacing))\n"
"       (X-length (length numbers-list))\n"
msgstr ""
";; Valor del s@'{@dotless{i}}mbolo symbol-width and full-Y-label-width\n"
";; se pasan por `print-graph'.\n"
"  (let* ((leading-spaces\n"
"          (make-string full-Y-label-width ? ))\n"
"       ;; symbol-width @r{is provided by} graph-body-print\n"
"       (tic-width (* symbol-width X-axis-label-spacing))\n"
"       (X-length (length numbers-list))\n"

#. type: group
#: emacs-lisp-intro.texi:21310 emacs-lisp-intro.texi:21803
#, no-wrap
msgid ""
"       (X-tic\n"
"        (concat\n"
"         (make-string\n"
"          ;; @r{Make a string of blanks.}\n"
"          (-  (* symbol-width X-axis-label-spacing)\n"
"              (length X-axis-tic-symbol))\n"
"          ? )\n"
msgstr ""
"       (X-tic\n"
"        (concat\n"
"         (make-string\n"
"          ;; @r{Crea una cadena de espacios en blanco.}\n"
"          (-  (* symbol-width X-axis-label-spacing)\n"
"              (length X-axis-tic-symbol))\n"
"          ? )\n"

#. type: group
#: emacs-lisp-intro.texi:21318 emacs-lisp-intro.texi:21811
#, no-wrap
msgid ""
"         ;; @r{Concatenate blanks with tic symbol.}\n"
"         X-axis-tic-symbol))\n"
"       (tic-number\n"
"        (if (zerop (% X-length tic-width))\n"
"            (/ X-length tic-width)\n"
"          (1+ (/ X-length tic-width)))))\n"
msgstr ""
"         ;; @r{Concatena espacios en blanco con el\n"
"         s@'{@dotless{i}}mbolo tic.}\n"
"         X-axis-tic-symbol))\n"
"       (tic-number\n"
"        (if (zerop (% X-length tic-width))\n"
"            (/ X-length tic-width)\n"
"          (1+ (/ X-length tic-width)))))\n"

#. type: group
#: emacs-lisp-intro.texi:21326 emacs-lisp-intro.texi:21819
#, no-wrap
msgid ""
"    (print-X-axis-tic-line\n"
"     tic-number leading-spaces X-tic)\n"
"    (insert \"\\n\")\n"
"    (print-X-axis-numbered-line\n"
"     tic-number leading-spaces horizontal-step)))\n"
msgstr ""
"    (print-X-axis-tic-line\n"
"     tic-number leading-spaces X-tic)\n"
"    (insert \"\\n\")\n"
"    (print-X-axis-numbered-line\n"
"     tic-number leading-spaces horizontal-step)))\n"

#. type: group
#: emacs-lisp-intro.texi:21335 emacs-lisp-intro.texi:21836
#, no-wrap
msgid ""
"(defun print-graph\n"
"  (numbers-list &optional vertical-step horizontal-step)\n"
"  \"Print labeled bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\n"
msgstr ""
"(defun print-graph\n"
"  (numbers-list &optional vertical-step horizontal-step)\n"
"  \"Imprime el gr@'afico de barras etiquetada de los NUMBERS-LIST.\n"
"Los numbers-list consisten en los valores del eje Y.\"\n"

#. type: group
#: emacs-lisp-intro.texi:21342 emacs-lisp-intro.texi:21843
#, no-wrap
msgid ""
"Optionally, VERTICAL-STEP, a positive integer,\n"
"specifies how much a Y axis label increments for\n"
"each line.  For example, a step of 5 means that\n"
"each row is five units.\n"
msgstr ""
"Opcionalmente, VERTICAL-STEP, un entero positivo, especifica cuanto un\n"
"eje Y se incrementa por cada l@'{@dotless{i}}nea. Por ejemplo, un paso\n"
"de 5 significa que cada fila es de cinco unidades.\n"

#. type: group
#: emacs-lisp-intro.texi:21352 emacs-lisp-intro.texi:21853
#, no-wrap
msgid ""
"Optionally, HORIZONTAL-STEP, a positive integer,\n"
"specifies how much an X  axis label increments for\n"
"each column.\"\n"
"  (let* ((symbol-width (length graph-blank))\n"
"         ;; @code{height} @r{is both the largest number}\n"
"         ;; @r{and the number with the most digits.}\n"
"         (height (apply 'max numbers-list))\n"
msgstr ""
"Opcionalmente, HORIZONTAL-STEP, un entero positivo,\n"
"especifica cuanto se incrementa en un eje X cada columna.\"\n"
"  (let* ((symbol-width (length graph-blank))\n"
"         ;; @code{height} @r{es ambos el n@'umero m@'as largo}\n"
"         ;; @r{y el n@'umero con la mayor@'{@dotless{i}}a de los d@'{@dotless{i}}gitos.}\n"
"         (height (apply 'max numbers-list))\n"

#. type: group
#: emacs-lisp-intro.texi:21369 emacs-lisp-intro.texi:21870
#, no-wrap
msgid ""
"         (vertical-step (or vertical-step 1))\n"
"         (full-Y-label-width\n"
"          (length\n"
"           (concat\n"
"            (number-to-string\n"
"             (* height-of-top-line vertical-step))\n"
"            Y-axis-tic))))\n"
msgstr ""
"         (vertical-step (or vertical-step 1))\n"
"         (full-Y-label-width\n"
"          (length\n"
"           (concat\n"
"            (number-to-string\n"
"             (* height-of-top-line vertical-step))\n"
"            Y-axis-tic))))\n"

#. type: group
#: emacs-lisp-intro.texi:21376 emacs-lisp-intro.texi:21878
#, no-wrap
msgid ""
"    (print-Y-axis\n"
"     height-of-top-line full-Y-label-width vertical-step)\n"
"    (graph-body-print\n"
"        numbers-list height-of-top-line symbol-width)\n"
"    (print-X-axis numbers-list horizontal-step)))\n"
msgstr ""
"    (print-Y-axis\n"
"     height-of-top-line full-Y-label-width vertical-step)\n"
"    (graph-body-print\n"
"        numbers-list height-of-top-line symbol-width)\n"
"    (print-X-axis numbers-list horizontal-step)))\n"

#. type: group
#: emacs-lisp-intro.texi:21396
#, no-wrap
msgid ""
"(defvar top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250)\n"
" \"List specifying ranges for `defuns-per-range'.\")\n"
msgstr ""
"(defvar top-of-ranges\n"
" '(10  20  30  40  50\n"
"   60  70  80  90 100\n"
"  110 120 130 140 150\n"
"  160 170 180 190 200\n"
"  210 220 230 240 250)\n"
" \"Lista especificando rangos para `defuns-per-range'.\")\n"

#. type: group
#: emacs-lisp-intro.texi:21471
#, no-wrap
msgid ""
"  (message \"Working on `%s' ... \" filename)\n"
"  (save-excursion\n"
"    (let ((buffer (find-file-noselect filename))\n"
"          (lengths-list))\n"
"      (set-buffer buffer)\n"
"      (setq buffer-read-only t)\n"
"      (widen)\n"
"      (goto-char (point-min))\n"
msgstr ""
"  (message \"Trabajando en `%s' ... \" filename)\n"
"  (save-excursion\n"
"    (let ((buffer (find-file-noselect filename))\n"
"          (lengths-list))\n"
"      (set-buffer buffer)\n"
"      (setq buffer-read-only t)\n"
"      (widen)\n"
"      (goto-char (point-min))\n"

#. type: group
#: emacs-lisp-intro.texi:21479
#, no-wrap
msgid ""
"      (while (re-search-forward \"^(defun\" nil t)\n"
"        (setq lengths-list\n"
"              (cons (count-words-in-defun) lengths-list)))\n"
"      (kill-buffer buffer)\n"
"      lengths-list)))\n"
msgstr ""
"      (while (re-search-forward \"^(defun\" nil t)\n"
"        (setq lengths-list\n"
"              (cons (count-words-in-defun) lengths-list)))\n"
"      (kill-buffer buffer)\n"
"      lengths-list)))\n"

#. type: group
#: emacs-lisp-intro.texi:21492
#, no-wrap
msgid ""
"(defun lengths-list-many-files (list-of-files)\n"
"  \"Return list of lengths of defuns in LIST-OF-FILES.\"\n"
"  (let (lengths-list)\n"
";;; @r{true-or-false-test}\n"
"    (while list-of-files\n"
"      (setq lengths-list\n"
"            (append\n"
"             lengths-list\n"
msgstr ""
"(defun lengths-list-many-files (list-of-files)\n"
"  \"Retorna la lista de tama@~nos de defuns en LIST-OF-FILES.\"\n"
"  (let (lengths-list)\n"
";;; @r{true-or-false-test}\n"
"    (while list-of-files\n"
"      (setq lengths-list\n"
"            (append\n"
"             lengths-list\n"

#. type: group
#: emacs-lisp-intro.texi:21501
#, no-wrap
msgid ""
";;; @r{Generate a lengths' list.}\n"
"             (lengths-list-file\n"
"              (expand-file-name (car list-of-files)))))\n"
";;; @r{Make files' list shorter.}\n"
"      (setq list-of-files (cdr list-of-files)))\n"
";;; @r{Return final value of lengths' list.}\n"
"    lengths-list))\n"
msgstr ""
";;; @r{Genera una lista de longitudes.}\n"
"             (lengths-list-file\n"
"              (expand-file-name (car list-of-files)))))\n"
";;; @r{Crea una lista de ficheros ordenada.}\n"
"      (setq list-of-files (cdr list-of-files)))\n"
";;; @r{Devuelve el valor final de las longitudes.}\n"
"    lengths-list))\n"

#. type: group
#: emacs-lisp-intro.texi:21516
#, no-wrap
msgid ""
"    ;; @r{Outer loop.}\n"
"    (while top-of-ranges\n"
"\n"
msgstr ""
"    ;; @r{Bucle Exterior.}\n"
"    (while top-of-ranges\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21522
#, no-wrap
msgid ""
"      ;; @r{Inner loop.}\n"
"      (while (and\n"
"              ;; @r{Need number for numeric test.}\n"
"              (car sorted-lengths)\n"
"              (< (car sorted-lengths) top-of-range))\n"
"\n"
msgstr ""
"      ;; @r{Bucle Interior.}\n"
"      (while (and\n"
"              ;; @r{Necesita el n@'umero para el test num@'erico.}\n"
"              (car sorted-lengths)\n"
"              (< (car sorted-lengths) top-of-range))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21526
#, no-wrap
msgid ""
"        ;; @r{Count number of definitions within current range.}\n"
"        (setq number-within-range (1+ number-within-range))\n"
"        (setq sorted-lengths (cdr sorted-lengths)))\n"
msgstr ""
"        ;; @r{Cuenta el n@'umero de definiciones con el rango actual.}\n"
"        (setq number-within-range (1+ number-within-range))\n"
"        (setq sorted-lengths (cdr sorted-lengths)))\n"

#. type: group
#: emacs-lisp-intro.texi:21530
#, no-wrap
msgid ""
"      ;; @r{Exit inner loop but remain within outer loop.}\n"
"\n"
msgstr ""
"      ;; @r{Bucle de salida interna, pero permanece con el bucle exterior.}\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21534
#, no-wrap
msgid ""
"      (setq defuns-per-range-list\n"
"            (cons number-within-range defuns-per-range-list))\n"
"      (setq number-within-range 0)      ; @r{Reset count to zero.}\n"
"\n"
msgstr ""
"      (setq defuns-per-range-list\n"
"            (cons number-within-range defuns-per-range-list))\n"
"      (setq number-within-range 0)      ; @r{Resetea el contador a cero.}\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21548
#, no-wrap
msgid ""
"    ;; @r{Exit outer loop and count the number of defuns larger than}\n"
"    ;; @r{  the largest top-of-range value.}\n"
"    (setq defuns-per-range-list\n"
"          (cons\n"
"           (length sorted-lengths)\n"
"           defuns-per-range-list))\n"
"\n"
msgstr ""
"    ;; @r{Salir del bucle exterior y cuenta el n@'umero de defuns tan largas como}\n"
"    ;; @r{el valor m@'as largo (top-of-range).}\n"
"    (setq defuns-per-range-list\n"
"          (cons\n"
"           (length sorted-lengths)\n"
"           defuns-per-range-list))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21564
#, no-wrap
msgid ""
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Return list of MAX-GRAPH-HEIGHT strings;\n"
"ACTUAL-HEIGHT are graph-symbols.\n"
"The graph-symbols are contiguous entries at the end\n"
"of the list.\n"
"The list will be inserted as one column of a graph.\n"
"The strings are either graph-blank or graph-symbol.\"\n"
msgstr ""
"(defun column-of-graph (max-graph-height actual-height)\n"
"  \"Devuelve la lista de cadenas MAX-GRAPH-HEIGHT;\n"
"ACTUAL-HEIGHT son los s@'{@dotless{i}}mbolos del grafo.\n"
"Los s@'{@dotless{i}}mbolos del grafo son entradas contiguas \n"
"al fin de la lista.\n"
"La lista ser@'a insertada como una columna de un grafo.\n"
"Las cadenas son tanto grafos en blanco como \n"
"s@'{@dotless{i}}mbolos de un grafo.\"\n"

#. type: group
#: emacs-lisp-intro.texi:21570
#, no-wrap
msgid ""
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"
"\n"
msgstr ""
"  (let ((insert-list nil)\n"
"        (number-of-top-blanks\n"
"         (- max-graph-height actual-height)))\n"
"\n"

#. type: group
#: emacs-lisp-intro.texi:21620
#, no-wrap
msgid ""
"(defun print-Y-axis\n"
"  (height full-Y-label-width &optional vertical-step)\n"
"  \"Insert Y axis by HEIGHT and FULL-Y-LABEL-WIDTH.\n"
"Height must be the  maximum height of the graph.\n"
"Full width is the width of the highest label element.\n"
"Optionally, print according to VERTICAL-STEP.\"\n"
msgstr ""
"(defun print-Y-axis\n"
"  (height full-Y-label-width &optional vertical-step)\n"
"  \"Inserta el eje Y por HEIGHT y FULL-Y-LABEL-WIDTH.\n"
"La altura debe ser la m@'axima altura del grafo.\n"
"La altura completa es el ancho del mayor elemento etiquetado.\n"
"Opcionalmente, se imprime de acuerdo a VERTICAL-STEP.\"\n"

#. type: group
#: emacs-lisp-intro.texi:21627
#, no-wrap
msgid ""
";; Value of height and full-Y-label-width\n"
";; are passed by `print-graph'.\n"
"  (let ((start (point)))\n"
"    (insert-rectangle\n"
"     (Y-axis-column height full-Y-label-width vertical-step))\n"
msgstr ""
";; Valor de la altura y full-Y-label-width\n"
";; son pasados por `print-graph'.\n"
"  (let ((start (point)))\n"
"    (insert-rectangle\n"
"     (Y-axis-column height full-Y-label-width vertical-step))\n"

#. type: group
#: emacs-lisp-intro.texi:21633
#, no-wrap
msgid ""
"    ;; @r{Place point ready for inserting graph.}\n"
"    (goto-char start)\n"
"    ;; @r{Move point forward by value of} full-Y-label-width\n"
"    (forward-char full-Y-label-width)))\n"
msgstr ""
"    ;; @r{Posiciona el punto lista para insertar el grafo.}\n"
"    (goto-char start)\n"
"    ;; @r{Mueve el punto hacia adelante por el valor de} full-Y-label-width\n"
"    (forward-char full-Y-label-width)))\n"

#. type: group
#: emacs-lisp-intro.texi:21681
#, no-wrap
msgid ""
"(defun graph-body-print (numbers-list height symbol-width)\n"
"  \"Print a bar graph of the NUMBERS-LIST.\n"
"The numbers-list consists of the Y-axis values.\n"
"HEIGHT is maximum height of graph.\n"
"SYMBOL-WIDTH is number of each column.\"\n"
msgstr ""
"(defun graph-body-print (numbers-list height symbol-width)\n"
"  \"Imprime un gr@'afico de barras de la NUMBERS-LIST.\n"
"La numbers-list consiste en los valores de eje Y.\n"
"HEIGHT es el m@'aximo tama@~no del grafo.\n"
"SYMBOL-WIDTH es el n@'umero de cada columna.\"\n"

#. type: group
#: emacs-lisp-intro.texi:21708
#, no-wrap
msgid ""
"(defun Y-axis-column\n"
"  (height width-of-label &optional vertical-step)\n"
"  \"Construct list of labels for Y axis.\n"
"HEIGHT is maximum height of graph.\n"
"WIDTH-OF-LABEL is maximum width of label.\n"
msgstr ""
"(defun Y-axis-column\n"
"  (height width-of-label &optional vertical-step)\n"
"  \"Construye una lista de etiquetas del eje Y.\n"
"HEIGHT es la m@'axima del grafo.\n"
"WIDTH-OF-LABEL es el m@'aximo ancho de la etiqueta.\n"

#. type: group
#: emacs-lisp-intro.texi:21716
#, no-wrap
msgid ""
"VERTICAL-STEP, an option, is a positive integer\n"
"that specifies how much a Y axis label increments\n"
"for each line.  For example, a step of 5 means\n"
"that each line is five units of the graph.\"\n"
"  (let (Y-axis\n"
"        (number-per-line (or vertical-step 1)))\n"
msgstr ""
"VERTICAL-STEP, una opci@'on, es un entero positivo\n"
"que especifica cuanto una etiqueta del eje Y incrementa\n"
"por cada l@'{@dotless{i}}nea. Por ejemplo, un paso de 5 \n"
"significa que cada l@'{@dotless{i}}nea es cinco unidades\n"
"del grafo\"\n"
"  (let (Y-axis\n"
"        (number-per-line (or vertical-step 1)))\n"

#. type: group
#: emacs-lisp-intro.texi:21727
#, no-wrap
msgid ""
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"
"          ;; @r{Insert label.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element\n"
"                  (* height number-per-line)\n"
"                  width-of-label)\n"
"                 Y-axis))\n"
msgstr ""
"    (while (> height 1)\n"
"      (if (zerop (% height Y-axis-label-spacing))\n"
"          ;; @r{Inserta la etiqueta.}\n"
"          (setq Y-axis\n"
"                (cons\n"
"                 (Y-axis-element\n"
"                  (* height number-per-line)\n"
"                  width-of-label)\n"
"                 Y-axis))\n"

#. type: group
#: emacs-lisp-intro.texi:21767
#, no-wrap
msgid ""
"    (insert X-axis-leading-spaces)\n"
"    ;; line up number\n"
"    (delete-char (- (1- (length (number-to-string horizontal-step)))))\n"
"    (insert (concat\n"
"             (make-string\n"
"              ;; @r{Insert white space up to next number.}\n"
"              (-  (* symbol-width X-axis-label-spacing)\n"
"                  (1- (length (number-to-string horizontal-step)))\n"
"                  2)\n"
"              ? )\n"
"             (number-to-string (* number horizontal-step))))\n"
msgstr ""
"    (insert X-axis-leading-spaces)\n"
"    (delete-char (- (1- (length (number-to-string horizontal-step)))))\n"
"    (insert (concat\n"
"             (make-string\n"
"              ;; @r{Inserta el espacio en blanco al siguiente n@'umero.}\n"
"              (-  (* symbol-width X-axis-label-spacing)\n"
"                  (1- (length (number-to-string horizontal-step)))\n"
"                  2)\n"
"              ? )\n"
"             (number-to-string (* number horizontal-step))))\n"

#. type: group
#: emacs-lisp-intro.texi:21775
#, no-wrap
msgid ""
"    ;; @r{Insert remaining numbers.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element (* number horizontal-step)))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"
msgstr ""
"    ;; @r{Inserta n@'umeros que permanazcan.}\n"
"    (setq number (+ number X-axis-label-spacing))\n"
"    (while (> number-of-X-tics 1)\n"
"      (insert (X-axis-element (* number horizontal-step)))\n"
"      (setq number (+ number X-axis-label-spacing))\n"
"      (setq number-of-X-tics (1- number-of-X-tics)))))\n"

#. type: group
#: emacs-lisp-intro.texi:21827
#, no-wrap
msgid ""
"(defun one-fiftieth (full-range)\n"
"  \"Return list, each number of which is 1/50th previous.\"\n"
" (mapcar (lambda (arg) (/ arg 50)) full-range))\n"
msgstr ""
"(defun one-fiftieth (full-range)\n"
"  \"Devuelve la lista, cada n@'umero del que es 1/50 posiciones previas.\"\n"
" (mapcar '(lambda (arg) (/ arg 50)) full-range))\n"

#. type: appendixsubsec
#: emacs-lisp-intro.texi:21885
#, no-wrap
msgid "The Printed Graph"
msgstr "El gr@'afico impreso"

#. type: Plain text
#: emacs-lisp-intro.texi:21889
msgid ""
"When made and installed, you can call the @code{print-graph} command like "
"this:"
msgstr ""
"Cuando est@'e hecho e instalado, se puede llamar al comando\n"
"@code{print-graph} como esto:"

#. type: group
#: emacs-lisp-intro.texi:21894
#, no-wrap
msgid "(print-graph fiftieth-list-for-graph 50 10)\n"
msgstr "(print-graph fiftieth-list-for-graph 50 10)\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21900
msgid "Here is the graph:"
msgstr "Aqu@'{@dotless{i}} est@'a el gr@'afico:"

#. type: group
#: emacs-lisp-intro.texi:21926
#, no-wrap
msgid ""
"1000 -  *\n"
"        **\n"
"        **\n"
"        **\n"
"        **\n"
" 750 -  ***\n"
"        ***\n"
"        ***\n"
"        ***\n"
"        ****\n"
" 500 - *****\n"
"       ******\n"
"       ******\n"
"       ******\n"
"       *******\n"
" 250 - ********\n"
"       *********                     *\n"
"       ***********                   *\n"
"       *************                 *\n"
"  50 - ***************** *           *\n"
"       |   |    |    |    |    |    |    |\n"
"      10  50  100  150  200  250  300  350\n"
msgstr ""
"1000 -  *\n"
"        **\n"
"        **\n"
"        **\n"
"        **\n"
" 750 -  ***\n"
"        ***\n"
"        ***\n"
"        ***\n"
"        ****\n"
" 500 - *****\n"
"       ******\n"
"       ******\n"
"       ******\n"
"       *******\n"
" 250 - ********\n"
"       *********                     *\n"
"       ***********                   *\n"
"       *************                 *\n"
"  50 - ***************** *           *\n"
"       |   |    |    |    |    |    |    |\n"
"      10  50  100  150  200  250  300  350\n"

#. type: Plain text
#: emacs-lisp-intro.texi:21933
msgid "The largest group of functions contain 10--19 words and symbols each."
msgstr ""
"El grupo largo de funciones contienen de 10 a 19 palabras y\n"
"s@'{@dotless{i}}mbolos."

#. type: appendix
#: emacs-lisp-intro.texi:21934 emacs-lisp-intro.texi:21935
#, no-wrap
msgid "Free Software and Free Manuals"
msgstr "Software Libre y Manuales Libres"

#. type: strong{#1}
#: emacs-lisp-intro.texi:21938
msgid "by Richard M. Stallman"
msgstr "por Richard M. Stallman"

#. type: Plain text
#: emacs-lisp-intro.texi:21946
msgid ""
"The biggest deficiency in free operating systems is not in the software---it "
"is the lack of good free manuals that we can include in these systems.  Many "
"of our most important programs do not come with full manuals.  Documentation "
"is an essential part of any software package; when an important free "
"software package does not come with a free manual, that is a major gap.  We "
"have many such gaps today."
msgstr ""
"La mayor deficiencia en sistemas operativos libres no est@'a en el\n"
"software --- es la falta de buenos manuales libres que se puedan\n"
"incluir en estos sistemas. Muchos de nuestros programas m@'as\n"
"importantes no vienen con manuales completos. La documentaci@'on es\n"
"una parte esencial de cualquier paquete de software; cuando un paquete\n"
"de software libre no viene con un manual libre, es una brecha\n"
"mayor. Nosotros tenemos muchas brechas hoy."

#. type: Plain text
#: emacs-lisp-intro.texi:21951
msgid ""
"Once upon a time, many years ago, I thought I would learn Perl.  I got a "
"copy of a free manual, but I found it hard to read.  When I asked Perl users "
"about alternatives, they told me that there were better introductory "
"manuals---but those were not free."
msgstr ""
"@'Erase una vez, hace muchos a@~nos, se piensa que\n"
"aprender@'{@dotless{i}}a Perl. Se tiene una copia de un manual libre,\n"
"pero se encontr@'o dif@'{@dotless{i}}cil de leer. Cuando pregunto a\n"
"los usuarios de Perl acerca de alternativas, me contaron que\n"
"ser@'{@dotless{i}}an mejor los manuales introductorios --- pero estos\n"
"no eran libres."

#. type: Plain text
#: emacs-lisp-intro.texi:21956
msgid ""
"Why was this? The authors of the good manuals had written them for O'Reilly "
"Associates, which published them with restrictive terms---no copying, no "
"modification, source files not available---which exclude them from the free "
"software community."
msgstr ""
"¿Por qu@'e era esto? Los autores de los buenos manuales\n"
"los hab@'{@dotless{i}}an escrito para O'Reilly Associates, que los\n"
"publicaron con t@'erminos restrictivos --- no copiando, no\n"
"modificando, los ficheros fuentes est@'an disponibles --- que los\n"
"excluyen desde la comunidad de software libre."

#. type: Plain text
#: emacs-lisp-intro.texi:21965
msgid ""
"That wasn't the first time this sort of thing has happened, and (to our "
"community's great loss) it was far from the last.  Proprietary manual "
"publishers have enticed a great many authors to restrict their manuals since "
"then.  Many times I have heard a GNU user eagerly tell me about a manual "
"that he is writing, with which he expects to help the GNU project---and then "
"had my hopes dashed, as he proceeded to explain that he had signed a "
"contract with a publisher that would restrict it so that we cannot use it."
msgstr ""
"No era la primera vez que esto ocurr@'{@dotless{i}}a, y (para\n"
"nuestra comunidad es una gran p@'erdida) eso est@'a lejos desde el\n"
"@'ultimo. Las editoriales de manuales privativos han logrado que\n"
"muchos autores restrinjan sus manuales desde entonces. Muchas veces se\n"
"ha oido que un usuario de GNU h@'abil me cuente que un manual que\n"
"est@'a escribiendo, con el que @'el espera ayudar al proyecto GNU ---\n"
"y entonces ten@'{@dotless{i}}a mis esperanzas frustradas, como se ha\n"
"procedi@'o a explicar que @'el ten@'{@dotless{i}}a que haber firmado\n"
"un contrato con una editorial que restringir@'{@dotless{i}}a eso,\n"
"as@'{@dotless{i}} que no puede usarlo."

#. type: Plain text
#: emacs-lisp-intro.texi:21968
msgid ""
"Given that writing good English is a rare skill among programmers, we can "
"ill afford to lose manuals this way."
msgstr ""
"Debido a que escribir buen ingl@'es es una habilidad rara entre\n"
"programadores, se pueden perder manuales por este motivo."

#. type: Plain text
#: emacs-lisp-intro.texi:21978
msgid ""
"Free documentation, like free software, is a matter of freedom, not price.  "
"The problem with these manuals was not that O'Reilly Associates charged a "
"price for printed copies---that in itself is fine.  The Free Software "
"Foundation @uref{http://shop.fsf.org, sells printed copies} of free "
"@uref{http://www.gnu.org/doc/doc.html, GNU manuals}, too.  But GNU manuals "
"are available in source code form, while these manuals are available only on "
"paper.  GNU manuals come with permission to copy and modify; the Perl "
"manuals do not.  These restrictions are the problems."
msgstr ""
"La documentaci@'on, como el software, es una cuesti@'on de libertad,\n"
"no de precio. El problema con estos manuales no eran que O'Reilly\n"
"Associates impusiera un precio por las copias impresas --- que en\n"
"s@'{@dotless{i}} estaban bien. La Free Software Foundation\n"
"@emph{Fundaci@'on por el Software Libre} @uref{http://shop.fsf.org,\n"
"vende copias impresas} de @uref{http://www.gnu.org/doc/doc.html,\n"
"manuales libres de GNU}, tambi@'en. Pero los manuales de GNU est@'an\n"
"disponibles en forma de c@'odigo fuente, mientras que estos manuales\n"
"est@'an disponibles solo en papel. Los manuales de GNU vienen con\n"
"permiso para copiar y modificar; los manuales de Perl no. Estas\n"
"restricciones son un problema."

#. type: Plain text
#: emacs-lisp-intro.texi:21984
msgid ""
"The criterion for a free manual is pretty much the same as for free "
"software: it is a matter of giving all users certain freedoms.  "
"Redistribution (including commercial redistribution) must be permitted, so "
"that the manual can accompany every copy of the program, on-line or on "
"paper.  Permission for modification is crucial too."
msgstr ""
"El criterio para un manual libre es parecido al del software libre: es\n"
"una cuesti@'on de dar a todos los usuarios ciertas libertades. La\n"
"redistribuci@'on (incluyendo redistribuci@'on comercial) debe ser\n"
"permitida, as@'{@dotless{i}} el manual puede acompa@~nar cada copia\n"
"del programa, en l@'{@dotless{i}}ne o en papel. El permiso para modificar\n"
"es crucial tambi@'en."

#. type: Plain text
#: emacs-lisp-intro.texi:21991
msgid ""
"As a general rule, I don't believe that it is essential for people to have "
"permission to modify all sorts of articles and books.  The issues for "
"writings are not necessarily the same as those for software.  For example, I "
"don't think you or I are obliged to give permission to modify articles like "
"this one, which describe our actions and our views."
msgstr ""
"Como regla general, no se cree que sea esencial para la gente tener\n"
"permisos para modificar todas las partes de art@'{@dotless{i}}culos y\n"
"libro. Las cuestiones para escritos no son necesariamente las mismas\n"
"como estas para el software. Por ejemplo, no se sabe si se est@'a\n"
"obligado a dar permisos para modificar art@'{@dotless{i}}culos como\n"
"este, que describen nuestras acciones y nuestras vistas."

#. type: Plain text
#: emacs-lisp-intro.texi:22000
msgid ""
"But there is a particular reason why the freedom to modify is crucial for "
"documentation for free software.  When people exercise their right to modify "
"the software, and add or change its features, if they are conscientious they "
"will change the manual too---so they can provide accurate and usable "
"documentation with the modified program.  A manual which forbids programmers "
"to be conscientious and finish the job, or more precisely requires them to "
"write a new manual from scratch if they change the program, does not fill "
"our community's needs."
msgstr ""
"Pero hay una raz@'on particular de por qu@'e la libertad de modificar\n"
"es crucial para la documentaci@'on de software libre. Cuando las\n"
"personas ejercita su derecho a modificar el software, y a@~nadir o\n"
"cambiar sus funcionalidades, si son consciente ellos cambiar@'an el\n"
"manual tambi@'en --- as@'{@dotless{i}} se puede proveer\n"
"documentaci@'on usable y cuidada con el programa modificado. Un manual\n"
"que prohibe a los programadores ser consciente y finalizar el trabajo,\n"
"o m@'as precisamente requiere escribir un nuevo manual desde cero si\n"
"ellos cambian el programa, no se ajusta a las necesidades de nuestra\n"
"comunidad."

#. type: Plain text
#: emacs-lisp-intro.texi:22009
msgid ""
"While a blanket prohibition on modification is unacceptable, some kinds of "
"limits on the method of modification pose no problem.  For example, "
"requirements to preserve the original author's copyright notice, the "
"distribution terms, or the list of authors, are ok.  It is also no problem "
"to require modified versions to include notice that they were modified, even "
"to have entire sections that may not be deleted or changed, as long as these "
"sections deal with nontechnical topics.  (Some GNU manuals have them.)"
msgstr ""
"Mientras una serie de prohibiciones en la modificaci@'on es\n"
"inaceptable, algunos tipos de l@'{@dotless{i}}mites en el m@'etodo de\n"
"modificar no tiene tanto problema. Por ejemplo, los requisitos para\n"
"preservar la noticia de autores del copyright, los t@'erminos de\n"
"distribuci@'on, o la lista de autores, est@'en ok. Eso es tambi@'en no\n"
"da problemas para requerir versiones modificadas para incluir\n"
"notificar que fueron modificadas, incluso tienen secciones enteras que\n"
"puede no ser eliminadas o cambiadas, tan largo como estas secciones\n"
"tratan con asuntos no t@'ecnicos. (Algunos manuales de GNU los tienen)."

#. type: Plain text
#: emacs-lisp-intro.texi:22014
msgid ""
"These kinds of restrictions are not a problem because, as a practical "
"matter, they don't stop the conscientious programmer from adapting the "
"manual to fit the modified program.  In other words, they don't block the "
"free software community from making full use of the manual."
msgstr ""
"Estos tipos de restricciones no son un problema porque, como materia\n"
"pr@'actica, no para al programador consciente desde la adaptaci@'on\n"
"del manual para ajustar el programa modificado. En otras palabras, no\n"
"se bloquea la comunidad del software libre haciendo el uso completo\n"
"del manual."

#. type: Plain text
#: emacs-lisp-intro.texi:22019
msgid ""
"However, it must be possible to modify all the technical content of the "
"manual, and then distribute the result in all the usual media, through all "
"the usual channels; otherwise, the restrictions do block the community, the "
"manual is not free, and so we need another manual."
msgstr ""
"Sin embargo, debe ser posible modificar todo el contenido t@'ecnico\n"
"del manual, y entonces se distribuye el resultado en todos los medios\n"
"usuales, a trav@'es de todos los canales usuales; de otro modo, las\n"
"restricciones bloquean la comunidad, el manual no es libre, y\n"
"as@'{@dotless{i}} no se necesita otro manual."

#. type: Plain text
#: emacs-lisp-intro.texi:22025
msgid ""
"Unfortunately, it is often hard to find someone to write another manual when "
"a proprietary manual exists.  The obstacle is that many users think that a "
"proprietary manual is good enough---so they don't see the need to write a "
"free manual.  They do not see that the free operating system has a gap that "
"needs filling."
msgstr ""
"Desafortunadamente, con frecuencia es duro encontrar a alguien a\n"
"escribir otro manual cuando un manual privativo. El obst@'aculo es que\n"
"muchos usuario piensan que un manual privativo es suficientemente\n"
"bueno --- as@'{@dotless{i}} ellos no ven la necesidad de escribir un\n"
"manual libre. Ellos no ven que el sistema operativo tiene un gazapo\n"
"que necesita se rellenado."

#. type: Plain text
#: emacs-lisp-intro.texi:22029
msgid ""
"Why do users think that proprietary manuals are good enough? Some have not "
"considered the issue.  I hope this article will do something to change that."
msgstr ""
"@questiondown{}Por qu@'e los usuarios piensan que los manuales\n"
"privativos son suficientemente buenos? Algunos no han considerado la\n"
"cuesti@'on. Espero que este art@'{@dotless{i}}culo har@'a alguna cosa\n"
"para cambiar esto."

#. type: Plain text
#: emacs-lisp-intro.texi:22036
msgid ""
"Other users consider proprietary manuals acceptable for the same reason so "
"many people consider proprietary software acceptable: they judge in purely "
"practical terms, not using freedom as a criterion.  These people are "
"entitled to their opinions, but since those opinions spring from values "
"which do not include freedom, they are no guide for those of us who do value "
"freedom."
msgstr ""
"Otros usuarios considera manuales privativos aceptables para la misma\n"
"raz@'on as@'{@dotless{i}} muchas personas software privativo\n"
"aceptable: ellos judgan en t@'erminos puramente pr@'acticos, no usando\n"
"la liberta como un criterio. Estas personas son tituladas a sus\n"
"opiniones, pero desde que estas opciones crezcan desde valores que no\n"
"incluyen libertad, ellas no est@'an guiadas por esto quienes valoran\n"
"la libertad."

#. type: Plain text
#: emacs-lisp-intro.texi:22042
msgid ""
"Please spread the word about this issue.  We continue to lose manuals to "
"proprietary publishing.  If we spread the word that proprietary manuals are "
"not sufficient, perhaps the next person who wants to help GNU by writing "
"documentation will realize, before it is too late, that he must above all "
"make it free."
msgstr ""
"Por favor, populariza esta cuesti@'on. Se contin@'ua a perder manuales\n"
"para publicaci@'on privativa. Si se populariza que los manuales\n"
"privativos no son suficientes, quiz@'as la siguiente persona que\n"
"quiere ayudar a GNU escribiendo documentaci@'on realizar@'a, antes de\n"
"que sea demasiado tarde, lo que @'el debe que todo sea libre."

#. type: Plain text
#: emacs-lisp-intro.texi:22047
msgid ""
"We can also encourage commercial publishers to sell free, copylefted manuals "
"instead of proprietary ones.  One way you can help this is to check the "
"distribution terms of a manual before you buy it, and prefer copylefted "
"manuals to non-copylefted ones."
msgstr ""
"Se puede tambi@'en animar editoriales comerciales a vender manuales\n"
"libres o con copyleft en vez de uno privativo. Un camino que se puede\n"
"ayudar esto chequea los t@'erminos de la distribuci@'on de un manual\n"
"antes de que se compre, y preferimos manuales copyleft a los no copyleft."

#. type: Plain text
#: emacs-lisp-intro.texi:22053
msgid ""
"Note: The Free Software Foundation maintains a page on its Web site that "
"lists free books available from other publishers:@* @uref{http://www.gnu.org/"
"doc/other-free-books.html}"
msgstr ""
"Note: La Fundaci@'on para el Software Libre mantiene una p@'agina en\n"
"su sitio Web que liste libros libres disponibles desde otras\n"
"editoriales:@* @uref{http://www.gnu.org/doc/other-free-books.html}"

#. type: appendix
#: emacs-lisp-intro.texi:22054 emacs-lisp-intro.texi:22055
#, no-wrap
msgid "GNU Free Documentation License"
msgstr "GNU Free Documentation License"

#. type: cindex
#: emacs-lisp-intro.texi:22057
#, no-wrap
msgid "FDL, GNU Free Documentation License"
msgstr "FDL, GNU Free Documentation License"

#. type: include
#: emacs-lisp-intro.texi:22058
#, no-wrap
msgid "doclicense.texi"
msgstr "doclicense.texi"

#. type: unnumbered
#: emacs-lisp-intro.texi:22060 emacs-lisp-intro.texi:22061
#, no-wrap
msgid "Index"
msgstr "@'Indice"

#. type: tex
#: emacs-lisp-intro.texi:22085
#, no-wrap
msgid ""
"\\par\\vfill\\supereject\n"
"\\ifodd\\pageno\n"
"    \\global\\evenheadline={\\hfil} \\global\\evenfootline={\\hfil}\n"
"    \\global\\oddheadline={\\hfil} \\global\\oddfootline={\\hfil}\n"
"    %\\page\\hbox{}\\page\n"
"\\else\n"
"%    \\par\\vfill\\supereject\n"
"    \\global\\evenheadline={\\hfil} \\global\\evenfootline={\\hfil}\n"
"    \\global\\oddheadline={\\hfil} \\global\\oddfootline={\\hfil}\n"
"    %\\page\\hbox{}%\\page\n"
"    %\\page\\hbox{}%\\page\n"
"\\fi\n"
msgstr ""
"\\par\\vfill\\supereject\n"
"\\ifodd\\pageno\n"
"    \\global\\evenheadline={\\hfil} \\global\\evenfootline={\\hfil}\n"
"    \\global\\oddheadline={\\hfil} \\global\\oddfootline={\\hfil}\n"
"    %\\page\\hbox{}\\page\n"
"\\else\n"
"%    \\par\\vfill\\supereject\n"
"    \\global\\evenheadline={\\hfil} \\global\\evenfootline={\\hfil}\n"
"    \\global\\oddheadline={\\hfil} \\global\\oddfootline={\\hfil}\n"
"    %\\page\\hbox{}%\\page\n"
"    %\\page\\hbox{}%\\page\n"
"\\fi\n"

#. type: quotation
#: emacs-lisp-intro.texi:22112
msgid ""
"Robert J. Chassell has worked with GNU Emacs since 1985.  He writes and "
"edits, teaches Emacs and Emacs Lisp, and speaks throughout the world on "
"software freedom.  Chassell was a founding Director and Treasurer of the "
"Free Software Foundation, Inc.  He is co-author of the @cite{Texinfo} "
"manual, and has edited more than a dozen other books.  He graduated from "
"Cambridge University, in England.  He has an abiding interest in social and "
"economic history and flies his own airplane."
msgstr ""
"Robert J. Chassell ha trabajado con GNU Emacs desde 1985. @'El\n"
"escribe, edita y ense@~na Emacs y Emacs Lisp, y habla alrededor del\n"
"mundo acerca de la libertad del software. Chassell es Director\n"
"fundador y Tesorero de la Fundaci@'on por el Software Libre (FSF). @'El\n"
"se gradu@'o la Universidad de Cambridge, en Inglaterra. @'El tiene un\n"
"inter@'es cont@'inuo en historia econ@'omica y social y vuela su\n"
"propio aeroplano"

#~ msgid "Emacs"
#~ msgstr "Emacs"

#~ msgid "(dir)"
#~ msgstr "(dir)"

#~ msgid "count-words-region"
#~ msgstr "count-words-region"

#~ msgid "The @code{count-words-region} Function"
#~ msgstr "La funci@'on @code{count-words-region}"

#~ msgid "Design count-words-region"
#~ msgstr "Dise@~nar count-words-region"

#~ msgid ""
#~ "What you see depends on which version of Emacs you are running.  GNU "
#~ "Emacs version 22 provides more information than version 20 and before.  "
#~ "First, the more recent result of generating an error; then the earlier, "
#~ "version 20 result."
#~ msgstr ""
#~ "Lo que ves depende de qu@'e versi@'on de Emacs se est@'a ejecutando. GNU\n"
#~ "Emacs versi@'on 22 provee m@'as informaci@'on que la versi@'on 20 y\n"
#~ "anterior. Primero, el resultado m@'as reciente genera un error; que en "
#~ "la\n"
#~ "versi@'on 20 funciona."

#~ msgid ""
#~ "In GNU Emacs version 20, and in earlier versions, you will see only one "
#~ "line of error message; it will appear in the echo area and look like this:"
#~ msgstr ""
#~ "En la versi@'on 20 de GNU Emacs, y versiones tempranas, ver@'as solo\n"
#~ "una l@'{@dotless{i}}nea del mensaje de error, aparecer@'a el @'area\n"
#~ "echo y mira como esto:"

#~ msgid ""
#~ "(Also, your terminal may beep at you---some do, some don't; and others "
#~ "blink.  This is just a device to get your attention.)  The message goes "
#~ "away as soon as you type another key, even just to move the cursor."
#~ msgstr ""
#~ "(Tambi@'en, tu terminal puede avisar para hacer algo, o no. Esto es\n"
#~ "solo un dispositivo para atraer tu atenci@'on.) El mensaje va fuera\n"
#~ "tan pronto como tu escribes otra tecla, incluso para mover el cursor."

#~ msgid ""
#~ "In GNU Emacs version 22, you will create a @file{*Backtrace*} buffer that "
#~ "says:"
#~ msgstr ""
#~ "En GNU Emacs versi@'on 22, se crear@'a un @file{*Backtrace*} buffer\n"
#~ "que dice:"

#~ msgid ""
#~ "In GNU Emacs version 22, you will create and enter a @file{*Backtrace*} "
#~ "buffer that says:"
#~ msgstr ""
#~ "En GNU Emacs versi@'on 22, se crear@'a e introducir@'a un buffer\n"
#~ "@file{*Backtrace*} que dice:"

#~ msgid "Here is the Lisp expression:"
#~ msgstr "Aqu@'{@dotless{i}} est@'a la expresi@'on Lisp:"

#~ msgid ""
#~ "DEFUN (\"buffer-substring-no-properties\", Fbuffer_substring_no_properties,\n"
#~ "       Sbuffer_substring_no_properties, 2, 2, 0,\n"
#~ "       doc: /* Return the characters of part of the buffer,\n"
#~ "without the text properties.\n"
#~ "The two arguments START and END are character positions;\n"
#~ "they can be in either order.  */)\n"
#~ "     (start, end)\n"
#~ "     Lisp_Object start, end;\n"
#~ "@{\n"
#~ "  register int b, e;\n"
#~ "\n"
#~ msgstr ""
#~ "DEFUN (\"buffer-substring-no-properties\", Fbuffer_substring_no_properties,\n"
#~ "       Sbuffer_substring_no_properties, 2, 2, 0,\n"
#~ "       doc: /* Devuelve los caracteres de parte del b@'uffer,\n"
#~ "sin las propiedades del texto.\n"
#~ "Los dos argumentos START y END son posiciones de caracteres;\n"
#~ "ellos pueden estar en cualquier orden.  */)\n"
#~ "     (start, end)\n"
#~ "     Lisp_Object start, end;\n"
#~ "@{\n"
#~ "  register int b, e;\n"
#~ "\n"

#~ msgid ""
#~ "  validate_region (&start, &end);\n"
#~ "  b = XINT (start);\n"
#~ "  e = XINT (end);\n"
#~ "\n"
#~ msgstr ""
#~ "  validate_region (&start, &end);\n"
#~ "  b = XINT (start);\n"
#~ "  e = XINT (end);\n"
#~ "\n"

#~ msgid ""
#~ "  return make_buffer_string (b, e, 0);\n"
#~ "@}\n"
#~ msgstr ""
#~ "  return make_buffer_string (b, e, 0);\n"
#~ "@}\n"

#~ msgid ""
#~ "Thus, the first two lines of documentation for @code{goto-char} are "
#~ "written like this:"
#~ msgstr ""
#~ "De este modo, las dos primeras l@'{@dotless{i}}neas de documentaci@'on\n"
#~ "para @code{goto-char} est@'an como esta:"

#~ msgid ""
#~ "  \"Set point to POSITION, a number or marker.\\n\\\n"
#~ "Beginning of buffer is position (point-min), end is (point-max).\"\n"
#~ msgstr ""
#~ "   \"Asigna punto a POSITION, un n@'umero o marca.\\n\n"
#~ "Comienzo de b@'uffer es posici@'on (point-min), fin es (point-max).\"\n"

#~ msgid ""
#~ "If you are using a more recent version of Emacs, you can evaluate this "
#~ "expression directly in Info."
#~ msgstr ""
#~ "Si est@'as usando una versi@'on m@'as reciente de Emacs, se puede\n"
#~ "evaluar esta expresi@'on directamente en Info."

#~ msgid "Designing @code{count-words-region}"
#~ msgstr "Dise@~nando @code{count-words-region}"

#~ msgid "(global-set-key \"\\C-c=\" 'count-words-region)\n"
#~ msgstr "(global-set-key \"\\C-c=\" 'count-words-region)\n"

#~ msgid ""
#~ "(17733 259)\n"
#~ "(17491 28834)\n"
#~ "(17596 62124)\n"
#~ "13157\n"
#~ "\"-rw-rw-r--\"\n"
#~ msgstr ""
#~ "(17733 259)\n"
#~ "(17491 28834)\n"
#~ "(17596 62124)\n"
#~ "13157\n"
#~ "\"-rw-rw-r--\"\n"
