I think that people with little money on their hands should be able to read books, too. So I made mine more affordable.

The lost treasures of algorithmica

is
a work in progress. The book will be rather voluminous. Maybe I will
manage to publish it in this year.

Sketchy LISP is an introduction to functional programming in Scheme. Functional programming is an approach that focuses on the evaluation of expressions. Programs are formed by combining functions. Most functions are free of side effects which allows to examine programs formally and prove properties of algorithms.

This tutorial provides a step-by-step introduction to functional programming in Scheme. It covers various aspects of the language like data types, conditions, recursion, list processing, lexical scoping, closures, function definitions, dynamic typing, etc. By means of numerous examples of varying complexity, it takes the reader on an entertaining and informative tour through the language.

Get the source code from the book.

Scheme 9 from Empty Space reproduces the completely self-contained and heavily commented C and Scheme source code to an interpreter for a broad subset of the Scheme programming language. By means of extensive annotations, examples, and numerous figures, it answers a lot of questions about crafting an interpreter, including:

- How does automatic memory management work?
- How is macro expansion implemented?
- How do lexical scoping and dynamic scoping work?
- How is arbitrary precision arithmetics implemented?
- How does tail call elimination work?
- How are Scheme procedures called from C?

- What is logic programming?
- What are goals and queries?
- Why is negation hard in logic programming?
- What is cutting?
- How do I solve logic puzzles?
- How is logic programming implemented?

This booklet answers all these questions in merely 40 pages of terse prose and lots of examples.

**Chapter 1**introduces basic logic programming techniques.**Chapter 2**applies the techniques to a well-known puzzle.*******Chapter 3**rolls your own logic language in 170 lines of Scheme.*****No, not the one on the front cover

The code in this text is purely functional, purely symbolic, and easy to follow. If you are into Scheme programming, this text will add a powerful tool to your repertoire.

Download the source code from the book [zip, ~5KB].

**Symbols and ordered pairs.**

These two types and a handful of
functions is all you need to write amazingly elegant and powerful
programs.

Symbolic Programming is functional programming based on the evaluation of symbolic expressions.

Symbolic Programs evaluate by combining symbols and pairs to form more complex structures and then decomposing them again.

Symbolic Programming takes abstraction to its limit.

Forget about hardware and implementation details. Symbolic Programming is truly architecture-neutral. You can even `run' programs on a sheet of paper.

If you like a scientific view on programming and are into algorithms, this is the right book for you.

- What is logic programming?
- What are goals and queries?
- Why is negation hard in logic programming?
- What is cutting?
- How do I solve logic puzzles?
- How is logic programming implemented?

This booklet answers all these questions in merely 40 pages of terse prose and lots of examples.

**Chapter 1**introduces basic logic programming techniques.**Chapter 2**applies the techniques to a well-known puzzle.*******Chapter 3**rolls your own logic language in 150 lines of LISP.*****No, not the one on the front cover

The code in this text is purely functional, purely symbolic, and easy to follow. If you are into functional programming, this booklet will add a powerful tool to your repertoire.

Download the code to the book [tgz, ~124KB].

Pure LISP is an elegant, flexible, and powerful mathematical system and programming language. It shares a lot of properties with modern dialects of LISP such as Common Lisp and Scheme. This book discusses fundamental concepts of functional programming in terms of pure LISP.

The book begins with an in-depth discussion of basic topics like list processing, symbols, functions, iteration, types of recursion and higher order functions. It then advances to a more abstract view, demonstrating how to solve problems in pure LISP. Topics discussed here include backtracking, tree processing, divide and conquer algorithms, sorting, formal language processing (lexing and parsing), and arbitrary precision arithmetics.

The book ends with a discussion of some theoretical aspects like beta reduction, closures, and dynamic and lexical scoping.

Included in the book is a library containing many interesting pure LISP functions for various tasks and the complete source code to MEXPRC, an M-expression compiler written in pure LISP.

Although compiler construction is a well-studied part of computer science, there are only few books that cover both theory and practical compiler crafting in-depth.

This book is here to fill this niche. It explains compiler construction in simple terms and by means of practical examples, but without avoiding the fundamental theory. It covers all aspects of compilers from lexical analysis and parsing to semantic analysis, optimization, and code generation.

The book contains the full and extensively documented source code to the front end and optimizer of a real-world compiler. It does not stop where other books do, and takes you on a tour through the whole compilation process.

Although the language and the methods discussed in this book date back to the 1990's, it is still a valuable source of knowledge, tips and techniques for everyone who wants to write a real compiler.

Download the BSL Compiler Kit [zip, ~200KB].

Dieses Buch behandelt die praktische Seite des Compilerbaus. Beschrieben wird die Entwicklung eines Compilers für eine systemnahe Sprache von der Idee über die Konzeption bis zur Implementierung. Die verwendete Sprache ist eine erweiterte Untermenge von C mit einigen Anleihen bei BCPL, dem "Vorfahren" von C.

Der Compiler wird im Laufe des Buches detailiert
konzipiert und schließlich in seiner eigenen
Sprache `-` BSL `-` implementiert. Im
Vordergrund stehen dabei die Entwicklung des front
end, einfache Optimierungsstrategien sowie die
Definition einer portablen Schnittstelle zum
Codegenerator.

Themen wie Codegenerierung und Laufzeitunterstützung werden ebenfalls angeschnitten, aber nicht ausführlich behandelt.