100% found this document useful (2 votes)
13 views

Instant Access to An introduction to programming in emacs lisp 2nd Edition Robert J. Chassell ebook Full Chapters

The document is a promotional message for downloading the second edition of 'An Introduction to Programming in Emacs Lisp' by Robert J. Chassell, along with links to other programming ebooks. It includes details about the book such as its ISBN, file format, and a brief overview of its contents. Additionally, it provides a list of suggested ebooks available for download on the same platform.

Uploaded by

jazeetaozi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
13 views

Instant Access to An introduction to programming in emacs lisp 2nd Edition Robert J. Chassell ebook Full Chapters

The document is a promotional message for downloading the second edition of 'An Introduction to Programming in Emacs Lisp' by Robert J. Chassell, along with links to other programming ebooks. It includes details about the book such as its ISBN, file format, and a brief overview of its contents. Additionally, it provides a list of suggested ebooks available for download on the same platform.

Uploaded by

jazeetaozi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 86

Visit https://ebookultra.

com to download the full version and


explore more ebooks

An introduction to programming in emacs lisp 2nd


Edition Robert J. Chassell

_____ Click the link below to download _____


https://ebookultra.com/download/an-introduction-to-
programming-in-emacs-lisp-2nd-edition-robert-j-
chassell/

Explore and download more ebooks at ebookultra.com


Here are some suggested products you might be interested in.
Click the link to download

An Introduction to Programming Using Alice 2 2 2nd Edition


Charles W. Herbert

https://ebookultra.com/download/an-introduction-to-programming-using-
alice-2-2-2nd-edition-charles-w-herbert/

An Introduction to Stata Programming 1st Edition


Christopher F. Baum

https://ebookultra.com/download/an-introduction-to-stata-
programming-1st-edition-christopher-f-baum/

Common Lisp A Gentle Introduction to Symbolic Computation


David S. Touretzky

https://ebookultra.com/download/common-lisp-a-gentle-introduction-to-
symbolic-computation-david-s-touretzky/

Introduction to Computing and Programming in Python a


Multimedia Approach Mark J. Guzdial

https://ebookultra.com/download/introduction-to-computing-and-
programming-in-python-a-multimedia-approach-mark-j-guzdial/
Python Programming An Introduction to Computer Science
John M. Zelle

https://ebookultra.com/download/python-programming-an-introduction-to-
computer-science-john-m-zelle/

C Programming An Introduction Rajiv Chopra

https://ebookultra.com/download/c-programming-an-introduction-rajiv-
chopra/

Programming Concepts in C 2nd Edition Robert Burns

https://ebookultra.com/download/programming-concepts-in-c-2nd-edition-
robert-burns/

An introduction to property law in Australia Third


Edition. Edition Robert Chambers

https://ebookultra.com/download/an-introduction-to-property-law-in-
australia-third-edition-edition-robert-chambers/

An Introduction to International Criminal Law and


Procedure Robert Cryer

https://ebookultra.com/download/an-introduction-to-international-
criminal-law-and-procedure-robert-cryer/
An introduction to programming in emacs lisp 2nd
Edition Robert J. Chassell Digital Instant Download
Author(s): Robert J. Chassell
ISBN(s): 9781882114436, 1882114434
Edition: 2nd
File Details: PDF, 1.06 MB
Year: 2001
Language: english
An Introduction to

Programming in Emacs Lisp


An Introduction to
Programming in Emacs Lisp
Second Edition

by Robert J. Chassell
Copyright c 1990, 1991, 1992, 1993, 1994, 1995, 1997, 2001, 2002 Free
Software Foundation, Inc.

Published by the Free Software Foundation, Inc.


59 Temple Place, Suite 330
Boston, MA 02111-1307 USA

Edition 2.05, 2001 Jan 5


ISBN 1-882114-43-4
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.1 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”.
(a) The FSF’s Back-Cover Text is: “You have freedom to copy and modify
this GNU Manual, like GNU software. Copies published by the Free Software
Foundation raise funds for GNU development.”
i

Short Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 How To Write Function Definitions . . . . . . . . . . . . . . . . . . 29
4 A Few Buffer–Related Functions . . . . . . . . . . . . . . . . . . . . 51
5 A Few More Complex Functions . . . . . . . . . . . . . . . . . . . . 63
6 Narrowing and Widening . . . . . . . . . . . . . . . . . . . . . . . . . 77
7 car, cdr, cons: Fundamental Functions . . . . . . . . . . . . . 81
8 Cutting and Storing Text . . . . . . . . . . . . . . . . . . . . . . . . . 89
9 How Lists are Implemented . . . . . . . . . . . . . . . . . . . . . . . 113
10 Yanking Text Back . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11 Loops and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12 Regular Expression Searches . . . . . . . . . . . . . . . . . . . . . . 149
13 Counting: Repetition and Regexps . . . . . . . . . . . . . . . . . . 167
14 Counting Words in a defun . . . . . . . . . . . . . . . . . . . . . . 181
15 Readying a Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
16 Your ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
17 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Appendix A The the-the Function . . . . . . . . . . . . . . . . . . 241
Appendix B Handling the Kill Ring . . . . . . . . . . . . . . . . . . . 243
Appendix C A Graph with Labelled Axes . . . . . . . . . . . . . . . 255
Appendix D GNU Free Documentation License . . . . . . . . . . . 279
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
ii
iii

Table of Contents

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
On Reading this Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
For Whom This is Written. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
Lisp History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
A Note for Novices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Thank You . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv

1 List Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Lisp Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Lisp Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Whitespace in Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 GNU Emacs Helps You Type Lists . . . . . . . . . . . . . . . 3
1.2 Run a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Generate an Error Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Symbol Names and Function Definitions . . . . . . . . . . . . . . . . . . 6
1.5 The Lisp Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.1 Byte Compiling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6.1 Evaluating Inner Lists . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.1 Error Message for a Symbol Without a Function . . 11
1.7.2 Error Message for a Symbol Without a Value . . . . 11
1.8 Arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.8.1 Arguments’ Data Types . . . . . . . . . . . . . . . . . . . . . . . . 13
1.8.2 An Argument as the Value of a Variable or List . . 13
1.8.3 Variable Number of Arguments . . . . . . . . . . . . . . . . . 14
1.8.4 Using the Wrong Type Object as an Argument . . 14
1.8.5 The message Function . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9 Setting the Value of a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9.1 Using set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9.2 Using setq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.3 Counting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2 Practicing Evaluation . . . . . . . . . . . . . . . . . . . . . 23
2.1 Buffer Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 Getting Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Switching Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Buffer Size and the Location of Point . . . . . . . . . . . . . . . . . . . . 27
2.5 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
iv

3 How To Write Function Definitions . . . . . . . . 29


3.1 The defun Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Install a Function Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.1 Change a Function Definition . . . . . . . . . . . . . . . . . . . 32
3.3 Make a Function Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.1 An Interactive multiply-by-seven . . . . . . . . . . . . . 34
3.4 Different Options for interactive . . . . . . . . . . . . . . . . . . . . . . 35
3.5 Install Code Permanently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6 let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6.1 The Parts of a let Expression . . . . . . . . . . . . . . . . . . 37
3.6.2 Sample let Expression . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.3 Uninitialized Variables in a let Statement . . . . . . . 39
3.7 The if Special Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.1 The type-of-animal Function in Detail . . . . . . . . . 41
3.8 If–then–else Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.9 Truth and Falsehood in Emacs Lisp . . . . . . . . . . . . . . . . . . . . . 43
3.10 save-excursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.10.1 Template for a save-excursion Expression . . . . 45
3.11 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4 A Few Buffer–Related Functions . . . . . . . . . . . 51


4.1 Finding More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 A Simplified beginning-of-buffer Definition . . . . . . . . . . . . 52
4.3 The Definition of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 54
4.3.1 Body of mark-whole-buffer . . . . . . . . . . . . . . . . . . . 55
4.4 The Definition of append-to-buffer . . . . . . . . . . . . . . . . . . . . 56
4.4.1 The append-to-buffer Interactive Expression . . . 57
4.4.2 The Body of append-to-buffer . . . . . . . . . . . . . . . . 57
4.4.3 save-excursion in append-to-buffer . . . . . . . . . . 58
4.5 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
v

5 A Few More Complex Functions . . . . . . . . . . . 63


5.1 The Definition of copy-to-buffer. . . . . . . . . . . . . . . . . . . . . . . 63
5.2 The Definition of insert-buffer . . . . . . . . . . . . . . . . . . . . . . . . 64
5.2.1 The Interactive Expression in insert-buffer . . . . 65
A Read-only Buffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
‘b’ in an Interactive Expression . . . . . . . . . . . . . . . . . 65
5.2.2 The Body of the insert-buffer Function . . . . . . . 65
5.2.3 insert-buffer With an if Instead of an or . . . . . 66
5.2.4 The or in the Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2.5 The let Expression in insert-buffer . . . . . . . . . . 68
5.3 Complete Definition of beginning-of-buffer .. . . . . . . . . . . 69
5.3.1 Optional Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3.2 beginning-of-buffer with an Argument . . . . . . . 71
What happens in a large buffer . . . . . . . . . . . . . . . . . 71
What happens in a small buffer . . . . . . . . . . . . . . . . 72
5.3.3 The Complete beginning-of-buffer . . . . . . . . . . . 73
5.4 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 optional Argument Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

6 Narrowing and Widening . . . . . . . . . . . . . . . . . . 77


6.1 The save-restriction Special Form . . . . . . . . . . . . . . . . . . . . 77
6.2 what-line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.3 Exercise with Narrowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

7 car, cdr, cons: Fundamental Functions . . . . . 81


7.1 car and cdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.2 cons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.2.1 Find the Length of a List: length . . . . . . . . . . . . . . 84
7.3 nthcdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.4 nth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.5 setcar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.6 setcdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.7 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
vi

8 Cutting and Storing Text . . . . . . . . . . . . . . . . . 89


8.1 zap-to-char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.1.1 The interactive Expression . . . . . . . . . . . . . . . . . . . 90
8.1.2 The Body of zap-to-char. . . . . . . . . . . . . . . . . . . . . . 91
8.1.3 The search-forward Function . . . . . . . . . . . . . . . . . 92
8.1.4 The progn Special Form . . . . . . . . . . . . . . . . . . . . . . . 93
8.1.5 Summing up zap-to-char . . . . . . . . . . . . . . . . . . . . . 93
8.2 kill-region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.2.1 condition-case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.2.2 delete-and-extract-region . . . . . . . . . . . . . . . . . . 96
8.3 delete-and-extract-region: Digressing into C . . . . . . . . . 98
8.4 Initializing a Variable with defvar . . . . . . . . . . . . . . . . . . . . . 100
8.4.1 defvar and an asterisk . . . . . . . . . . . . . . . . . . . . . . . . 101
8.5 copy-region-as-kill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.5.1 The Body of copy-region-as-kill .. . . . . . . . . . . 103
The kill-append function . . . . . . . . . . . . . . . . . . . . 104
The kill-new function . . . . . . . . . . . . . . . . . . . . . . . 105
8.6 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.7 Searching Exercises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9 How Lists are Implemented . . . . . . . . . . . . . . 113


9.1 Symbols as a Chest of Drawers . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.2 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

10 Yanking Text Back . . . . . . . . . . . . . . . . . . . . . 117


10.1 Kill Ring Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
10.2 The kill-ring-yank-pointer Variable . . . . . . . . . . . . . . . 117
10.3 Exercises with yank and nthcdr . . . . . . . . . . . . . . . . . . . . . . . 119

11 Loops and Recursion. . . . . . . . . . . . . . . . . . . . 121


11.1 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.1.1 A while Loop and a List . . . . . . . . . . . . . . . . . . . . . 122
11.1.2 An Example: print-elements-of-list . . . . . . 123
11.1.3 A Loop with an Incrementing Counter . . . . . . . . 124
Example with incrementing counter . . . . . . . . . . . 125
The parts of the function definition . . . . . . . . . . . . 126
Putting the function definition together . . . . . . . . 127
11.1.4 Loop with a Decrementing Counter . . . . . . . . . . . 129
Example with decrementing counter . . . . . . . . . . . 129
The parts of the function definition . . . . . . . . . . . . 130
Putting the function definition together . . . . . . . . 130
11.2 Save your time: dolist and dotimes . . . . . . . . . . . . . . . . . . 131
The dolist Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
The dotimes Macro . . . . . . . . . . . . . . . . . . . . . . . . . . 133
vii

11.3 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134


11.3.1 Building Robots: Extending the Metaphor. . . . . 134
11.3.2 The Parts of a Recursive Definition . . . . . . . . . . . 135
11.3.3 Recursion with a List . . . . . . . . . . . . . . . . . . . . . . . . 136
11.3.4 Recursion in Place of a Counter . . . . . . . . . . . . . . 137
An argument of 3 or 4 . . . . . . . . . . . . . . . . . . . . . . . . 138
11.3.5 Recursion Example Using cond . . . . . . . . . . . . . . . 139
11.3.6 Recursive Patterns. . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Recursive Pattern: every . . . . . . . . . . . . . . . . . . . . . 141
Recursive Pattern: accumulate . . . . . . . . . . . . . . . . 142
Recursive Pattern: keep . . . . . . . . . . . . . . . . . . . . . . 143
11.3.7 Recursion without Deferments . . . . . . . . . . . . . . . . 143
11.3.8 No Deferment Solution . . . . . . . . . . . . . . . . . . . . . . . 145
11.4 Looping Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

12 Regular Expression Searches . . . . . . . . . . . . 149


12.1 The Regular Expression for sentence-end . . . . . . . . . . . . . 149
12.2 The re-search-forward Function. . . . . . . . . . . . . . . . . . . . . 150
12.3 forward-sentence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
The while loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
The regular expression search . . . . . . . . . . . . . . . . . . . . . . . . 154
12.4 forward-paragraph: a Goldmine of Functions . . . . . . . . . 155
The let* expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
The forward motion while loop . . . . . . . . . . . . . . . . . . . . . . 158
Between paragraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Within paragraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
No fill prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
With a fill prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
12.5 Create Your Own ‘TAGS’ File . . . . . . . . . . . . . . . . . . . . . . . . . . 163
12.6 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
12.7 Exercises with re-search-forward . . . . . . . . . . . . . . . . . . . . 166

13 Counting: Repetition and Regexps . . . . . . 167


13.1 The count-words-region Function . . . . . . . . . . . . . . . . . . . 167
13.1.1 The Whitespace Bug in count-words-region . . 170
13.2 Count Words Recursively . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
13.3 Exercise: Counting Punctuation . . . . . . . . . . . . . . . . . . . . . . . 179
viii

14 Counting Words in a defun . . . . . . . . . . . . . . 181


14.1 What to Count? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
14.2 What Constitutes a Word or Symbol? . . . . . . . . . . . . . . . . . 182
14.3 The count-words-in-defun Function . . . . . . . . . . . . . . . . . 183
14.4 Count Several defuns Within a File . . . . . . . . . . . . . . . . . . . 186
14.5 Find a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
14.6 lengths-list-file in Detail . . . . . . . . . . . . . . . . . . . . . . . . . 188
14.7 Count Words in defuns in Different Files . . . . . . . . . . . . . . 190
14.7.1 The append Function . . . . . . . . . . . . . . . . . . . . . . . . 191
14.8 Recursively Count Words in Different Files . . . . . . . . . . . . . 192
14.9 Prepare the Data for Display in a Graph . . . . . . . . . . . . . . . 193
14.9.1 Sorting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
14.9.2 Making a List of Files. . . . . . . . . . . . . . . . . . . . . . . . 194
14.9.3 Counting function definitions . . . . . . . . . . . . . . . . . 197

15 Readying a Graph . . . . . . . . . . . . . . . . . . . . . . 203


15.1 The graph-body-print Function . . . . . . . . . . . . . . . . . . . . . . 208
15.2 The recursive-graph-body-print Function. . . . . . . . . . . 210
15.3 Need for Printed Axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
15.4 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

16 Your ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . 213


16.1 Site-wide Initialization Files. . . . . . . . . . . . . . . . . . . . . . . . . . . 213
16.2 Specifying Variables using defcustom . . . . . . . . . . . . . . . . . . 214
16.3 Beginning a ‘.emacs’ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
16.4 Text and Auto Fill Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
16.5 Mail Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
16.6 Indent Tabs Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
16.7 Some Keybindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
16.8 Keymaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
16.9 Loading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
16.10 Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
16.11 A Simple Extension: line-to-top-of-window . . . . . . . . 224
16.12 X11 Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
16.13 Miscellaneous Settings for a ‘.emacs’ File . . . . . . . . . . . . . 227
16.14 A Modified Mode Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

17 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
17.1 debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
17.2 debug-on-entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
17.3 debug-on-quit and (debug). . . . . . . . . . . . . . . . . . . . . . . . . . 234
17.4 The edebug Source Level Debugger . . . . . . . . . . . . . . . . . . . . 235
17.5 Debugging Exercises. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
ix

18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Appendix A The the-the Function . . . . . . . . . . 241

Appendix B Handling the Kill Ring . . . . . . . . 243


B.1 The rotate-yank-pointer Function . . . . . . . . . . . . . . . . . . . 243
B.1.1 The Body of rotate-yank-pointer .. . . . . . . . . . 244
The else-part of the if expression . . . . . . . . . . . . . 245
The % remainder function . . . . . . . . . . . . . . . . . . . . . 247
Using % in rotate-yank-pointer . . . . . . . . . . . . . 248
Pointing to the last element . . . . . . . . . . . . . . . . . . . 248
B.2 yank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Passing the argument . . . . . . . . . . . . . . . . . . . . . . . . 250
Passing a negative argument . . . . . . . . . . . . . . . . . . 251
B.3 yank-pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

Appendix C A Graph with Labelled Axes . . . 255


C.1 The print-graph Varlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
C.2 The print-Y-axis Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
C.2.1 Side Trip: Compute a Remainder. . . . . . . . . . . . . . 258
C.2.2 Construct a Y Axis Element . . . . . . . . . . . . . . . . . . 259
C.2.3 Create a Y Axis Column. . . . . . . . . . . . . . . . . . . . . . 261
C.2.4 The Not Quite Final Version of print-Y-axis . . 262
C.3 The print-X-axis Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
C.3.1 X Axis Tic Marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
C.4 Printing the Whole Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
C.4.1 Testing print-graph . . . . . . . . . . . . . . . . . . . . . . . . . 270
C.4.2 Graphing Numbers of Words and Symbols . . . . . 271
C.4.3 A lambda Expression: Useful Anonymity . . . . . . . 272
C.4.4 The mapcar Function . . . . . . . . . . . . . . . . . . . . . . . . . 274
C.4.5 Another Bug . . . Most Insidious . . . . . . . . . . . . . . 274
C.4.6 The Printed Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Appendix D GNU Free Documentation License


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
x
On Reading this Text xi

Preface
Most of the GNU Emacs integrated environment is written in the pro-
gramming language called Emacs Lisp. The code written in this program-
ming language is the software—the sets of instructions—that tell the com-
puter 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.
(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.)
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.
Perhaps you want to understand programming; perhaps you want to ex-
tend Emacs; or perhaps you want to become a programmer. This introduc-
tion 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.

On Reading this Text


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.
Much of this introduction is dedicated to walk-throughs 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.
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
xii Preface

opportunity to get acquainted with Emacs as a Lisp programming environ-


ment. GNU Emacs supports programming and provides tools that you will
want to become comfortable using, such as M-. (the key which invokes the
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.
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.

For Whom This is Written


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.
An expert programmer who reviewed this text said to me:
I prefer to learn from reference manuals. I “dive into” each para-
graph, and “come up for air” between paragraphs.
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.
This introduction is not written for this person!
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.
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.)
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.
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.
A Note for Novices xiii

This book is intended as an approachable hill, rather than as a daunting


mountain.
This introduction to Programming in Emacs Lisp has a companion doc-
ument, The GNU Emacs Lisp Reference Manual. The reference manual has
more detail than this introduction. In the reference manual, all the infor-
mation 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 Introduction, you will find the Reference Manual useful when you
are writing your own programs.

Lisp History
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.
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,
‘cl.el’, that adds many Common Lisp features to Emacs Lisp.)

A Note for Novices


If you don’t know GNU Emacs, you can still read this document prof-
itably. 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 C-h t. (This means you press and
release the hCTRLi key and the h at the same time, and then press and release
t.)
Also, I often refer to one of Emacs’ 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: M-C-\ (indent-region). What this
means is that the indent-region command is customarily invoked by typing
M-C-\. (You can, if you wish, change the keys that are typed to invoke the
command; this is called rebinding. See Section 16.8, “Keymaps”, page 221.)
The abbreviation M-C-\ means that you type your hMETAi key, hCTRLi key
and h\i key all at the same time. (On many modern keyboards the hMETAi
key is labelled hALTi.) 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 hMETAi key, the hESCi key prefix is used in place of it. In
this case, M-C-\ means that you press and release your hESCi key and then
type the hCTRLi key and the h\i key at the same time. But usually M-C-\
means press the hCTRLi key along with the key that is labelled hALTi and, at
the same time, press the h\i key.
xiv Preface

In addition to typing a lone keychord, you can prefix what you type with
C-u, which is called the ‘universal argument’. The 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 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.) See
section “Numeric Arguments” in The GNU Emacs Manual.
If you are reading this in Info using GNU Emacs, you can read through
this whole document just by pressing the space bar, hSPCi. (To learn about
Info, type C-h i and then select Info.)
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.

Thank You
My thanks to all who helped me with this book. My especial thanks to
Jim Blandy, Noah Friedman, Jim Kingdon, Roland McGrath, Frank Ritter,
Randy Smith, Richard M. Stallman, and Melissa Weisshaus. My thanks
also go to both Philip Johnson and David Stampe for their patient encour-
agement. My mistakes are my own.
Robert J. Chassell
Lisp Atoms 1

1 List Processing
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 un-
warranted. Lisp stands for LISt Processing, and the programming language
handles 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, ‘’’. Lists are the basis of Lisp.

1.1 Lisp Lists


In Lisp, a list looks like this: ’(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:
’(rose
violet
daisy
buttercup)
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.
Lists can also have numbers in them, as in this list: (+ 2 2). This list
has a plus-sign, ‘+’, followed by two ‘2’s, each separated by whitespace.
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 white-
space 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 not Lisp lists,
because they contain ‘;’ and ‘.’ as punctuation marks.)
Here is another list, this time with a list inside of it:
’(this list has (a list inside of it))
The components of this list are the words ‘this’, ‘list’, ‘has’, and the
list ‘(a list inside of it)’. The interior list is made up of the words ‘a’,
‘list’, ‘inside’, ‘of’, ‘it’.

1.1.1 Lisp Atoms


In Lisp, what we have been calling words are called atoms. This term
comes from the historical meaning of the word atom, which means ‘indivis-
ible’. 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
2 Chapter 1: List Processing

‘+’. On the other hand, unlike an atom, a list can be split into parts. (See
Chapter 7, “car cdr & cons Fundamental Functions”, page 81.)

In a list, atoms are separated from each other by whitespace. They can
be right next to a parenthesis.

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: (), and is called
the empty list. Unlike anything else, an empty list is considered both an
atom and a list at the same time.

The printed representation of both atoms and lists are called symbolic
expressions or, more concisely, s-expressions. The word 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 expression
indiscriminately. (Also, in many texts, the word form is used as a synonym
for expression.)

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.

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 ‘ai’, is completely different from the
two words, ‘a’, and ‘i’.

There are many kinds of atom in nature but only a few in Lisp: for
example, numbers, such as 37, 511, or 1729, and symbols, such as ‘+’, ‘foo’,
or ‘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.)
GNU Emacs Helps You Type Lists 3

In addition, text between double quotation marks—even sentences or


paragraphs—is an atom. Here is an example:
’(this list includes "text between quotation marks.")
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 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.

1.1.2 Whitespace in Lists


The amount of whitespace in a list does not matter. From the point of
view of the Lisp language,
’(this list
looks like this)
is exactly the same as this:
’(this list looks like this)
Both examples show what to Lisp is the same list, the list made up of
the symbols ‘this’, ‘list’, ‘looks’, ‘like’, and ‘this’ in that order.
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.)
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.)

1.1.3 GNU Emacs Helps You Type Lists


When you type a Lisp expression in GNU Emacs using either Lisp Interac-
tion 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 hTABi 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 M-C-\. Indentation is designed so that you can see which elements
of a list belongs to which list—elements of a sub-list are indented more than
the elements of the enclosing list.
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
4 Chapter 1: List Processing

its closing parenthesis match its opening parenthesis. (See section “Major
Modes” in The GNU Emacs Manual, for more information about Emacs’
modes.)

1.2 Run a Program


A list in Lisp—any list—is a program ready to run. If you run it (for
which the Lisp jargon is 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!)
The single apostrophe, ’, that I put in front of some of the example lists
in preceding sections is called a 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 functions.)
The list (+ 2 2) shown above did not have a quote in front of it, so Lisp
understands that the + is an instruction to do something with the rest of the
list: add the numbers that follow.
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 C-x C-e:
(+ 2 2)
You will see the number 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 C-x C-e:
’(this is a quoted list)
You will see (this is a quoted list) appear in the echo area.
In both cases, what you are doing is giving a command to the program
inside of GNU Emacs called the 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.
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 (see Section 1.7, “Variables”, page 10), we will discuss what
the Lisp interpreter does when you make an error.

1.3 Generate an Error Message


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
Generate an Error Message 5

harmless activity; and indeed, we will often try to generate error messages
intentionally. Once you understand the jargon, error messages can be in-
formative. Instead of being called “error” messages, they should be called
“help” messages. They are like signposts to a traveller in a strange country;
deciphering them can be hard, but once understood, they can point the way.
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 q.
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 C-x C-e:
(this is an unquoted list)
What you see depends on which version of Emacs you are running. GNU
Emacs version 21 provides more information than version 20 and before.
First, the more recent result of generating an error; then the earlier, version
20 result.
In GNU Emacs version 21, a ‘*Backtrace*’ window will open up and you
will see the following in it:
---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-function this)
(this is an unquoted list)
eval((this is an unquoted list))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

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:
q
Please type q right now, so you become confident that you can get out of
the debugger. Then, type C-x C-e again to re-enter it.
Based on what we already know, we can almost read this error message.
You read the ‘*Backtrace*’ buffer from the bottom up; it tells you what
Emacs did. When you typed C-x C-e, you made an interactive call to the
command eval-last-sexp. eval is an abbreviation for ‘evaluate’ and sexp
is an abbreviation for ‘symbolic expression’. The command means ‘evaluate
last symbolic expression’, which is the expression just before your cursor.
Each line above tells you what the Lisp interpreter evaluated next. The
most recent action is at the top. The buffer is called the ‘*Backtrace*’
buffer because it enables you to track Emacs backwards.
6 Chapter 1: List Processing

At the top of the ‘*Backtrace*’ buffer, you see the line:


Debugger entered--Lisp error: (void-function this)
The Lisp interpreter tried to evaluate the first atom of the list, the word
‘this’. It is this action that generated the error message ‘void-function
this’.
The message contains the words ‘void-function’ and ‘this’.
The word ‘function’ was mentioned once before. It is a very important
word. For our purposes, we can define it by saying that a function is a set
of instructions to the computer that tell the computer to do something.
Now we can begin to understand the error message: ‘void-function
this’. The function (that is, the word ‘this’) does not have a definition of
any set of instructions for the computer to carry out.
The slightly odd word, ‘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 instruc-
tions is ‘void’.
On the other hand, since we were able to add 2 plus 2 successfully, by
evaluating (+ 2 2), we can infer that the symbol + must have a set of in-
structions for the computer to obey and those instructions must be to add
the numbers that follow the +.
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:
Symbol’s function definition is void: this
(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.
We know the meaning of the word ‘Symbol’. It refers to the first atom of
the list, the word ‘this’. The word ‘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.)
The error message can be understood: ‘Symbol’s function definition
is void: this’. The symbol (that is, the word ‘this’) lacks instructions for
the computer to carry out.

1.4 Symbol Names and Function Definitions


We can articulate another characteristic of Lisp based on what we have
discussed so far—an important characteristic: a symbol, like +, 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
The Lisp Interpreter 7

‘Bob’; however, I am not the letters ‘B’, ‘o’, ‘b’ but am the consciousness
consistently associated with a particular life-form. The name is not me, but
it can be used to refer to me.
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 plus as well as to the symbol + (and are in some dialects of Lisp).
Among humans, I can be referred to as ‘Robert’ as well as ‘Bob’ and by
other words as well.
On the other hand, a symbol can have only one function definition at-
tached 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 ‘Bob’. However, the function definition to which
the name refers can be changed readily. (See Section 3.2, “Install a Function
Definition”, page 31.)
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 ‘texinfo-’ and those
for functions that deal with reading mail start with ‘rmail-’.

1.5 The Lisp Interpreter


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.
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.
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 variable. This situation is described in the section on variables.
(See Section 1.7, “Variables”, page 10.)
The second complication occurs because some functions are unusual and
do not work in the usual manner. Those that don’t are called 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.
8 Chapter 1: List Processing

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.
Otherwise, the interpreter works left to right, from one expression to the
next.

1.5.1 Byte Compiling


One other aspect of interpreting: the Lisp interpreter is able to interpret
two kinds of entity: humanly readable code, on which we will focus exclu-
sively, and specially processed code, called byte compiled code, which is not
humanly readable. Byte compiled code runs faster than humanly readable
code.
You can transform humanly readable code into byte compiled code by
running one of the compile commands such as byte-compile-file. Byte
compiled code is usually stored in a file that ends with a ‘.elc’ exten-
sion rather than a ‘.el’ extension. You will see both kinds of file in the
‘emacs/lisp’ directory; the files to read are those with ‘.el’ extensions.
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. See section “Byte Compilation” in The GNU Emacs Lisp
Reference Manual, for a full description of byte compilation.

1.6 Evaluation
When the Lisp interpreter works on an expression, the term for the ac-
tivity is called evaluation. We say that the interpreter ‘evaluates the expres-
sion’. 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 Webster’s New Collegiate Dictionary.
After evaluating an expression, the Lisp interpreter will most likely 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.
Evaluating Inner Lists 9

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 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.
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.

1.6.1 Evaluating Inner Lists


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.
We can investigate this process by evaluating another addition example.
Place your cursor after the following expression and type C-x C-e:
(+ 2 (+ 3 3))
The number 8 will appear in the echo area.
What happens is that the Lisp interpreter first evaluates the inner ex-
pression, (+ 3 3), for which the value 6 is returned; then it evaluates the
outer expression as if it were written (+ 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.
Now it is easy to understand the name of the command invoked by the
keystrokes C-x C-e: the name is eval-last-sexp. The letters sexp are
an abbreviation for ‘symbolic expression’, and eval is an abbreviation for
‘evaluate’. The command means ‘evaluate last symbolic expression’.
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.
Here is another copy of the expression:
(+ 2 (+ 3 3))
If you place the cursor at the beginning of the blank line that immediately
follows the expression and type 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 (+ 3 3).
Now put the cursor immediately after a number. Type 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 +, you will get a value returned that is the
10 Chapter 1: List Processing

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.

1.7 Variables
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 variable.
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”.
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-versa.
The variable 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 C-x C-e:
fill-column
After I typed C-x C-e, Emacs printed the number 72 in my echo area. This
is the value for which 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.
A symbol can have any value attached to it or, to use the jargon, we can
bind the variable to a value: to a number, such as 72; to a string, "such as
this"; to a list, such as (spruce pine oak); we can even bind a variable to
a function definition.
A symbol can be bound to a value in several ways. See Section 1.9,
“Setting the Value of a Variable”, page 17, for information about one way
to do this.
Error Message for a Symbol Without a Value 11

1.7.1 Error Message for a Symbol Without a Function


When we evaluated 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.
If 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 fill-
column has no function definition. Try evaluating this:
(fill-column)
In GNU Emacs version 21, you will create a ‘*Backtrace*’ buffer that says:
---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-function fill-column)
(fill-column)
eval((fill-column))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
---------- Buffer: *Backtrace* ----------
(Remember, to quit the debugger and make the debugger window go away,
type q in the ‘*Backtrace*’ buffer.)
In GNU Emacs 20 and before, you will produce an error message that
says:
Symbol’s function definition is void: fill-column
(The message will go away away as soon as you move the cursor or type
another key.)

1.7.2 Error Message for a Symbol Without a Value


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 +, before the first number 2, type C-x C-e:
(+ 2 2)
In GNU Emacs 21, you will create a ‘*Backtrace*’ buffer that says:
---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-variable +)
eval(+)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
---------- Buffer: *Backtrace* ----------
(As with the other times we entered the debugger, you can quit by typing q
in the ‘*Backtrace*’ buffer.)
12 Chapter 1: List Processing

This backtrace is different from the very first error message we saw,
which said, ‘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.
In this experiment with the +, what we did was cause the Lisp interpreter
to evaluate the + 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 conse-
quence, the Lisp interpreter evaluated the preceding s-expression, which in
this case was the + by itself.
Since + 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.
In GNU Emacs version 20 and before, your error message will say:
Symbol’s value as variable is void: +
The meaning is the same as in GNU Emacs 21.

1.8 Arguments
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:
(+ 2 2)
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 +.
The numbers added by + are called the arguments of the function +.
These numbers are the information that is given to or passed to the function.
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 +. 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.1

1
It is curious to track the path by which the word ‘argument’ came to have two differ-
ent meanings, one in mathematics and the other in everyday English. According to
the Oxford English Dictionary, the word derives from the Latin for ‘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.)
An Argument as the Value of a Variable or List 13

1.8.1 Arguments’ Data Types


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 + must
have values that are numbers, since + adds numbers. Other functions use
different kinds of data for their arguments.
For example, the concat function links together or unites two or more
strings of text to produce a string. The arguments are strings. Concate-
nating the two character strings abc, def produces the single string abcdef.
This can be seen by evaluating the following:
(concat "abc" "def")
The value produced by evaluating this expression is "abcdef".
A function such as substring uses both a string and numbers as argu-
ments. 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 in-
dicate the beginning and end of the substring. The numbers are a count
of the number of characters (including spaces and punctuations) from the
beginning of the string.
For example, if you evaluate the following:
(substring "The quick brown fox jumped." 16 19)
you will see "fox" appear in the echo area. The arguments are the string
and the two numbers.
Note that the string passed to 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 substring function as a kind of ‘atom smasher’ since it
takes an otherwise indivisible atom and extracts a part. However, 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.

1.8.2 An Argument as the Value of a Variable or List


An argument can be a symbol that returns a value when it is evaluated.
For example, when the symbol fill-column by itself is evaluated, it returns
a number. This number can be used in an addition.
Position the cursor after the following expression and type C-x C-e:
(+ 2 fill-column)
The value will be a number two more than what you get by evaluating
fill-column alone. For me, this is 74, because the value of fill-column is
72.
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
14 Chapter 1: List Processing

to the function concat are the strings "The " and " red foxes." and the
list (number-to-string (+ 2 fill-column)).
(concat "The " (number-to-string (+ 2 fill-column)) " red foxes.")
If you evaluate this expression—and if, as with my Emacs, fill-column
evaluates to 72—"The 74 red foxes." will appear in the echo area. (Note
that you must put spaces after the word ‘The’ and before the word ‘red’
so they will appear in the final string. The function number-to-string
converts the integer that the addition function returns to a string. number-
to-string is also known as int-to-string.)

1.8.3 Variable Number of Arguments


Some functions, such as concat, + or *, take any number of arguments.
(The * 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 ‘ ⇒’, which you may read as ‘evaluates
to’.
In the first set, the functions have no arguments:
(+) ⇒ 0

(*) ⇒ 1
In this set, the functions have one argument each:
(+ 3) ⇒ 3

(* 3) ⇒ 3
In this set, the functions have three arguments each:
(+ 3 4 5) ⇒ 12

(* 3 4 5) ⇒ 60

1.8.4 Using the Wrong Type Object as an Argument


When a function is passed an argument of the wrong type, the Lisp
interpreter produces an error message. For example, the + function expects
the values of its arguments to be numbers. As an experiment we can pass it
the quoted symbol hello instead of a number. Position the cursor after the
following expression and type C-x C-e:
(+ 2 ’hello)
When you do this you will generate an error message. What has happened is
that + has tried to add the 2 to the value returned by ’hello, but the value
returned by ’hello is the symbol hello, not a number. Only numbers can
be added. So + could not carry out its addition.
Using the Wrong Type Object as an Argument 15

In GNU Emacs version 21, you will create and enter a ‘*Backtrace*’
buffer that says:
---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error:
(wrong-type-argument number-or-marker-p hello)
+(2 hello)
eval((+ 2 (quote hello)))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

As usual, the error message tries to be helpful and makes sense after you
learn how to read it.
The first part of the error message is straightforward; it says ‘wrong type
argument’. Next comes the mysterious jargon word ‘number-or-marker-p’.
This word is trying to tell you what kind of argument the + expected.
The symbol number-or-marker-p says that the Lisp interpreter is try-
ing 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 + 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 C-@ or C- hSPCi
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, + can be used to add the numeric value of marker
positions as numbers.
The ‘p’ of number-or-marker-p is the embodiment of a practice started
in the early days of Lisp programming. The ‘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 ‘p’ tells us that
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 ‘p’ include zerop, a function that tests whether its
argument has the value of zero, and listp, a function that tests whether its
argument is a list.
Finally, the last part of the error message is the symbol hello. This is the
value of the argument that was passed to +. 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 hello. But then you would not have got
the error message.
16 Chapter 1: List Processing

In GNU Emacs version 20 and before, the echo area displays an error
message that says:
Wrong type argument: number-or-marker-p, hello
This says, in different words, the same as the top line of the ‘*Backtrace*’
buffer.

1.8.5 The message Function


Like +, the 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.
A message is printed in the echo area. For example, you can print a
message in your echo area by evaluating the following list:
(message "This message appears in the echo area!")
The whole string between double quotation marks is a single argument
and is printed in toto. (Note that in this example, the message itself will ap-
pear in the echo area within double quotes; that is because you see the value
returned by the message function. In most uses of message in programs that
you write, the text will be printed in the echo area as a side-effect, without
the quotes. See Section 3.3.1, “multiply-by-seven in detail”, page 34, for
an example of this.)
However, if there is a ‘%s’ in the quoted string of characters, the message
function does not print the ‘%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 ‘%s’ is.
You can see this by positioning the cursor after the following expression
and typing C-x C-e:
(message "The name of this buffer is: %s." (buffer-name))
In Info, "The name of this buffer is: *info*." will appear in the echo
area. The function buffer-name returns the name of the buffer as a string,
which the message function inserts in place of %s.
To print a value as an integer, use ‘%d’ in the same way as ‘%s’. For
example, to print a message in the echo area that states the value of the
fill-column, evaluate the following:
(message "The value of fill-column is %d." fill-column)
On my system, when I evaluate this list, "The value of fill-column is
72." appears in my echo area2 .
If there is more than one ‘%s’ in the quoted string, the value of the first
argument following the quoted string is printed at the location of the first
‘%s’ and the value of the second argument is printed at the location of the
second ‘%s’, and so on.
2
Actually, you can use %s to print a number. It is non-specific. %d prints only the part
of a number left of a decimal point, and not anything that is not a number.
Using set 17

For example, if you evaluate the following,


(message "There are %d %s in the office!"
(- fill-column 14) "pink elephants")
a rather whimsical message will appear in your echo area. On my system it
says, "There are 58 pink elephants in the office!".
The expression (- fill-column 14) is evaluated and the resulting num-
ber is inserted in place of the ‘%d’; and the string in double quotes, "pink
elephants", is treated as a single argument and inserted in place of the
‘%s’. (That is to say, a string between double quotes evaluates to itself, like
a number.)
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 ‘%s’:
(message "He saw %d %s"
(- fill-column 34)
(concat "red "
(substring
"The quick brown foxes jumped." 16 21)
" leaping."))
In this example, message has three arguments: the string, "He saw %d
%s", the expression, (- fill-column 32), and the expression beginning with
the function concat. The value resulting from the evaluation of (- fill-
column 32) is inserted in place of the ‘%d’; and the value returned by the
expression beginning with concat is inserted in place of the ‘%s’.
When I evaluate the expression, the message "He saw 38 red foxes
leaping." appears in my echo area.

1.9 Setting the Value of a Variable


There are several ways by which a variable can be given a value. One of
the ways is to use either the function set or the function setq. Another way
is to use let (see Section 3.6, “let”, page 36). (The jargon for this process
is to bind a variable to a value.)
The following sections not only describe how set and setq work but also
illustrate how arguments are passed.

1.9.1 Using set


To set the value of the symbol flowers to the list ’(rose violet daisy
buttercup), evaluate the following expression by positioning the cursor after
the expression and typing C-x C-e.
(set ’flowers ’(rose violet daisy buttercup))
18 Chapter 1: List Processing

The list (rose violet daisy buttercup) will appear in the echo area. This
is what is returned by the set function. As a side effect, the symbol flowers
is bound to the list ; that is, the symbol 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.)
After evaluating the set expression, you can evaluate the symbol flowers
and it will return the value you just set. Here is the symbol. Place your
cursor after it and type C-x C-e.
flowers
When you evaluate flowers, the list (rose violet daisy buttercup) ap-
pears in the echo area.
Incidentally, if you evaluate ’flowers, the variable with a quote in front
of it, what you will see in the echo area is the symbol itself, flowers. Here
is the quoted symbol, so you can try this:
’flowers
Note also, that when you use set, you need to quote both arguments to
set, unless you want them evaluated. Since we do not want either argument
evaluated, neither the variable flowers nor the list (rose violet daisy
buttercup), both are quoted. (When you use set without quoting its first
argument, the first argument is evaluated before anything else is done. If
you did this and flowers did not have a value already, you would get an
error message that the ‘Symbol’s value as variable is void’; on the other
hand, if flowers did return a value after it was evaluated, the 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.)

1.9.2 Using setq


As a practical matter, you almost always quote the first argument to set.
The combination of set and a quoted first argument is so common that it
has its own name: the special form setq. This special form is just like 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, setq permits
you to set several different variables to different values, all in one expression.
To set the value of the variable carnivores to the list ’(lion tiger
leopard) using setq, the following expression is used:
(setq carnivores ’(lion tiger leopard))
This is exactly the same as using set except the first argument is automat-
ically quoted by setq. (The ‘q’ in setq means quote.)
Counting 19

With set, the expression would look like this:


(set ’carnivores ’(lion tiger leopard))
Also, 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
trees and a list of herbivores to the symbol herbivores:
(setq trees ’(pine fir oak maple)
herbivores ’(gazelle antelope zebra))
(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.)
Although I have been using the term ‘assign’, there is another way of
thinking about the workings of set and setq; and that is to say that set
and setq make the symbol 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.

1.9.3 Counting
Here is an example that shows how to use 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 setq expression that sets the counter variable to
zero; and a second setq expression that increments the counter each time it
is evaluated.
(setq counter 0) ; Let’s call this the initializer.

(setq counter (+ counter 1)) ; This is the incrementer.

counter ; This is the counter.


(The text following the ‘;’ are comments. See Section 3.2.1, “Change a
Function Definition”, page 32.)
If you evaluate the first of these expressions, the initializer, (setq
counter 0), and then evaluate the third expression, counter, the number 0
will appear in the echo area. If you then evaluate the second expression, the
incrementer, (setq counter (+ counter 1)), the counter will get the value
1. So if you again evaluate counter, the number 1 will appear in the echo
area. Each time you evaluate the second expression, the value of the counter
will be incremented.
When you evaluate the incrementer, (setq counter (+ counter 1)), the
Lisp interpreter first evaluates the innermost list; this is the addition. In
20 Chapter 1: List Processing

order to evaluate this list, it must evaluate the variable counter and the
number 1. When it evaluates the variable counter, it receives its current
value. It passes this value and the number 1 to the + which adds them
together. The sum is then returned as the value of the inner list and passed
to the setq which sets the variable counter to this new value. Thus, the
value of the variable, counter, is changed.

1.10 Summary
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.
In summary,
• Lisp programs are made up of expressions, which are lists or single
atoms.
• Lists are made up of zero or more atoms or inner lists, separated by
whitespace and surrounded by parentheses. A list can be empty.
• Atoms are multi-character symbols, like forward-paragraph, single
character symbols like +, strings of characters between double quota-
tion marks, or numbers.
• A number evaluates to itself.
• A string between double quotes also evaluates to itself.
• When you evaluate a symbol by itself, its value is returned.
• 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.
• A single-quote, ’, 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.
• 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.
• 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.

1.11 Exercises
A few simple exercises:
• Generate an error message by evaluating an appropriate symbol that is
not within parentheses.
Exercises 21

• Generate an error message by evaluating an appropriate symbol that is


between parentheses.
• Create a counter that increments by two rather than one.
• Write an expression that prints a message in the echo area when evalu-
ated.
22 Chapter 1: List Processing
Buffer Names 23

2 Practicing Evaluation
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.
Whenever you give an editing command to Emacs Lisp, such as the com-
mand to move the cursor or to scroll the screen, you are evaluating an ex-
pression, the first element of which is a function. This is how Emacs works.
When you type keys, you cause the Lisp interpreter to evaluate an expres-
sion and that is how you get your results. Even typing plain text involves
evaluating an Emacs Lisp function, in this case, one that uses self-insert-
command, which simply inserts the character you typed. The functions you
evaluate by typing keystrokes are called interactive functions, or commands;
how you make a function interactive will be illustrated in the chapter on
how to write function definitions. See Section 3.3, “Making a Function In-
teractive”, page 33.
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
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.
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.

2.1 Buffer Names


The two functions, buffer-name and buffer-file-name, show the differ-
ence between a file and a buffer. When you evaluate the following expression,
(buffer-name), the name of the buffer appears in the echo area. When you
evaluate (buffer-file-name), the name of the file to which the buffer refers
appears in the echo area. Usually, the name returned by (buffer-name) is
the same as the name of the file to which it refers, and the name returned
by (buffer-file-name) is the full path-name of the file.
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 visiting that file. This
copy is what you work on and modify. Changes to the buffer do not change
24 Chapter 2: Practicing Evaluation

the file, until you save the buffer. When you save the buffer, the buffer is
copied to the file and is thus saved permanently.
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
C-x C-e.
(buffer-name)

(buffer-file-name)
When I do this, ‘"introduction.texinfo"’ is the value returned by eval-
uating (buffer-name), and ‘"/gnu/work/intro/introduction.texinfo"’
is the value returned by evaluating (buffer-file-name). The former is the
name of the buffer and the latter is the name of the file. (In the expres-
sions, the parentheses tell the Lisp interpreter to treat buffer-name and
buffer-file-name as functions; without the parentheses, the interpreter
would attempt to evaluate the symbols as variables. See Section 1.7, “Vari-
ables”, page 10.)
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-versa. 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.
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.
Not all buffers are associated with files. For example, when you start
an Emacs session by typing the command emacs alone, without naming any
files, Emacs will start with the ‘*scratch*’ buffer on the screen. This buffer
is not visiting any file. Similarly, a ‘*Help*’ buffer is not associated with
any file.
If you switch to the ‘*scratch*’ buffer, type (buffer-name), position
the cursor after it, and type C-x C-e to evaluate the expression, the name
"*scratch*" is returned and will appear in the echo area. "*scratch*"
is the name of the buffer. However, if you type (buffer-file-name) in
Getting Buffers 25

the ‘*scratch*’ buffer and evaluate that, nil will appear in the echo area.
nil is from the Latin word for ‘nothing’; in this case, it means that the
‘*scratch*’ buffer is not associated with any file. (In Lisp, nil is also used
to mean ‘false’ and is a synonym for the empty list, ().)
Incidentally, if you are in the ‘*scratch*’ buffer and want the value
returned by an expression to appear in the ‘*scratch*’ buffer itself rather
than in the echo area, type C-u C-x C-e instead of C-x C-e. This causes the
value returned to appear after the expression. The buffer will look like this:
(buffer-name)"*scratch*"
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.

2.2 Getting Buffers


The buffer-name function returns the name of the buffer; to get the
buffer itself, a different function is needed: the current-buffer function. If
you use this function in code, what you get is the buffer itself.
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 ‘G’, ‘e’, ‘o’, ‘r’, ‘g’, and ‘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 ‘*scratch*’, but the name is not the buffer.
To get a buffer itself, you need to use a function such as current-buffer.
However, there is a slight complication: if you evaluate 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.
Here is an expression containing the function:
(current-buffer)
If you evaluate the expression in the usual way, ‘#<buffer *info*>’ appears
in the echo area. The special format indicates that the buffer itself is being
returned, rather than just its name.
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 current-buffer.
A related function is other-buffer. This returns the most recently se-
lected buffer other than the one you are in currently. If you have recently
26 Chapter 2: Practicing Evaluation

switched back and forth from the ‘*scratch*’ buffer, other-buffer will
return that buffer.
You can see this by evaluating the expression:
(other-buffer)
You should see ‘#<buffer *scratch*>’ appear in the echo area, or the name
of whatever other buffer you switched back from most recently 1 .

2.3 Switching Buffers


The 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
other-buffer and switch-to-buffer to switch to a different buffer.
But first, a brief introduction to the switch-to-buffer function. When
you switched back and forth from Info to the ‘*scratch*’ buffer to evaluate
(buffer-name), you most likely typed C-x b and then typed ‘*scratch*’ 2
when prompted in the minibuffer for the name of the buffer to which you
wanted to switch. The keystrokes, C-x b, cause the Lisp interpreter to eval-
uate the interactive function switch-to-buffer. As we said before, this is
how Emacs works: different keystrokes call or run different functions. For
example, C-f calls forward-char, M-e calls forward-sentence, and so on.
By writing switch-to-buffer in an expression, and giving it a buffer to
switch to, we can switch buffers just the way C-x b does.
Here is the Lisp expression:
(switch-to-buffer (other-buffer))
The symbol 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
other-buffer is inside parentheses and work on that symbol first. 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 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 C-x b hRETi.)3
1
Actually, by default, if the buffer from which you just switched is visible to you in
another window, other-buffer will choose the most recent buffer that you cannot see;
this is a subtlety that I often forget.
2
Or rather, to save typing, you probably typed just part of the name, such as *sc, and
then pressed your TAB key to cause it to expand to the full name; and then typed your
RET key.
3
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:
(switch-to-buffer (other-buffer (current-buffer) t))
Buffer Size and the Location of Point 27

In the programming examples in later sections of this document, you will


see the function set-buffer more often than 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. How-
ever, programs do not have eyes. When a computer program works on a
buffer, that buffer does not need to be visible on the screen.
switch-to-buffer is designed for humans and does two different things:
it switches the buffer to which Emacs’ attention is directed; and it switches
the buffer displayed in the window to the new buffer. 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).
Also, we have just introduced another jargon term, the word 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.

2.4 Buffer Size and the Location of Point


Finally, let’s look at several rather simple functions, buffer-size, point,
point-min, and point-max. These give information about the size of a buffer
and the location of point within it.
The function 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.
(buffer-size)
You can evaluate this in the usual way, by positioning the cursor after the
expression and typing C-x C-e.
In Emacs, the current position of the cursor is called point. The expres-
sion (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.
You can see the character count for point in this buffer by evaluating the
following expression in the usual way:
(point)
As I write this, the value of point is 65724. The point function is frequently
used in some of the examples later in this book.

In this case, the first argument to other-buffer tells it which buffer to skip—the
current one—and the second argument tells other-buffer it is OK to switch to a
visible buffer. In regular use, switch-to-buffer takes you to an invisible window
since you would most likely use C-x o (other-window) to go to another visible buffer.
Another Random Scribd Document
with Unrelated Content
should never forget him nor what he had now related to me, but
that I would try to forget what he had related in the beginning. The
Indians who were with me, following the thread of the conversation,
continued to entertain us with rational stories, and the evening was
spent very agreeably. In the morning, when we parted, the strange
Indian whom I had thus rebuked, shook me cordially by the hand,
saying: “Friend! you shall never be forgotten by me. Indeed I call
you my friend.”

I would take the liberty to recommend to those who may hereafter


travel among the Indians, in any part of America, to be particular in
their enquiries respecting the connexion of the different nations or
tribes with each other, especially when the analogy of their
respective languages leads to infer such relationship, as the Indians
call it. I beg leave to suggest a few questions, which, I think, ought
always to be asked. They may lead to much useful information
respecting the various migrations and the original places of
residence of the Indian nations, and perhaps produce more
important discoveries.

1. What is the name of your tribe? Is it its original name; if not, how
was it formerly called?

2. Have you a tradition of your lineal descent as a nation or tribe?

3. To what tribes are you related by blood, and where do they


reside?

4. What is your character or rank in the national family?

5. Which among the tribes connected with you is that which you call
grandfather?

6. Where is the great council fire of all the nations or tribes


connected with yours?
7. How do you address the chiefs and council of such a nation or
tribe?

8. What is the badge of your tribe?

From these and other similar questions, much valuable information


will probably result. The nation whom another tribe calls
grandfather, is certainly the head of the family to which they both
belong. At his door burns the “great national council fire,” or, in other
words, at the place where he resides with his counsellors, as the
great or supreme chief of the national family, the heads of the tribes
in the connexion occasionally assemble to deliberate on their
common interests; any tribe may have a council fire of its own, but
cannot dictate to the other tribes, nor compel any of them to take
up the hatchet against an enemy; neither can they conclude a peace
for the whole; this power entirely rests with the great national chief,
who presides at the council fire of their grandfather.

Indian nations or tribes connected with each other are not always
connected by blood or descended from the same original stock.
Some are admitted into the connexion by adoption. Such are the
Tuscaroras among the Six Nations; such the Cherokees among the
Lenni Lenape. Thus, in the year 1779, a deputation of fourteen men
came from the Cherokee nation to the council fire of the Delawares,
to condole with their grandfather on the loss of their head chief.247
There are tribes, on the other hand, who have wandered far from
the habitations of those connected with them by blood or
relationship. It is certain that they can no longer be benefited by the
general council fire. They, therefore, become a people by
themselves, and pass with us for a separate nation, if they only have
a name; nevertheless, (if I am rightly informed) they well know to
what stock or nation they originally belonged, and if questioned on
that subject, will give correct answers. It is therefore very important
to make these enquiries of any tribe or nation that a traveller may
find himself among. The analogy of languages is the best and most
unequivocal sign of connexion between Indian tribes; yet the
absence of that indication should not always be relied upon.

It may not be improper also to mention in this place that the purity
or correctness with which a language is spoken, will greatly help to
discover who is the head of the national family. For no where is the
language so much cultivated as in the vicinity of the great national
council fire, where the orators have the best opportunity of
displaying their talents. Thus the purest and most elegant dialect of
the Lenape language, is that of the Unami or Turtle tribe.
CHAPTER XLIV.
THE INDIANS AND THE WHITES COMPARED.

F lions had painters! This proverbial saying applies with


equal force to the American Indians. They have no
historians among them, no books, no newspapers, no
convenient means of making their grievances known to a
sympathising world. Why, then, should not a white man, a Christian,
who has spent among them the greatest part of his life, and was
treated by them at all times with hospitality and kindness, plead
their honest cause, and defend them as they would defend
themselves, if they had but the means of bringing their facts and
their arguments before an impartial public?

Those who have never taken the pains to enquire into the real
character and disposition of the American Indians, naturally
suppose, that a people who have no code of laws for their
government, but where every man is at liberty to do what he
pleases, where men never forget or forgive injuries, and take
revenge in their own way, often in the most cruel manner, and are
never satisfied until they have been revenged, must of course be
barbarians and savages; by which undefined words is understood
whatever is bad, wicked, and disgraceful to human nature.
Imagination is immediately at work to paint them as a species of
monsters, to whom cruelty is an appetite; a sort of human-shaped
tigers and panthers, strangers to the finer feelings, and who commit
acts of barbarity without any excitement but that of their depraved
inclination, and without even suspecting that there are such things in
nature as virtue on the one hand and crime on the other.

But nothing is so false as this picture of the Indians. The worst that
can be said of them is, that the passion of revenge is so strong in
their minds, that it carries them beyond all bounds. But set this
aside, and their character is noble and great. They have no written
laws, but they have usages founded on the most strict principles of
equity and justice. Murder with them is punished with death. It is
true, that as was the case not many centuries ago among the most
civilised nations of Europe, the death of a man may be compounded
for with his surviving relations; if, however, they do not choose to
accept of the terms offered, any one of them may become the
executioner of the murderer.

Thieves are compelled to restore what they have stolen, or to make


satisfactory amends to the injured party; in their default, their
nearest relations are obliged to make up the loss. If the thief, after
sufficient warning, continues his bad practices, he is disowned by his
nation, and any one may put him to death the next time that he is
caught in the act of stealing, or that it can be clearly proved to have
been committed by him. I have given two instances of the kind in a
former chapter,248 and I recollect another which will put what I have
said in the strongest light. I once knew an Indian chief, who had a
son of a vicious disposition, addicted to stealing, and who would
take no advice. His father, tired and unable to satisfy all the
demands which were made upon him for the restitution of articles
stolen by his son, at last issued his orders for shooting him the next
time he should be guilty of a similar act.

As to crimes and offences of an inferior nature to murder and theft,


they are left to the injured party to punish in such manner as he
thinks proper. Such are personal insults and threats, which among
those people are not considered as slight matters. If the will and
intention of the aggressor appear to be bad; if the insult offered is
considered as the forerunner of something worse; or, as the Indians
express themselves, if the “murdering spirit” is “alive” within him
who offers or threatens violence to another, they think themselves
justified in preventing the act meditated against them; in such a
case, they consider the killing the aggressor as an act of necessity
and self defence. Yet it is very rarely, indeed, that such punishments
are inflicted.249 The Indians, in general, avoid giving offence as
much as possible. They firmly believe that bad thoughts and actions
proceed from the evil spirit, and carefully avoid every thing that is
bad.

Every person who is well acquainted with the true character of the
Indians will admit that they are peaceable, sociable, obliging,
charitable, and hospitable among themselves, and that those virtues
are, as it were, a part of their nature. In their ordinary intercourse,
they are studious to oblige each other. They neither wrangle nor
fight; they live, I believe, as peaceably together as any people on
earth, and treat one another with the greatest respect. That they are
not devoid of tender feelings has been sufficiently shewn in the
course of this work. I do not mean to speak of those whose manners
have been corrupted by a long intercourse with the worst class of
white men; they are a degenerate race, very different from the true
genuine Indians whom I have attempted to describe.

If any one should be disposed to think that I have exaggerated in


the picture which I have drawn of these original people, as they call
themselves, I appeal to the numerous impartial writers who have
given the same testimony respecting them. What says Christopher
Columbus himself of the American Indians in his letters to his
sovereign? “There are not,” says he, “a better people in the world
than these; more affectionate, affable, or mild. They love their
neighbours as themselves.”

Similar encomiums were passed on them by some of the first


Englishmen who came to settle in this country. The Reverend Mr.
Cushman, in a sermon preached at Plymouth in 1620, says: “The
Indians are said to be the most cruel and treacherous people in all
those parts, even like lions; but to us they have been like lambs, so
kind, so submissive and trusty, as a man may truly say, many
Christians are not so kind and sincere.”

The learned Dr. Elias Boudinot, of Burlington, in New Jersey (a man


well remembered as one of the most eminent leaders of the
American Revolution),250 in a work251 which, whatever opinion may
be entertained of the hypothesis that he contends for, well deserves
to be read, for the spirit which it breathes and the facts that it
contains, has brought together in one view, the above and many
other authorities of eminent men in favour of the American Indians,
and in proof that their character is such as I have described. I shall
not repeat after him what Las Casas, William Penn, Bryan Edwards,
the Abbé Clavigero, Father Charlevoix and others, have said on the
same subject; those numerous and weighty testimonies may be
found in the work to which I have referred.252 But I cannot refrain
from transcribing the opinion of the venerable author himself, to
which his high character, his learning, and independence, affix a
more than common degree of authority.

“It is a matter of fact,” says Dr. Boudinot, “proved by most historical


accounts, that the Indians, at our first acquaintance with them,
generally manifested themselves kind, hospitable and generous to
the Europeans, so long as they were treated with justice and
humanity. But when they were, from a thirst of gain, over-reached
on many occasions, their friends and relations treacherously
entrapped and carried away to be sold for slaves, themselves
injuriously oppressed, deceived and driven from their lawful and
native possessions; what ought to have been expected, but
inveterate enmity, hereditary animosity, and a spirit of perpetual
revenge? To whom should be attributed the evil passions, cruel
practices and vicious habits to which they are now changed, but to
those who first set them the example, laid the foundation and then
furnished the continual means for propagating and supporting the
evil?”253
Such was the original character of the Indians, stamped, as it were,
upon them by nature; but fifty or sixty years back, whole
communities of them bore the stamp of this character, difficult now
to be found within the precincts of any part of their territory
bordering on the settlements of the white people!

What! will it be asked, can this be a true picture of the character of


the Indians; of those brutes, barbarians, savages, men without
religion or laws, who commit indiscriminate murders, without
distinction of age or sex? Have they not in numberless instances
desolated our frontiers, and butchered our people? Have they not
violated treaties and deceived the confidence that we placed in
them? No, no; they are beasts of prey in the human form; they are
men with whom no faith is to be kept, and who ought to be cut off
from the face of the earth!

Stop, my friends! hard names and broad assertions are neither


reasons nor positive facts. I am not prepared to enter into a
discussion with you on the comparative merits or demerits of the
Indians and whites; for I am unskilled in argument, and profess only
to be a plain matter of fact man. To facts therefore I will appeal. I
admit that the Indians have sometimes revenged, cruelly revenged,
the accumulated wrongs which they have suffered from unprincipled
white men; the love of revenge is a strong passion which their
imperfect religious notions have not taught them to subdue. But how
often have they been the aggressors in the unequal contests which
they have had to sustain with the invaders of their country? In how
many various shapes have they not been excited and their passions
roused to the utmost fury by acts of cruelty and injustice on the part
of the whites, who have made afterwards the country ring with their
complaints against the lawless savages, who had not the means of
being heard in their defence? I shall not pursue these questions any
farther, but let the facts that I am going to relate speak for
themselves.
In the summer of the year 1763, some friendly Indians from a
distant place, came to Bethlehem to dispose of their peltry for
manufactured goods and necessary implements of husbandry.
Returning home well satisfied, they put up the first night at a tavern,
eight miles distant from this place.254 The landlord not being at
home, his wife took the liberty of encouraging the people who
frequented her house for the sake of drinking to abuse those
Indians, adding, “That she would freely give a gallon of rum to any
one of them that should kill one of these black d——ls.” Other white
people from the neighbourhood came in during the night, who also
drank freely, made a great deal of noise, and increased the fears of
those poor Indians, who, for the greatest part, understanding
English, could not but suspect that something bad was intended
against their persons. They were not, however, otherwise disturbed:
but in the morning, when, after a restless night, they were preparing
to set off, they found themselves robbed of some of the most
valuable articles they had purchased, and on mentioning this to a
man who appeared to be the bar-keeper, they were ordered to leave
the house. Not being willing to lose so much property, they retired to
some distance into the woods, where, some of them remaining with
what was left them, the others returned to Bethlehem and lodged
their complaint with a justice of the peace. The magistrate gave
them a letter to the landlord, pressing him without delay to restore
to the Indians the goods that had been taken from them. But
behold! when they delivered that letter to the people at the inn, they
were told in answer: “that if they set any value on their lives, they
must make off with themselves immediately.” They well understood
that they had no other alternative, and prudently departed without
having received back any of their goods.255 Arrived at Nescopeck256
on the Susquehannah, they fell in with some other Delawares, who
had been treated much in the same manner, one of them having had
his rifle stolen from him. Here the two parties agreed to take
revenge in their own way, for those insults and robberies for which
they could obtain no redress; and that they determined to do as
soon as war should be again declared by their nation against the
English.

Scarcely had these Indians retired, when in another place, about


fourteen miles distant from the former, one man, two women and a
child, all quiet Indians, were murdered in a most wicked and
barbarous manner, by drunken militia officers and their men, for the
purpose of getting their horse and the goods they had just
purchased.257 One of the women, falling on her knees, begged in
vain for the life of herself and her child, while the other woman,
seeing what was doing, made her escape to the barn, where she
endeavoured to hide herself on the top of the grain. She however
was discovered, and inhumanly thrown down on the threshing floor
with such force that her brains flew out.258

Here, then, were insults, robberies and murders, all committed


within the short space of three months, unatoned for and
unrevenged. There was no prospect of obtaining redress; the
survivors were therefore obliged to seek some other means to obtain
revenge. They did so; the Indians, already exasperated against the
English in consequence of repeated outrages, and considering the
nation as responsible for the injuries which it did neither prevent nor
punish, and for which it did not even offer to make any kind of
reparation, at last declared war, and then the injured parties were at
liberty to redress themselves for the wrongs they had suffered. They
immediately started against the objects of their hatred, and finding
their way, unseen and undiscovered, to the inn which had been the
scene of the first outrage, they attacked it at daybreak, fired into it
on the people within, who were lying in their beds. Strange to relate!
the murderers of the man, two women, and child, were among
them. They were mortally wounded, and died of their wounds
shortly afterwards. The Indians, after leaving this house, murdered
by accident an innocent family, having mistaken the house that they
meant to attack, after which they returned to their homes.259
Now a violent hue and cry was raised against the Indians—no
language was too bad, no crimes too black to brand them with. No
faith was to be placed in those savages; treaties with them were of
no effect; they ought to be cut off from the face of the earth! Such
was the language at that time in everybody’s mouth; the
newspapers were filled with accounts of the cruelties of the Indians,
a variety of false reports were circulated in order to rouse the people
against them, while they, the really injured party, having no printing
presses among them, could not make known the story of their
grievances.

“No faith can be placed in what the Indians promise at treaties; for
scarcely is a treaty concluded than they are again murdering us.”
Such is our complaint against these unfortunate people; but they will
tell you that it is the white men in whom no faith is to placed. They
will tell you, that there is not a single instance in which the whites
have not violated the engagements that they had made at treaties.
They say that when they had ceded lands to the white people, and
boundary lines had been established—“firmly established!” beyond
which no whites were to settle; scarcely was the treaty signed, when
white intruders again were settling and hunting on their lands! It is
true that when they preferred their complaints to the government,
the government gave them many fair promises, and assured them
that men would be sent to remove the intruders by force from the
usurped lands. The men, indeed, came, but with chain and compass
in their hands, taking surveys of the tracts of good land, which the
intruders, from their knowledge of the country, had pointed out to
them!

What was then to be done, when those intruders would not go off
from the land, but, on the contrary, increased in numbers? “Oh!”
said those people, (and I have myself frequently heard this language
in the Western country,) “a new treaty will soon give us all this land;
nothing is now wanting but a pretence to pick a quarrel with them!”
Well, but in what manner is this quarrel to be brought about? A
David Owen, a Walker, and many others might, if they were alive,
easily answer this question. A precedent, however, may be found, on
perusing Mr. Jefferson’s Appendix to his Notes on Virginia. On all
occasions, when the object is to murder Indians, strong liquor is the
main article required; for when you have them dead drunk, you may
do to them as you please, without running the risk of losing your
life. And should you find that the laws of your country may reach
you where you are, you have only to escape or conceal yourself for a
while, until the storm has blown over! I well recollect the time when
thieves and murderers of Indians fled from impending punishment
across the Susquehannah, where they considered themselves safe;
on which account this river had the name given to it of “the rogue’s
river.” I have heard other rivers called by similar names.

In the year 1742, the Reverend Mr. Whitefield offered the Nazareth
Manor (as it was then called) for sale to the United Brethren.260 He
had already begun to build upon it a spacious stone house, intended
as a school house for the education of negro children. The Indians,
in the meanwhile, loudly exclaimed against the white people for
settling in this part of the country, which had not yet been legally
purchased of them, but, as they said, had been obtained by
fraud.261 The Brethren declined purchasing any lands on which the
Indian title had not been properly extinguished, wishing to live in
peace with all the Indians around them. Count Zinzendorff happened
at that time to arrive in the country; he found that the agents of the
proprietors would not pay to the Indians the price which they asked
for that tract of land; he paid them out of his private purse the
whole of the demand which they made in the height of their ill
temper, and moreover gave them permission to abide on the land, at
their village, (where, by the by, they had a fine large peach orchard,)
as long as they should think proper. But among those white men,
who afterwards came and settled in the neighbourhood of their
tract, there were some who were enemies to the Indians, and a
young Irishman, without cause or provocation, murdered their good
and highly respected chief Tademi,262 a man of such an easy and
friendly address, that he could not but be loved by all who knew
him. This, together with the threats of other persons, ill disposed
towards them, was the cause of their leaving their settlement on this
manor, and removing to places of greater safety.

It is true, that when flagrant cases of this description occurred, the


government, before the Revolution, issued proclamations offering
rewards for apprehending the offenders, and in later times, since the
country has become more thickly settled, those who had been guilty
of such offences were brought before the tribunals to take their
trials. But these formalities have proved of little avail. In the first
case, the criminals were seldom, if ever, apprehended; in the
second, no jury could be found to convict them; for it was no
uncommon saying among many of the men of whom juries in the
frontier countries were commonly composed, that no man should be
put to death for killing an Indian; for it was the same thing as killing
a wild beast!

But what shall I say of the conduct of the British agents, or deputy
agents, or by whatsoever other name they may be called, who, at
the commencement of the American Revolution, openly excited the
Indians to kill and destroy all the rebels without distinction? “Kill all
the rebels,” they would say, “put them all to death, and spare none.”
A veteran chief of the Wyandot nation, who resided near Detroit,
observed to one of them that surely it was meant that they should
kill men only, and not women and children. “No, no,” was the
answer, “kill all, destroy all; nits breed lice!” The brave veteran263
was so disgusted with this reply, that he refused to go out at all;
wishing however to see and converse with his old brother soldiers of
the Delaware nation, with whom he had fought against the English
in the French war, he took the command of a body of ninety chosen
men, and being arrived at the seat of the government of the
Delawares, on the Muskingum, he freely communicated to his old
comrades (among whom was Glikhican, whom I shall presently have
occasion further to mention) what had taken place, and what he had
resolved on; saying that he never would be guilty of killing women
and children; that this was the first and would be the last of his
going out this war; that in ten days they should see him come back
with one prisoner only, no scalp to a pole, and no life lost. He kept
his word. The sixteen chiefs under him, from respect and principle,
agreed to all his proposals and wishes.

How different the conduct of the Indians from that of their inhuman
employers! I have already related the noble speech of Captain Pipe
to the British Commandant at Detroit, and I have done justice to the
character of that brave officer, who surely ought not to be
confounded with those Indian agents that I have spoken of. But
what said Pipe to him? “Innocence had no part in your quarrels; and
therefore I distinguished—I spared. Father! I hope you will not
destroy what I have saved!”264 I have also told the conduct of the
two young spirited Delawares265 who saved the life of the venerable
Missionary Zeisberger, at the risk of their own. But it is not only
against their own people that Indians have afforded their protection
to white men, but against the whites themselves.

In the course of the Revolutionary war, in which (as in all civil


commotions) brother was seen fighting against brother, and friend
against friend, a party of Indian warriors, with whom one of those
white men, who, under colour of attachment to their king, indulged
in every sort of crimes, was going out against the settlers on the
Ohio, to kill and destroy as they had been ordered. The chief of the
expedition had given strict orders not to molest any of the white
men who lived with their friends the Christian Indians; yet as they
passed near a settlement of these converts, the white man,
unmindful of the orders he had received, attempted to shoot two of
the Missionaries who were planting potatoes in their field, and
though the captain warned him to desist, he still obstinately
persisted in his attempt. The chief, in anger, immediately took his
gun from him, and kept him under guard until they had reached a
considerable distance from the place. I have received this account
from the chief himself, who on his return sent word to the
Missionaries that they would do well not to go far from home, as
they were in too great danger from the white people.

Another white man of the same description, whom I well knew,


related with a kind of barbarous exultation, on his return to Detroit
from a war excursion with the Indians in which he had been
engaged, that the party with which he was, having taken a woman
prisoner who had a sucking babe at her breast, he tried to persuade
the Indians to kill the child, lest its cries should discover the place
where they were; the Indians were unwilling to commit the deed, on
which the white man at once jumped up, tore the child from its
mother’s arms and taking it by the legs dashed its head against a
tree, so that the brains flew out all around. The monster in relating
this story said, “The little dog all the time was making wee!” He
added, that if he were sure that his old father, who some time before
had died in Old Virginia, would, if he had lived longer, have turned
rebel, he would go all the way into Virginia, raise the body, and take
off his scalp!

Let us now contrast with this the conduct of the Indians. Carver tells
us in his travels with what moderation, humanity and delicacy they
treat female prisoners, and particularly pregnant women.266 I refer
the reader to the following fact, as an instance of their conduct in
such cases. If his admiration is excited by the behaviour of the
Indians, I doubt not that his indignation will be raised in an equal
degree by that of a white man who unfortunately acts a part in the
story.

A party of Delawares, in one of their excursions during the


Revolutionary war, took a white female prisoner. The Indian chief,
after a march of several days, observed that she was ailing, and was
soon convinced (for she was far advanced in her pregnancy) that the
time of her delivery was near. He immediately made a halt on the
bank of a stream, where at a proper distance from the encampment,
he built for her a close hut of peeled barks, gathered dry grass and
fern to make her a bed, and placed a blanket at the opening of the
dwelling as a substitute for a door. He then kindled a fire, placed a
pile of wood near it to feed it occasionally, and placed a kettle of
water at hand where she might easily use it. He then took her into
her little infirmary, gave her Indian medicines, with directions how to
use them, and told her to rest easy and she might be sure that
nothing should disturb her. Having done this, he returned to his
men, forbade them from making any noise, or disturbing the sick
woman in any manner, and told them that he himself should guard
her during the night. He did so, and the whole night kept watch
before her door, walking backward and forward, to be ready at her
call at any moment, in case of extreme necessity. The night passed
quietly, but in the morning, as he was walking by on the bank of the
stream, seeing him through the crevices, she called to him and
presented her babe. The good chief, with tears in his eyes, rejoiced
at her safe delivery; he told her not to be uneasy, that he should lay
by for a few days and would soon bring her some nourishing food,
and some medicines to take. Then going to his encampment, he
ordered all his men to go out a hunting, and remained himself to
guard the camp.

Now for the reverse of the picture. Among the men whom this chief
had under his command, was one of those white vagabonds whom I
have before described. The captain was much afraid of him, knowing
him to be a bad man; and as he had expressed a great desire to go
a hunting with the rest, he believed him gone, and entertained no
fears for the woman’s safety. But it was not long before he was
undeceived. While he was gone to a small distance to dig roots for
his poor patient, he heard her cries, and running with speed to her
hut, he was informed by her that the white man had threatened to
take her life if she did not immediately throw her child into the river.
The Captain, enraged at the cruelty of this man, and the liberty he
had taken with his prisoner, hailed him as he was running off, and
told him, “That the moment he should miss the child, the tomahawk
should be in his head.” After a few days this humane chief placed
the woman carefully on a horse, and they went together to the place
of their destination, the mother and child doing well. I have heard
him relate this story, to which he added, that whenever he should go
out on an excursion, he never would suffer a white man to be of his
party.

Yet I must acknowledge that I have known an Indian chief who had
been guilty of the crime of killing the child of a female prisoner. It
was Glikhican,267 of whom I have before spoken, as one of the
friends of the brave Wyandot who expressed so much horror at the
order given to him by the Indian agents to murder women and
children.268 In the year 1770, he joined the congregation of the
Christian Indians; the details of his conversion are related at large by
Loskiel in his History of the Missions.269 Before that time he had
been conspicuous as a warrior and a counsellor, and in oratory it is
said he never was surpassed. This man, having joined the French, in
the year 1754, or 1755, in their war against the English, and being
at that time out with a party of Frenchmen, took, among other
prisoners, a young woman named Rachel Abbott, from the
Conegocheague settlement,270 who had at her breast a sucking
babe. The incessant cries of the child, the hurry to get off, but above
all, the persuasions of his white companions, induced him, much
against his inclination, to kill the innocent creature; while the
mother, in an agony of grief, and her face suffused with tears,
begged that its life might be spared. The woman, however, was
brought safe to the Ohio, where she was kindly treated and adopted,
and some years afterwards was married to a Delaware chief of
respectability, by whom she had several children, who are now living
with the Christian Indians in Upper Canada.

Glikhican never forgave himself for having committed this crime,


although many times, and long before his becoming a Christian, he
had begged the woman’s pardon with tears in his eyes, and received
her free and full forgiveness. In vain she pointed out to him all the
circumstances that he could have alleged to excuse the deed; in vain
she reminded him of his unwillingness at the time, and his having
been in a manner compelled to it by his French associates; nothing
that she did say could assuage his sorrow or quiet the perturbation
of his mind; he called himself a wretch, a monster, a coward (the
proud feelings of an Indian must be well understood to judge of the
force of this self-accusation), and to the moment of his death the
remembrance of this fatal act preyed like a canker worm upon his
spirits. I ought to add, that from the time of his conversion, he lived
the life of a Christian, and died as such.

The Indians are cruel to their enemies! In some cases they are, but
perhaps not more so than white men have sometimes shewn
themselves. There have been instances of white men flaying or
taking off the skin of Indians who had fallen into their hands, then
tanning those skins, or cutting them in pieces, making them up into
razor-straps, and exposing those for sale, as was done at or near
Pittsburg sometime during the Revolutionary war. Those things are
abominations in the eyes of the Indians, who, indeed, when strongly
excited, inflict torments on their prisoners and put them to death by
cruel tortures, but never are guilty of acts of barbarity in cold blood.
Neither do the Delawares and some other Indian nations, ever on
any account disturb the ashes of the dead.

The custom of torturing prisoners is of ancient date, and was first


introduced as a trial of courage. I have been told, however, that
among some tribes it has never been in use; but it must be added
that those tribes gave no quarter. The Delawares accuse the Iroquois
of having been the inventors of this piece of cruelty, and charge
them further with eating the flesh of their prisoners after the torture
was over. Be this as it may, there are now but few instances of
prisoners being put to death in this manner.

Rare as these barbarous executions now are, I have reason to


believe that they would be still less frequent, if proper pains were
taken to turn the Indians away from this heathenish custom. Instead
of this, it is but too true that they have been excited to cruelty by
unprincipled white men, who have joined in their war-feasts, and
even added to the barbarity of the scene. Can there be a more
brutal act than, after furnishing those savages, as they are called,
with implements of war and destruction, to give them an ox to kill
and to roast whole, to dance the war dance with them round the
slaughtered animal, strike at him, stab him, telling the Indians at the
same time: “Strike, stab! Thus you must do to your enemy!” Then
taking a piece of the meat, and tearing it with their teeth: “So you
must eat his flesh!” and sucking up the juices: “Thus you must drink
his blood!” and at last devour the whole as wolves do a carcass. This
is what is known to have been done by some of those Indian agents
that I have mentioned.

“Is this possible?” the reader will naturally exclaim. Yes, it is


possible, and every Indian warrior will tell you that it is true. It has
come to me from so many credible sources, that I am forced to
believe it. How can the Indians now be reproached with acts of
cruelty to which they have been excited by those who pretended to
be Christians and civilised men, but who were worse savages than
those whom, no doubt, they were ready to brand with that name?

When hostile governments give directions to employ the Indians


against their enemies, they surely do not know that such is the
manner in which their orders are to be executed; but let me tell
them and every government who will descend to employing these
auxiliaries, that this is the only way in which their subaltern agents
will and can proceed to make their aid effectual. The Indians are not
fond of interfering in quarrels not their own, and will not fight with
spirit for the mere sake of a livelihood which they can obtain in a
more agreeable manner by hunting and their other ordinary
occupations. Their passions must be excited, and that is not easily
done when they themselves have not received any injury from those
against whom they are desired to fight. Behold, then, the
abominable course which must unavoidably be resorted to—to
induce them to do what?—to lay waste the dwelling of the peaceable
cultivator of the land, and to murder his innocent wife and his
helpless children! I cannot pursue this subject farther, although I am
far from having exhausted it. I have said enough to enable the
impartial reader to decide which of the two classes of men, the
Indians and the whites, are most justly entitled to the epithets of
brutes, barbarians, and savages. It is not for me to anticipate his
decision.

But if the Indians, after all, are really those horrid monsters which
they are alleged to be, two solemn, serious questions have often
occurred to my mind, to which I wish the partisans of that doctrine
would give equally serious answers.

1. Can civilised nations, can nations which profess Christianity, be


justified in employing people of that description to aid them in
fighting their battles against their enemies, Christians like
themselves?

2. When such nations offer up their prayers to the throne of the


most High, supplicating the Divine Majesty to grant success to their
arms, can they, ought they to expect that those prayers will be
heard?

I have done. Let me only be permitted, in conclusion, to express my


firm belief, the result of much attentive observation and long
experience while living among the Indians, that if we would only
observe towards them the first and most important precept of our
holy religion, “to do to others as we would be done to;” if, instead of
employing them to fight our battles, we encouraged them to remain
at peace with us and with each other, they might easily be brought
to a state of civilisation, and become Christians.

I still indulge the hope that this work will be accomplished by a wise
and benevolent government. Thus we shall demonstrate the falsity
of the prediction of the Indian prophets, who say: “That when the
whites shall have ceased killing the red men, and got all their lands
from them, the great tortoise which bears this island upon his back,
shall dive down into the deep and drown them all, as he once did
before, a great many years ago; and that when he again rises, the
Indians shall once more be put in possession of the whole country.”
CONCLUSION.
HAVE thus finished the work which was required of me by
the Historical Committee of the American Philosophical
Society. On reading over the printed sheets which have
been kindly sent to me from Philadelphia, as they issued from the
press, I have noticed several errors, some of which may be ascribed
to me, others to the transcriber of the manuscript, and very few to
the printer. I regret that there are among them some mistakes in
dates and names of places; they are all rectified in the errata.

I am very sensible of the many defects of this little work in point of


method, arrangement, composition and style. I am not an author by
profession; the greatest part of my life was spent among savage
nations, and I have now reached the age of seventy-five, at which
period of life little improvement can be expected. It is not, therefore,
as an author that I wish to be judged, but as a sincere relator of
facts that have fallen within my observation and knowledge. I
declare that I have said nothing but what I certainly know or verily
believe. In matters of mere opinion, I may be contradicted; but in
points of fact I have been even scrupulous, and purposely omitted
several anecdotes for which I could not sufficiently vouch. In my
descriptions of character, I may have been an unskilful painter, and
ill chosen expressions may imperfectly have sketched out the images
that are imprinted on my mind; but the fault is in the writer, not in
the man.

It is with pleasure that I inform the reader that the parts of Mr.
Zeisberger’s Iroquois Dictionary which I have mentioned above,
(pages 97, 118,) as being irretrievably lost, have most fortunately
been found since this work is in the press. The book has been neatly
bound in seven quarto volumes, and will remain a monument of the
richness and comprehensiveness of the languages of the Indian
nations. Several valuable grammatical works on the same language,
by the same author and Mr. Pyrlæus, have been recovered at the
same time, by means of which, the idiom of the Six Nations may
now be scientifically studied.
When I spoke (p. 136) of the impression made by Captain Pipe’s
speech “on all present,” I meant only on those who understood the
language; for there were many who did not, and M. Baby, the
Canadian interpreter, did not explain to the bystanders the most
striking passages, but went now and then to the Commandant and
whispered in his ear. Captain Pipe, while he spoke, was exceedingly
animated, and twice advanced so near to the Commandant, that M.
Baby ordered him to fall back to his place. All who were present
must have at least suspected that his speech was not one of the
ordinary kind, and that everything was not as they might suppose it
ought to be.

I promised in my introduction (p. xxvi.) to subjoin an explanatory list


of the Indian nations which I have mentioned in the course of this
work, but I find that I have been so full on the subject that such a
list is unnecessary.

I have classed the Florida Indians together in respect of language,


on the supposition that they all speak dialects of the same mother
tongue; the fact, however, may be otherwise, though it will be
extraordinary that there should be several languages entirely
different from each other in the narrow strip of land between the
Carolinas and the Mississippi, when there are but two principal ones
in the rest of the United States. It is to be expected that the
researches of the Historical Committee will throw light upon this
subject.
ERRATA IN PART I

Between the words “if” and “what” insert “we can


Page 26, Line 5—
credit.”
For “declaring at the same time” read “and
30, 15—
declared afterwards.”
31, 8— For “Mohicans” read “Lenape.”
67, 14— For “1742” read “and November 1756.”
72, 12— Dele “in which.”
77, 11— For “Delawares” read “Mohicans.”
80, 18— For “1787” read “1781.”
81, 5— For “us” read “them.”
84, 12— For “Mouseys” read “Monseys.”
Beginning a paragraph, for “1768, about six” read
23—
“1772, a few.”
Of third note, for “Shawanachau” read
85, 29—
“Shawanachan.”
90, 13— For “Shawanos” read “Nanticokes.”
91, 13— For “schschequon” read “shechschequon.”
92, 29 and 30— For “Tawachguáno” read “Tayachguáno.”
110, 12— For “once” read “sometimes.”
111, 8— For “should” read “deserved to.”
10— For “to” read “out at.”
12— Dele “outside of the door and.”
118, 15— For “Thornhallesen” read “Thorhallesen.”
122, 10— Of the first note, for “p. 3” read “p. 5.”
130, 8— For “or” read “nor.”
131, 22— For “met” read “saw.”
25— For “days” read “hours.”
133, 5— For “December” read “November.”
140, 10— Of No. 43, for “with” read “of.”
For “they” read “the Chippeways and some other
143, 34—
nations.”
146, 17— For “your” read “yon.”
After the word “nation” insert “which they do not
150, 4—
approve of.”
153, 31— For “they sure” read “they are sure.”
160, 32— For “reply” read “answer.”
164, 26— For “decide” read “say.”
28— For “man” read “men.
166, 2— Between “is” and “even” insert “sometimes.”
22— For “an old Indian” read “several old men.”
167, 11 and 13— For “road” read “course.”
174, 18— For “where” read “whence.”
For “Duke Holland” read “Luke Holland;” the same
178, 33—
where the name again occurs.
201, 5— Dele “again.”
216, 29— For “very often” read “sometimes.”
217, 2— For “inches” read “feet.”
218, 14— For “of” read “on.”
243, 3— For “Americans” read “white men.”
250, 9— For “killed” read “eaten.”
253, 37— For “Pauk-sit” read “P’duk-sit.”
263, 14— Dele “lands or.”
278, 35— For “Albany” read “Pittsburgh.”
283, 31— For “Sandusky” read “Muskingum.”
293, 26— For “bought” read “brought.”
313, 23— For “them” read “us.”
PART II.

CORRESPONDENCE
BETWEEN
THE REV. JOHN HECKEWELDER.
OF BETHLEHEM,
AND

PETER S. DUPONCEAU, ESQ.,


CORRESPONDING SECRETARY OF THE HISTORICAL AND LITERARY
COMMITTEE OF THE AMERICAN PHILOSOPHICAL SOCIETY,

RESPECTING THE

Languages of the American Indians.


The following Correspondence between Mr. Heckewelder and
Peter S. Du Ponceau, Esq., Corresponding Secretary of the
Historical and Literary Committee of the American Philosophical
Society, and subsequently, till his death in 1844, President of
that Society, is appended as a fitting sequel to the preceding
Account.
INTRODUCTION

HE Historical and Literary Committee of the American


Philosophical Society, desirous of taking the most effectual
means to promote the objects of their institution, directed
their corresponding secretary to address letters in their name to
such persons in the United States as had turned their attention to
similar objects, and solicit their assistance.

Among other well-informed individuals, the Reverend Mr.


Heckewelder of Bethlehem was pointed out by the late Dr. Caspar
Wistar, President of the Society, and one of the most active and
useful members of the Committee, as a gentleman whose intimate
knowledge of the American Indians, their usages, manners and
languages, enabled him to afford much important aid to their
labours. In consequence of this suggestion, the secretary wrote to
Mr. Heckewelder the letter No. 1, and Dr. Wistar seconded his
application by the letter No. 2. The languages of the Indians were
not at that time particularly in the view of the Committee; the
manners and customs of those nations were the principal subjects
on which they wished and expected to receive information. But Mr.
Heckewelder having with his letter No. 4, sent them the MS. of Mr.
Zeisberger’s Grammar of the Delaware Language, that
communication had the effect of directing their attention to this
interesting subject.

This MS. being written in German, was not intelligible to the greatest
number of the members. Two of them, the Reverend Dr. Nicholas
Collin, and the corresponding secretary, were particularly anxious to
be honoured with the task of translating it; but the secretary having
claimed this labour as part of his official duty, it was adjudged to
him. While he was translating that work, he was struck with the
beauty of the grammatical forms of the Lenape idiom, which led him
to ask through Dr. Wistar some questions of Mr. Heckewelder,271
which occurred to him as he was pursuing his labours, and produced
the correspondence now published, which was carried on by the
direction and under the sanction of the Committee.

The letters which passed at the beginning between Dr. Wistar and
Mr. Zeisberger,272 and are here published in their regular order, do
not, it is true, form a necessary part of this collection; but it will be
perceived, that to the two letters of Dr. Wistar, Nos. 2 and 6, we are
indebted for the valuable Historical Account of the Indians, which
forms the first number of this volume. It is just that he should have
the credit due to his active and zealous exertions.

It was intended that Mr. Zeisberger’s Grammar should have


immediately followed this Correspondence, which was considered as
introductory to it. But it being now evident that it would increase too
much the size of the volume, its publication is for the present
postponed.
CORRESPONDENCE
RESPECTING THE INDIAN LANGUAGES.

LETTER I.
MR. DUPONCEAU TO MR. HECKEWELDER.

Philadelphia, 9th January, 1816.

Sir.—As corresponding secretary to the Historical Committee of the


American Philosophical Society, it is my duty to solicit the aid of men
of learning and information, by the help of whose knowledge light
may be thrown on the yet obscure history of the early times of the
colonization of this country, and particularly of this State. Our much-
respected President and common friend, Dr. Wistar, has often spoken
to me of the great knowledge which you possess respecting the
Indians who once inhabited these parts, and of your intimate
acquaintance with their languages, habits and history. He had
promised me, when you was last here, to do me the favour of
introducing me to you, but the bad state of his health and other
circumstances prevented it, which has been and still is to me the
cause of much regret. Permit me, sir, on the strength of his
recommendation, and the assurance he has given me that I might
rely on your zeal and patriotic feelings, to request, in the name of
the Historical Committee, that you will be so good as to aid their
labours by occasional communications on the various subjects that
are familiar to you and which relate to the early history of this
country. Accounts of the various nations of Indians which have at
different times inhabited Pennsylvania, their numbers, origin,
migrations, connexions with each other, the parts which they took in
the English and French wars and in the Revolutionary war, their
manners, customs, languages, and religion, will be very acceptable,
as well as every thing which you may conceive interesting, on a
subject which at no distant period will be involved in obscurity and
doubt, for want of the proper information having been given in time
by those cotemporaries who now possess the requisite knowledge
and are still able to communicate it. I hope, sir, that you will be able
to find some moments of leisure to comply, at least in part, with this
request, which you may do in any form that you may think proper. If
that of occasional letters to Dr. Wistar or myself should be the most
agreeable or convenient to you, you may adopt it, or any other
mode that you may prefer. I beg you will favour me with an answer
as soon as possible, that I may be able to inform the Committee of
what they may expect from you. You may be assured that all your
communications will be respectfully and thankfully received.

I am, very respectfully, Sir,


Your most obedient humble servant,
Peter S. Duponceau,
Corresponding Secretary.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookultra.com

You might also like