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

Functional programming in Python 1st Edition David Mertzinstant download

The document promotes the download of 'Functional Programming in Python' by David Mertz, along with other recommended programming ebooks available on ebookultra.com. It provides a brief overview of functional programming concepts and characteristics, emphasizing Python's multiparadigm capabilities. Additionally, it mentions various resources and libraries that enhance functional programming in Python.

Uploaded by

fatonnemrim
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 (1 vote)
6 views

Functional programming in Python 1st Edition David Mertzinstant download

The document promotes the download of 'Functional Programming in Python' by David Mertz, along with other recommended programming ebooks available on ebookultra.com. It provides a brief overview of functional programming concepts and characteristics, emphasizing Python's multiparadigm capabilities. Additionally, it mentions various resources and libraries that enhance functional programming in Python.

Uploaded by

fatonnemrim
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/ 44

Visit https://ebookultra.

com to download the full version and


browse more ebooks or textbooks

Functional programming in Python 1st Edition David


Mertz

_____ Press the link below to begin your download _____

https://ebookultra.com/download/functional-programming-in-
python-1st-edition-david-mertz/

Access ebookultra.com now to download high-quality


ebooks or textbooks
Here are some recommended products for you. Click the link to
download, or explore more at ebookultra.com

Text processing in Python 2. print Edition Mertz

https://ebookultra.com/download/text-processing-in-python-2-print-
edition-mertz/

Functional Programming in C First Edition Ivan Cukic

https://ebookultra.com/download/functional-programming-in-c-first-
edition-ivan-cukic/

Maya Programming with Python Cookbook 1st Edition Herbez

https://ebookultra.com/download/maya-programming-with-python-
cookbook-1st-edition-herbez/

Parallel Programming with Python First Edition Jan Palach

https://ebookultra.com/download/parallel-programming-with-python-
first-edition-jan-palach/
Real World Functional Programming With Examples in F and C
1st Edition Tomas Petricek

https://ebookultra.com/download/real-world-functional-programming-
with-examples-in-f-and-c-1st-edition-tomas-petricek/

Principles of Soft Computing Using Python Programming 1st


Edition Gypsy Nandi

https://ebookultra.com/download/principles-of-soft-computing-using-
python-programming-1st-edition-gypsy-nandi/

Python Cookbook 3rd Edition David Beazley

https://ebookultra.com/download/python-cookbook-3rd-edition-david-
beazley/

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/

Elements of Programming Interviews in Python 1st Edition


Adnan Aziz & Amit Prakash & Tsung-Hsien Lee

https://ebookultra.com/download/elements-of-programming-interviews-in-
python-1st-edition-adnan-aziz-amit-prakash-tsung-hsien-lee/
Functional programming in Python 1st Edition David
Mertz Digital Instant Download
Author(s): David Mertz
ISBN(s): 9781491928561, 1491928565
Edition: 1
File Details: PDF, 1.56 MB
Year: 2015
Language: english
Functional
Programming
in Python

David Mertz
Additional
Resources
4 Easy Ways to Learn More and Stay Current

Programming Newsletter
Get programming r­ elated news and content delivered weekly to your inbox.
oreilly.com/programming/newsletter

Free Webcast Series


Learn about popular programming topics from experts live, online.
webcasts.oreilly.com

O’Reilly Radar
Read more insight and analysis about emerging technologies.
radar.oreilly.com

Conferences
Immerse yourself in learning at an upcoming O’Reilly conference.
conferences.oreilly.com

©2015 O’Reilly Media, Inc. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. #15305
Functional Programming
in Python

David Mertz
Functional Programming in Python
by David Mertz
Copyright © 2015 O’Reilly Media, Inc. All rights reserved.
Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
See: http://creativecommons.org/licenses/by-sa/4.0/
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA
95472.
O’Reilly books may be purchased for educational, business, or sales promotional use.
Online editions are also available for most titles (http://safaribooksonline.com). For
more information, contact our corporate/institutional sales department:
800-998-9938 or [email protected].

Editor: Meghan Blanchette Interior Designer: David Futato


Production Editor: Shiny Kalapurakkel Cover Designer: Karen Montgomery
Proofreader: Charles Roumeliotis

May 2015: First Edition

Revision History for the First Edition


2015-05-27: First Release

The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Functional Pro‐
gramming in Python, the cover image, and related trade dress are trademarks of
O’Reilly Media, Inc.
While the publisher and the author have used good faith efforts to ensure that the
information and instructions contained in this work are accurate, the publisher and
the author disclaim all responsibility for errors or omissions, including without limi‐
tation responsibility for damages resulting from the use of or reliance on this work.
Use of the information and instructions contained in this work is at your own risk. If
any code samples or other technology this work contains or describes is subject to
open source licenses or the intellectual property rights of others, it is your responsi‐
bility to ensure that your use thereof complies with such licenses and/or rights.

978-1-491-92856-1
[LSI]
Table of Contents

Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v

(Avoiding) Flow Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1


Encapsulation 1
Comprehensions 2
Recursion 5
Eliminating Loops 7

Callables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Named Functions and Lambdas 12
Closures and Callable Instances 13
Methods of Classes 15
Multiple Dispatch 19

Lazy Evaluation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
The Iterator Protocol 27
Module: itertools 29

Higher-Order Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Utility Higher-Order Functions 35
The operator Module 36
The functools Module 36
Decorators 37

iii
Preface

What Is Functional Programming?


We’d better start with the hardest question: “What is functional pro‐
gramming (FP), anyway?”
One answer would be to say that functional programming is what
you do when you program in languages like Lisp, Scheme, Clojure,
Scala, Haskell, ML, OCAML, Erlang, or a few others. That is a safe
answer, but not one that clarifies very much. Unfortunately, it is
hard to get a consistent opinion on just what functional program‐
ming is, even from functional programmers themselves. A story
about elephants and blind men seems apropos here. It is also safe to
contrast functional programming with “imperative programming”
(what you do in languages like C, Pascal, C++, Java, Perl, Awk, TCL,
and most others, at least for the most part). Functional program‐
ming is also not object-oriented programming (OOP), although
some languages are both. And it is not Logic Programming (e.g.,
Prolog), but again some languages are multiparadigm.
Personally, I would roughly characterize functional programming as
having at least several of the following characteristics. Languages
that get called functional make these things easy, and make other
things either hard or impossible:

• Functions are first class (objects). That is, everything you can do
with “data” can be done with functions themselves (such as
passing a function to another function).
• Recursion is used as a primary control structure. In some lan‐
guages, no other “loop” construct exists.

v
• There is a focus on list processing (for example, it is the source
of the name Lisp). Lists are often used with recursion on sublists
as a substitute for loops.
• “Pure” functional languages eschew side effects. This excludes
the almost ubiquitous pattern in imperative languages of assign‐
ing first one, then another value to the same variable to track
the program state.
• Functional programming either discourages or outright disal‐
lows statements, and instead works with the evaluation of
expressions (in other words, functions plus arguments). In the
pure case, one program is one expression (plus supporting defi‐
nitions).
• Functional programming worries about what is to be computed
rather than how it is to be computed.
• Much functional programming utilizes “higher order” functions
(in other words, functions that operate on functions that oper‐
ate on functions).

Advocates of functional programming argue that all these character‐


istics make for more rapidly developed, shorter, and less bug-prone
code. Moreover, high theorists of computer science, logic, and math
find it a lot easier to prove formal properties of functional languages
and programs than of imperative languages and programs. One cru‐
cial concept in functional programming is that of a
“pure function”—one that always returns the same result given the
same arguments—which is more closely akin to the meaning of
“function” in mathematics than that in imperative programming.
Python is most definitely not a “pure functional programming lan‐
guage”; side effects are widespread in most Python programs. That
is, variables are frequently rebound, mutable data collections often
change contents, and I/O is freely interleaved with computation. It is
also not even a “functional programming language” more generally.
However, Python is a multiparadigm language that makes functional
programming easy to do when desired, and easy to mix with other
programming styles.

Beyond the Standard Library


While they will not be discussed withing the limited space of this
report, a large number of useful third-party Python libraries for

vi | Preface
functional programming are available. The one exception here is
that I will discuss Matthew Rocklin’s multipledispatch as the best
current implementation of the concept it implements.
Most third-party libraries around functional programming are col‐
lections of higher-order functions, and sometimes enhancements to
the tools for working lazily with iterators contained in itertools.
Some notable examples include the following, but this list should
not be taken as exhaustive:

• pyrsistent contains a number of immutable collections. All


methods on a data structure that would normally mutate it
instead return a new copy of the structure containing the
requested updates. The original structure is left untouched.
• toolz provides a set of utility functions for iterators, functions,
and dictionaries. These functions interoperate well and form the
building blocks of common data analytic operations. They
extend the standard libraries itertools and functools and
borrow heavily from the standard libraries of contemporary
functional languages.
• hypothesis is a library for creating unit tests for finding edge
cases in your code you wouldn’t have thought to look for. It
works by generating random data matching your specification
and checking that your guarantee still holds in that case. This is
often called property-based testing, and was popularized by the
Haskell library QuickCheck.
• more_itertools tries to collect useful compositions of iterators
that neither itertools nor the recipes included in its docs
address. These compositions are deceptively tricky to get right
and this well-crafted library helps users avoid pitfalls of rolling
them themselves.

Resources
There are a large number of other papers, articles, and books written
about functional programming, in Python and otherwise. The
Python standard documentation itself contains an excellent intro‐
duction called “Functional Programming HOWTO,” by Andrew
Kuchling, that discusses some of the motivation for functional pro‐
gramming styles, as well as particular capabilities in Python.

Preface | vii
Mentioned in Kuchling’s introduction are several very old public
domain articles this author wrote in the 2000s, on which portions of
this report are based. These include:

• The first chapter of my book Text Processing in Python, which


discusses functional programming for text processing, in the
section titled “Utilizing Higher-Order Functions in Text Pro‐
cessing.”

I also wrote several articles, mentioned by Kuchling, for IBM’s devel‐


operWorks site that discussed using functional programming in an
early version of Python 2.x:

• Charming Python: Functional programming in Python, Part 1:


Making more out of your favorite scripting language
• Charming Python: Functional programming in Python, Part 2:
Wading into functional programming?
• Charming Python: Functional programming in Python, Part 3:
Currying and other higher-order functions

Not mentioned by Kuchling, and also for an older version of


Python, I discussed multiple dispatch in another article for the same
column. The implementation I created there has no advantages over
the more recent multipledispatch library, but it provides a longer
conceptual explanation than this report can:

• Charming Python: Multiple dispatch: Generalizing polymor‐


phism with multimethods

A Stylistic Note
As in most programming texts, a fixed font will be used both for
inline and block samples of code, including simple command or
function names. Within code blocks, a notional segment of pseudo-
code is indicated with a word surrounded by angle brackets (i.e., not
valid Python), such as <code-block>. In other cases, syntactically
valid but undefined functions are used with descriptive names, such
as get_the_data().

viii | Preface
(Avoiding) Flow Control

In typical imperative Python programs—including those that make


use of classes and methods to hold their imperative code—a block of
code generally consists of some outside loops (for or while), assign‐
ment of state variables within those loops, modification of data
structures like dicts, lists, and sets (or various other structures,
either from the standard library or from third-party packages), and
some branch statements (if/elif/else or try/except/finally). All
of this is both natural and seems at first easy to reason about. The
problems often arise, however, precisely with those side effects that
come with state variables and mutable data structures; they often
model our concepts from the physical world of containers fairly
well, but it is also difficult to reason accurately about what state data
is in at a given point in a program.
One solution is to focus not on constructing a data collection but
rather on describing “what” that data collection consists of. When
one simply thinks, “Here’s some data, what do I need to do with it?”
rather than the mechanism of constructing the data, more direct
reasoning is often possible. The imperative flow control described in
the last paragraph is much more about the “how” than the “what”
and we can often shift the question.

Encapsulation
One obvious way of focusing more on “what” than “how” is simply
to refactor code, and to put the data construction in a more isolated
place—i.e., in a function or method. For example, consider an exist‐
ing snippet of imperative code that looks like this:

1
# configure the data to start with
collection = get_initial_state()
state_var = None
for datum in data_set:
if condition(state_var):
state_var = calculate_from(datum)
new = modify(datum, state_var)
collection.add_to(new)
else:
new = modify_differently(datum)
collection.add_to(new)

# Now actually work with the data


for thing in collection:
process(thing)
We might simply remove the “how” of the data construction from
the current scope, and tuck it away in a function that we can think
about in isolation (or not think about at all once it is sufficiently
abstracted). For example:
# tuck away construction of data
def make_collection(data_set):
collection = get_initial_state()
state_var = None
for datum in data_set:
if condition(state_var):
state_var = calculate_from(datum, state_var)
new = modify(datum, state_var)
collection.add_to(new)
else:
new = modify_differently(datum)
collection.add_to(new)
return collection

# Now actually work with the data


for thing in make_collection(data_set):
process(thing)
We haven’t changed the programming logic, nor even the lines of
code, at all, but we have still shifted the focus from “How do we con‐
struct collection?” to “What does make_collection() create?”

Comprehensions
Using comprehensions is often a way both to make code more com‐
pact and to shift our focus from the “how” to the “what.” A compre‐
hension is an expression that uses the same keywords as loop and
conditional blocks, but inverts their order to focus on the data

2 | (Avoiding) Flow Control


rather than on the procedure. Simply changing the form of expres‐
sion can often make a surprisingly large difference in how we reason
about code and how easy it is to understand. The ternary operator
also performs a similar restructuring of our focus, using the same
keywords in a different order. For example, if our original code was:
collection = list()
for datum in data_set:
if condition(datum):
collection.append(datum)
else:
new = modify(datum)
collection.append(new)
Somewhat more compactly we could write this as:
collection = [d if condition(d) else modify(d)
for d in data_set]
Far more important than simply saving a few characters and lines is
the mental shift enacted by thinking of what collection is, and by
avoiding needing to think about or debug “What is the state of col
lection at this point in the loop?”
List comprehensions have been in Python the longest, and are in
some ways the simplest. We now also have generator comprehen‐
sions, set comprehensions, and dict comprehensions available in
Python syntax. As a caveat though, while you can nest comprehen‐
sions to arbitrary depth, past a fairly simple level they tend to stop
clarifying and start obscuring. For genuinely complex construction
of a data collection, refactoring into functions remains more reada‐
ble.

Generators
Generator comprehensions have the same syntax as list comprehen‐
sions—other than that there are no square brackets around them
(but parentheses are needed syntactically in some contexts, in place
of brackets)—but they are also lazy. That is to say that they are
merely a description of “how to get the data” that is not realized
until one explicitly asks for it, either by calling .next() on the
object, or by looping over it. This often saves memory for large
sequences and defers computation until it is actually needed. For
example:
log_lines = (line for line in read_line(huge_log_file)
if complex_condition(line))

Comprehensions | 3
For typical uses, the behavior is the same as if you had constructed a
list, but runtime behavior is nicer. Obviously, this generator compre‐
hension also has imperative versions, for example:
def get_log_lines(log_file):
line = read_line(log_file)
while True:
try:
if complex_condition(line):
yield line
line = read_line(log_file)
except StopIteration:
raise

log_lines = get_log_lines(huge_log_file)
Yes, the imperative version could be simplified too, but the version
shown is meant to illustrate the behind-the-scenes “how” of a for
loop over an iteratable—more details we also want to abstract from
in our thinking. In fact, even using yield is somewhat of an abstrac‐
tion from the underlying “iterator protocol.” We could do this with a
class that had .__next__() and .__iter__() methods. For example:
class GetLogLines(object):
def __init__(self, log_file):
self.log_file = log_file
self.line = None
def __iter__(self):
return self
def __next__(self):
if self.line is None:
self.line = read_line(log_file)
while not complex_condition(self.line):
self.line = read_line(self.log_file)
return self.line

log_lines = GetLogLines(huge_log_file)
Aside from the digression into the iterator protocol and laziness
more generally, the reader should see that the comprehension focu‐
ses attention much better on the “what,” whereas the imperative ver‐
sion—although successful as refactorings perhaps—retains the focus
on the “how.”

Dicts and Sets


In the same fashion that lists can be created in comprehensions
rather than by creating an empty list, looping, and repeatedly call‐

4 | (Avoiding) Flow Control


ing .append(), dictionaries and sets can be created “all at once”
rather than by repeatedly calling .update() or .add() in a loop. For
example:
>>> {i:chr(65+i) for i in range(6)}
{0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F'}
>>> {chr(65+i) for i in range(6)}
{'A', 'B', 'C', 'D', 'E', 'F'}
The imperative versions of these comprehensions would look very
similar to the examples shown earlier for other built-in datatypes.

Recursion
Functional programmers often put weight in expressing flow con‐
trol through recursion rather than through loops. Done this way, we
can avoid altering the state of any variables or data structures within
an algorithm, and more importantly get more at the “what” than the
“how” of a computation. However, in considering using recursive
styles we should distinguish between the cases where recursion is
just “iteration by another name” and those where a problem can
readily be partitioned into smaller problems, each approached in a
similar way.
There are two reasons why we should make the distinction men‐
tioned. On the one hand, using recursion effectively as a way of
marching through a sequence of elements is, while possible, really
not “Pythonic.” It matches the style of other languages like Lisp, def‐
initely, but it often feels contrived in Python. On the other hand,
Python is simply comparatively slow at recursion, and has a limited
stack depth limit. Yes, you can change this with sys.setrecursion
limit() to more than the default 1000; but if you find yourself
doing so it is probably a mistake. Python lacks an internal feature
called tail call elimination that makes deep recursion computation‐
ally efficient in some languages. Let us find a trivial example where
recursion is really just a kind of iteration:
def running_sum(numbers, start=0):
if len(numbers) == 0:
print()
return
total = numbers[0] + start
print(total, end=" ")
running_sum(numbers[1:], total)

Recursion | 5
Exploring the Variety of Random
Documents with Different Content
ajattelin, että sinä itse olisit toisten nuorten mukana ja ehkä ottaisit
osaa kilpailuihin, Mercy."

"En välittänyt mennä", sanoi Mercy hiljaa.

Vanha mies katseli taas hetkisen ääneti.

"Kylläpä tyttäret ovat kirkkaihinsa pukeutuneet", hän sanoi kiiveten


risukerppukasalle. "Tuskin tässä ehtii työtään tehdä", hän lisäsi
hetkisen kuluttua.

Pikku Mercyn silmät kohosivat kiehuvasta padasta ja kääntyivät


taas telttoihin. Sieltä kaikui suosionosoitusten myrsky.

"Tuo on Geordie Mooren ääni", ajatteli Mercy. Hän saattoi nähdä


piirin kentällä. "Alkavat piirileikkiä", sanoi hän melkein kuiskaten ja
huokasi sitten raskaasti.

Vaikk'ei hän välittänyt mennä kentälle tänään, hän kuitenkin


kaipasi sinne. Oi, kuinka hänen olisi tehnyt mielensä! Voi, miten
kipeästi koski sydämeen! Kuten haavoitettu jänis, joka piiloittuu
pensaikkoon löytääkseen suojaa ja saadakseen kuolla rauhassa, hän
oli salaa hiipinyt pois tämän päivän riemukkaasta ilosta. Hänen
vakavaan katseeseensa ilmestyi jotakin villiä ja julmaa, kun hän
katseli toisten verratonta huvia; yksinpä tämä ihana kesäpäiväkin
kiusasi häntä.

Vanha hiilenpolttaja oli astunut Mercyn luo, kun tämä kaihoisin


katsein polvillansa tulen ääressä viipyi.

"Mercy", hän sanoi, "minun on monena päivänä tehnyt mieleni


vähän puhua sinulle."
"Minulle, isä?"

Tyttö hypähti seisoalleen. Hänen kasvoilleen kohosi kiusaantunut


ilme.

"Sinä olet menettänyt iloisuutesi. Mistä se johtuu?"

"Minä, isä?"

Mutta tämä hämmästynyt kysymys oli vähällä viedä kaiken hänen


voimansa.

"Et voi hyvin, Mercy — mitä se on?"

Hän otti hänen päänsä vanhojen karkeitten käsiensä väliin ja siveli


hänen kiharoitansa niin hellästi kuin äiti.

"Oi, isä, minä voin oikein, oikein hyvin."

Sitä seurasi lyhyt, väkinäinen nauru. Silmiin ilmestyi harras, kostea


kiilto.

"Joitakin suruja, Mercy?"

"Mitä suruja, isä?"

"En tiedä, mutta joitakin suruja. Ehkä tavallisia nuorten huolia,


niinkö?"

Vanhan miehen ääni värisi hiukan, ja hänen kätensä vapisi tytön


päätä silitellessään.

"Mitä huolen syytä minulla olisi?" sanoi Mercy hiljaisella, melkein


särkyneellä äänellä.
"No niin, itse tiedät parhaiten", sanoi hiilenpolttaja. Sitten hän pani
kätensä tytön leuan alle ja nosti hänen päätänsä, kunnes saattoi
katsoa suoraan tytön vastahakoisiin silmiin. Tämä tutkimus näytti
lohduttavan häntä, ja hymy ilmestyi hänen jäykille kasvoillensa.
"Ehkäpä erehdyin", hän ajatteli. "Ihmiset juoruavat aina niin
mielellään."

Mercy yritti nauraa uudelleen, ja heti samana hetkenä loordi


Fisherin muoto uudestaan synkkeni.

"Ne sanovat, ettet sinä enää ole sama iloinen, pikku tyttönen kuin
ennen", hän sanoi.

"Sanovatko ne? Mutta minähän olen oikein onnellinen! Sinähän


aina sanot, että ihmiset ovat juorukelloja, etkös sanokin, isä?"

Sulut olivat nyt väkisinkin katketa.

"Mitä, Mercy, sinähän itket."

"Minä — itken!" Tyttö heitti päätänsä koettaen kiihkeästi vastustaa


tätä otaksumaa. "Oi, en; minähän nauroin — sitä se oli."

"Sinulla on kuitenkin kyyneleet silmissäsi joka tapauksessa."

"Kyyneleet? Eikö mitä, isä! Kyyneleet? Enkö minä sanonut sinulle,


että sinun näkösi alkaa pettää — niin, enkö minä sanonut?"

Ei hyödyttänyt yrittää enää kierrellä. Surullinen pää painui


aaltoilevalle rinnalle ja Mercy nyyhkytti.

Vanha mies katseli häntä sokaiseva sumu hämärissä silmissänsä.


"Kerro minulle, tyttöseni, kerro minulle kaikki", hän sanoi.
"Oi, ei se ole mitään", sanoi Mercy. Hän oli pyyhkäissyt pois
kyyneleet ja hymyili taas. Loordi Fisher pudisti päätänsä.

"Ei se ole mitään, isä — ainoastaan —"

"Ainoastaan mitä?"

"Ainoastaan — oh, ei se ole mitään!"

"Mercy, oma lapseni", sanoi loordi Fisher, ja kyyneleet täyttivät nyt


hänen himmeät silmänsä — "Mercy, muista, että jos tytön asiat eivät
käy oikeata latua ja äiti lepää nurmen alla, on silloin isä
ensimmäinen, jolle hänen pitäisi kertoa kaikki."

Vanha mies oli istuutunut hirren pölkylle ja avasi juuri koriansa,


kun tieltä kuului keveitä, juoksevia askeleita.

"Aiotteko sytyttää uuden haudan tänä yönä, Matthew?"

Vanha mies nojasi edessään olevaan portaaseen ja hymyili.

"En, herra Bonnithorne, ilma näyttää tulevan liian myrskyiseksi."

Herrasmies otti silkkihatun päästään ja koputti sormellaan


otsaansa. Hänen tukkansa oli ohut ja vaaleankeltainen ja kammattu
sileäksi ohimoille.

"Te hämmästytätte minua. Minä ajattelin, että ilma olisi mitä


parhain.
Katsokaa, miten sinisiä pilvet ovat."

"Se ei asiaa auta. Parempi olisi, etteivät pilvet koskaan olisi


hohtavan siniset. Samanlainen päivänpaiste oli eilen ja kuun
noustessa oli taivas pilvessä ja satoi."
Hymy leikki lakkaamatta herrasmiehen kasvoilla. Siksi hänen
hampaansa myöskin aina olivat näkyvissä.

"Te laaksojen asukkaat osaatte ilmoja ennustaa."

Ääni oli pehmyt ja naisellinen. Jokaisen lauseen lopussa oli pieni


naurunhöhähdys.

"Viime yönä sytytimme kuun noustessa, herra", vastasi


hiilenpolttaja. "Se nousi lounaasta eikä se tiedä hyvää, vaikka nyt
onkin tyyni. Ennen puolta yötä sataa ja myrskyää."

Tyttö oli puikahtanut pensaikkoon ja laitteli luutaa tammen


vesoista. Herrasmies seurasi häntä silmillänsä. Ne olivat pienet,
kiiluvat silmät, ja hän räpytteli niitä lakkaamatta.

"Teidän tyttärenne ei näytä oikein terveeltä, Matthew?"

"Hän voi kyllä hyvin, herra, aivan hyvin", sanoi hiilenpolttaja


ryypäten suunsa teetä täyteen.

Herrasmies hymyili taaskin suunsa irviin, niin että hampaat


kokonaan näkyivät. Hetkisen vaiettuaan hän virkkoi: "Otaksun, ettei
ole erittäin hauskaa vaihtaa kaivostansa tuollaiseen risuläjään", ja
osoitti puoliksi valmiiksi pinottua hiilihautaa.

"Eipä, ei; se on inhoittavaa työtä — kun nuo sytytetään


palamaan."

Koira oli äkkiä ampaissut pystyyn. Seurattuaan koiran liikkeitä


sanoi herrasmies: "Kenenkä lampaita nuo tuolla rinteellä ovat?"

"Vanhan herra Ritsonin katraat ne ovat."


Lampaat kiipeilivät ja hyppivät kallioilla.

"Vaarallinen paikka, eikö totta?"

"Paikka voi antaa niille tilaisuuden urheilla. Mutta ne ovat kuin


tunturikauriita eivätkä loukkaa itseänsä."

"Sanon teille hyvää yötä, Matthew." Keltatukkainen,


vanhanpuoleinen herrasmies oli pois lähdössä. "Ja muistakaa viedä
tyttärenne uuden tohtorin luo Keswickiin", hän sanoi erottaessa.

"Eivät ne ole tohtorit, jotka voivat Mercyn parantaa", mutisi


hiilenpolttaja toisen mentyä.
III LUKU.

Josiah Bonnithorne oli kokonaan ilman sukulaisia ja läheisiä ystäviä.


Hänen äitinsä oli ollut toinen kahdesta sisaruksesta, jotka hankkivat
toimeentulonsa harjoittamalla vähäistä sokerileipurin liikettä
Whitehavenissa ja olivat uskonnoltaan metodisteja. Sisarukset olivat
rakennelleet omat tuulentupansa tulevaisuuden suhteen. He olivat
päättäneet mennä naimisiin ja olivat jo mielessään omituisen
vaalinsa suorittaneet. He tahtoivat päästä saarnaajain vaimoiksi.
Mutta odotettua tilaisuutta ei vain tullut, ja he vanhenivat
arveluttavasta Vihdoin nuorempi sisar kuoli, ja siten päättyivät hänen
pitemmälle tähtäävät tulevaisuudensuunnitelmansa. Vanhempi sisar
jäi vielä pariksi vuodeksi yksin leipuripuotiinsa. Sitten hän yht'äkkiä
otti miehekseen muutaman paikkakunnalle saapuneen kulkurin. Se
oli huono vaali. Mutta kaikesta onnettomuudesta huolimatta tämä
kulkuri oli paikallinen saarnaaja, ja hieman tinkien oli kuitenkin
vaimoparan ihanne toteutunut. Vihdoin selvisi, että tämä kulkuri oli
samalla oikea roisto, jolla oli jossain vaimo elossa. Tämän vuoksi hän
joutui veljien epäsuosioon ja pakeni. Luonnollisesti hän jätti toisen
vaimonsa jälkeensä salaa pantattuaan sitä ennen kaiken, mitä
suinkin oli toiselle kelpaavaa. Muutamien kuukausien kuluttua
vaimoraukka joutui miehensä velkojien vaatimuksista puille paljaille,
ja samoihin aikoihin syntyi myöskin lapsi. Se oli viheliäinen, pieni
otus — poika. Muutamat hyvät "yhdistyksen" jäsenet hoitivat lasta,
kunnes se oli kahden vuoden vanha, ja sittemmin he panivat sen
turvakotiin ja kouluun. Pojan ollessa siellä äitiä tapasi ankara
halvaus. Silloin ensi kertaa turmioon joutunut vaimoraukka halusi
nähdä lastansa. He toivat sen sairasvuoteen luo ja se hymyili
katsellessaan äitinsä kuolevia kasvoja. "Oi, jospa Jumala sallisi
hänestä tulla saarnaajan!" sanoi äiti koko sielunsa kiihkolla. Tohtorin
viittauksesta lapsi otettiin sairaalta pois. Kasvot vääntyivät kauheasti,
sumentunut silmä, josta toivonsäde vielä tuikahteli, avautui ja
sulkeutui, ja äiti oli lausunut jäähyväisensä kaikelle tässä elämässä.

Poika eli kuitenkin. Kasteessa annettiin hänelle nimi Josiah ja hän


otti sukunimekseen äitinsä tyttönimen, Bonnithorne. Hän oli heikko
raukka eikä rakastanut poikamaisia leikkejä, mutta kunnostautui
kouluaineissa. Näistä ominaisuuksistaan huolimatta hänet pantiin
teurastajan oppiin, kun hänen täytyi koulunkäyntinsä lopettaa
kesken. Sattuman kautta hän joutui tarjoutumaan erääseen
lakiasiaintoimistoon, ja hänen hakemuksensa hyväksyttiin.
Kymmenen vuoden kuluttua hän peri isäntänsä toimiston ja silloin
hän viiletti täysin purjein eteenpäin.

Hän tuotti "yhdistykselle" pettymystä liittymällä valtion kirkkoon,


mutta ei muuten osoittanut vihaavansa entisiä suosijoitansa. Hänen
luonteensa näytti kykenevän sovittamaan kaikki ihmiset keskenänsä.
Hänestä pidettiin, vaikk'ei rakastettu, häneen luotettiin, vaikk'ei
häntä erittäin suosittu. Hänestä tuli kirkonisännöitsijä, yleisten
rahastojen hoitaja ja omaa etuaan etsimättä hän näytti uutterasti
harrastavan yhteistä parasta. Ja ihmiset sanoivatkin aina julki suuren
ilonsa siitä, että maailmassa saattoi menestyä niinkin jalo olento kuin
Josiah Bonnithorne.
Mutta oli Cumberlannissa kuitenkin mies, joka tunsi herra
Bonnithornen kiireestä kantapäähän. Se mies oli Hugh Ritson.
Kertaakaan nämä kaksi eivät pettäneet toisiansa.

Kun Bonnithorne jätti hiilenpolttajan, hän kulki sitä tietä, joka vei
Newlannin joen yli ja kääntyi Ankerias-kallioille päin. Siten hän joutui
ihan lähelle urheilijoita. Hän sattui juuri kuulemaan laakson väen
naurun, kun kerjäläinen kertoi, että hän oli nähnyt Paul Ritsonin
Hendonissa. Hetkistä myöhemmin hän kohtasi Hugh Ritsonin tiellä.
Tervehdys oli lyhyt ja kursailematon, kun nämä kaksi toisensa
tapasivat.

"Sinun isäsi on kutsunut minua", sanoi Bonnithorne.

"Mitä varten?" kysyi Hugh Ritson.

"Sitä minä en vielä tiedä."

He kulkivat vähän matkaa puhumatta mitään. Sitten asianajaja


käänsi aina hymyilevät kasvonsa toiseen ja sanoi pehmeällä
äänellänsä:

"Minä olen juuri nähnyt sinun pikku ystäväsi. Hän näyttää


kalpealta, pikku raukka! Jotakin täytyy tehdä ja pian."

Hugh Ritsonin kasvot lensivät hohtavanpunaisiksi. Hänen silmänsä


painuivat maahan.

"Älkäämme puhuko enempää siitä", hän sanoi hiljaa. "Minä näin


häntä eilen. Sitten siinä on hänen isänsä, onneton, murtunut raukka!
Sitä ei voi sietää."
"Sellaista minä en olisi uskonut sinusta", herra Bonnithorne puhui
kylmästi ja hymyili.

"Sitäpaitsi, minua hävettää. Koko juttu on niin alhainen", sanoi


Hugh
Ritson. "Mikä hitonmoinen metakka siitä eto asiasta nouseekaan!"

"Niinpä niin, pidä sinä varasi! Miksi sinä oletkin kahdella päällä?
Sinuun sopii hyvin sananlasku kissasta ja kalasta."

"Minun vereni ei ole kyllin vahvaa. Minä en voi tehdä sitä."

"Miksi sinä sitten ehdotit sitä? Oliko se ajatus minun vai sinun?
Minä tahdoin pelastaa tytön häpeästä. Täällä hänellä on
pataljoonittain häpäisijöitä. Lähetä tyttö pois, niin sinä riistät heiltä
hyvän juorun aiheen."

"Se ei ole välttämätöntä. Tiedäthän, että minä olen


ennakkoluulojen yläpuolella." Hugh Ritson madalti ääntänsä ja puhui
ihan rintansa pohjasta. "Pahimmassa tapauksessa minä voin naida
hänet."

Herra Bonnithorne naurahti kevyesti.

"Ha, hahaa! Ja mikä hitonmoinen metakka juuri siitä pikku jutusta


nousee?"

Hugh Ritson kiivastui hiukan.

"Miksi en? Onko hän köyhä? Millainen niinä sitten olen?


Sivistymätön? Mitä sivistyksellä on minun kanssani tekemistä?
Yksinkertainen olento, kokonaan sydäntä eikä päätä? Jumalan kiitos,
että niin on!"
Sinä hetkenä kaikui etäältä tytön nauru. Se tuntui helmikirkkaana
pulppuavan riemukkaan sydämen syvyyksistä. Hugh Ritsonin kalpeat
kasvot punastuivat hieman ja hän veti raskaasti henkeä.

Herra Bonnithorne nyökkäsi päällään sinne päin, mistä ääni kuului


ja sanoi pehmeästi: "Ystävämme Gretakin on tuolla tänään."

"On", sanoi Hugh hyvin hiljaa.

Taas ystävykset kulkivat aivan ääneti jonkun matkaa.

"Tuskinpa sinun kannattaa puhua noin sairaalloisella tavalla", sanoi


Bonnithorne, ja äänessä kaikui katkera suuttumus. "Sinä asetut
katsomaan asioita väärältä näkökannalta. Sinä et rakasta sitä pikku
olentoa."

Hugh Ritsonin otsa rypistyi ja hän sanoi: "Jos minä olen yhden
tyhmän työn kautta ajanut elämäni karille, eipä sillä väliä. En ole
korkealta kaatunut. Minä olen onnettomuuteen tuomittu mies."

"Anteeks', herraseni! Minä luulin, että sinä vielä olit kovin nuori",
sanoi herra Bonnithorne.

"Mitä minä olen isäni talossa? Hän ei vähimmässäkään määrässä


näytä tahtovan auttaa minua riippumattomaan asemaan elämässä."

"Tässähän ovat maat. Sinun isäsi täytyy olla rikas mies."

"Ja minä olen toinen poika."

"Entäs sitten?"

Hugh Ritson kohotti äkkiä katseensa.


"Mitä sinä tarkoitat?"

"Sinä sanot olevasi toinen poika."

"Ja mitä sitten?"

"Eivätkö asiasi olisi niin pahasti, jos sinä et olisi toinen poika."

"Totuuden nimessä, puhukaamme selvään. Minun veljeni Paul on


elossa."

Herra Bonnithorne nyökkäsi päällään pari kolme kertaa ja virkahti


kylmästi: "Tiedätkö sinä, että veljesi ajattelee mennä naimisiin
Gretan kanssa?"

"Olen kuullut siitä."

Taas punastuivat Hugh Ritsonin kasvot. Hänen matala äänensä


värisi.

"Enkö minä ole koskaan kertonut sinulle Gretan isän omituisesta


jälkisäädöksestä?"

"Et koskaan."

"Minun onneton ystäväni Robert Lowther jätti poikaansa koskevan


jälkisäädöksen ja tämä poika oli Gretan velipuoli."

"Äpäräpoika?"

"Ei aivan. Lowther otti vaimokseen pojan äidin", sanoi


Bonnithorne.

"Otti hänet vaimokseen? No, silloinhan poika oli isänsä perijä?"


"Ei."

Hugh Ritson näytti hämmästyneeltä.

"Tyttö oli katolinen, Lowther protestantti. Katolinen pappi vihki


heidät Irlannissa. Se ei ollut pätevä avioliitto Englannin lain mukaan."

Hugh hymyili julmasti.

"Ja Lowther peruutti tuon avioliiton?"

"Hän oli rakastunut", alkoi herra Bonnithorne.

"Tällä kertaa perijättäreen?" sitä seurasi ilkeä nauru.

Herra Bonnithorne nyökkäsi. "Gretan äitiin. Niinpä hän —"

"Hylkäsi ensimmäisen vaimonsa", keskeytti Hugh Ritson taas.

Herra Bonnithorne pudisti päätään viattomin ilmein.

"Vaimonsa? No, hän jätti hänet."

"Sinä puhuit pojasta. Oliko heillä poika?"

"Oli", sanoi herra Bonnithorne, "ja kun nainen ja lapsi… katosivat


—"

"Juuri niin", sanoi Hugh Ritson ja hymyili. "Mitä Lowther silloin


teki?"

"Meni uusiin naimisiin ja sai tyttären — Gretan."

"Mutta entäs se jälkisäädös?"


"Omantunnon puhdistamiseksi", sanoi Bonnithorne ja irvisti
ikeniänsä.

Hugh Ritson naurahti kevyesti.

"Siis jonkunlaista hullun veroa, jota rahaministeri kantaa nimellä:


'Tilapäisiä tuloja'."

"Juuri niin — Lowther ei vain ole niitä sinne lähettänyt."

"Kaikissa tapauksissa hän on menetellyt kuin suuri roisto", sanoi


Hugh
Ritson.

"Totta, ja hän tunsi katumusta. Toisen naimisensa jälkeen hän pani


ihmiset etsimään vaimoansa ja lastansa. Mutta koskaan ei heitä
löydetty. Hänen viimeisiä päiviänsä varjostivat hänen nuoruutensa
hairahdukset. Minä uskon, että hän kuoli murtunein sydämin.
Testamentissaan — minä kirjoitin sen hänelle — hän jätti summan
pojalleen ensimmäisestä aviosta, jos tämä poika joskus
löydettäisiin."

Hugh Ritson nauroi pilkallisesti.

"Minusta hän oli hullu. Roistot ovat tavallisesti myöskin hulluja."

"Tavallisesti; olen usein pannut sen merkille", sanoi herra


Bonnithorne.

"Mitä iloa voisi jollekulle ihmiselle tuottaa mennä etsimään jonkun


hullun ja hylätyn vaimon poikaa?"
"Hullu", vastasi herra Bonnithorne, "oli kyllin järjetön tehdäkseen
sellaisen säädöksen, että ellei poikaa löydettäisi, ennenkuin Greta
tulee täysikäiseksi, jälkisäädöksen summa olisi kaksinkertaisena
maksettava poikain orpokodille."

Tämä huomautus sai Hugh Ritsonin kunnioittamaan kuolleen


miehen järjen terävyyttä.

"Senvuoksi on siis perheelle hyödyllistä jälkisäädöksen määräyksen


mukaan koettaa löytää Gretan velipuoli", hän sanoi sovittaen heti
paikalla yhteen kaikki tämän asian yhteydessä olevat seikat.

"Jos hän on elossa; ellei, niin ainakin on saatava varmuus hänen


kuolemastaan."

Taas kulkivat miehet jonkun matkaa ja saapuivat paikalle, josta


kääntyi käytävä puiden välistä pilkottavaan taloon vuoren juurella.
Nuorempi mies kääntyi varmoin askelin käymään sitä.

"Mutta minä en voi käsittää, mitä kaikki tämä minua hyödyttää.


Kun minä sanoin, että minä olen toinen poika, sinä —"

"Minulla tuskin on ollut vähintäkään apua etsinnässäni", virkkoi


herra Bonnithorne. Taas hetken asteltuansa: "Olen löytänyt vain
medaljongissa olevan valokuvan ensimmäisestä vaimosta", herra
Bonnithorne alkoi kaivaa povitaskuansa.

"Minun veljeni Paul elää. Mitä mahdollisuutta —"

"Tässä se on", sanoi herra Bonnithorne näyttäen pientä valokuvaa.

Hugh Ritson otti sen osoittaen sangen vähän mielenkiintoa.


"Tämähän on jonkun nunnan valokuva", hän virkkoi, kun hänen
katseensa oli sattunut siihen ja hän huomasi viitan ja hunnun.

"Kokeilija — niin, se hän oli, ennenkuin Lowther kohtasi hänet",


sanoi herra Bonnithorne.

Sitten Hugh Ritson pysähtyi. Hän tutki tarkasti valokuvaa ja katseli


vuoroin sitä, vuoroin taas asianajajaa. Hänen kylmäverisyytensä,
jonka hän tähän asti oli säilyttänyt, näytti kokonaan hänet jättäneen.
Kuva vapisi hänen kädessään. Herra Bonnithorne ei näyttänyt
ollenkaan huomaavan hänen kiihkoansa.

"Olisiko se otaksuma? Varmasti sen täytyy olla otaksuma!" hän


mutisi.

Sitten hän kysyi ääneen, mikä oli ollut nunnan nimi.

"Ormerod."

Tämä tieto sai hänet hätkähtämään. "Ormerod — kuinka


kummallista!"
Huudahdus tuntui päässeen melkein hänen tietämättään,
ehdottomasti.
"Miksi kummallista?" — Hugh Ritson ei heti vastannut. "Hänen
ristimänimensä?"

"Grace."

"Grace Ormerod? Kas, sinun kai täytynee tietää, että Grace


Ormerod sattuu olemaan minun äitini tyttönimi!"

"Sinä näytät tuntevan valokuvan."


Hugh Ritson oli saanut takaisin mielenmalttinsa. Hän koetti
näyttää välinpitämättömältä.

"No niin, ehkä — ei, en tietenkään, en!" hän sanoi vihdoin


kiivaasti.

Sydämessään hänellä oli toinen vastaus. Hän ajatteli sinä hetkenä,


kun loi silmänsä valokuvaan, että se näytti — näytti pikkuisen —
hänen oman äitinsä kuvalta.

He jatkoivat matkaansa. Herra Bonnithornen ikuinen hymy katosi


hänen huuliltansa. Kohottaen äänensä melkein liian kovaksi hän
sanoi:

"Samalla on tässä toinenkin merkillinen sattuma. Haluaisitko


tietää, mikä oli Grace Ormerodin ja Robert Lowtherin pojan nimi?"

Hugh Ritsonin sydän oli pakahtua, mutta onnistuen säilyttämään


ulkonaisen välinpitämättömyytensä hän murahti:

"Hyvä, anna kuulua!"

"Paul."

Nimi meni kuin nuoli hänen lävitsensä. Sitten hän sanoi melkein
masentuneena:

"Greta Lowtherin velipuoli siis, missä hän lieneekin, on nimeltään


—"

"Paul Lowther", sanoi Bonnithorne. "Mutta", hän lisäsi äkkiä


vilkaisten toisen kasvoihin, "hän voi — minä sanon, hän voi —
esiintyä toisella nimellä — Paul jotakin muuta, esimerkiksi."
"Varmaankin — luonnollisesti — niin — niin", mutisi Hugh Ritson.
Koko hänen läpitunkematon kylmäverisyytensä oli hävinnyt.

He olivat saapuneet talon eteen ja olivat nyt rakennusten


ympäröimässä, kivitetyssä pihassa. Se oli Ritsonien koti, tunnettu
nimellä Ghyll, ikivanha talo, jonka suuret suojat kimbrit olivat
rakentaneet harmaasta kivestä ja liuskakivestä. Savukierteet
kohosivat laiskasti kirkkaalle taivaalle muutamasta piipusta.
Hämähäkki oli kutonut hienon verkkonsa ruusupensaasta toiseen
leveän portaan yli, ja loistava perhonen koetti juuri päästä siitä läpi.
Hanhien kaakatus kuului takapihalta.

"Robert Lowther oli Grace Ormerodin lapsen isä?" kysyi Hugh


Ritson muun puheen jatkoksi.

"Hänen poikansa Paulin isä."

"Ja Greta on hänen tyttärensä? Niinkö on asia?"

"Niin on — Paulin sisarpuoli."

Hugh Ritson katsoi suoraan herra Bonnithornen kasvoihin.

"Ja minkä ikäinen pitäisi Paul Lowtherin nyt olla"?

"Tjaa, vanhempi kuin sinä luonnollisesti. Ehkäpä yhtä vanha —


niin, ehkä yhtä vanha — juuri yhtä vanha kuin sinun veljesi."

Hugh Ritsonin epävarma jalka astui raskaasti kiville. Hänen


huulensa vapisivat. Hetkisen näytti kuin jokin olisi hänet hurmannut.
Sitten hän pyörähti ympäri ja mutisi:
"Lörpötystä! Se ei voi olla uskottavaa! Häväistä siten koti, se voisi
loukata miestä, taivas tietää, kuinka syvästi."

Herra Bonnithorne katsoi häneen kysyvästi.

"Anteeks', minä en voi ymmärtää, käyttääkseni sinun sanojasi,


mitä tuo viimeinen aprikointi sinua hyödyttää."

"Herra Bonnithorne", sanoi Hugh Ritson ojentaen kätensä, "sinä ja


minä olemme olleet hyviä ystäviä, emmekös ole?"

"Oh, parhaimmat ystävät!"

"Jonakin joutilaana hetkenä, kun minä olen saanut aikaa miettiä


tätä, minä haluan puhua siitä vielä sinun kanssasi."

Herra Bonnithorne hymyili hyväksyvästi.

"Ja ennen sitä", hän sanoi pehmeästi, "lähetä se onneton pikku


raukka täältä pois."

Hugh Ritsonin katse painui maahan ja ääni kävi syvemmäksi.

"Onneton pikku raukka! Olen pahoillani — hyvin pahoillani."

"Gretan ja hänen rakkautensa vuoksi — varmaankin —"

Herra Bonnithorne jätti lauseensa täyttämättä ja nyökäytti


merkitsevästi päätänsä.

"Minun isäni on karjapihassa", sanoi Hugh Ritson. "Sinä ehdit


hänet kyllä nähdä. Tule tätä tietä."

*****
Varjot laaksossa olivat pidentyneet. Purppurainen rusko leikitteli
kaukaisilla huipuilla, ja synkkä, tumma sini asettui räystäitten alle.
Yksinäinen varis lennähteli hämärtyvässä illassa päästellen silloin
tällöin ilmoille yksitoikkoisen sävelensä. Illan yhä hämärtyessä saapui
kaksi vanhanpuoleista henkilöä pihaan.
IV LUKU.

"Olispa aika, että se kelpo herra Bonnithorne olis jo täällä", sanoi


Allan Ritson.

"Mitä varten sinä kutsuit häntä tänne?" kysyi rouva Ritson


matalalla äänellä, joka oli hänelle luontainen.

"Saahakseni sen testamenttiasian viimeinkin järjestetyksi.


Onpahan sitten yhtä huolta vähemmän ajateltavana, ja se onkin
painanut mieltäni kyllin kauan."

Allan puhui kartellen, kuten mies, jota tuskalliset ajatukset ovat


painaneet liian kauan. Toivo saada vihdoinkin vapautua näistä
epämieluisista mietteistä näytti rohkaisevan häntä, vaikka tarkka
katselija olisi huomannut, että se helpotus saattoi olla otaksuttu
mieluumminkin kuin todellinen.

Rouva Ritson ei yrittänytkään näyttää välinpitämättömältä. Hänen


vakava katseensa tuli vieläkin vakavammaksi ja hänen pehmeä
äänensä yhä pehmeämmäksi, kun hän sanoi:

"Jos sitten, kun se on saatu järjestetyksi, poistuisivat pilvet, jotka


ovat pimittäneet elämämme taivasta, olisi kaikki hyvin. Mutta ne
eivät ikinä hajoa."

Allan Ritson käänsi päänsä sivulle koettaen hymyillä, mutta pilvet


eivät olleet karkoittaneet aurinkoa niin tarkkaan hänen
viljapelloiltaan, kuin hymy oli kadonnut hänen ryppyisiltä
kasvoiltansa.

"Tule, elä vaivoo ihtees ennee sillä! Kun min' oon tehnyt
testamenttin' ja asettanut Paulin samanarvoiseksi toisen poijan
kanssa, ei kukkaan voi juoruta mittään kun vain emme ite kerro."

Rouva Ritson katsoi hänen kasvoihinsa surullisin ilmein.

"Taivas tietää, Allan", hän sanoi, "ja mustat pilvet kerääntyvät


yhä."

Vanha mies astui pari askelta kivistä käytävää ja hänen päänsä


painui alas. Ääni syveni.

"Puhut oikeen, äiti", hän sanoi, "sinä sanot oikeen. Se raskauttaa


minui vanhuutenipäiviä ja — sinun myös!" hän otti vielä pari askelta
ja lisäsi: "Eikä mikkään asianajaja voi poistaa niitä, ei — ei nyt enee.
Totta, äiti, meijän pilvet eivät oo kauaan sataneet — mutta vähät
siitä", kohottaen katseensa ja samalla äänensäkin, "meillä on ollut
hyviäkin vuosia, vaikkakin nisujen seassa olemme saaneet
ohakkeitakin joskus korjata."

"Niin, onhan meillä ollut onnellisiakin päiviä", sanoi rouva Ritson.

Juuri tällä hetkellä kuului laakson takaa huvittelijoitten iloisia ääniä


ja viulun viehättäviä säveleitä. Allan Ritson kohotti päänsä, nyökkäsi
huolettomasti ja hymyili heikosti, vaikkakin sumentava pilvi oli
kerääntynyt hänen silmiensä ympärille.
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