100% found this document useful (1 vote)
312 views

Programming in Haskell Second Edition, 5Th Printing Edition Hutton download pdf

Hutton

Uploaded by

issamesssc
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
312 views

Programming in Haskell Second Edition, 5Th Printing Edition Hutton download pdf

Hutton

Uploaded by

issamesssc
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Programming in Haskell Second Edition, 5Th


Printing Edition Hutton

https://textbookfull.com/product/programming-in-
haskell-second-edition-5th-printing-edition-
hutton/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Programming in Haskell 2nd Edition Graham Hutton

https://textbookfull.com/product/programming-in-haskell-2nd-edition-
graham-hutton/

textbookfull.com

Biota Grow 2C gather 2C cook Loucas

https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-loucas/

textbookfull.com

Thinking with Types Type level Programming in Haskell


Sandy Maguire

https://textbookfull.com/product/thinking-with-types-type-level-
programming-in-haskell-sandy-maguire/

textbookfull.com

Theory Research and Dynamics of Career Wellbeing Becoming


Fit for the Future Ingrid L. Potgieter

https://textbookfull.com/product/theory-research-and-dynamics-of-
career-wellbeing-becoming-fit-for-the-future-ingrid-l-potgieter/

textbookfull.com
Towards a Philosophy of Caring in Higher Education
Pedagogy and Nuances of Care Yusef Waghid

https://textbookfull.com/product/towards-a-philosophy-of-caring-in-
higher-education-pedagogy-and-nuances-of-care-yusef-waghid/

textbookfull.com

A Case-Based Approach to Emergency Psychiatry 1st Edition


Maloy

https://textbookfull.com/product/a-case-based-approach-to-emergency-
psychiatry-1st-edition-maloy/

textbookfull.com

Texas Politics Today 2017-2018 Edition Mark P. Jones

https://textbookfull.com/product/texas-politics-
today-2017-2018-edition-mark-p-jones/

textbookfull.com

Application of Peptide Based Prodrug Chemistry in Drug


Development 1st Edition Arnab De (Auth.)

https://textbookfull.com/product/application-of-peptide-based-prodrug-
chemistry-in-drug-development-1st-edition-arnab-de-auth/

textbookfull.com

The Brothers Corona A Novel The Americas Series 1st


Edition Guedea Rogelio

https://textbookfull.com/product/the-brothers-corona-a-novel-the-
americas-series-1st-edition-guedea-rogelio/

textbookfull.com
Moral Engines Exploring The Ethical Drives In Human Life
Cheryl Mattingly

https://textbookfull.com/product/moral-engines-exploring-the-ethical-
drives-in-human-life-cheryl-mattingly/

textbookfull.com
Programming in Haskell
Second Edition
Haskell is a purely functional language that allows programmers to
rapidly develop clear, concise and correct software. The language
has grown in popularity in recent years, both in teaching and in
industry. This book is based on the author’s experience of teaching
Haskell for more than 20 years. All concepts are explained from first
principles and no programming experience is required, making this
book accessible to a broad spectrum of readers. While Part I focuses
on basic concepts, Part II introduces the reader to more advanced
topics.
This new edition has been extensively updated and expanded to
include recent and more advanced features of Haskell, new
examples and exercises, selected solutions, and freely downloadable
lecture slides and code. The presentation is clean and simple, while
also being fully compliant with the latest version of the language,
including recent changes concerning applicative, monadic, foldable
and traversable types.
GRAHAM HUTTON is Professor of Computer Science at the University of
Nottingham. He has taught Haskell to thousands of students and
received numerous best lecturer awards. Hutton has served as an
editor of the Journal of Functional Programming, chair of the Haskell
Symposium and the International Conference on Functional
Programming, vice-chair of the ACM Special Interest Group on
Programming Languages, and he is an ACM Distinguished Scientist.
Programming in Haskell
Second Edition

GRAHAM HUTTON
University of Nottingham
University Printing House, Cambridge CB2 8BS, United Kingdom

One Liberty Plaza, 20th Floor, New York, NY 10006, USA


477 Williamstown Road, Port Melbourne, VIC 3207, Australia
4843/24, 2nd Floor, Ansari Road, Daryaganj, Delhi - 110002, India
79 Anson Road, #06-04/06, Singapore 079906

Cambridge University Press is part of the University of Cambridge.

It furthers the University’s mission by disseminating knowledge in the pursuit of education,


learning, and research at the highest international levels of excellence.

www.cambridge.org
Information on this title: www.cambridge.org/9781316626221
10.1017/9781316784099

© Graham Hutton 2007, 2016

This publication is in copyright. Subject to statutory exception and to the provisions of


relevant collective licensing agreements, no reproduction of any part may take place
without the written permission of Cambridge University Press.

First published 2007


Second edition 2016

Printed in the United Kingdom by Clays, St Ives plc in 2016

A catalogue record for this publication is available from the British Library

ISBN 978-1-316-62622-1 Paperback

Cambridge University Press has no responsibility for the persistence or accuracy of URLs for
external or third-party Internet Web sites referred to in this publication, and does not
guarantee that any content on such Web sites is, or will remain, accurate or appropriate.
For Annette, Callum and Tom
Contents

Foreword
Preface

Part I Basic Concepts


1 Introduction
1.1 Functions
1.2 Functional programming
1.3 Features of Haskell
1.4 Historical background
1.5 A taste of Haskell
1.6 Chapter remarks
1.7 Exercises

2 First steps
2.1 Glasgow Haskell Compiler
2.2 Installing and starting
2.3 Standard prelude
2.4 Function application
2.5 Haskell scripts
2.6 Chapter remarks
2.7 Exercises

3 Types and classes


3.1 Basic concepts
3.2 Basic types
3.3 List types
3.4 Tuple types
3.5 Function types
3.6 Curried functions
3.7 Polymorphic types
3.8 Overloaded types
3.9 Basic classes
3.10 Chapter remarks
3.11 Exercises

4 Defining functions
4.1 New from old
4.2 Conditional expressions
4.3 Guarded equations
4.4 Pattern matching
4.5 Lambda expressions
4.6 Operator sections
4.7 Chapter remarks
4.8 Exercises

5 List comprehensions
5.1 Basic concepts
5.2 Guards
5.3 The zip function
5.4 String comprehensions
5.5 The Caesar cipher
5.6 Chapter remarks
5.7 Exercises

6 Recursive functions
6.1 Basic concepts
6.2 Recursion on lists
6.3 Multiple arguments
6.4 Multiple recursion
6.5 Mutual recursion
6.6 Advice on recursion
6.7 Chapter remarks
6.8 Exercises

7 Higher-order functions
7.1 Basic concepts
7.2 Processing lists
7.3 The foldr function
7.4 The foldl function
7.5 The composition operator
7.6 Binary string transmitter
7.7 Voting algorithms
7.8 Chapter remarks
7.9 Exercises

8 Declaring types and classes


8.1 Type declarations
8.2 Data declarations
8.3 Newtype declarations
8.4 Recursive types
8.5 Class and instance declarations
8.6 Tautology checker
8.7 Abstract machine
8.8 Chapter remarks
8.9 Exercises

9 The countdown problem


9.1 Introduction
9.2 Arithmetic operators
9.3 Numeric expressions
9.4 Combinatorial functions
9.5 Formalising the problem
9.6 Brute force solution
9.7 Performance testing
9.8 Combining generation and evaluation
9.9 Exploiting algebraic properties
9.10 Chapter remarks
9.11 Exercises

Part II Going Further


10 Interactive programming
10.1 The problem
10.2 The solution
10.3 Basic actions
10.4 Sequencing
10.5 Derived primitives
10.6 Hangman
10.7 Nim
10.8 Life
10.9 Chapter remarks
10.10 Exercises

11 Unbeatable tic-tac-toe
11.1 Introduction
11.2 Basic declarations
11.3 Grid utilities
11.4 Displaying a grid
11.5 Making a move
11.6 Reading a number
11.7 Human vs human
11.8 Game trees
11.9 Pruning the tree
11.10 Minimax algorithm
11.11 Human vs computer
11.12 Chapter remarks
11.13 Exercises

12 Monads and more


12.1 Functors
12.2 Applicatives
12.3 Monads
12.4 Chapter remarks
12.5 Exercises

13 Monadic parsing
13.1 What is a parser?
13.2 Parsers as functions
13.3 Basic definitions
13.4 Sequencing parsers
13.5 Making choices
13.6 Derived primitives
13.7 Handling spacing
13.8 Arithmetic expressions
13.9 Calculator
13.10 Chapter remarks
13.11 Exercises

14 Foldables and friends


14.1 Monoids
14.2 Foldables
14.3 Traversables
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
14.4 Chapter remarks
14.5 Exercises

15 Lazy evaluation
15.1 Introduction
15.2 Evaluation strategies
15.3 Termination
15.4 Number of reductions
15.5 Infinite structures
15.6 Modular programming
15.7 Strict application
15.8 Chapter remarks
15.9 Exercises

16 Reasoning about programs


16.1 Equational reasoning
16.2 Reasoning about Haskell
16.3 Simple examples
16.4 Induction on numbers
16.5 Induction on lists
16.6 Making append vanish
16.7 Compiler correctness
16.8 Chapter remarks
16.9 Exercises

17 Calculating compilers
17.1 Introduction
17.2 Syntax and semantics
17.3 Adding a stack
17.4 Adding a continuation
17.5 Defunctionalising
17.6 Combining the steps
17.7 Chapter remarks
17.8 Exercises

Appendix A Selected solutions


A.1 Introduction
A.2 First steps
A.3 Types and classes
A.4 Defining functions
A.5 List comprehensions
A.6 Recursive functions
A.7 Higher-order functions
A.8 Declaring types and classes
A.9 The countdown problem
A.10 Interactive programming
A.11 Unbeatable tic-tac-toe
A.12 Monads and more
A.13 Monadic parsing
A.14 Foldables and friends
A.15 Lazy evaluation
A.16 Reasoning about programs
A.17 Calculating compilers

Appendix B Standard prelude


B.1 Basic classes
B.2 Booleans
B.3 Characters
B.4 Strings
B.5 Numbers
B.6 Tuples
B.7 Maybe
B.8 Lists
B.9 Functions
B.10 Input/output
B.11 Functors
B.12 Applicatives
B.13 Monads
B.14 Alternatives
B.15 MonadPlus
B.16 Monoids
B.17 Foldables
B.18 Traversables

Bibliography
Index
Foreword

It is nearly a century ago that Alonzo Church introduced the lambda


calculus, and over half a century ago that John McCarthy introduced
Lisp, the world’s second oldest programming language and the first
functional language based on the lambda calculus. By now, every
major programming language including JavaScript, C++, Swift,
Python, PHP, Visual Basic, Java, ... has support for lambda
expressions or anonymous higher-order functions.
As with any idea that becomes mainstream, inevitably the
underlying foundations and principles get watered down or
forgotten. Lisp allowed mutation, yet today many confuse functions
as first-class citizens with immutability. At the same time, other
effects such as exceptions, reflection, communication with the
outside world, and concurrency go unmentioned. Adding recursion in
the form of feedback-loops to pure combinational circuits lets us
implement mutable state via flip-flops. Similarly, using one effect
such as concurrency or input/output we can simulate other effects
such as mutability. John Hughes famously stated in his classic paper
Why Functional Programming Matters that we cannot make a
language more powerful by eliminating features. To that, we add
that often we cannot even make a language less powerful by
removing features. In this book, Graham demonstrates convincingly
that the true value of functional programming lies in leveraging first-
class functions to achieve compositionality and equational reasoning.
Or in Graham’s own words, “functional programming can be viewed
as a style of programming in which the basic method of computation
is the application of functions to arguments”. These functions do not
necessarily have to be pure or statically typed in order to realise the
simplicity, elegance, and conciseness of expression that we get from
the functional style.
While you can code like a functional hacker in a plethora of
languages, a semantically pure and lazy, and syntactically lean and
terse language such as Haskell is still the best way to learn how to
think like a fundamentalist. Based upon decades of teaching
experience, and backed by an impressive stream of research papers,
in this book Graham gently guides us through the whole gambit of
key functional programming concepts such as higher-order
functions, recursion, list comprehensions, algebraic datatypes and
pattern matching. The book does not shy away from more advanced
concepts. If you are still confused by the n-th blog post that
attempts to explain monads, you are in the right place. Gently
starting with the IO monad, Graham progresses from functors to
applicatives using many concrete examples. By the time he arrives at
monads, every reader will feel that they themselves could have
come up with the concept of a monad as a generic pattern for
composing functions with effects. The chapter on monadic parsers
brings everything together in a compelling use-case of parsing
arithmetic expressions in the implementation of a simple calculator.
This new edition not only adds many more concrete examples of
concepts introduced throughout the book, it also introduces the
novel Haskell concepts of foldable and traversable types. Readers
familiar with object-oriented languages routinely use iterables and
visitors to enumerate over all values in a container, or respectively to
traverse complex data structures. Haskell’s higher-kinded type
classes allow for a very concise and abstract treatment of these
concepts by means of the Foldable and Traversable classes. Last but
not least, the final chapters of the book give an in-depth overview of
lazy evaluation and equational reasoning to prove and derive
programs. The capstone chapter on calculating compilers especially
appeals to me because it touches a topic that has had my keen
interest for many decades, ever since my own PhD thesis on the
same topic.
While there are plenty of alternative textbooks on Haskell in
particular and functional programming in general, Graham’s book is
unique amongst all of these in that it uses Haskell simply as a tool
for thought, and never attempts to sell Haskell or functional
programming as a silver bullet that magically solves all programming
problems. It focuses on elegant and concise expression of intent and
thus makes a strong case of how pure and lazy functional
programming is an intelligible medium for efficiently reasoning about
algorithms at a high level of abstraction. The skills you acquire by
studying this book will make you a much better programmer no
matter what language you use to actually program in. In the past
decade, using the first edition of this book I have taught many tens
of thousands of students how to juggle with code. With this new
edition, I am looking forward to extending this streak for at least
another 10 years.
Erik Meijer
Preface

What is this book?


Haskell is a purely functional language that allows programmers to
rapidly develop software that is clear, concise and correct. The book
is aimed at a broad spectrum of readers who are interested in
learning the language, including professional programmers,
university students and high-school students. However, no
programming experience is required or assumed, and all concepts
are explained from first principles with the aid of carefully chosen
examples and exercises. Most of the material in the book should be
accessible to anyone over the age of around sixteen with a
reasonable aptitude for scientific ideas.

How is it structured?
The book is divided into two parts. Part I introduces the basic
concepts of pure programming in Haskell and is structured around
the core features of the language, such as types, functions, list
comprehensions, recursion and higher-order functions. Part II covers
impure programming and a range of more advanced topics, such as
monads, parsing, foldable types, lazy evaluation and reasoning
about programs. The book contains many extended programming
examples, and each chapter includes suggestions for further reading
and a series of exercises. The appendices provide solutions to
selected exercises, and a summary of some of the most commonly
used definitions from the Haskell standard prelude.

What is its approach?


The book aims to teach the key concepts of Haskell in a clean and
simple manner. As this is a textbook rather than a reference manual
we do not attempt to cover all aspects of the language and its
libraries, and we sometimes choose to define functions from first
principles rather than using library functions. As the book progresses
the level of generality that is used is gradually increased. For
example, in the beginning most of the functions that are used are
specialised to simple types, and later on we see how many functions
can be generalised to larger classes of types by exploiting particular
features of Haskell.

How should it be read?


The basic material in part I can potentially be worked through fairly
quickly, particularly for those with some prior programming
experience, but additional time and effort may be required to absorb
some of material in part II. Readers are recommended to work
through all the material in part I, and then select appropriate
material from part II depending on their own interests. It is vital to
write Haskell code for yourself as you go along, as you can’t learn to
program just by reading. Try out the examples from each chapter as
you proceed, and solve the exercises for each chapter before
checking the solutions.

What’s new in this edition?


The book is an extensively revised and expanded version of the first
edition. It has been extended with new chapters that cover more
advanced aspects of Haskell, new examples and exercises to further
reinforce the concepts being introduced, and solutions to selected
exercises. The remaining material has been completely reworked in
response to changes in the language and feedback from readers.
The new edition uses the Glasgow Haskell Compiler (GHC), and is
fully compatible with the latest version of the language, including
recent changes concerning applicative, monadic, foldable and
traversable types.

How can it be used for teaching?


An introductory course might cover all of part I and a few selected
topics from part II; my first-year course covers chapters 1–9, 10 and
15. An advanced course might start with a refresher of part I, and
cover a selection of more advanced topics from part II; my second-
year course focuses on chapters 12 and 16, and is taught
interactively on the board. The website for the book provides a
range of supporting materials, including PowerPoint slides and
Haskell code for the extended examples. Instructors can obtain a
large collection of exams and solutions based on material in the
book from [email protected].

Acknowledgements
I am grateful to the University of Nottingham for providing a
sabbatical to produce this new edition; Thorsten Altenkirch, Venanzio
Capretta, Henrik Nilsson and other members of the FP lab for our
many enjoyable discussions; Iván Pérez Domínguez for useful
comments on a number of chapters; the students and tutors on all
of my Haskell courses for their feedback; Clare Dennison, David
Tranah and Abigail Walkington at CUP for their editorial work; the
GHC team for producing such a great compiler; and finally, Catherine
and Ian Hutton for getting me started in computing all those years
ago.
Many thanks also to Ki Yung Ahn, Bob Davison, Philip Hölzenspies
and Neil Mitchell for providing detailed comments on the first
edition, and to the following for pointing our errors and typos: Paul
Brown, Sergio Queiroz de Medeiros, David Duke, Robert Fabian, Ben
Fleis, Robert Furber, Andrew Kish, Tomoyas Kobayashi, Florian
Larysch, Carlos Oroz, Douglas Philips, Bruce Turner, Gregor Ulm,
Marco Valtorta and Kazu Yamamoto. All of these comments have
been taken into account when preparing the new edition.
Graham Hutton
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Part I

Basic Concepts
1
Introduction

In this chapter we set the stage for the rest of the book. We start by
reviewing the notion of a function, then introduce the concept of
functional programming, summarise the main features of Haskell and
its historical background, and conclude with three small examples
that give a taste of Haskell.

1.1 Functions
In Haskell, a function is a mapping that takes one or more
arguments and produces a single result, and is defined using an
equation that gives a name for the function, a name for each of its
arguments, and a body that specifies how the result can be
calculated in terms of the arguments.
For example, a function double that takes a number x as its
argument, and produces the result x + x, can be defined by the
following equation:
double x = x + x

When a function is applied to actual arguments, the result is


obtained by substituting these arguments into the body of the
function in place of the argument names. This process may
immediately produce a result that cannot be further simplified, such
as a number. More commonly, however, the result will be an
expression containing other function applications, which must then
be processed in the same way to produce the final result.
For example, the result of the application double 3 of the function
double to the number 3 can be determined by the following
calculation, in which each step is explained by a short comment in
curly parentheses:
double 3
= { applying double }
3 + 3
= { applying + }
6

Similarly, the result of the nested application double (double 2) in


which the function double is applied twice can be calculated as
follows:
double (double 2)
= { applying the inner double }
double (2 + 2)
= { applying + }
double 4
= { applying double }
4 + 4
= { applying + }
8

Alternatively, the same result can also be calculated by starting with


the outer application of the function double rather than the inner:
double (double 2)
= { applying the outer double }
double 2 + double 2
= { applying the first double }
(2 + 2) + double 2
= { applying the first + }
4 + double 2
= { applying double }
4 + (2 + 2)
= { applying the second + }
4 + 4
= { applying + }
8

However, this approach requires two more steps than our original
version, because the expression double 2 is duplicated in the first
step and hence simplified twice. In general, the order in which
functions are applied in a calculation does not affect the value of the
final result, but it may affect the number of steps required, and
whether the calculation process terminates. These issues are
explored in more detail when we consider how expressions are
evaluated in chapter 15.

1.2 Functional programming


What is functional programming? Opinions differ, and it is difficult to
give a precise definition. Generally speaking, however, functional
programming can be viewed as a style of programming in which the
basic method of computation is the application of functions to
arguments. In turn, a functional programming language is one that
supports and encourages the functional style.
To illustrate these ideas, let us consider the task of computing the
sum of the integers (whole numbers) between one and some larger
number n. In many current programming languages, this would
normally be achieved using two integer variables whose values can
be changed over time by means of the assignment operator =, with
one such variable used to accumulate the total, and the other used
to count from 1 to n. For example, in Java the following program
computes the required sum using this approach:
int total = 0;
for (int count = 1; count <= n; count++)
total = total + count;

That is, we first initialise an integer variable total to zero, and then
enter a loop that ranges an integer variable count from 1 to n,
adding the current value of the counter to the total each time round
the loop.
In the above program, the basic method of computation is
changing stored values, in the sense that executing the program
results in a sequence of assignments. For example, the case of n = 5
gives the following sequence, in which the final value assigned to
the variable total is the required sum:
total = 0;
count = 1;
total = 1;
count = 2;
total = 3;
count = 3;
total = 6;
count = 4;
total = 10;
count = 5;
total = 15;

In general, programming languages such as Java in which the basic


method of computation is changing stored values are called
imperative languages, because programs in such languages are
constructed from imperative instructions that specify precisely how
the computation should proceed.
Now let us consider computing the sum of the numbers between
one and n using Haskell. This would normally be achieved using two
library functions, one called [..] that is used to produce the list of
numbers between 1 and n, and the other called sum that is used to
produce the sum of this list:
sum [1..n]

In this program, the basic method of computation is applying


functions to arguments, in the sense that executing the program
results in a sequence of applications. For example, the case of n = 5
Random documents with unrelated
content Scribd suggests to you:
The Project Gutenberg eBook of The
untouchable adolescents
This ebook is for the use of anyone anywhere in the United States
and most other parts of the world at no cost and with almost no
restrictions whatsoever. You may copy it, give it away or re-use it
under the terms of the Project Gutenberg License included with this
ebook or online at www.gutenberg.org. If you are not located in the
United States, you will have to check the laws of the country where
you are located before using this eBook.

Title: The untouchable adolescents

Author: Harlan Ellison

Illustrator: Kelly Freas

Release date: April 19, 2024 [eBook #73433]

Language: English

Original publication: New York, NY: Headline Publications, Inc, 1956

Credits: Greg Weeks, Mary Meehan and the Online Distributed


Proofreading Team at http://www.pgdp.net

*** START OF THE PROJECT GUTENBERG EBOOK THE


UNTOUCHABLE ADOLESCENTS ***
THE UNTOUCHABLE
ADOLESCENTS

By ELLIS HART

illustrated by KELLY FREAS

The aliens wouldn't accept help, though their world was


about to explode. They were adolescents. Adolescence is
the time when you aren't smart enough to ask for help....

[Transcriber's Note: This etext was produced from


Super-Science Fiction February 1957.
Extensive research did not uncover any evidence that
the U.S. copyright on this publication was renewed.]
The planet Diamore, hung round and gaudy in the view-plates. As
colorfully unchanging as it had been every day for the two weeks
since the Wallower had plopped out of inverspace near it.
Captain Luther Shreve started violently as the whine of the Stress-
Potential banks died away. They had been a constant noisemaker
during the past two weeks; their continual dull rhythm had come to
seem companionable. Now the keening discordancy was ended, and
he knew they had finished estimating the planet in the plates.
He sat very still, staring at the energy dials building their reserves
back up. The banks had used much extra power.
He sat very still, waiting for them to bring him the plates. He didn't
want to see them. He was a full Captain in the Merchant Arm of the
Commercial Navy, and he found the tough outer shell of himself that
had formed during thirty years in that service suddenly
disintegrating. He was afraid of what those plates would say.
The tube glowed behind him and Teller—slightly overweight, slightly
florid, slightly balding and a brilliant Psych Officer—stepped off the
plate, into the control room.
Teller slumped onto the copilot's couch, extended the sheaf of plate
readings. Luther Shreve tipped his cap back on his head with a
practiced thumb and shuffled the plates in silence.
From time to time his pink tongue washed across his lips. Finally he
sighed and rubbed weary fingers across the bridge of his nose. He
closed his eyes and slowly sank back against the cushions.
With eyes still closed, he voiced the final possibility. "Any room for
error?"
He had tried to keep the tenseness from his voice, but it somehow
doubled in the faintly resonating confines of the control room.
Teller shook his head. "They tell me no, Luther. I ran the plates up
for them, mainly because they were all afraid to be here when you
saw the sad news. You terrorize those poor backroom boys, Luther."
Teller looked across, saw the odd set to Shreve's face, and realized
his jibes were annoying the other. He swung his short legs over the
side of the couch with a thump, clasped his hands in his lap as
though about to recite.
"They have somewhere less than five months. Then the Big Push
comes. The eruptions will wipe out nine-tenths of the centers of
community." He leaned across and pulled one sheet from the stack
Shreve held. "Here is the position map." He indicated with quick,
short jabs of his finger where the first earthquakes would hit, and
followed blue lines to their terminuses.
He extended his hands, palms upward, in a movement of futility and
sadness.
Shreve sat forward, sharply. He swept the cap from his head with
one hand, ran the other through stringy, brown hair. He pursed his
lips, muttered, "We've got to do something! It's more than just
business potential ruined. There are people down there, Karl!
Millions of them. We can't let them die!"
"True," Teller stated simply, looking at his clasped hands. "But," he
added, "what about the itinerary? They'll scream bloody blazes back
there if you break schedule." He cocked a thumb toward the rear of
the ship—toward Earth.
"Karl, I've been pushing one of these cans for MerchArm over thirty
years. I'll be thirty-one in August. I've never broken a schedule in my
life—but this is ... this is something more important than bills of
lading and sales curves!" His face had tightened, the character lines
about his mouth standing forth.
"We've got to save them, Karl. We've got to help those people down
there!"
Teller exhaled heavily. "All right, Luther. It's your choice. But you'd
better produce something from those natives down there, or
MerchArm might get unpleasant."
Shreve nodded, his face sagged into weariness momentarily. Then
he straightened and depressed the public-address stud on the couch
arm. His orders were brief and direct.
An hour later, ship-time, the great Wallower fired away with
directional rockets, and began to fall toward the multi-colored sphere
of Diamore.
High jungle surrounded the ship. Deep-red stringers of climbing vine
meshed with the purple and green and blue of exotic tree-forms.
From the edge of the dead path the Wallower had burned in settling,
the patchwork melange of colored growth reared and spread.
The analyzers were just completing their spore-counts when the
Diamoraii burst from the jungle, thundered onto the charred ground
of the clearing.
They rode tall on the backs of their mounts, whooping and wailing in
a minor key. The outside receivers, which had been left on in various
parts of the Wallower, rattled tinnily at the noise. Men clasped hands
to their ears and hurried to depress studs to shut out the din. Shreve
and Teller whirled from their calculations and stared fascinated at
the sight in the plates.
The Diamoraii's huge, loping animals closely resembled Terrestrial
giraffes. The beasts were pitch-black and ran with a gait beautifully
adapted to the jungle. They came on with a liquid, side-stepping
motion. They neatly leaped the twisted tree-trunks, swayed out of
the path to avoid a cluster of high-pile blossoms, and trampled to a
stop fifty yards in front of the Wallower.
"Stations!" Shreve yelled into the p-a mike. He turned back to the
view-plate, staring at the black beasts.
There were twelve of them, each with a depression in its back in
which a Diamorai sat, clutching the flanks of the thin, black animal
with his knees. Twists of pliant material looped through the beast's
noses served both as bridle and reins.
The twelve Diamoraii leaped agilely from their mount's backs, began
looking at each other with indecision. They milled about the
stomping animals for a minute, then each went to a bulky pouch
slung across his beast's back-depression. They fumbled in the
pouches.
Shreve turned the plates up to higher magnification, whistling
through his teeth. "Wheeew! What magnificent creatures! Did you
see the way they ran that jungle like broken-field quarterbacks?"
From beside him the agreeing mutter of the pudgy psych officer
blended with the busy clicking of the analyzers, totaling their counts.
"Those look to be the people we have to contact, Karl," Shreve
added, motioning toward the Diamoraii who were dragging objects
from their pouches.
"A young people," Teller mused, his face flushed. "A young and a
virile people. Shouldn't have any trouble getting through to them."
He turned a plate knob to sharper register.
The Diamoraii had advanced on the ship. They were almost
humanoid. Tall—almost six and a half feet each with very long legs
and boney, knobbed knees. Their legs seemed to represent almost
half their bodies. Wide-shouldered, V-shaped chests; obviously
large-lunged. Otherwise, despite the wide-spaced, large-irised eyes,
they were almost humanoid.
As Shreve and Teller watched, they each donned a hideous devil-
mask.

"Ugh!" Shreve blurted, his face drawing up into a picture of agony.


"What ghastly greeting cards those are! If that's a sample of their
demonology, I'd hate to see them exorcising one of the poor devils:
probably frighten the thing to life!"
Teller was leaning closer to the screen, his small eyes watching the
twelve with undisguised fascination. He was talking more to himself
than his superior. "Must be religious symbols of some sort. Must
have put on their Prayer-day best just to come see us."
Shreve looked at Teller sharply. "You don't suppose they think we're
gods or something?"
Shaking his head in annoyance, Teller replied, "No, no, certainly not.
You can tell they don't! They haven't prostrated themselves or
offered up sacrifices or such, as the typical superstitious aborigine
would. No, I'm quite certain they don't deify us. Probably just
insuring that evil spirits don't try to interfere with their mission—
whatever that might be. But," he added, "it doesn't appear to be
dangerous, whatever it is."
The twelve were now capering and turning handsprings directly
under the plate's hull-pickups. Shaking their masks into the cameras.
They seemed unaware that anyone might be watching.
"Ritual," murmured Teller.
As though his identification of it had tired them of their actions, they
sat—almost as one. Cross-legged, arms akimbo, expressions stolidly
hidden by the grotesque shapes of their devil-masks, they waited.
Again, almost to the second, they removed their hands from their
hips and folded them across their massive chests.
Shreve looked at the tight semi-circle of aliens, then at Teller. He
licked his lips anxiously. It was apparent he was happier, now that he
had landed and felt he could help the Diamoraii.
"Well, what should we do, Karl? This is more in your line. Should we
go out and talk to them, or bring them inside? Do you think they're
aware of the coming eruptions?" The questions had come out on top
of one another, with an almost childlike anxiety.
It was odd to hear such a tone from the otherwise stolid Shreve.
Teller looked up in surprise. He smiled slowly.
The psych officer flipped his plate off, turned, crossing his arms as
the aliens had done, and sat on the dead console.
"I don't think they know what's happening down there, Luther. At
least," he amended, "they didn't appear to be preparing for
evacuation in the threatened areas when we went over them. So I
rather suspect they're waiting for us to come out and chat." He
shrugged his shoulders, staring at Shreve. "And that, my Captain, is
it."
Shreve looked back at the aliens in his plate. He nodded his head
with determination, and his face lit up with purpose. Teller had seen
the look once or twice before—never on routine commercial
ventures, however. He had labeled it missionary zeal.
The Diamoraii were still sitting in cross-legged squats, their knees up
about their mask's pointed ears and horned temples.
"Well, then I suppose we'd better go out and chat. The sooner we
set up the Stress Rectifiers, the better." He got up, stepped toward
the shaft.
"Oh," he said, stopping and turning back to the psych officer, "I'd
like you to come out with me, Karl. No orders, you understand, but
I'd appreciate it."
The short psychologist looked at him for a moment, nodded his head
in acceptance. Shreve stepped into the shaft and sank down through
the floor as the tube glowed. Teller looked at the empty shaft for a
moment. As the platform slipped back into place he flipped Shreve's
plate off.
Stepping onto the platform he threw a glance over his shoulder at
the now-grey plate.
"You're a very young race," he whispered, disappearing through the
floor.

They dropped the few inches to the ground, bouncing a bit more
than they'd allowed for, in the lessened gravity of Diamore. All
around them the screams of the jungle meshed into one primal roar.
Shreve ran his tongue around the inside of his cheek. The medic had
flatly refused to allow their exit, unless they submitted to the six
shots he felt were minimum safety precaution.
With the feel of the electro-syringe still in his cheeks, Shreve
stepped away from the monstrous plug-port, raising his arms in
friendship. Behind him, Teller did the same.
They moved slowly toward the Diamoraii. The twelve sat immobile,
yet seeming to be looking from each other to the Earthmen, and
back, in sharp, jerking motions. It was all illusion, but disquieting.
As they stepped toward the aliens, Shreve felt the nerves in his teeth
begin to twitch. He had been about to say something soothing in
English, but the words never came out.
Who are you?
The question appeared in his head full-blown, inquisitive, without
sense of direction or distance. He knew immediately from where it
had come, of course, yet he could not quite believe it. Shreve
stopped dead, the pain in his jaws mounting. He glanced quickly at
Teller.
The shorter man was clutching his jaws with both hands, biting his
lower lip and rocking back and forth, eyes half-closed.
"Karl," Shreve's tongue stumbled over the words in his pain, "they're
—migod, Karl—they're telepathic!"
They stood rooted in their tracks, staring at the twelve impassive
aliens in their grotesque masks.
Teller stared in open fascination, still clutching his head. "The first,"
he murmured in awe. "The very first! They always said someday
we'd meet them, and now, by God, we have!" His voice died off to a
whisper and he stared unblinking at the dark-skinned Diamoraii.
The words appeared in their minds once more—this time more firm,
tinged with impatience:
Who are you?
Shreve seemed unable to respond. He had thought them ignorant
savages, on the verge of disaster, who would be jubilant at the offer
of aid. Instead, he was faced with making contact; contact with the
first mind-reading race Humanity had met racing through the stars.
His throat tightened up, he could not speak.
Finally, he took a step forward, extended his hands in peace to the
aliens. "Friends. We've come to help you. Friends."
He was certain they couldn't understand the spoken words. Whether
or not they could decipher the thoughts—that was something else.
Later, the Earthmen could bring out the communicators if the need
arose. But for now, he wanted only the soothing good will in his
voice to win them.
If they knew the Earthmen were protected by stat-fields, and that a
dozen gun-blisters were trained on them, they gave no indication.
We don't want your help.
There was a tone of anger, a driving odor of fear, in the feel of the
thoughts. The Earthmen felt their teeth jump as the thoughts
materialized. Shreve realized suddenly that the toothaches must be a
by-product of the psi power.
Shreve turned to Teller. The psych officer was staring back at him,
his eyes wide, his hands still clutching his jaw. They both recognized
something they had missed when the telepathy first became known
to them.
It was not an entering of the mind; they could not reach into the
deepest recesses of the Diamoraii's minds and get whole pictures. It
was like a mental radio transmission.
They could send and receive, with inflection and depth, but they had
to do it in darkness.
Teller said nothing, but he stepped closer to the aliens. Shreve could
tell he was thinking at them, but what he was thinking was
impossible to guess. If the aliens understood, they gave no
indication. The transmission did not work between the Earthmen,
obviously.
When Teller had fallen back, Shreve asked, "What did you say?"
"I told them we were here because volcanic eruptions were going to
rip up their planet within five months. I told them the quakes and
volcanos would kill off ninety-five percent of their people. I told them
we could help them to—"
The aliens rose slowly, and one stepped forward. He looked down at
the two Earthmen.
Hear this you are not the first strangers to come here once before
strange men came to us from the sky they called themselves the
Kyben and they told us they wanted to trade but they did not trade
they ate away our land and burned our jungle and took our women
and killed our young warriors.
It came as a blast of pure thought. All at once, as though spurted
out whole from the mind. The inflection was there—the meaning—
the depth of bitterness. Shreve felt his mouth dry out at the calibre
of agony in the thoughts.
Teller shrugged his shoulders as though he wanted no more part in
the matter, and retreated a few steps, massaging his throbbing jaws.
The alien stream ceased, and the Diamorai drew back. He seemed to
rise up on his toes, as though he wanted to strike the Earthman, but
was restraining himself through the movement.

Shreve felt a desperation mounting in him. He had to save these


people, had to make them realize their danger. "But you can read
our minds—you can see we're telling the truth!" he argued. He
found his stomach muscles had tightened, hands had clenched.
The alien thought reverberated in his head: What makes you think
you cannot lie with telepathy?
Then the thoughts flowed again. This time cold, dispassionate,
merely information.
We have been as you think burned once and we do not wish to be
burned again we cannot say whether or not these things you warn
us of really exist but we will take our own destinies in our hands and
treat them if they come we have seen no such indications of
eruptions and we do not believe you.
The thoughts ceased. Then one word alone: Go.
Shreve cursed the limitations of the psi faculty. Of what use was a
mind-reading ability if it merely told you what another person
thought—not whether it was true or not?
He stepped toward them again. He looked up at the fearsome masks
and felt the sinking of his stomach. He realized they were a young
and headstrong people, Teller had made that clear to him. Their
arrogance was the false front of a people frightened by the
unknown. But were they so young that they could not realize when
they needed help?
"Look," he found himself speaking, "you don't seem to understand."
The aliens moved back as Shreve approached. They didn't seem to
want him near them. "Your planet is a young one. There are internal
stresses that are going to rip open your continents. We can set up
machines that will re-direct these eruptions—into the ocean, back in
the jungle where it's uninhabited—so your people won't die. We—"
Did you see the blood pits near the Great Ocean?
Shreve caught the thought, and knew there was more to it than the
Diamorai had thought at first. The thought was laden with blast-
furnace hatred and a deadly bitterness.
He remembered the planet-circling landing the Wallower had made.
He remembered the single body of water, the Great Ocean,
stretching yellow and rippling across a third of Diamore. The picture
completed itself in his mind and he saw the monstrous gouges
ripped into the land, near the shore of that ocean. Pits of fused,
crimson soil; bare, gaping wounds, nothing but emptiness and dead
plants surrounding them for miles.
Those are the ones, the thought came. Those were the cities of
Golamoor, Nokrosch and Huyt on the shores of the Great Ocean we
resisted the Kyben when they wanted to drill out our ceremonial
grounds for their soils they said were radioactive we would not let
them drill and they sent down death to our cities.
Tinged with such emotion, the words were so boldly put, their
meaning was all too clear. These people would never reverse their
decision. They hated all outsiders. Shreve wondered whether they
could be blamed.
"But you need our help! You've got to believe me! You can read my
thoughts—can't you see I'm telling the truth!"
We could read the Kyben thoughts, too.
Silence in their minds for an instant, then:
Have you seen the blood pits?

Luther Shreve felt as though he were being dragged down into a


whirlpool. He didn't know why it was suddenly so important to him
that he help the Diamoraii. There was certainly no sense of
brotherhood with the aliens. But he knew, on a level that defied all
doubt, that he must save these people, or never feel at peace with
himself again.
Behind him, Shreve heard Teller snort in disgust. The psych officer
took two quick steps forward, jerked his head toward the massive
bulk of the Wallower. "Children! That's all they are. They think those
masks protect them from evil, they think their blind arrogance will
protect them if trouble comes! They think they know better than us!
They don't know when they need help. Come on, Luther, leave them
if that's what they want!" He turned to go, his face flushed in anger.
Shreve looked back at the aliens. He searched the blank and
grotesque masks for some evidence of willingness to reason. There
was none. Shreve gritted his teeth in frustration; he wanted to help,
he wanted to save them—but they wouldn't let themselves accept
his help. The aliens didn't want to be saved. They stood there, tall,
impassive, the thought radiating unendingly:
Go go go go go go go go go go go go go go go go.
Luther Shreve stepped toward them, anger boiling hot in his brain.
"All right, damn you! If you're too stupid, or too swollen up with
your own importance to realize you need help, we'll help you despite
yourselves!"
Why do you think the Kyben left Diamore?
Shreve's words stopped before they could be spoken. His fury
checked itself. He hadn't considered that. Why had another race, one
that could decimate a planet as the blood pits indicated they could,
leave when they seemed to be on the verge of getting what they
wanted?
We are not defenseless we can stop you we will hurt you go.
Teller's sharp laugh interrupted before Shreve could get an answer
out. "Fools! Pompous adolescents! What makes you think your
primitive warriors with their bogey masks can harm us? Look!" He
stepped toward the alien. The Diamorai backed up. Teller stepped
quickly, coming into sharp contact with the alien's body. The
Diamorai leaped back, the short hairs on his body standing straight
out. He thought something at his brothers. It was incomprehensible
to the Earthmen.
"That's a stat-field. And there are a dozen guns pointed at you from
the ship. We'll set up the machines and save you whether you like it
or not." He turned away with a low chuckle, adding ruefully,
"Though why you want to bother with such a bunch of arrogant
children is beyond me, Luther." He walked toward the ship.
Casting nervous glances at one another, the aliens leaped to the
backs of their mounts, reined in and turned to leave. Shreve stood
and watched them as they loped to the jungle's edge.
The ebony giraffe-things drew up short, and the leader's reared up
as the alien turned to stare at Shreve.
Go or we will hurt you.
In an instant they were gone, melting into the colored riot of the
jungle, the beasts' hoofs beating ever more faintly as they moved
away.
Shreve turned back to the ship. He should have felt no temperature
changes within his stat-field, yet somehow he had grown chilled in a
few seconds.

Night had descended quickly, dropping like a sea of ink over


Diamore. The robomechs had set out the floodlamps, almost to the
edges of the jungle, and the Wallower was bathed in white light,
sharply outlining her plate construction, and the clean transparency
of the conning bubbles.
Paul Jukovsky, Roboexec, jg, stood behind his control console in the
construction bubble, watching the thirty ton robomech carrying its
burden. The sixteen-wheeled robomech rolled off the extended
cargo hatch ramp, sinking just a bit into the springy ground of
Diamore. Jukovsky grinned at his foresight in spreading a primary
hardener over the surface before the big boys went to work.
He two-fingered a cigarette out of his lapel pocket, stifling a belch.
"Damn that cookie," he muttered. "If he doesn't stop putting
cayenne in the salad...." He stuck the cigarette in his mouth, lipping
it irritably for a second. He withdrew it, spitting out a loose bit of
tobacco. Satisfied, he inserted it again, began to scratch it alight
with his fingertip.
He moved a calibrated knob on the board three clicks. The
lumbering monster outside revolved its head, the huge drilling plate
it carried on its flattened and magnetized top moving also. "Like an
old woman carrying a water urn on her head," he chuckled, puffing
the cigarette.
The robomech neared phosphorescent markings laid out on the
ground, where the fibreglass base plate should be planted. Stress
Rectifiers would be magno-clamped to the base plate, then would
begin their search-position-drilling.
He moved to press the release button that would cause the
robomech to set its burden down lightly.
Paul Jukovsky's teeth suddenly began to ache with terrible intensity.
He clutched at his face wildly, burning the palm of his hand on the
cigarette.
A strangled sob began to form, ended in a gurgling half-scream. His
eyes rolled upwards and a trickle of blood emerged from the corner
of his mouth.
Stone-dead he fell across the control console, depressing all studs.
The thirty ton robomech whirled twice and burst toward the edge of
the jungle. It struck the boles of three huge intertwined trees with a
resounding clang; the base plate bounced from its head and
crashed, shattering, onto a projecting rock spear. The robot
struggled for a moment more, driving into the jungle, knocking trees
from its path in blind fury.
The smell of cordite soaked through the clearing, and a wisp of
smoke issued from the service box. An instant later its chambers
fused their baffles and the robomech exploded with a terrifying burst
of heat, impossible light, and the scream of ripping metal.

"His brains were fused," Teller said.


The psych officer looked Shreve directly in the eyes, trying to find
meaning in the captain's closed expression. Teller's face was
unnaturally white, his usually drooping lips thinned to a black line.
"The autopsymen were shaking like loose bolts when they reported
to me, Luther. They swore they'd never seen anything like it before.
It was as if someone had taken that boy's brains in his red-hot
hands and molded them like clay."
Shreve's jaw muscles worked in a strange rhythm. His voice was cold
and determined. "We are going to get those Rectifiers set up. Better
stay in your cabin, Karl; I've got to put men on it."
When Teller had left, the odd stare he had cast still haunting Shreve,
the captain sank onto his couch. He pressed the p-a stud and
crisped his orders, naming men and leaving no room for argument.
He felt the tremors through the soles of his boots as the men began
unchocking their mechs. His balled fist found its way into his mouth.
He was not aware his hand was bleeding till several minutes after
the teeth had pierced the skin.
After the sixth death—all of them with their brain-pans charred and
their grey matter stuck together—Shreve broke down.
He threw a blanker over the shaft and sat there swearing. His body
shook and heaved as he mumbled into his hands. In one stride he
was off the couch and had smashed his fist full into the reflecting
metal of the console face. It left a shallow dent, and he didn't seem
to notice the angry inflammation of his knuckles. Teller stood across
the room, keeping very still, shaking his head slowly, and thinking
soft sounds.
After a while Shreve stopped, and collapsed onto the couch, his face
red and swollen. "Sorry, Karl," he said.
"Why don't you try crying, it's easier on the metabolism," he
suggested.
Shreve gave a bitter laugh, thin and short. "Last time I cried I was
eating cream cheese and jelly sandwiches and didn't know where
little babies come from." Teller didn't smile. He knew Shreve was
covering up. He had never seen the man break as he had today, and
he knew the knowledge should go no further.
"But why? Why?" Shreve pounded his fist into the yielding couch.
"We came to help them, why won't they let us?"
"Luther, Luther," Teller soothed him, sitting down beside him on the
couch, "don't you see? They're adolescents. They don't know when
to call for help. They've been hurt, and with the single-minded
purpose of the immature they're bound not to let it happen again.
You can't blame yourself for what's happened.
"You had no way of knowing about this power of theirs. Why don't
we leave right now. If we lay on all power we can make the
schedule still pretty close."
Shreve stood up, flicked on the view-plates. He stared into them a
moment, seeing nothing but tangled jungle. He drew up a bit, laid
his hands flat on the console. "I've got to talk to them once more. To
beg them again."

We warned you came the cold, hard tones. The group-mind is


infinitely stronger than our individual power now that you have seen
our strength will you go?
"I've come to beg you once more," Shreve pleaded, looking up at
the masked Diamoraii, astride their mounts. He had made certain all
outside pickup mikes were off. "We only want to help you. Won't you
let us re-direct the coming eruptions. Please!" Shreve had plumbed
the depths of his mind in an attempt to find reasons for sacrificing
such efforts to save the Diamoraii. The only reasons he had found
he had not been able to translate—yet there was a sense of
identification with the long-legged and stubborn aliens. He wanted
to save them!
"Can't you read my thoughts?" he said, projecting truth, projecting
honesty and sincerity. "Can't you see I want to help you, help your
people?"
They did not even bother answering. He knew their acquaintance
with the truth that men of other worlds had offered. To be defeated
because those who need your help had been spoiled by another
race!
The bitterness, the hatred, the distrust, washed over him, as the
Diamorai leaned across his beast's neck, thought one snarled word:
Go.
Shreve felt the futility of everything he had done, suddenly caving in
on him. He looked up into the blank stares of the masked aliens,
said slowly, "We will hang above your atmosphere till you call us."
He walked back to the Wallower. The huge plug-port closed behind
him. The aliens sat astride their beasts, staring at the ship.
Their minor-key whoops of victory rang and bounced in the jungle's
treetops as they swung their mounts roughly, dug boney knees into
their sides, and careened into the multi-colored vastness.
The Diamoraii had won again!

The Wallower spun slowly in space, the eternal dust of the universe
lapping at her ports. Below her, enveloped by clouds of steam, the
planet Diamore blasted and erupted and screamed and belched and
tore itself apart.
Luther Shreve sat before the control console, staring with almost
hypnotized attention at the view-plates. He watched the world die.
His face was hard and unyielding. He had refused entrance even to
Teller, barring everyone from the control room.
At every eruption, with each fissure that opened wide enough to be
seen from that fantastic height, he felt a strange sinking in his heart.
His throat was dry, and there was an odd pressure behind his eyes.
He watched silently, every once in a while letting the thought They
didn't know when to ask for help filter through his mind.

The Group of Deciders huddled in the blasted Council Hall. The floor
—what was left of the inlaid tiles—shivered and heaved. Beyond the
twisted lattices of the windows they could hear the mighty rending
of the planet as it opened and swallowed all that stood.
Within an hour of the first eruptions, so quickly and with such fury
that there had been no time for preparation, almost three-fifths of
their race had been decimated.
The cities Kes and Uykvabask and Laylor had gone under with
roaring flames and the scraping of stone against flesh. The Great
Ocean had exploded with a red-hot bubbling and roared onto the
land, washing everything before it. The lava flows raced Eastward to
the Ceremonial Grounds and Westward to the Hunting Preserve.
Everywhere the ground opened without warning or reason, and life
sank beneath the earth.
Wrong, the Group of Deciders admitted in their last refuge. We were
wrong we have been foolish we have rejected our only salvation we
must prepare the group-mind send our plea for aid into space speak
to the outsiders ask them to help us.
They thought their instructions away from themselves, to their kin
across Diamore's blasted face. Prepare! Join! Speak to the outsiders!
And when they had gathered together every last Diamorai, with
more dying as they joined the chain, with the feel of agony radiating
through the group-mind, the message weakly rose. Tentatively it
probed at the inner surface of Diamore's atmosphere.
The power was, perhaps, insufficient to reach the spaceship. Three-
fifths of the Diamoraii were lost to the group-mind.
The group-mind struggled, frantically beaming, in hopelessness
trying to get through to the Earthmen who rode above them.
The men who rode above them—waiting for a signal from the
Diamoraii.

Shreve turned away from the plates, flicking them off. "I can't stand
it, Karl! How senseless! Because one race dealt them unfairly, they
closed their eyes to help from anyone else."
Teller crossed his legs as he sat on the couch. He did not appear to
be disturbed by the sight from below.
"Luther, you can't go on destroying yourself. You did everything you
could. You were as resourceful as any man could have been.
"Now you'd better get back to the schedule. We're over four and a
half months due at our next landfall." He saw his words were having
no effect. "Look, Luther, I've been in this business almost as long as
you. I've seen this time and again. When you come up against an
adolescent race, that doesn't know when it's got something too big
to handle, there's nothing you can do but back off and let them
handle it themselves. If they don't get smart enough to know when
to call the fireman—that's their agony. Not yours!"
"What's the next stop on our itinerary?" he asked the last almost
jauntily, consciously trying to take Shreve's mind off the cinder that
spun below the Wallower. He rose and stretched, as though from a
profound sleep.
For a moment he stared in wonder. Then he stepped into the shaft
and quietly left the control room.
He had never thought he'd see the day when Luther Shreve cried
like a child.

THE END
*** END OF THE PROJECT GUTENBERG EBOOK THE UNTOUCHABLE
ADOLESCENTS ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:

You might also like