Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (9 votes)
3K views

Download ebooks file Learning Functional Data Structures and Algorithms Learn functional data structures and algorithms for your applications and bring their benefits to your work now 1st Edition Atul S. Khot all chapters

data

Uploaded by

tsabetsarima17
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (9 votes)
3K views

Download ebooks file Learning Functional Data Structures and Algorithms Learn functional data structures and algorithms for your applications and bring their benefits to your work now 1st Edition Atul S. Khot all chapters

data

Uploaded by

tsabetsarima17
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

Learning Functional Data Structures and


Algorithms Learn functional data structures
and algorithms for your applications and
bring their benefits to your work now 1st
Edition Atul S. Khot
https://textbookfull.com/product/learning-
functional-data-structures-and-algorithms-learn-
functional-data-structures-and-algorithms-for-
your-applications-and-bring-their-benefits-to-
your-work-now-1st-edition-atul-s-khot/

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


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

Learning functional data structures and algorithms learn


functional data structures and algorithms for your
applications and bring their benefits to your work now
Khot
https://textbookfull.com/product/learning-functional-data-structures-
and-algorithms-learn-functional-data-structures-and-algorithms-for-
your-applications-and-bring-their-benefits-to-your-work-now-khot/
textbookfull.com

Probabilistic data structures and algorithms for big data


applications Gakhov

https://textbookfull.com/product/probabilistic-data-structures-and-
algorithms-for-big-data-applications-gakhov/

textbookfull.com

Data Structures and Algorithms in Swift Kevin Lau

https://textbookfull.com/product/data-structures-and-algorithms-in-
swift-kevin-lau/

textbookfull.com

Foundations of Environmental Economics Wolfgang Buchholz

https://textbookfull.com/product/foundations-of-environmental-
economics-wolfgang-buchholz/

textbookfull.com
Linear Algebra and Optimization for Machine Learning: A
Textbook Charu C. Aggarwal

https://textbookfull.com/product/linear-algebra-and-optimization-for-
machine-learning-a-textbook-charu-c-aggarwal/

textbookfull.com

A War on People Drug User Politics and a New Ethics of


Community Jarrett Zigon

https://textbookfull.com/product/a-war-on-people-drug-user-politics-
and-a-new-ethics-of-community-jarrett-zigon/

textbookfull.com

Business Organization RLE Organizations 1st Edition John O


Shaughnessy

https://textbookfull.com/product/business-organization-rle-
organizations-1st-edition-john-o-shaughnessy/

textbookfull.com

Principles of Mobile Communication 4th Edition Gordon L.


Stüber

https://textbookfull.com/product/principles-of-mobile-
communication-4th-edition-gordon-l-stuber/

textbookfull.com

Serial Attached SCSI 4 SAS 4 r10b 6777

https://textbookfull.com/product/serial-attached-
scsi-4-sas-4-r10b-6777/

textbookfull.com
Electronics For Beginners: A Practical Introduction To
Schematics, Circuits, And Microcontrollers Jonathan
Bartlett
https://textbookfull.com/product/electronics-for-beginners-a-
practical-introduction-to-schematics-circuits-and-microcontrollers-
jonathan-bartlett/
textbookfull.com
Learning Functional Data
Structures and Algorithms

Learn functional data structures and algorithms for


your applications and bring their benefits to your work
now

Atul S. Khot
Raju Kumar Mishra

BIRMINGHAM - MUMBAI
Learning Functional Data Structures and
Algorithms
Copyright © 2017 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted in any form or by any means, without the prior written permission of the
publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the
information presented. However, the information contained in this book is sold without
warranty, either express or implied. Neither the authors, nor Packt Publishing, and its
dealers and distributors will be held liable for any damages caused or alleged to be caused
directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the
companies and products mentioned in this book by the appropriate use of capitals.
However, Packt Publishing cannot guarantee the accuracy of this information.

First published: February 2017

Production reference: 1170217

Published by Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK.

ISBN 978-1-78588-873-1
www.packtpub.com
Credits

Authors Copy Editor


Atul S. Khot Gladson Monteiro
Raju Kumar Mishra

Reviewer Project Coordinator


Muhammad Ali Ejaz Sheejal Shah

Commissioning Editor Proofreader


Kunal Parikh Safis Editing

Acquisition Editor Indexer


Denim Pinto Mariammal Chettiyar

Content Development Editor Graphics


Nikhil Borkar Abhinash Sahu

Technical Editor Production Coordinator


Hussain Kanchwala Shantanu Zagade
About the Authors
Atul S. Khot grew up in Marathwada, a region of the state of Maharashtra, India. A self-
taught programmer, he started writing software in C and C++. A Linux aficionado and a
command-line guy at heart, Atul has always been a polyglot programmer. Having
extensively programmed in Java and dabbled in multiple languages, these days, he is
increasingly getting hooked on Scala, Clojure, and Erlang. Atul is a frequent speaker at
software conferences, and a past Dr. Dobb's product award judge. In his spare time, he
loves to read classic British detective fiction. He is a foodie at heart and a pretty good cook.
Atul someday dreams of working as a master chef, serving people with lip-smacking
dishes.

He was the author of Scala Functional Programming Patterns published by Packt Publishing
in December 2015. The book looks at traditional object-oriented design patterns and shows
how we could use Scala's functional features instead.

I would like to thank my mother, late Sushila S. Khot, for teaching me the value of sharing.
Aai, I remember all you did for the needy girl students! Your support for the blind school -
you brought hope to so many lives! You are no more, however your kindness and selfless
spirit lives on! I know you are watching dear mother, and I will carry on the flame till I
live! I also would like to thank my father, late Shriniwas V. Khot. Anna, I have a photo of
the 'Tamra pat'--an engraved copper plaque--commemorating your great contribution to
the country's freedom struggle. You never compromised on core values --always stood for
the needy and poor. You live on in my memories--a hero forever! I would also want to
thank Martin Odersky for giving us the Scala programming language. I am deeply
thankful to Rich Hickey and the Clojure community for their work on persistent data
structures. Chris Okasaki’s "Purely Functional Data Structures" is a perennial source of
inspiration and insight. I wish to thank Chris for writing the book. This book is influenced
by many ideas Chris presented in his book. I also wish to thank the functional
programming community for all the technical writings which is a source of continual
learning and inspiration. I would love to express my heartfelt thanks to Nikhil Borkar for
all the support through out the book writing. I also would take this opportunity to thank
Hussain Kanchwala for the detailed editing efforts to make the book perfect. You guys are
awesome! Thanks to y’all!
Raju Kumar Mishra is a consultant and corporate trainer for big data and programming.
After completing his B.Tech from Indian Institute of Technology (ISM) Dhanbad, he worked
for Tata Steel. His deep passion for mathematics, data science, and programming took him
to Indian Institute of Science (IISc). After graduating from IISc in computational science, he
worked for Oracle as a performance engineer and software developer. He is an Oracle-
certified associate for Java 7. He is a Hortonworks-certified Apache Hadoop Java
developer, and holds a Developer Certification for Apache Spark (O'Reilly School of
Technology and Databriks), and Revolution R Enterprise-certified Specialist Certifications.
Apart from this, he has also cleared Financial Risk Manager (FRM I) exam. His interest in
mathematics helped him in clearing the CT3 (Actuarial Science) exam.

My heartiest thanks to the Almighty. I would like to thank my mom, Smt. Savitri Mishra,
my sisters, Mitan and Priya, and my maternal uncle, Shyam Bihari Pandey, for their
support and encouragement. I am grateful to Anurag Pal Sehgal, Saurabh Gupta, and all
my friends. Last but not least, thanks to Nikhil Borkar, Content Development Editor at
Packt Publishing for his support in writing this book.
About the Reviewer
Muhammad Ali Ejaz is currently pursuing his graduate degree at Stony Brook University.
His experience, leading up to this academic achievement, ranges from working as a
developer to cofounding a start-up, from serving in outreach organizations to giving talks
at various prestigious conferences. While working as a developer at ThoughtWorks, Ali
cofounded a career empowerment based start-up by providing photographers a platform to
showcase their art and be discovered by potential employers. His passion for computer
science is reflected in his contributions to open source projects, such as GoCD, and his role
in serving as the cofounder and Community Outreach Director of a non-profit organization,
"Women Who Code - Bangalore Chapter". Along with this, he has also been given the
opportunity to speak at different conferences on Continuous Integration and Delivery
practices.

When he is not coding, he enjoys traveling, reading, and tasting new cuisine. You can
follow him on Twitter at @mdaliejaz.

I want to thank my Mom and Dad, who have always been my inspiration. I’d also like to
thank Ahmad and Sana, my siblings, who have been a constant source of cheerful support.
A lot of what I am today is because of them.
www.PacktPub.com
For support files and downloads related to your book, please visit www.PacktPub.com.

Did you know that Packt offers eBook versions of every book published, with PDF and
ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a
print book customer, you are entitled to a discount on the eBook copy. Get in touch with us
at service@packtpub.com for more details.

At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a
range of free newsletters and receive exclusive discounts and offers on Packt books and
eBooks.

https://www.packtpub.com/mapt

Get the most in-demand software skills with Mapt. Mapt gives you full access to all Packt
books and video courses, as well as industry-leading tools to help you plan your personal
development and advance your career.

Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Customer Feedback
Thank you for purchasing this Packt book. We take our commitment to improving our
content and products to meet your needs seriously—that's why your feedback is so
valuable. Whatever your feelings about your purchase, please consider leaving a review on
this book's Amazon page. Not only will this help us, more importantly it will also help
others in the community to make an informed decision about the resources that they invest
in to learn. You can also review for us on a regular basis by joining our reviewers' club. If
you're interested in joining, or would like to learn more about the benefits we offer,
please contact us: customerreviews@packtpub.com.
Table of Contents
Preface 1
Chapter 1: Why Functional Programming? 8
The imperative way 9
Higher level of abstraction 10
Functional programming is declarative 13
No boilerplate 14
Higher order functions 16
Eschewing null checks 17
Controlling state changes 19
Recursion aids immutability 21
Copy-on-write 23
Laziness and deferred execution 24
Composing functions 26
Summary 29
Chapter 2: Building Blocks 30
The Big O notation 30
Space/time trade-off 33
A word frequency counter 34
Matching string subsets 36
Referential transparency 40
Vectors versus lists 42
Updating an element 46
Not enough nodes 47
Complexities and collections 48
The sliding window 48
Maps 49
Persistent stacks 51
Persistent FIFO queues 52
Sets 53
Sorted set 54
Summary 55
Chapter 3: Lists 56
First steps 57
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
List head and tail 61
Drop elements 64
Concatenating lists 66
Persistent data structures 69
Tail call optimization 70
List append 72
List prepend 74
Getting value at index 76
Modifying a list value 78
Summary 80
Chapter 4: Binary Trees 81
Node definitions 82
Building the tree 84
Size and depth 86
Complete binary trees 88
Comparing trees 89
Flipping a binary tree 91
Binary tree traversal 93
The accumulator idiom 95
Binary Search Trees 98
Node insertion 99
Searching a key 101
Updating a value 101
Exercising it 102
Summary 103
Chapter 5: More List Algorithms 104
Binary numbers 104
Addition 107
Multiplication 110
Greedy algorithms and backtracking 113
An example of a greedy algorithm 115
The backtracking jig 116
Summary 119
Chapter 6: Graph Algorithms 120
Reversing a list 121
Graph algorithms 123
Graph traversal 124
Avoiding list appending 128

[ ii ]
Topological sorting 129
Cycle detection 132
Printing the cycle 133
Summary 134
Chapter 7: Random Access Lists 136
Incrementing a binary number 137
Adding two binary numbers 139
List of tree roots 140
Insertion 142
Lookup 145
Removal, head, and tail 148
Update 151
Summary 152
Chapter 8: Queues 154
Understanding FIFO queues 155
Functional FIFO queues 156
Invariants 158
Implementing a priority queue 159
Understanding priority queues/heaps 161
Leftist trees 164
Functional heaps 166
Summary 173
Chapter 9: Streams, Laziness, and Algorithms 175
Program evaluation 176
Eager evaluation 176
Argument evaluation 178
Lazy evaluation 179
Lazy evaluation in Scala 180
Lazy evaluation in Clojure 182
Memoization – remembering past results 186
Memoization in Scala 188
Memoization in Clojure 190
Memoizing simpleFactFun 191
Streams 192
Stream in Scala 192
Indexing the elements of a stream 193
Creation of an infinite length stream 193
Stream is immutable 195
Creating a stream from another 196

[ iii ]
Stream to list 197
Appending one stream to another 198
Length of a stream 198
Some mathematical functions of the stream class 198
Some more methods of the stream class 199
Streams (lazy sequence) in Clojure 199
Creating a memoized function of lazy sequences in Clojure 200
Some algorithms on stream 200
Arithmetic progression 201
Arithmetic progression in Scala 202
Arithmetic progression in Clojure 202
Standard Brownian motion 203
Standard Brownian motion in Scala 203
Standard Brownian motion in Clojure 204
Fibonacci series 205
First form of Fibonacci series 205
Second form of Fibonacci series 205
Fibonacci series in Scala 206
Fibonacci series in Clojure 207
Summary 208
Chapter 10: Being Lazy - Queues and Deques 209
Imperative implementations 211
Amortization 212
Problem with queues 213
Strict versus lazy 214
Streams 215
Streams meet queues 217
A sense of balance 220
Amortized deques 221
Summary 225
Chapter 11: Red-Black Trees 227
Terminology 228
Almost balanced trees 229
The concept of rotation 229
Red-Black trees 231
Inserting a node 234
The Black-Red-Red path 237
Left, left – red child and grand child 238
Left child, right grand child 240
Right child, right grand child 241

[ iv ]
Right, left 242
Verifying the transformation 244
Complexity 245
Summary 246
Chapter 12: Binomial Heaps 247
Binomial trees 249
Left child, right sibling 252
A binomial heap 253
Linking up 254
Inserting a value 256
Binary number equivalence 259
Merging 260
Find the minimum 261
Deleting the minimum 262
Exercising the code 263
Complexity 264
Summary 265
Chapter 13: Sorting 266
Stable and unstable sorting 267
Stable sorting 268
Unstable sorting 268
Bubble sort 269
Scala implementation of bubble sort 272
Complexity of bubble sort 274
Selection sort 274
Complexity of selection sort 278
Insertion sort 278
Complexity of insertion sort 282
Merge sort 282
Splitting the sequence 283
Merging two sorted subsequences 285
Complexity of merge sort 289
Quick sort 289
Partition 290
Complexity of quick sort 293
Summary 293
Index 294

[v]
Preface
This book is about functional algorithms and data structures. Algorithms and data
structures are fundamentals of computer programming.

I started my career writing C and C++ code. I always enjoyed designing efficient algorithms.
I have experienced many an Aha! moments, when I saw how powerful and creative pointer
twiddling could be!

For example, reversing a singly linked list using three node pointers is a well known
algorithm. We scan the list once and reverse it by changing the pointer fields of each node.
The three pointer variables guide the reversal process.

I have come across many such pointer tricks and have used them as needed.

I was next initiated into the world of multi-threading! Variables became shared states
between threads! My bagful of tricks was still valid; however, changing state needed a lot of
care, to stay away from insidious threading bugs.

The real world is never picture perfect and someone forgot to synchronize a data structure.

Thankfully we started using C++, which had another bagful of tricks, to control the state
sharing. You could now make objects immutable!

For example, we were able to implement the readers/writer locking pattern effectively.
Immutable objects could be shared without worry among thousands of readers!

We slept easier, the code worked as expected, and all was well with the world!

I soon realized the reason it worked well! Immutability was finally helping us better
understand the state changes!
Preface

The sands of time kept moving and I discovered functional programming.

I could very well see why writing side-effect free code worked! I was hooked and started
playing with Scala, Clojure, and Erlang. Immutability was the norm here.

However, I wondered how the traditional algorithms would look like in a functional
setting--and started learning about it.

A data structure is never mutated in place. Instead, a new version of the data structure is
created. The strategy of copy on write with maximized sharing was an intriguing one! All
that careful synchronization is simply not needed!

The languages come equipped with garbage collection. So, if a version is not needed
anymore, the runtime would take care of reclaiming the memory.

All in good time though! Reading this book will help you see that we need not sacrifice
algorithmic performance while avoiding in-place mutation!

What this book covers


Chapter 1, Why Functional Programming?, takes you on a whirlwind tour of the functional
programming (FP) paradigm. We try to highlight the many advantages FP brings to the
table when compared with the imperative programming paradigm. We discuss FP’s higher
level of abstraction, being declarative, and reduced boilerplate. We talk about the problem
of reasoning about the state change. We see how being immutable helps realize "an easier to
reason about system".

Chapter 2, Building Blocks, provides a whirlwind tour of basic concepts in algorithms. We


talk about the Big O notation for measuring algorithm efficiency. We discuss the space time
trade-off apparent in many algorithms. We next look at referential transparency, a
functional programming concept. We will also introduce you to the notion of persistent
data structures.

Chapter 3, Lists, looks at how lists are implemented in a functional setting. We discuss the
concept of persistent data structures in depth here, showing how efficient functional
algorithms try to minimize copying and maximize structural sharing.

Chapter 4, Binary Trees, discusses binary trees. We look at the traditional binary tree
algorithms, and then look at Binary Search Trees.

[2]
Preface

Chapter 5, More List Algorithms, shows how the prepend operation of lists is at the heart of
many algorithms. Using lists to represent binary numbers helps us see what lists are good
at. We also look at greedy and backtracking algorithms, with lists at the heart.

Chapter 6, Graph Algorithms, looks at some common graph algorithms. We look at graph
traversal and topological sorting, an important algorithm for ordering dependencies.

Chapter 7, Random Access Lists, looks at how we could exploit Binary Search Trees to access
a random list element faster.

Chapter 8, Queues, looks at First In First Out (FIFO) queues. This is another fundamental
data structure. We look at some innovative uses of lists to implement queues.

Chapter 9, Streams, Laziness, and Algorithms, looks at lazy evaluation, another FP feature.
This is an important building block for upcoming algorithms, so we refresh ourselves with
some deferred evaluation concepts.

Chapter 10, Being Lazy – Queues and Deques, looks at double-ended queues, which allow
insertion and deletion at both ends. We first look at the concept of amortization. We use
lazy lists to improve the queue implementation presented earlier, in amortized constant
time. We implement deques also using similar techniques.

Chapter 11, Red-Black Trees, shows how balancing helps avoid degenerate Binary Search
Trees. This is a comparatively complex data structure, so we discuss each algorithm in
detail.

Chapter 12, Binomial Heaps, covers heap implementation offering very efficient merge
operation. We implement this data structure in a functional setting.

Chapter 13, Sorting, talks about typical functional sorting algorithms.

What you need for this book


You need to install Scala and Clojure. All the examples were tested with Scala version
2.11.7. The Clojure examples were tested with Clojure version 1.6.0. You don’t need any
IDE as most of the examples are small enough, so you can key them in the REPL
(Read/Eval/Print Loop).

You also need a text editor. Use whichever you are comfortable with.

[3]
Preface

Who this book is for


The book assumes some familiarity with basic data structures. You should have played
with fundamental data structures like linked lists, heaps, and binary trees. It also assumes
that you have written some code in a functional language.

Scala is used as an implementation language. We do highlight related Clojure features too.


The idea is to illustrate the basic design principles.

We explain the language concepts as needed. However, we just explain the basics and give
helpful pointers, so you can learn more by reading the reference links.

We try to site links that offer hands-on code snippets, so you can practice them yourself.

Walking through an algorithm and discussing the implementation line by line is an


effective aid to understanding.

A lot of thought has gone into making helpful diagrams. Quizzes and exercises are
included, so you can apply what you've learned.

All the code is available online. We strongly advocate keying in the code snippets though,
to internalize the principles and techniques.

Welcome to the wonderland of functional data structures and algorithms!

Conventions
In this book, you will find a number of text styles that distinguish between different kinds
of information. Here are some examples of these styles and an explanation of their meaning.

Code words in text, database table names, folder names, filenames, file extensions,
pathnames, dummy URLs, user input, and Twitter handles are shown as follows: "The
following function f has a side effect, though."

A block of code is set as follows:


user=> (def v [7 11 19 52 42 72])
#'user/v
user=> (def v1 (conj v 52))
#'user/v1

[4]
Preface

If there is a line (or lines) of code that needs to be highlighted, it is set as follows:
scala> def pop(queue: Fifo): (Int, Fifo) = {
| queue.out match {
| case Nil => throw new IllegalArgumentException("Empty queue");
| case x :: Nil => (x, queue.copy(out = queue.in.reverse, Nil))
| case y :: ys => (y, queue.copy(out = ys))
| }
| }
pop: (queue: Fifo)(Int, Fifo)

New terms and important words are shown in bold. Words that you see on the screen, for
example, in menus or dialog boxes, appear in the text like this: "Clicking the Next button
moves you to the next screen."

Warnings or important notes appear in a box like this.

Tips and tricks appear like this.

Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this
book—what you liked or disliked. Reader feedback is important for us as it helps us
develop titles that you will really get the most out of.

To send us general feedback, simply e-mail feedback@packtpub.com, and mention the


book's title in the subject of your message.

If there is a topic that you have expertise in and you are interested in either writing or
contributing to a book, see our author guide at www.packtpub.com/authors.

Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you
to get the most from your purchase.

[5]
Preface

Downloading the example code


You can download the example code files for this book from your account at http://www.p
acktpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.c
om/supportand register to have the files e-mailed directly to you.

You can download the code files by following these steps:

1. Log in or register to our website using your e-mail address and password.
2. Hover the mouse pointer on the SUPPORT tab at the top.
3. Click on Code Downloads & Errata.
4. Enter the name of the book in the Search box.
5. Select the book for which you're looking to download the code files.
6. Choose from the drop-down menu where you purchased this book from.
7. Click on Code Download.

Once the file is downloaded, please make sure that you unzip or extract the folder using the
latest version of:

WinRAR / 7-Zip for Windows


Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux

The code bundle for the book is also hosted on GitHub at https://github.com/PacktPubl
ishing/Learning-Functional-Data-Structures-and-Algorithms. We also have other
code bundles from our rich catalog of books and videos available at https://github.com/P
acktPublishing/. Check them out!

Downloading the color images of this book


We also provide you with a PDF file that has color images of the screenshots/diagrams used
in this book. The color images will help you better understand the changes in the output.
You can download this file from https://www.packtpub.com/sites/default/files/down
loads/LearningFunctionDataStructuresandAlgorithms_ColorImages.pdf.

[6]
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Preface

Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do
happen. If you find a mistake in one of our books—maybe a mistake in the text or the
code—we would be grateful if you could report this to us. By doing so, you can save other
readers from frustration and help us improve subsequent versions of this book. If you find
any errata, please report them by visiting http://www.packtpub.com/submit-errata,
selecting your book, clicking on the Errata Submission Form link, and entering the details
of your errata. Once your errata are verified, your submission will be accepted and the
errata will be uploaded to our website or added to any list of existing errata under the
Errata section of that title.

To view the previously submitted errata, go to https://www.packtpub.com/books/conten


t/supportand enter the name of the book in the search field. The required information will
appear under the Errata section.

Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all media. At
Packt, we take the protection of our copyright and licenses very seriously. If you come
across any illegal copies of our works in any form on the Internet, please provide us with
the location address or website name immediately so that we can pursue a remedy.

Please contact us at copyright@packtpub.com with a link to the suspected pirated material.

We appreciate your help in protecting our authors and our ability to bring you valuable
content.

Questions
If you have a problem with any aspect of this book, you can contact us at
questions@packtpub.com, and we will do our best to address the problem.

[7]
Why Functional Programming?
1
What is functional programming (FP)? Why is it talked about so much?

A programming paradigm is a style of programming. FP is a programming paradigm


characterized by the absence of side effects.

In FP, functions are the primary means of structuring code. The FP paradigm advocates
using pure functions and stresses on immutable data structures. So we don't mutate variables,
but pass a state to function parameters. Functional languages give us lazy evaluation and
use recursion instead of explicit loops. Functions are first-class citizens like numbers or
strings. We pass functions as argument values, just like a numeric or string argument. This
ability to pass functions as arguments allows us to compose behavior, that is, cobble
together something entirely new from existing functions.

In this chapter, we will take a whirlwind tour of functional programming. We will look at
bits of code and images to understand the concepts. This will also lay a nice foundation for
the rest of the book. We will use the functional paradigm and see how it changes the way
we think about data structures and algorithms.

This chapter starts with a look at the concept of abstraction. We will see why abstractions
are important in programming. FP is a declarative style of programming, similar to
Structured Query Language (SQL). Because it is declarative, we use it to tell what we want
the computer to do, rather how it should do it. We will also see how this style helps us stay
away from writing common, repetitive boilerplate code.
Why Functional Programming?

Passing functions as arguments to other, higher order functions is the central idea in FP; we
look at this next. We will also see how to stay away from null checks. Controlled state
change allows us to better reason our code. Being immutable is the key for creating code
that would be easier to reason about.

Next, we will see how recursion helps us realize looping without mutating any variables.
We will wrap up the chapter with a look at lazy evaluation, copy-on-write, and functional
composition.

The imperative way


We keep contrasting FP with the imperative style of programming. What do we mean by
imperative style, though?

The imperative programming style is embodied by a sequence of commands modifying a


program's state. A simple example of this is a for loop. Consider the following pseudo code
snippet to print all the elements of an array:
x = [1,2,3,4...] // an array, x.size tells the number of array elements
for( int i = 0; i < x.size; ++i ) {
println(x[i])
}

Here is a pictorial rendering of the concepts:

[9]
Why Functional Programming?

As the figure shows, the for loop establishes an initial state by setting the variable i to 0.
The variable is incremented every time the loop is repeated; this is what we mean by the
state being modified. We keep reading and modifying the state, that is, the loop variable,
until there are no elements left in the array.

FP advocates staying away from any state modification. It gives us tools so we don't worry
about how to loop over a collection; instead, we focus on what we need to do with each
element of the collection.

Higher level of abstraction


FP allows us to work at a higher level of abstraction. Abstraction is selective ignorance. The
world we know of runs on abstractions. If we say, “Give me sweet condensed milk frozen
with embedded dry fruits' someone might really have a hard time understanding it.
Instead, just say “ice-cream”! Aha! It just falls into place and everyone is happy.

Abstractions are everywhere. An airplane is an abstraction, so is a sewing machine or a


train. When we wish to travel by train, we buy a ticket, board the train, and get off at the
destination. We really don't worry about how the train functions. We simply can't be
expected to deal with all the intricacies of a train engine. As long as it serves our purpose,
we ignore details related to how an engine really works.

What are the benefits of an abstraction? We don't get bogged down into unnecessary
details. Instead, we focus on the task at hand by applying higher level programming
abstractions.

Compare the preceding for loop with the functional code snippet:
scala> val x = Array(1,2,3,4,5,6)
x: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> x.foreach(println _)
1
2
...

We simply focus on the task at hand (print each element of an array) and don't care about
the mechanics of a for loop. The functional version is more abstract.

[ 10 ]
Why Functional Programming?

As software engineers, when we implement an algorithm and run it, we are intentionally
ignoring many details.

We know that the preceding sandwich stack somehow works and faithfully translates the
algorithm into runnable code.

Applying higher level abstractions is commonly done in functional languages. For example,
consider the following Clojure REPL snippet:
user=> ((juxt (comp str *) (comp str +)) 1 2 3 4 5)
["120" "15"]

[ 11 ]
Random documents with unrelated
content Scribd suggests to you:
"En ikinä eläissäni ole vielä suudellut tyttöä… eikä ole yhdenkään
käsi tätä ennen levännyt käsivarrellani. Jos minä jotakin alan
rakastaa, niin on se vakava asia."

Tyttö kumartui taas hiukan ja katsoi taaskin maahan ja sanoi


arasti:
"Se on minullekin vakavin asia maailmassa."

Silloin pysähti Wilhelm, ja otti häntä kädestä ja pyysi: "Katsohan


ylös toki ja katso minuun."

Mutta tyttö piti silmiään maahan luotuina vaan ja päätään


kumarrettuna; hän arkaili näyttää kasvojaan, jotka tuo äkillinen
rakkaus pahasti oli hämmentänyt, kuten hän hyvin tunsi. Huojuvain
oksien välitse vilkahteli valovälkkeitä, jotka leikkivät hänen
hiuksillaan.

Silloin laski Wilhelm kätensä hänen otsalleen ja taivutti hänen


päätään taaksepäin ja sanoi rukoillen: "Annahan toki", ja suuteli
häntä arasti, ja kun tyttö silmät alas luotuina pysyi hiljaa, suuteli hän
häntä uudelleen ja uudelleen. Sitte lähti tyttö hitaasti käymään
hänen rinnallaan, molemmat kätensä hänen käsivarrellaan ja
luottavasti lähestyneenä häntä, silmät taaskin maassa.

"Eikö isäsi sallisi, että sinä käyt tansseissa?"

"Ei", sanoi hän, "hän tahtoo pitää meidät kaikki kotona, että
hänellä olisi helppoja työjuhtia. Meidän talomme on pahasti
velkaantunut. Minun vanhempi siskoni on jo perin kuihtunut ja
kuivunut".
Wilhelm joutui ihan suunniltaan: "Siten ei saa sinulle tapahtua.
Sinulle?… Sinä et saa jäädä naimattomaksi."

"Ei ole aikomuksenikaan", vastasi hän. "Mutta kuka huolii


minusta?"

"Niin, kenen sinä tahdot? Kas, siitä se riippuukin! Näytäshän nyt


silmäsi minulle. No, katsohan ylös nyt ja katso minuun. Älä nyt ole
noin säikäyksissäsi… Noin!… Mitkä kirkkaat älykkäät silmät sinulla
ovatkaan! Tuota, sanohan, miltä sen pitää näyttää, josta sinä voisit
pitää?"

Tyttö katseli hetkisen liikahtamatta ja ystävällisen uteliaasti


häneen, sitte kohotti hän kätensä hellästi ja arasti, aikoi kai laskea
ne hänen olalleen, mutta ei saanutkaan suoritetuksi sitä liikettä ja
sanoi liikuttavasti hämillään: "Noin melkein kuin sinä."

Wilhelm silitti kädellään häntä: "Kuinka armas sinä olet."

He olivat vielä kokonaan vaipuneet katsomaan toisiaan silmiin, kun


kastanjoilta käsin alkoi kuulua askeleita. Leveähartiainen raskaan
työn jäykistämä mies meni ohitse ja sanoi käreällä äänellä: "Sinä
tulet kotiin." Tyttö erosi sanaakaan sanomatta Bojesta ja lähti isänsä
rinnalla puistokäytävää pitkin ja hävisi näkyvistä.

Silloin kiersi Wilhelm Boje jalan ympäri lahden Freestedtiin ja


palasi takaisin tyhjään kotiinsa.

Seuraavana päivänä ajatteli hän: "Kuinka omainen hän olikaan ja


armas ja ihmeellinen! Ja mitkä suloiset valkeat kasvot." Seuraavana
päivänä kuvaili hän itselleen, kuinka nyt hän, jonka hän nyt siis jo
tunsi, asuisi tässä talossa, ja kävi joka huoneessa, ja näki hänet
kaikkialla… Kolmantena päivänä sai hän kirjeen häneltä, se oli
kirjoitettu perin sekaisella käsialalla — oli aivan ihme ja kumma
kuinka tuo suuri älykäs tyttö saattoi kirjoittaa tuommoisia
turhanpieniä epätasaisia kirjaimia. Hän kirjoitti kielellä, joka ei ollut
aivan moitteetonta yläsaksaa: "Minun pitää sittenkin mennä
naimisiin, serkkuni kanssa Krautsielistä. Hänellä on pieni maatila
rantavallin vierellä, eikä tarvitse myötäjäisiä, sanoo isä, ja he voivat
kyntöaikana säästää kaksi hevosta, jos he vuoroin lainaavat
hevosensa tointoiselleen, sanoo hän. Serkku on vielä ihan nuori, ja
iho karkea kuin luusta ja hirveän töykeää koskettaa, mutta luulen,
että sittekin menen hänelle, sillä mitä minä muutakaan? Sittehän
selkeän toki isästä. Minun ikkunani on viimeinen vallillepäin länteen.
Mutta mitä siitä? Kaiket yöt ajattelen minä opettajaa Freestedtissä,
ja tahtoisin hirveän mielelläni tietää, vieläkö hän pitää minusta."

Silloin puki hän illalla, kun tuli pimeä, paksun talvitakin ylleen ja
meni rantaan, irroitti rapupyydystäjä Paulsenin venheen ja sousi ulos
lahdelle. Hän toivoi voivansa laskuvirran mukana tunnissa ennättää
Krautsieliin, virta nimittäin vie viistoon poukaman poikki sinne
kohden. Aamusti aikoi hän palata takaisin vastakkaisen virran
mukana.

Aivan laskujensa mukaan tulikin hän virran vetoon, piti tarkkaa


huolta siitä, että valot Hilligenleistä käsin näkyivät hänelle oikealta
taholta ja tarttui airoihin. Kun hän hetken perästä, jonka hän arvioi
liika lyhyeksi, häntä kun nuoruutensa, ajatuksensa ja virta kiidättivät
yhtä nopeasti, loi katseensa ylös, olivat nuo valkeat pilvikaritsat
hävinneet, jotka äsken olivat laumoina karehtineet taivaalla; niiden
sijasta oli kohonnut sinne ylös yksinäisiä raskaita mustia lehmiä,
jotka verkkaan ja hitaasti käyskelivät taivaan laitumilla; rantavalli
oikealla, jonka tumman suoran ääriviivan hän äsken vielä selvästi oli
eroittanut, oli kadonnut. Silloin kävi hän levottomaksi ja tarttui
voimakkaasti airoihin, päästäkseen taas vallin näköpiiriin. Nousi
terävä kylmä tuuli, jonka suunnasta hän ei ollut selvillä. Ympärillään
ei näkynyt muuta, kuin harmaita mustia aaltoja, jotka kasvoivat
suuremmiksi ja vyöryivät laakeampina ohitse, yllä taivas, joka
häämötti vähän selkeämpänä. Silloin alkoi häntä palella, ja hän alkoi
torata tyttöä: Maksaa saa hän tästä, mitä hän tässä nyt on saanut
aikaan. "Maksaa saa hän!" Aivan harmistuneena ja äissään jätti hän
sikseen enää pyrkiäkään päämääräänsä kohden, ja päätti aamun
sarastukseen asti soutaa näin virtaa vastaan, jotta hän pysyisi
lämpimänä, eikä ajautuisi liika kauas ulos merelle.

Hän oli tuskin päättänyt tämän, kun alkoi viistoon edessä


verrattain lähellä tuikottaa omituinen kirkas valo. Valo, joka lähti…
niin näytti hänestä, kuin jostain tornista. Ja torni… huojui verkalleen
edes ja takaisin? Ja seisoi keskellä kuohuvaa virtaa? Ja valo oli niin
punertava ja tulinen ja riippui korkealla ylhäällä, ikäänkuin
heilahtelisi se hiljalleen jossakin laessa? Hän tuijotti sinne suu ja
silmät selällään, ja souti varovasti — yks' — kaks' — yks' — kaks' —
sinne kohden.

Yht'äkkiä tunsi hän sen. Herra armahtakoon! Sehän oli


majakkalaiva. Majakkalaiva, joka on ulkona poukaman suulla! Herra
armahtakoon! Niin kauas ulos oli hän siis jo ajautunut!

Hän sousi sen luoksi, sai käteensä erään köyden, sitoi venheensä
kiinni, ja kiipesi kannelle.

Kaksi merimiestä nojausi reilinkiä vastaan, ja katselivat häneen,


toinen niistä virkkoi: "No?… mistä sinä tulet…"
"Minä olen opettaja Boje Freestedtistä", sanoi hän, "minun piti
laskea yli Hilligenleihin, mutta eksyin."

"Se ei ole totta", sanoi merimies, "sinä aioit Krautsieliin Hella


Andersenin luo".

Boje tuijotti ällistyneenä merimiehen laihanmuseviin kasvoihin,


joista katsoi häneen pari älykästä syvällä välkähtävää silmää: "Kuka
sinä sitte olet?" sanoi hän, "kun sen tiedät?"

"Minä olen Thoms Jans… minun vaimoni kirjoitti siitä minulle. Hän
oli nähnyt, kuinka Hella Andersen tanssi kengän jalastaan. Hän
tuntee Hella Andersenin hyvin, hän on palvellut heillä. Näetkös!"

"Ja mitä on sinun vaimollasi tekemistä Ringerangilla tansseissa,


sill'aikaa kun sinä istua kökötät täällä."

"Meillä on kolme lasta, näetkös; sentähden koettaa hän hankkia


vähän lisäansiota. Hän on Ringerangilla tarjoilijattarena… Tulehan
nyt siitä, sinähän palelet."

Portailla seisoivat kapteeni ja puosu, ne kuuntelivat päätään


pudistellen Bojen kertomusta ja sanoivat Thoms Jans'ille: "Saat tästä
myöhemmin laskea hänet maihin." Enempää huomiotta eivät he
kiinnittäneet vieraaseen.

Tämä istui kajuutassa erään merimieskistun äärimmällä


kulmaukselle, siten, että hänellä oli pieni rautakamiini, joka oli
hieman lämmin vielä, polviensa välillä, hampaansa kalisivat ja hän
vapisi vilusta. "Oletko jo kauan palvellut majakkalaivalla?" kysyi hän.

"Kolme vuotta jo", sanoi Thoms Jans.


"Miekkonen!" sanoi Vilhelm Boje, "mutta sanohan: miten kestät
olla täällä. Kolme vuotta poissa vaimosi luota? Niin, jos hän olisikin
tuhannen penikulman päässä sinusta. Mutta näin? Pari penikulmaa
vaan erillään. Sepäs mahtaa tuntua hitolta."

"Niinpä niinkin", tuumi merimies, "mutta mitä tehdä?"

"Kuinka niin?"

"Niin, näetkös; ensinnäkin on työnsaanti Hilligenleissä ylen


tiukalla. Talvella saat olla kymmenkunta viikkoa ihan joutilaana;
tiedäthän, koko Hilligenlei nukkuu. Niin, ja sitte… niin… näetsä… me
saimme kolmena ensimmäisenä vuonna kohta kolme pikku tyttöä;
silloin tuumin minä: saakos tämä meno jatkua?…"

"Ja siksi lähdit sinä majakkalaivalle?"

"Siksi".

"Ja olet nyt kolme vuotta ollut vaimosi luota poissa?"

"Niin tuota, olenhan tuolloin tällöin käynyt siellä… noin joka


kuudes viikko; mutta olen pysynyt hänestä erilläni… ymmärrät…"

"Mutta tuohan on mieletöntä", sanoi Boije ja otti koko kamiinin ja


siirsi sen varovasti lähemmäksi itseään. "Aivan mieletöntä… Mitä nyt
on koko elämästäsi?"

"Niin", sanoi Thoms Jans ja vilkasi kulmainsa alta viisailla syvillä


silmillään Bojeen, "se on kamalaa. Koko elämä tyhjää… tyhjää vaan.
Mutta näes… jos siitä nyt tulisi poika?… Nuo kolme tyttöä kyllä
löytänevät kunnon miehen itselleen. Mutta jos tulee poika?"
"Jos tulee poika? Entä sitte? Levität pöytää vaan ja olet hyvilläsi."

"Niinkö? Mutta entä sitte myöhemmin? Näes… minulla oli lapsena


semmoinen mieli, ikäänkuin tarvitsisi minun aina ja aina vaan oppia,
en saanut koskaan oppia ja lukea kyllikseni. Opettaja sanoi isälleni:
onpa sääli, että pojan pitää palvelukseen; mutta minun piti;
kymmenen vanha olin silloin. Piti juuri alkaa oppia, silloin oli kaikki
ohitse. Tykkänään… Seitsemän vuotta sitte, kun juuri olin palannut
sotapalveluksesta, palvelin Hargen Jansenilla, tiedäthän,
Süderwischissä. Tämän luoksi tuli vierailemaan hänen veljensä,
pappi. Sen kanssa sain samoilla kolme neljä päivää, milloin
rannikolle, milloin ylös nummikyliin; se etsiskeli, tapaisiko hän vielä
missään lapsuuden jälkiään. Niinä kolmena päivänä, jotka istuin
hänen kanssaan rattailla ja pidin ohjaksia, puhui hän kanssani
kaikesta, mikä koskee ihmiskuntaa, ja mitä oppineet siitä ovat
tuumanneet: uskonnosta ja hallituksesta ja valtiopäivistä ja
itsehallinnosta ja kaupasta ja teollisuudesta ja maanviljelyksestä.
Mutta se ei ollut minulle miksikään hyväksi, sillä kun ne kolme päivää
olivat ohitse, ja minun taas piti talliin ja illalla taaskin istuin yksin
kammarissani hevostallin vieressä, ilman kirjaa ja ilman paperin
palastakaan kädessäni: niin sanon sinulle, ikinä elämässäni en ole
ollut onnettomampi kuin silloin. No, ja siten on se vielä, ja siten on
se oleva aina. Tiedätkö, miltä se tuntuu. Sinulla on suuri tyhjä oltava
päässäsi, ilman väliseiniä, ilman ikkunoita ja huonekaluja, eikä
kukaan asu siellä. Ymmärrätkö sitä? No niin ja. Ja nyt? Tytöt eivät
ole niin opinnälkäisiä. Mutta jos siitä tulee poika? Pitääkö sen joutua
samaan kurjuuteen? Pitääkö hänenkin kuleksia koko elämänsä ajan
samallainen tyhjä autio oltava päässään? Ymmärrätkö sitä?… No
niin… Siinä tapauksessa tiedät myöskin, miksi minä kyyristelen täällä
majakkalaivalla."
"Pidätkö paljon vaimostasi?" kysyi Boje.

"Siitä ole varma!" sanoi Thoms Jans. "Hän on armas pikku vaimo."
Hän tuki päätään kumpaakin kättään vastaan ja vaipui mietteisiinsä.

Kolme merimiestä astui kajuuttaan ja istuutuivat. Yksi heistä alkoi


puhdistella piippuaan, molemmat toiset katselivat hänen
työskentelyään. He eivät virkanneet sanaakaan.

Thoms Jans kohotti päätään ja virkahti ajatuksistaan: "Sanohan,


timperi, oletko koskaan elämässäsi tuntenut itsesi oikein
onnelliseksi?"

"Mistä minä tiedän", vastasi tämä. "Oikein onnelliseksi? Enpä


tiedä.
Ehkä joskus kun olin aivan nuori vielä."

"Muistele nyt", sanoi Thoms Jans.

"Ah, sinuakin!" sanoi timperi ja kaiveli piippuaan… "Olet utelias


kuin lapsi… Oikein onnellinen?… Sitä en tiedä. Niin… kerran, noin
kuus seitsemän vuotta sitte, kohdakkoin sodan jälkeen, menin minä
merimiehenä eräässä rahtihöyrylaivassa Lontooseen: silloin sattui
meille omituinen tapaus… Oli eräs matkustaja laivalla, pienenläntä
mies, kasvonsa näyttivät minusta hieman juutalaisilta. Tämä tuli
eräänä iltana kun minulla oli vapaavahti… me mennä jyskytimme
par'aikaa puuskuvaa luodetuulta vastaan… luoksemme koijuun; Rob.
Stewensillä oli par'aikaa raamattu avoimena pöydällä: mahtoi siis olla
sunnuntai-ilta. Niinpä siis, mies tulee koijuumme, menee istumaan,
näkee kirjan siinä pöydällä ja arvaatkaas! — lyö kämmenellään
kirjaan ja sanoo: 'Kirja tuossa on paras kirja maailmassa, ja
kuitenkin on se syypää siihen että maailmassa on niin paljon
kurjuutta ja tuhmuutta. Niin, siten sanoi hän… jotenkin siten'."

Thoms Jans oli kohottanut päätään. Hänen silmänsä sinkoavat


kohden timperin vanhoja parrakkaita kasvoja: "Jatka."

"Rikkaat ja papit", sanoi juutalainen "ne sirottavat santaa


silmiimme, ja raamattua käyttävät tähän tarkoitukseen. Niin, siten
hän sanoi. Se oli hänen käsityksensä."

Thoms Jans tuijotti Bojea kasvoihin. "Mitä sanot sinä siitä,


opettaja?…"

"Se on ollut joku sosiaalidemokraatti", sanoi Boije: "Olen kuullut


semmoista ennenkin. Sosiaalidemokraatti! Mutta mitä semmoisista!
Ajattele ennemmin, kuinka pääsen Krautsieliin."

"Jatka."

"Niin, mitä hän muuta vielä puhui? Hän sanoi, että asiat tulisivat
vielä muuttumaan. Perinpohjin! Ja pian!"

"Sitä en ymmärrä", sanoi Thoms Jans.

"Et ymmärrä miekkonen? Kaikki yhdenvertaisiksi! Kaikki


yhdenvertaisiksi! Siten sanoi hän. Yhdellä rikkaalla, sanoi hän, on
peltoa paljon ja suuret metsät, siksi pitää kymmenen köyhän palella
lapsineen ja seistä värjöttää kadulla tai asua huoneissa, joihinka ei
aurinko ikinä paista. Yksi rikas saa käydä hienoissa vaatteissa, saa
nähdä maailmaa, saa ostaa lapsilleen kaikki kirjat, joita he haluavat;
siksipä pitää kymmenen köyhän lapsineen elää vaivassa ja
ahdingossa ja tietämättömyydessä. Kaikki se on muuttuva toiseksi,
sanoi hän. Kun silloin kaksi lasta lepää kehdossa, sanoi hän, niin
silloin ei sanota: kreivinlapsi ja rikkaan lapsi ratsastaa edellä ja
työmiehen lapsi saa tulla köntystää jälestä. Vaan molemmat ratsaille!
Ja nyt: kummassa on miestä ratsastamaan? Kumpi putoaa
satulasta?… Ymmärrättekö? Jotta kansan parhaimmat veisivät
kansaansa eteenpäin. Ymmärrättekö? Siten sanoi hän."

Thoms Jans oli noussut pystyyn. "Niinkö?" sanoi hän hitaasti ja


painavasti. "Vai siten sanoi hän? Ja… mitä sanoi hän siitä?… onko
niitä semmoisia jotka myöskin uskovat tuohon?"

"Hampurissa ja Berliinissä, sanoi hän… käy tuhansia heidän


kokouksissaan. Heillä on edustajia valtiopäivilläkin jo."

"Ja tuo, mitä hän sanoi lapsista?" sanoi Thoms Jans ja tuijotti
häneen.
"Että ne, joilla on älyä päässä, että niiden pitää päästä eteenpäin?
Sitenkö hän sanoi?"

"Siten sanoi."

"Siinä tapauksessa…" sanoi Thoms Jans, "… minulla on loma nyt…


siinä tapauksessa menen minä kautta totisen Jumalan… minä
menen… pois majakkalaivasta, ja uskallan sen!… Uskaltaa tahdon…
Ja paikalla… Minä… minä menen Hilligenleihin. Tule, opettaja, minä
vien sinut Krautsieliin, ja menen sieltä Hilligenleihin."

Timperi pyhkäsi kädellään partaansa ja katsahti toisiin: "Uskaltaa


aikoo hän?" puhui hän… "mitä aikoo hän uskaltaa?" Toiset ravistivat
päätään… "Olipa täällä kerran eräs, täällä laivassamme", kertoi
timperi, "hän oli myöskin nuori mies, kävi päivä päivältä
vaiteliaammaksi ja vaiteliaammaksi, tuijotteli päivät pääksytysten
Blausandin meriviittaa kohden, tuijotti ja tuijotti. Sitte yht'äkkiä,
iltasella, noin tuossa hämärissä, sanoa tokaisee hän minulle:
Timperi, sanoo hän, eikö tuolla seiso minun vaimoni? Mies luuli —
Jumala paratkoon — Blausandin pitkää turjuvaa meriviittaa, joka on
ainakin viisitoista metriä korkea, vaimokseen. Silloin täytyi minun
viedä hänet maihin… Tämmöinen majakkalaiva ei ole mikään paikka
nuorille miehille. Nyt on Janskin sekaisin. Uskaltaa aikoo hän…? Mitä
aikoo hän uskaltaa?"

Sillävälin olivat nämä kumpikin jo kavunneet yli reilingin ja


sousivat nyt vuorotellen, alkoi vihmoa kylmää sadetta, joka perin
pohjin kasti heidät ja noin tunnin kestävän soudun jälkeen saapuivat
he läpimärkinä Krautsielin rantaan. Vaiteliaina ja kylmästä jäykkinä
mennä jöntystivät he vallia pitkin, puuskuilevaa tuulta vastaan,
kunnes Thoms Jans sanoi: "Näetkös?… tuolla alempana, tuolla
noiden tummien poppelien varjossa? Siellä on talo." Ja kun toinen
sanaa sanomatta lähti laskeutumaan vallin vierrettä, huusi hän
hänelle jälestä: "Käy käsiksi vaan! Muuten ei hellitä ukko tyttöään
sinulle."

Boje ei kääntynyt juostessaan taakseenkaan, sanoi vaan: "Pidä


sinä huolta omasta asiastasi vaan, kyllä minä omastani pidän."

Kun hän läheni taloa, niin näki hän jo, ennenkuin hän vielä
eroittikaan eri ikkunoita, Hella Andersenin. Hän istui ikkunalaudalla,
laski käsivartensa hänen ympärilleen ja säikähti: "Jumalani, kuinka
märkä sinä olet ja palelet… Oh, sinua! Tule nopeasti sisään! Tule,
sinun pitää mennä minun lämpimään vuoteeseeni! Tule… Sinä kuolet
viluun."

Silloin astui hän ikkunasta sisään.


"Sinä", sanoi hän ja sulki tytön lujasti syliinsä. "Kuule, serkustasiko
tulee mies sinulle, sarvikuoriaisesta? Että isäukkosi säästäisi yhden
hevosparin?"

Tyttö nyökäytti päätään ja puristausi häntä lähelle. "Älä jätä sinä


minua!"

"Minäkö sinut jättäisin?… Minä sinut jättäisin?… Kuinka


hurmankaunis sinä olet!"

Nyt kävi hän hänen luonaan kuuden viikon ajan.

Silloin oltiin niin pitkällä, että tytön piti kertoa asiasta isälleen.

*****

Ja kun aika tuli, syntyi pitkässä rakennuksessa Hilligenleissä pieni


poika. Kun Rieke Thomsenin piti pestä lapsi, säikähti hän ja kääntyi
äitiin ja sanoi: "Mutta katsohan… hänellä on rinnassaan tulipunainen
merkki, pyöreä ja suuri kuin taalarin raha. Mitä se on? Oletko sinä
taiottu?"

Thoms Jans kumartui kuolinuupunutta, pientä vaimoaan kohden ja


sanoi:
"Kuulitko Male?"

Male kosketti häntä käteen ja sanoi: "Ne kolme vuotta, jotka sinä
olit poissa, näin minä koko ajan, varsinkin iltasin kun makasin
vuotellani, enkä saanut unta, hengissäni edessäni majakkalaivan ja
näin alati tuon valkean, suuren ja pyöreän kuin taalarin rahan."

Kun Rieke oli laskenut lapsen hyvin huolittuna ja vaalittuna äitinsä


syliin — oltiin noin puoli yössä silloin — tuli Hule Beiderwand, joka oli
ollut valvomassa veljensä kuolinvuoteen ääressä, ikkunan taakse
koputtamaan ja ilmoitti, että lahden toiselta puolelta näkyi valo.
Silloin lähti Rieke Thomsen suoraa päätä Freestedtin puolelle, ja
avusti Hella Andersenia, kun hän synnytti ensimmäisen lapsensa,
voimakkaan tytön, jolla oli vaaleat hiukset, samallaiset kuin hänen
omansakin, jotka lepäsivät hajallaan ja sekaisina päänaluksella.
Vilhelm Boje, hänen miehensä, puolestaan puserteli niin lujaan
hänen kättänsä, että hänen täytyi pyytää häntä käsittelemään häntä
enemmän hellävaroen. Niin iloitsi hän lapsesta, jonka hänen kaunis,
kaihtiva, tulinen vaimonsa oli hänelle synnyttänyt.

Ja nämäkin kaksi lasta kasvoivat ja varttuivat.

Ja pikku Jans pitkässä rakennuksessa Hilligenleissä kasvoi ja


voimistui ja hänestä tuli kyllä hieman hentorakenteinen, mutta ei
mikään heikko poika. Vanhempiaan hän ei usein nähnyt. Äiti kävi
Ringerangissa työssä, isä työskenteli rannikolla lapioineen. Kun he
aamusti lähtivät, nukkui hän vielä, kun he illalla palasivat, oli hän jo
vuoteellaan. Mutta sunnuntait istui hän heidän sylissään, tai nojasi
heidän polviinsa.

Pian tuli aika, jolloin hän tarrautui äitinsä hameen liepeeseen, ja


meni hänen kanssaan pitkän rakennuksen sivustaa aina viimeiselle
ovelle asti. Siellä istui kauhean suuri pyöreä pyyleä nainen; kaikki oli
pyöreätä hänessä, varsinkin, tuntui hänestä, hänen silmänsä. Hän joi
kahvia imeskellen ruskeata sokuria, josta hän antoi hänellekin
palasen ja sanoi äidille: "Kummalliset silmät tuolla pojalla! Ikäänkuin
ihmettelisi hän jotain! Pidän pojasta muuten paljon, mutta noita
silmiä en siedä. Mitä maailmassa on ihmettelemistä? Katsoppas,
sanovatko kortit hänestä mitään." Mutta kortit eivät tietäneet juuri
muuta, kuin ettei häntä ainakaan liiat rahat tulisi rasittamaan. Silloin
arveli pieni Male Jans ylväästi: Ei ihmisen onni niistä riipukkaan.

Toisinaan sovitti hän pienen kätösensä isänsä suureen kovaan


kouraan, ja meni hänen kanssaan lähimmälle ovelle ja astui Hule
Beiderwandin tupaan. Tämä antoi hänelle palasen leipää, jolle oli
levitetty vahvasti voita, ja vanhan raamatun historian, jossa oli
merkillisiä kuvia. Sillävälin kun hän sitte ikkunan ääressä, polvillaan
tuolilla ja kirja ikkunanlaudalla, hiljaa jutteli kuvilleen, puhui Thoms
Jans toivostaan, että se uusi puolue, työväen puolue, voisi tehdä
koko maailman pyhäksi ja siten ehkä saattaisi täytäntöön sen vanhan
uskon, joka oli elänyt lahden ympärillä. Mutta ukko oli käynyt
vastahakoiseksi ja sanoi itsepintaisesti: "Ei, ei, täällä tämän lahden
ääressä, tämän vallin suojassa on kerta elävä ja vaikuttava ihminen,
joka vallalla ja väkevyydellä on tekevä tästä maasta Hilligenlein, se
on pyhän maan… Se on uskomme."

Ja hän kutsui korkealla ontalla äänellään lapsen luokseen, katsoi


häneen vanhoilla heikontuneilla silmillään ja pudisti päätään: "Ei",
sanoi hän, "tästä ei tule sitä miestä, hänellä on niin arat silmät… Hän
pelkää ja arastelee," ja työnsi lapsen varmasti ja lujalla kädellä
luotaan.
KOLMAS LUKU.

Kun hän oli seitsemän vanha, sanoi hänen äitinsä eräänä päivänä
hänelle, että nyt he lähtevät toiselle puolen lahtea. Rakennuksessa,
joka näkyi tuolla kaukana vallilla, asui eräs pieni tyttö, sanoi hän,
joka oli aivan yhtä vanha kuin hän. Hän lähti tarkkaavine, hieman
pelokkaasti ihmettelevine silmineen äitinsä rinnalla alas
rantalaiturille, pitäen tapansa mukaan lujasti kädellään äitinsä
hameen liepeestä. Puhalsi raitis merituuli heitä vastaan.

Rantalaiturilla seisoi Pe Ontjes Lau, päässään villainen lakki ja


jaloissaan puukengät. Sen kuosisia vaatekappaleita ei kantanut
kukaan muu koko seudulla kuin Pe Ontjes Lau. Muuanna päivänä oli
nimittäin vahva länsituuli ajanut lahteen erään juutilaisen jahdin,
joka kolme päivää oli ollut rantalaiturin vierellä. Kokonaisen päivän
olivat juutilainen ja Pe Ontjes Lau seisoneet toisiaan vastapäätä
sanaa sanomatta ja liikahtamatta, juutilainen jahtinsa kannella
päässään villalakki ja jaloissaan puukengät, Pe Ontjes maissa erään
kiinnityspaalun vierellä, kummallakin kädet kyynäspäihin asti
housuntaskuissa. Seuraavana päivänä oli Pe Ontjes alkanut
neuvottelut. Alatanskaa ja alasaksaa, lisäksi kädet: sitenpä päästiin
kun päästiinkin selville asioista. Kuustoista groschenia selvässä
rahassa oli Pe Ontje hampaat yhteen purtuina laskenut juutilaisen
ruskeaan kopettuneeseen kouraan. Mutta toden totta: puolen
vuoden kuluttua tulivat kun tulivatkin villalakki ja puukengät, eivät
kyllä niin perin siistissä siteessä, eikä postissa, vaan lähetettyinä
jahdista jahtiin, Juutinmaalta poikki koko Pohjanmeren Hampuriin, ja
Hampurista takaisin ylös Hilligenleihin; osoite oli suullinen:
"Hilligenleissä, rantalaiturilla siellä seisoo eräs kaksitoistavuotias
poika, sille kuuluu tämä." Siitä päivästä oli hän aina siinä puvussa,
kun oli kylmä tuuli ja hän oli palannut koulusta. Hän piti niitä,
ikäänkuin olisi luonnollisin asia maailmassa ett'ei hänelle siitä
naurettu.

Nyt seisoi hän jalat leveänään sillalla, ja purra närysteli jykevää


leivän kannikasta, jonka päälle hän oli levittänyt paistettuja
perunaviipaleita. Ankaran tuulen vuoksi oli hän sivellyt viipaleet
mustalla tervansakealla siirapilla, jottei tuuli puhaltaisi niitä pois
leivänpalaselta. Tyvenesti ja isällisesti katseli hän pientä arkaa
naapuriaan, joka yhtäpäätä piti äitinsä hameesta ja kysyi: "Miksi sinä
aiot?"

Pikkupoika loi tutkivasti siniset syvät silmänsä häneen ja kysyi:


"Miksi sinä aiot?"

Silloin kummasteli Pe Ontjes ja alkoi hieman kunnioittaa


naapuriaan ja sanoi: "Minä menen tietysti merille. Neljän vuoden
perästä eroan koulusta ja sitte Laeiz'illa Eteläameriikkaan."

"Etpäs ole valinnut parasta matkailmaa", sanoi satamapäällikkö


Male
Jans'ille. "Tuuli kääntyy pohjoiseen."

"Sinun pitää luovia ylös Dänensandiin, isä", kuului villalakin alta.


"Sieltä pääset helposti takaisin."
"Niin", sanoi satamapäällikkö Lau punniten. "Silloin on jo pimeätä
ja tulee kylmäksi ja myöhäiseksi. Se ei ole mikään matka pojalle
tuossa."

He laskivat ulos ja venhe teki ripeää vauhtia. Pe Ontjes seisoi


rannalla ja katseli heidän jälkeensä.

"Sinäpä puhut poikasi kanssa, ikäänkuin olisi hän jo


kolmenkymmenen", sanoi pieni Male Jans taisteluvalmiina.

"Niin", tuumi Lau, "siinä olet oikeassa kuten aina. Näes, minä olen
päiväläisen poika Eiderstedtistä, enkä saanut nuoruudessani oppia
en lukemaan enkä kirjoittamaan. Sitte rupesin merimieheksi ja
matkustin laajalti maailmaa, mutta mistään en välittänyt ympärilläni,
muuta kuin söin ja kalkutin ruostetta. Olipa kyllä toisinaan, ikäänkuin
olisi sisässäni puhunut matala ääni: 'No liikuhan toki nyt hiukan,
miekkonen! Avaa hiukan silmiäsi!' Mutta minä en liikahtanut. Vasta
kun olin noin neljänkymmenen, aloin hiukan herätä ja katsella
ympärilleni ja opinkin hiukan, ja suoritin laivuritutkinnon, ja sain
tämän pienen satamapäällikön paikan täällä. Pitemmälle en minä voi
päästä. Näetkös: siksipä iloitsen jokaisesta kysymyksestä, jonka Pe
Ontjes tekee, ja puhun vakavasti ja punniten hänen kanssaan,
ikäänkuin puhuisin ikäiseni kanssa. Hän on luonnoltaan hidas, eikä
mikään valo koulussa, aivan kuin minäkin, mutta sentähden että
hänellä minussa on niin hyvä ja järkevä ystävä, niin saatpa nähdä,
että hänen on elämänsä sujuva helpommin kuin minun, ja että hän
on pääsevä pitemmälle maailmassa kuin minä."

Kun Male Jans pienen poikansa kera astui opettajan asunnon


siistille välikölle, eikä ketään alkanut kuulua, punastui hän häpeästä
ja alkoi hänen jo tehdä mieli huomaamatta livahtaa ovesta takaisin;
silloin kuuli hän takahuoneesta jonkun puhuvan: "Oletko se sinä,
Male? Tule tänne… minä en voi nousta ylös."

Silloin menivät he molemmat varpasillaan välikön poikki ja läpi


kyökin ja tapasivat Helle Bojen istumassa tuolilla ikkunan ääressä
väljässä aukaistussa puvussa, hänen rinnallaan lepäsi äskensyntynyt
lapsi, ikkunasta tulvi kirkas valovirta sisään ja reunusti tuota armasta
kuvaa.

Male Jans löi käsiään yhteen ja sanoi: "Eipäs!… ja tuosta en minä


tiedä mitään!"

"Näetkös!" nauroi Helle Boje. "Minä aavistin, ettet tietäisi mitään ja


iloitsin jo edeltäpäin hämmästyksestäsi. Näes vaan, noin suuri tyttö…
se on nyt jo numero kolmas, Male."

Opettaja Boje tuli sisään. Hän tuli, koska oli keskiviikkoon iltapuoli,
kirjojensa äärestä. Hänen kauniissa teräksisissä silmissään ja koko
hänen reippaassa iloisessa ryhdissään kajasti kuin hohde menneistä
suurista ajoista ja suurista ihmiskohtaloista. Hän kutsui pikku pojan
luokseen, taivutti hänen päätään taaksepäin ja sanoi vaimolleen:
"Katsos, mitkä muinaissaksalaiset kasvot hänellä on. Aivan kuin joku
Siegfriedin saattueesta, ei aatelisista, vaan talonpojista. Panenpa
vetoa että hänestä tulee mietiskelijä kuin isänsä." Ja kun hän sanoi
sen, muisti hän yön majakkalaivalla: "Toden totta, minä uskallan
sen!" Ja nauroi.

"No, ja missä ovat molemmat vanhemmat lapset sitte?" sanoi Male


Jans.
"Eiväthän he toki kipeitä ole?"
"Ne… kipeitä!" sanoi Boje ja nousi ylös ja vei lapsen läpi kyökin,
aukaisi ulko-oven ja osoitti kädellään kahta lasta kohden, poikaa ja
tyttöä, jotka loikoilivat lammen reunalla korkeassa ruohikossa, niin
että näki heistä vaan vaaleat päät. Nämä loivat harmaat silmänsä
terävästi tulijaan. "Tämä tässä on pikku Kai Jans. Ell'ette nyt ole
kilttejä hänelle, niin saatte löylyä." Samalla palasi Boje takaisin
kirjojensa ääreen.

Kai Jans jäi seisomaan kyökin oveen, ja nuo kaksi lammen ääressä
jäivät loikoilemaan ruohikkoon, kaulat kurossa, kuin kaksi peltokanaa
nuoressa kaurassa, ja katselivat häntä.

"Kuules," sanoi Anna Pietille, "sepäs on pelkuri".

"Oh, tokiinsa!" sanoi Piet. "Vai tuossa hän nyt on sitte! Aivan
täydellinen työmiehenpoika! Katsoppas, ei hänellä ole omia
kenkiäkään. Siitä olisi äiti kernaasti voinut kertoa meille."

"Me emme sinua nyt tarvitse", sanoi Anna, "mutta myöhemmin


joudun kyllä riitaan Piet'in kanssa, ja silloin leikin sinun kanssasi…
niin kauan saat seistä siellä ja katsoa kun me leikimme."

Kai piti vallan luonnollisena, että nuo molemmat kohtelivat häntä


tuollatapaa, kaikki heidän ympärillään tuntui hänestä nimittäin niin
suuremmoiselta. Hän laskeutui polvilleen ruohikon reunaan ja katseli
heitä.

He palmikoivat kaisloja, laittaakseen niistä huippalakkia. Kun


kumpikin palmikoi samaa lakkia, joutuivatkin he kohta riitaan. "Et
sinä osaa", sanoi Piet, "laita itsesi tiehesi!"
"Lakki ei ole sinun yksin", sanoi Anna kiivastuen. "Yhdentekevää",
sanoi Piet, "laita itsesi tiehesi, tai minä lyön sinua". Ja hän löi häntä
kohden.

Anna väisti hiukan ja katsahti kaislahattuun. Näki selvästi, kuinka


vihastus kohosi hänen kasvoilleen ja sitte taas haihtui. Sitte katsahti
hän ylös ja huomasi Kai Jansin istumassa siinä polvillaan ja sanoi
veljelleen: "Tule, annetaan selkään hänelle, mitä hänestä
muuhunkaan on?"

Piet muisti isän varoituksen ja sanoi: "Emme me anna selkään,


mutta peloitamme".

Ja yht'äkkiä hypähtivät he ylös ja hyökkäsivät kuin mitkäkin


harjanneet maantierosvot hänen kimppuunsa, tarttuivat häneen ja
laahasivat hänet lammen reunalle. "Me heitämme sinut lampeen",
sanoi Piet. "Me heitämme aina kaikki hilligenleiläiset pojat tänne
lampeen."

"Siellä on niitä satoja jo", vahvisti Anna. Kai ei ruvennut


huutamaan, katseli heitä vaan uteliaasti ja tutkien. Piet piti häntä
kiinni takista, ja Anna, joka makasi pitkänään maassa, nilkasta.
"Kerro meille jotain", sanoi hän, "muuten heitämme sinut lampeen".

"Pe Ontjes Lau'sta!" vastasi Kai ripeästi.

"Hänen me tunnemme", sanoi Anna, "kitkerä poika."

"Hän on toista vertaa suurempi kuin minä", sanoi Kai, "ja seisoo
aina rantalaiturilla ja tirkistelee merelle ja… hänellä on päässään
villalakki… ja hän aikoo kapteeniksi. Sitte matkustaa hän kauas
maailmalle, oikein kauas ja… ja…"
"Nyt ei hän tiedä enempää", sanoi Piet.

"Sitte menen minä hänen kanssaan, oikein kauas… siellä on


jalopeuroja… ja elefantteja… ja sitte… sitte rupean minä kuninkaaksi.
Niin…"

Anna vetäisi kummallakin kädellään vaaleat hiuksensa otsaltaan ja


katsahti tarkemmasti häneen. Poika alkoi kuumeta ja innostua. Kuten
nuori leivo, jonka kärppä on säikähdyttänyt yrittämään ensi kertaa
lentoon ylös pesästään pellonvaossa, ja, kun hän huomaa, että hän
osaa, unohtaa säikähdyksensä ja iloitsee uudesta ihmeellisestä
taidostaan, siten kertoa liverti nyt Kaikin, silmät suurina ja
ihmettelevinä: "Minä rakennan itselleni talon, joka ulettuu taivaaseen
asti ja joka on kaikki kullasta. Ja minun isäni ja minun äitini ja Pe
Ontjes Lau ja kaikki ihmiset asuvat siinä, ja kaikki nauravat ja
laulavat aina ja iloitsevat… Ei kenelläkään ole yskää, kuule, siellä…
eikä kukaan kuole… Tuletko sinäkin sinne?"

Ja hänen älykkäät alasaksilaiset kasvonsa lensivät yltä ja yltä


hyviksi.

Mutta tyttö kiskoi häntä jalasta, niin että hän kaatui, ja otti
kaislahatun ja painoi tuon kömpelön laitteen hänen päähänsä:
"Noinpas", sanoi hän, "tuossa on sinulle kruunusi".

Kai ei ollut millänsäkään. "Jos tahdot kanssani", sanoi hän loistavin


hyvääsuovin silmin, "saat tulla. Tahdotko sinä?"

"Entä minä?" sanoi Piet ja nousi ylös.

Silloin huomasi Kai, että tuo valkotukkainen ripeäsilmäinen poika


taas alkoi hautoa väkivaltaisia tuumia mielessään: hän katsahti
säikähtyneesti ympärilleen, ikäänkuin äkkiä unesta herätetty, hypähti
ylös ja lähti juoksemaan kyökinovea kohden ja sisään, toiset
molemmat hänen jälissään.

"Me olemme sopineet hyvin keskenämme", sanoi Piet kohta ja


kovaan.

"Hän aikoo kuninkaaksi", sanoi Anna "ja tuo tuossa on hänen


kruununsa".

Opettaja Boje laski kätensä lastensa vaaleille hiuksille ja sanoi: "Ja


mitä tulee teistä?"

"Senhän tiedät", vastasi tyttö, "meistä tulee naapuri Martens.


Niinpaljon hevosia ja lehmiä kuin hänellä on, tahdomme mekin."

"Mutta kun ei minulla ole rahoja?"

"Mitä siitä", sanoi Anna. "Kun meistä kumminkin pitää tulla naapuri
Martens?!"

"Ja kuka sanoo, että pitää tulla?" sanoi Boje melkein


kärsimättömänä.

"Rakas jumala", vastasivat molemmat.

"Laittakaa itsenne tiehenne nyt", sanoi Boje vihoissaan. "Ne


turvauvat lopuksi aina hyvään jumalaan. Mutta he tekevät hänestä
oman tahtonsa palvelijan."

Hän työnsi kummankin edellään ulos. Kun he seisoivat ovessa,


lankesi auringon valo heidän vaaleille uhmaisia ajatuksia kätkeville
hiuksilleen. Ne välkähtelivät kuin vastahalaistu saarnipuu.
"Nuo lapset tuottavat huolta meille, Male", sanoi Helle Boje.
"Hyviä, armaita lapsia, mutta niin äkkipikaisia vihassaan ja teoissaan,
ja sitte niin ylpeitä ja uskalikkoja ajatuksissaan. Jos me olisimme
varakkaita ja korkeassa asemassa niin olisi heillä edessään kaunis
tulevaisuus, mutta nyt olemme köyhiä ja päällepäätteeksi velassa.
Kun he nyt tällaisista ahtaista oloista syöksyvät elämään, noin
tulisina ja huimina, niin ovat he suistuvat vaikeisiin vastoinkäymisiin,
ja saavat taivaltaa elämänsä, kuin huonolla tiellä kylmää vinhaa
tuulta vastaan, ja ovat juoksevat itsensä näännyksiin ja sortuvat.
Näes, Boje ja me olimme samallaisia, päät kuumat korkeista,
korkealle pyrkivistä ajatuksista. Mitä ihmeitä näinkään minä
huoneessani siellä vallin vierellä! Silloin tapahtui meidän kummankin
elämämme suurin ihme: me näimme toinentoisemme ja saimme
toisemme. Ja tulimme hiljaisiksi ja tyveniksi. Mutta ovatko lapsemme
löytävät saman onnen?"

Pieni Male Jans loi silmänsä arasti vuoron heihin kumpaankin ja


ajatteli: "Mitä onkaan näinä lyhyinä kuutena vuotena tapahtunut
noille kahdelle nuorelle ihmiselle, jotka Ringerangin salissa salaa
rutistivat toistensa käsiä ja joilla oli vaan yksiainoa ajatus, että he
saisivat toisensa?" Hän nousi ylös ja sanoi, että nyt hänen täytyi
lähteä, hän ei tahtoisi antaa satamapäällikkö Laun kauemmin
odottaa itseään, ja hänen täytyisi vielä laittaa illallinen. Sitte jätti hän
hyvästi ja lähti poikineen talosta.

Kun Thoms Jans illalla lapio selässään tuli kotiin ja kuuli, että
opettajalla olivat huolissaan, kun heidän lapsensa olivat niin huimia
ja itsevaltiaita, katsahti hän ajatuksissaan pöytään ja sanoi ivaten, ja
syvällä olevat pienet älykkäät silmänsä välkähtivät. "Sitä huolta ei ole
meillä, meidän poikammehan on selkäkyyryssä kuin selkäänsä
saanut koira".
Silloin vihastui pieni Male Jans: "Siinä tapauksessa ei sinulla ole
silmiä eikä korvia", sanoi hän ja puhui pelokkaalla värähtelevällä
äänellä lapsensa salaisesta elämästä ja kertoi, kuinka hän oli
sanonut, että hän tahtoi kuninkaaksi. "Hän on yhtä ylpeä kuin
Bojetkin, se on vaan toista laatua ylpeyttä, ja on syvällä sielussa…
Hän etsii toisellaista kuninkaanvaltakuntaa kuin he."

"Ja millaista sitte?" sanoi Thoms Jans kummissaan. "Millaista?


Kuussako semmoinen löytyisi?"

*****

Seuraavana päivänä uskalsi hän ensi kertaa keskelle katua ja


kurkisti pää kurotettuna pimeään pajaan, josta taaskin vasaran
iskujen ja palkeenpoljennan asemasta kuului vilkasta puhelua.

Pe Ontjes oli huomannut hänet, tuli ulos ja sanoi: "Tulehan


sisään".

Hän astui sisään ja katsahti ympärilleen. Jan Friech istui


kookkaana ja nokisena, yllään kopahteleva nahkaesiliinansa,
alasimella, kyynäspää mukavasti vasaraa vastaan nojattuna;
Scheinhold, kisälli seisoi palkeitten vieressä. Kaikki kolme katsoivat
Tjark Dusenschöniin, joka istui sorvipenkillä, ja heilutteli paljaita
jalkojaan edestakaisin, niin että housunlahkeet lepattivat.

"Ja miksi en kävisi tässä viheriässä kaulahuivissa", sanoi Tjark


Dusenschön, "kun herra pormestari sen kerran on lahjoittanut
minulle?"

"Se valehtelee", sanoi Pe Ontjes, "on saanut rahat isoäidiltään. Ja


miten hän tuon sanoo, mukamas, 'herra pormestari'!! Sano Danial
Peters vaan, kuule, sitenhän kutsuu häntä koko Hilligenlei!"

"Että pormestariko sinulle sen on lahjoittanut?" sanoi Jan Friech ja


kohotti kulmakarvojaan, "siinä tapauksessa…" ja hän liikahteli
nahkaesiliinassaan, niin että se kopahteli, ikäänkuin olisi vähintäin
joku vuorikaivos sortunut, "siinä… siinä tapauksessa pitää minun
palata alkuperäisiin olettamuksiini."

"Mihinkä olettamuksiin, mestari?", kysyi Scheinhold kisälli, ja


räpytteli niin vahvasti silmiään, että oli, kuin olisi niihin kumpaankin
lentänyt ampiainen.

"Pidä suusi!" sanoi Jan Friech. "Sinulle en puhu… Minun


alkuperäinen olettamukseni on se, että Tjark Dusenschön on
pormestarin poika. Siinä sen kuulitte!… Kun meillä nyt vaan olisi tuo
vanha postikortti! Et tehnyt oikein siinä, Pe Ontjes, että heitit sen
mereen."

Pe Ontjes nyykäytti verkkaan päätään ja sanoi: "Jatkakaa!


Jatkakaa vaan! Puolihöperö hän jo on; nyt teette hänestä
täysihullun."

Tjark Dusenschön oli ylen hyvillään, että hän taaskin oli


keskustelun keskipisteenä ja kiemurteli itseään, ja heilahutteli
housunlahkeitaan ja taivutteli isovarpaitaan alaspäin, niin että pieni
Kai Jans vallan rupesi pelkäämään.

"Katsokaas hänen sääriään!" sanoi Jan Friech. "Kellä muulla on


noin suorat sääret? Sääret kuin ulaaninpeitsi. Kellä, kysyn?
Hilligenlein pormestarilla!… Kuka käyttäytyy noin suurekkaasti?"
Scheinhold kisälli räpäytti taas silmiään ja sanoi: "Saattaahan se
johtua siitäkin, että hän on kuninkaallista sukua."

Pe Ontjes nousi ylös ja aikoi lähteä. "En ilkeä kuulla tuommoista


jaaritusta" sanoi hän. "Mitä hän on? Avioton lapsi hän on, ja
isoäitinsä on vanha hopakko; ja Rieke Thomsen marisee jok'ikinen
herran päivä ett'ei hän vielä ole maksanut viidentoista groschenin
kätilövelkaansa hänelle. Semmoinen hän on."

"Niin", sanoi Jan Friech, ja taas kopahteli hänen nahkaesiliinansa


kovaan ja kumeasti: "sen myönnän: nykyhetki on pimeä; mutta
vilahteleepa jo toivon tähti."

"Missä?" sanoi Pe Ontjes. "Aiotko maksaa hänen viisitoista


groscheniaan?"

Mestari pudisteli suruisasti päätään. "En voi", sanoi hän,


"tiedäthän sen, minulla on vaimo ja lapsia, ja lisäksi velkoja. Mutta
oikeassa olet sentään: niinkauan kuin kätilömaksu on suorittamatta,
puuttuu häneltä arvoa ihmisten silmissä, häneltä puuttuu
niinsanoaksemme, ollaksemme täsmälliset: täysi kansalaisoikeus."

"Joka päivä täytyy minun suvaita, että tuo vanha velho haukkuu
minua", sanoi Tjark Dusenschön ja katseli kirkkain ruskein silmin
ympärilleen. "Ell'ei siitä tule loppua, menen minä hunningolle."

"Jos olisit tahtonut", sanoi Pe Ontjes, "niin aikoja olisit jo voinut


maksaa nuo viisitoista groschenia. Viisitoista vuotias poika voi toki jo
ansaita senverran; mutta sinä ostelet itsellesi tuommoisia
mielettömiä kaulahuiveja, tai ostat joltakin koululaiselta jonkun
vanhan sinisen tai punaisen päällysviitan. Tai muuta semmoista."
"Jos nyt ehkä olen pormestarin poika", sanoi Tjark Dusenschön, ja
hänen silmänsä vilkkuivat ja vilahtelivat, "niin enhän voi käydä
puettuna kuin mikäkin maantien Matti".

"Siinä hän taaskin on oikeassa!" sanoi Jan Friech. Pe Ontjes nousi


taaskin ylös ja läheni ovea: "Minä en ilkeä enää olla missään
tekemisissä kanssanne", sanoi hän, "te olette hupsuja kaikki kolme".
"Tule, Kai." Ja hän lähti ulos kotiansa kohden.

Jonkun askeleen astuttuaan pysähti hän, katsoi mietteissään


eteensä ja sanoi sitte päättävästi: "Se on sittenkin paras siten… minä
teen lopun koko asiasta… Tjark!…"

Tjark Dusenschön juoksi paljain jaloin ja sanaa sanomatta ulos


pajasta.

"Minä en ilkeä kuunnella tuota alinomaista jankutusta sinun


kätilövelastasi", sanoi Pe Ontjes. "Kymmenen vuotta olen sitä jo
kuunnellut. Minä teen lopun siitä."

"Olen oleva ikuisesti kiitollinen sinulle", sanoi Tjark Dusenschön.

"Vaiti siinä", sanoi Pe Ontjes, "äläkä lörpöttele! Kiitollinen? Kuka on


kiitollinen maailmassa? Kiitollinen on sana, jota joskus opetetaan
koulussa; mutta tervejärkinen ihminen ei ole kiitollinen." Hän kaivoi
kukkarossaan, lähti kummankin saattolaisensa seuraamana viistoon
ylös vallinkuvetta pitkää rakennusta kohden ja sanoi Kai Jansille:
"Mene sinä sisään ja katso, istuuko hän suurella tuolillaan ja onko
hänellä jalanlämmitin allaan, ja onko hän ajatuksiinsa vaipunut, ja
ovatko tohvelit hänellä käsillä heitettäviksi. Juttele joku sana hänen
kanssaan ja lykkää tohvelit vähän puoleen. Sitte tule ulos taaskin ja
ovi auki."
Pikkumies meni sisään ja palasi takaisin taaskin ja sanoi hiljaa:
"Kaikki on järjestyksessä."

Silloin hengähti Pe Ontjes syvään, juoksi sisään, kohotti nyrkkiin


puristetun kätensä ja iski nuo viisitoista groschenia lujasti pöydän
pintaan: "Tässä saat ne viisitoista groscheniasi Tjark Dusenshönin
kätilömaksuksi… ja nyt jätät kai kirotun marinasi."

Eukko oli säikäyksissään kumartunut taaksepäin. Sitte ilmeni hän


oven suuhun.

"Senkin vintiö…"

Tjark huusi vaikertaen kaukaa: "Hän ei enää saa puhua siitä!"

"Mitä?" huusi eukko, "vai etten saa puhua siitä enää? Mikä nahjus
sinä olet! Toisten täytyy maksaa puolestasi sinun kätilömaksusi!…
Onko Kai Janskin teidän seurassanne? No, hänpäs alkaa aikaiseen;
hänestä ei myöskään tule mitään! Tuleppas kerta vielä tänne sisään,
senkin vintiö!"

Pe Ontjes pudisteli päätään, ja sanoi alakuloisesti: "Ne viisitoista


groschenia menivät hukkaan…" Sitte vimmastui hän yht'äkkiä, takoi
nyrkeillään sääriään vastaan ja huusi: "Ikinä elämässäni en enää
pane kortta ristiin tuon tyhjänpäiväisen Tjark Dusenschönin vuoksi.
Missä hän on?"

Tämä oli aavistanut pahaa ja oli pitkin harppauksin juosta


livistänyt isoäitinsä ovea kohti. Stiena Dusenshön seisoi jo
heilahtelevin myssynnauhoin häntä vastassa ovessa: "Tjaark…
Tjaark… tule pian isoäitisi luokse, lapseni."
"Tule, niin sanon sinulle jotain", sanoi Pe Ontjes, "tästälähin
seurustelen ainoastaan sinun kanssasi."

Pieni Kai katsahti iloisesti häneen: "Niin… mutta sinun pitää luvata
minulle, että kun tulet kapteeniksi, niin otat minut mukaasi."

"Oletpa sinä hullunkurinen poika", sanoi Pe Ontjes, "minne sitte


tahdot?"

"Se nähdään sitte", vastasi Kai ylen vakavasti. "Tiedätkö… me


matkustamme jonnekin, jonnekin, aivan ihmeelliseen maahan." Ja
hän polki innoissaan jalkaansa maahan.

"No lähtään siis!" sanoi Pe Ontjes ja löi häntä olalle.

Ja hän rupesi pitämään pojasta ja piti häntä aina seurassaan. Ja


se oli pojalle karaisevaa ja vahvistavaa seuraa.
NELJÄS LUKU.

Satamakoulun opettajan täytyi olla tunnollinen mies, sillä koulutunnit


olivat järjestetyt nousu- ja laskuveden mukaan, niin että laivurien ja
matalikkokalastajien lapset voivat olla avuksi vanhemmilleen. Ja
lujahermoinen täytyi hänen olla, sillä lapset tulivat paljain jaloin tai
kopisevissa puukengissä tai raskaissa varsisaappaissa, lisäksi yllään
engelskan-nahkaiset housut, paidanhihat samasta aineesta, ja olivat
äänensä kovat ja karkeat, ja päät visapäisiä.

Oli kuuma kesäinen iltapäivä. Lapset lojuilivat paitahihasillaan


velttoina ja toimettomina pulpettejaan vastaan ja tekeysivät
ikäänkuin olisivat he kokonaan antauneet kirjoitustoimiinsa, tytöt
kohottivat tuon tuostakin kirjoitusvihkojaan ja leyhyttivät niillä
kasvojaan. Mars Wiebers, hänkin paitahihasillaan, istui leveänään
opettajapöytänsä takana, hänen jykeä päänsä, jota joka taholta
ympäröi tulenpunerva hiuskiehkura, oli nojattuna mustaa puutaulua
vastaan, joka riippui hänen takanaan seinällä. Tuontuostakin joutui
hän kiusaukseen ajatella kahvikestiä, joka odotti häntä
lehmusmajassa koulutuntien jälkeen hänen rouvansa luona, mutta
hän voitti sen kiusauksen, keksimällä aina uusia ja uusia
raamatunlauseita sitä vastaan. "Tehkäämme työtä uupumatta
niinkauan kuin päivä on" mumisi hän ja kumarsi hiukan jykeää

You might also like