1925 lines
50 KiB
HTML
1925 lines
50 KiB
HTML
|
|
<!DOCTYPE HTML>
|
|
<html lang="" >
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|
<title>Extra Credit: Persistence and Databases · Learn Lisp The Hard Way</title>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
<meta name="description" content="">
|
|
<meta name="generator" content="GitBook 3.2.3">
|
|
<meta name="author" content=""the Phoeron" Colin J.E. Lupton">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/style.css">
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/gitbook-plugin-hints/plugin-hints.css">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/gitbook-plugin-folding-chapters/folding-chapters.css">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<meta name="HandheldFriendly" content="true"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
|
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
|
|
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
|
|
|
|
|
|
<link rel="next" href="2-05-0-extended-types.html" />
|
|
|
|
|
|
<link rel="prev" href="2-03-0-objects-control.html" />
|
|
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<div class="book">
|
|
<div class="book-summary">
|
|
|
|
|
|
<div id="book-search-input" role="search">
|
|
<input type="text" placeholder="Type to search" />
|
|
</div>
|
|
|
|
|
|
<nav role="navigation">
|
|
|
|
|
|
|
|
<ul class="summary">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="header">LEARN LISP THE HARD WAY</li>
|
|
|
|
|
|
|
|
<li class="chapter " data-level="1.1" data-path="./">
|
|
|
|
<a href="index.html">
|
|
|
|
|
|
Second Draft (in-progress)
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="1.2" data-path="CHANGELOG.html">
|
|
|
|
<a href="CHANGELOG.html">
|
|
|
|
|
|
CHANGELOG
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="1.3" data-path="TODO.html">
|
|
|
|
<a href="TODO.html">
|
|
|
|
|
|
TODO
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="header">PREFACE</li>
|
|
|
|
|
|
|
|
<li class="chapter " data-level="2.1" data-path="preface.html">
|
|
|
|
<a href="preface.html">
|
|
|
|
|
|
TANSTAAFL
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="2.2" data-path="preface-part-two.html">
|
|
|
|
<a href="preface-part-two.html">
|
|
|
|
|
|
The Hard Way is Easier
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="2.3" data-path="preface-part-three.html">
|
|
|
|
<a href="preface-part-three.html">
|
|
|
|
|
|
Who Is This Book For?
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="2.4" data-path="introduction.html">
|
|
|
|
<a href="introduction.html">
|
|
|
|
|
|
Lisp: A Future History
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="2.5" data-path="acknowledgements.html">
|
|
|
|
<a href="acknowledgements.html">
|
|
|
|
|
|
Acknowledgements
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="header">PART ONE</li>
|
|
|
|
|
|
|
|
<li class="chapter " data-level="3.1" data-path="1-0-0-overview.html">
|
|
|
|
<a href="1-0-0-overview.html">
|
|
|
|
|
|
Grokking Lisp
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="3.1.1" data-path="1-01-00-lisp-bootcamp.html">
|
|
|
|
<a href="1-01-00-lisp-bootcamp.html">
|
|
|
|
|
|
Common Lisp Bootcamp
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="3.1.1.1" data-path="1-01-01-syntax-overview.html">
|
|
|
|
<a href="1-01-01-syntax-overview.html">
|
|
|
|
|
|
Syntax Overview in 5 Minutes
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.2" data-path="1-01-02-repl.html">
|
|
|
|
<a href="1-01-02-repl.html">
|
|
|
|
|
|
The REPL
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.3" data-path="1-01-03-expressions.html">
|
|
|
|
<a href="1-01-03-expressions.html">
|
|
|
|
|
|
Expressions, Parentheses, and Return Values
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.4" data-path="1-01-04-lists-cons-cells.html">
|
|
|
|
<a href="1-01-04-lists-cons-cells.html">
|
|
|
|
|
|
Lists, Cons-Cells, and Memory
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.5" data-path="1-01-05-symbols.html">
|
|
|
|
<a href="1-01-05-symbols.html">
|
|
|
|
|
|
Symbols and Namespaces
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.6" data-path="1-01-06-prefix-notation.html">
|
|
|
|
<a href="1-01-06-prefix-notation.html">
|
|
|
|
|
|
Prefix Notation
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.7" data-path="1-01-07-style-guide.html">
|
|
|
|
<a href="1-01-07-style-guide.html">
|
|
|
|
|
|
Common Lisp Style Guide
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.1.8" data-path="1-01-08-configuration.html">
|
|
|
|
<a href="1-01-08-configuration.html">
|
|
|
|
|
|
Configuring Your Development Environment
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2" data-path="1-02-00-input-output.html">
|
|
|
|
<a href="1-02-00-input-output.html">
|
|
|
|
|
|
Printing, Streams, and Strings
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="3.1.2.1" data-path="1-02-01-strings.html">
|
|
|
|
<a href="1-02-01-strings.html">
|
|
|
|
|
|
Strings
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.2" data-path="1-02-02-more-strings.html">
|
|
|
|
<a href="1-02-02-more-strings.html">
|
|
|
|
|
|
More Strings
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.3" data-path="1-02-03-unicode.html">
|
|
|
|
<a href="1-02-03-unicode.html">
|
|
|
|
|
|
Unicode and Strings
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.4" data-path="1-02-04-chars.html">
|
|
|
|
<a href="1-02-04-chars.html">
|
|
|
|
|
|
Characters
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.5" data-path="1-02-05-more-chars.html">
|
|
|
|
<a href="1-02-05-more-chars.html">
|
|
|
|
|
|
More Characters
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.6" data-path="1-02-06-char-codes.html">
|
|
|
|
<a href="1-02-06-char-codes.html">
|
|
|
|
|
|
Character Codes
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.7" data-path="1-02-07-strings-from-chars.html">
|
|
|
|
<a href="1-02-07-strings-from-chars.html">
|
|
|
|
|
|
Strings from Chars
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.8" data-path="1-02-08-printing.html">
|
|
|
|
<a href="1-02-08-printing.html">
|
|
|
|
|
|
Printing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.9" data-path="1-02-09-more-printing.html">
|
|
|
|
<a href="1-02-09-more-printing.html">
|
|
|
|
|
|
More Printing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.10" data-path="1-02-10-prin1.html">
|
|
|
|
<a href="1-02-10-prin1.html">
|
|
|
|
|
|
Printing With prin1
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.11" data-path="1-02-11-princ.html">
|
|
|
|
<a href="1-02-11-princ.html">
|
|
|
|
|
|
Printing With princ
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.12" data-path="1-02-12-format.html">
|
|
|
|
<a href="1-02-12-format.html">
|
|
|
|
|
|
A Brief Introduction to Format
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.13" data-path="1-02-13-more-format.html">
|
|
|
|
<a href="1-02-13-more-format.html">
|
|
|
|
|
|
A Little Bit More on Format
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.14" data-path="1-02-14-pathnames.html">
|
|
|
|
<a href="1-02-14-pathnames.html">
|
|
|
|
|
|
Pathnames
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.15" data-path="1-02-15-streams.html">
|
|
|
|
<a href="1-02-15-streams.html">
|
|
|
|
|
|
Streams
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.16" data-path="1-02-16-file-streams.html">
|
|
|
|
<a href="1-02-16-file-streams.html">
|
|
|
|
|
|
File Streams
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.17" data-path="1-02-17-binary-streams.html">
|
|
|
|
<a href="1-02-17-binary-streams.html">
|
|
|
|
|
|
Binary Streams
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.18" data-path="1-02-18-prompting-users.html">
|
|
|
|
<a href="1-02-18-prompting-users.html">
|
|
|
|
|
|
Prompting Users
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.2.19" data-path="1-02-19-pretty-printing.html">
|
|
|
|
<a href="1-02-19-pretty-printing.html">
|
|
|
|
|
|
Pretty-Printing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.3" data-path="1-03-0-getting-input-from-users.html">
|
|
|
|
<a href="1-03-0-getting-input-from-users.html">
|
|
|
|
|
|
Extra Credit: Getting Input from Users
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.4" data-path="1-04-0-lists.html">
|
|
|
|
<a href="1-04-0-lists.html">
|
|
|
|
|
|
Lists and List-Operations
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.5" data-path="1-05-0-lookups-trees.html">
|
|
|
|
<a href="1-05-0-lookups-trees.html">
|
|
|
|
|
|
Extra Credit: Look-up Lists and Trees
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6" data-path="1-06-0-math.html">
|
|
|
|
<a href="1-06-0-math.html">
|
|
|
|
|
|
Numbers and Math
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="3.1.6.1" data-path="1-06-01-integers.html">
|
|
|
|
<a href="1-06-01-integers.html">
|
|
|
|
|
|
Integers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.2" data-path="1-06-02-more-integers.html">
|
|
|
|
<a href="1-06-02-more-integers.html">
|
|
|
|
|
|
More Integers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.3" data-path="1-06-03-hexadecimal-notation.html">
|
|
|
|
<a href="1-06-03-hexadecimal-notation.html">
|
|
|
|
|
|
Hexadecimal Integer Notation
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.4" data-path="1-06-04-octal-notation.html">
|
|
|
|
<a href="1-06-04-octal-notation.html">
|
|
|
|
|
|
Octal Integer Notation
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.5" data-path="1-06-05-binary-notation.html">
|
|
|
|
<a href="1-06-05-binary-notation.html">
|
|
|
|
|
|
Binary Integer Notation
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.6" data-path="1-06-06-ratios.html">
|
|
|
|
<a href="1-06-06-ratios.html">
|
|
|
|
|
|
Ratios and Rational Numbers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.7" data-path="1-06-07-floating-point.html">
|
|
|
|
<a href="1-06-07-floating-point.html">
|
|
|
|
|
|
Floating-point Numbers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.8" data-path="1-06-08-constants.html">
|
|
|
|
<a href="1-06-08-constants.html">
|
|
|
|
|
|
Numeric Constants
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.9" data-path="1-06-09-complex-numbers.html">
|
|
|
|
<a href="1-06-09-complex-numbers.html">
|
|
|
|
|
|
Complex Numbers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.10" data-path="1-06-10-arithmetic.html">
|
|
|
|
<a href="1-06-10-arithmetic.html">
|
|
|
|
|
|
Arithmetic
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.11" data-path="1-06-11-more-arithmetic.html">
|
|
|
|
<a href="1-06-11-more-arithmetic.html">
|
|
|
|
|
|
More Arithmetic
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.12" data-path="1-06-12-even-more-arithmetic.html">
|
|
|
|
<a href="1-06-12-even-more-arithmetic.html">
|
|
|
|
|
|
Even More Arithmetic
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.13" data-path="1-06-13-exponents.html">
|
|
|
|
<a href="1-06-13-exponents.html">
|
|
|
|
|
|
Exponents
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.14" data-path="1-06-14-logarithms.html">
|
|
|
|
<a href="1-06-14-logarithms.html">
|
|
|
|
|
|
Logarithms
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.15" data-path="1-06-15-trigonometry.html">
|
|
|
|
<a href="1-06-15-trigonometry.html">
|
|
|
|
|
|
Trigonometry
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.6.16" data-path="1-06-16-psuedorandom-numbers.html">
|
|
|
|
<a href="1-06-16-psuedorandom-numbers.html">
|
|
|
|
|
|
Pseudo-Random Numbers
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.7" data-path="1-07-0-arrays.html">
|
|
|
|
<a href="1-07-0-arrays.html">
|
|
|
|
|
|
Extra Credit: Arrays and Vectors
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.8" data-path="1-08-0-variables.html">
|
|
|
|
<a href="1-08-0-variables.html">
|
|
|
|
|
|
Variables, Parameters, and Constants
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.9" data-path="1-09-0-closures.html">
|
|
|
|
<a href="1-09-0-closures.html">
|
|
|
|
|
|
Extra Credit: Closures
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.10" data-path="1-10-0-functions.html">
|
|
|
|
<a href="1-10-0-functions.html">
|
|
|
|
|
|
Functions and Macros
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.11" data-path="1-11-0-text-adventure.html">
|
|
|
|
<a href="1-11-0-text-adventure.html">
|
|
|
|
|
|
Extra Credit: A Simple Text Adventure
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.12" data-path="1-12-0-namespaces.html">
|
|
|
|
<a href="1-12-0-namespaces.html">
|
|
|
|
|
|
Namespaces, Symbols, Packages, and Systems
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.13" data-path="1-13-0-simple-web-app.html">
|
|
|
|
<a href="1-13-0-simple-web-app.html">
|
|
|
|
|
|
Extra Credit: A Simple Web Application
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.14" data-path="1-14-0-conditionals.html">
|
|
|
|
<a href="1-14-0-conditionals.html">
|
|
|
|
|
|
Conditionals
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.15" data-path="1-15-0-command-line-utility.html">
|
|
|
|
<a href="1-15-0-command-line-utility.html">
|
|
|
|
|
|
Extra Credit: Command-Line Utilities
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.16" data-path="1-16-0-map-loop.html">
|
|
|
|
<a href="1-16-0-map-loop.html">
|
|
|
|
|
|
Mapping and Looping
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.17" data-path="1-17-0-iterate.html">
|
|
|
|
<a href="1-17-0-iterate.html">
|
|
|
|
|
|
Extra Credit: Revisiting Loops with Iterate
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.18" data-path="1-18-0-format.html">
|
|
|
|
<a href="1-18-0-format.html">
|
|
|
|
|
|
Format Strings
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.19" data-path="1-19-0-dsl.html">
|
|
|
|
<a href="1-19-0-dsl.html">
|
|
|
|
|
|
Extra Credit: Domain Specific Languages
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="3.1.20" data-path="1-20-0-review.html">
|
|
|
|
<a href="1-20-0-review.html">
|
|
|
|
|
|
Part One in Review
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="header">PART TWO</li>
|
|
|
|
|
|
|
|
<li class="chapter " data-level="4.1" data-path="2-0-0-overview.html">
|
|
|
|
<a href="2-0-0-overview.html">
|
|
|
|
|
|
The Suffusion of Blue
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="4.1.1" data-path="2-01-0-programming-paradigms.html">
|
|
|
|
<a href="2-01-0-programming-paradigms.html">
|
|
|
|
|
|
Programming Paradigms
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.2" data-path="2-02-0-regex.html">
|
|
|
|
<a href="2-02-0-regex.html">
|
|
|
|
|
|
Extra Credit: Regular Expressions
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.3" data-path="2-03-0-objects-control.html">
|
|
|
|
<a href="2-03-0-objects-control.html">
|
|
|
|
|
|
Objects and Control Structures
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter active" data-level="4.1.4" data-path="2-04-0-data-persistence.html">
|
|
|
|
<a href="2-04-0-data-persistence.html">
|
|
|
|
|
|
Extra Credit: Persistence and Databases
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.5" data-path="2-05-0-extended-types.html">
|
|
|
|
<a href="2-05-0-extended-types.html">
|
|
|
|
|
|
Extended Types
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.6" data-path="2-06-0-threads-memos-parallel.html">
|
|
|
|
<a href="2-06-0-threads-memos-parallel.html">
|
|
|
|
|
|
Extra Credit: Concurrency and Memoization
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.7" data-path="2-07-0-logic-and-more-math.html">
|
|
|
|
<a href="2-07-0-logic-and-more-math.html">
|
|
|
|
|
|
Logic and Advanced Math
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.8" data-path="2-08-0-number-theory.html">
|
|
|
|
<a href="2-08-0-number-theory.html">
|
|
|
|
|
|
Extra Credit: Number Theory
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.9" data-path="2-09-0-binary-octets-bits.html">
|
|
|
|
<a href="2-09-0-binary-octets-bits.html">
|
|
|
|
|
|
Binary Streams, Octet-Vectors, and Bit-Vectors
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.10" data-path="2-10-0-improved-text-adventure-engine.html">
|
|
|
|
<a href="2-10-0-improved-text-adventure-engine.html">
|
|
|
|
|
|
Extra Credit: An Improved Text Adventure Engine
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.11" data-path="2-11-0-conditions.html">
|
|
|
|
<a href="2-11-0-conditions.html">
|
|
|
|
|
|
Conditions and Error Handling
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.12" data-path="2-12-0-2d-game.html">
|
|
|
|
<a href="2-12-0-2d-game.html">
|
|
|
|
|
|
Extra Credit: Write a 2D Game
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.13" data-path="2-13-0-compiler.html">
|
|
|
|
<a href="2-13-0-compiler.html">
|
|
|
|
|
|
The Compiler
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.14" data-path="2-14-0-tree-shaker.html">
|
|
|
|
<a href="2-14-0-tree-shaker.html">
|
|
|
|
|
|
Extra Credit: Write a Tree-Shaker
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.15" data-path="2-15-0-docs-and-inspection.html">
|
|
|
|
<a href="2-15-0-docs-and-inspection.html">
|
|
|
|
|
|
Documentation and Inspection
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.16" data-path="2-16-0-foreign-libs.html">
|
|
|
|
<a href="2-16-0-foreign-libs.html">
|
|
|
|
|
|
Extra Credit: Foreign Libraries in Lisp
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.17" data-path="2-17-0-debugging-testing.html">
|
|
|
|
<a href="2-17-0-debugging-testing.html">
|
|
|
|
|
|
Debugging and Unit Testing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.18" data-path="2-18-0-ffi.html">
|
|
|
|
<a href="2-18-0-ffi.html">
|
|
|
|
|
|
Extra Credit: Write a Foreign Function Interface
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.19" data-path="2-19-0-essential-libs.html">
|
|
|
|
<a href="2-19-0-essential-libs.html">
|
|
|
|
|
|
Essential Lisp Libraries
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.20" data-path="2-20-0-packaging-libs.html">
|
|
|
|
<a href="2-20-0-packaging-libs.html">
|
|
|
|
|
|
Extra Credit: Packaging Lisp Libraries
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="4.1.21" data-path="2-21-0-review.html">
|
|
|
|
<a href="2-21-0-review.html">
|
|
|
|
|
|
Detailed Syntax Review
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="header">PART THREE</li>
|
|
|
|
|
|
|
|
<li class="chapter " data-level="5.1" data-path="3-00-00-overview.html">
|
|
|
|
<a href="3-00-00-overview.html">
|
|
|
|
|
|
Lisp So(u)rcery
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<ul class="articles">
|
|
|
|
|
|
<li class="chapter " data-level="5.1.1" data-path="3-01-00-web-apps.html">
|
|
|
|
<a href="3-01-00-web-apps.html">
|
|
|
|
|
|
Real-world Web Apps
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.2" data-path="3-02-00-typesetting.html">
|
|
|
|
<a href="3-02-00-typesetting.html">
|
|
|
|
|
|
Typesetting
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.3" data-path="3-03-00-mobile.html">
|
|
|
|
<a href="3-03-00-mobile.html">
|
|
|
|
|
|
Native Mobile Applications
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.4" data-path="3-04-00-gui.html">
|
|
|
|
<a href="3-04-00-gui.html">
|
|
|
|
|
|
Cross-platform Desktop Applications
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.5" data-path="3-05-00-system-utils.html">
|
|
|
|
<a href="3-05-00-system-utils.html">
|
|
|
|
|
|
Drivers, Daemons, and System-Utilities
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.6" data-path="3-06-00-reverse-engineering.html">
|
|
|
|
<a href="3-06-00-reverse-engineering.html">
|
|
|
|
|
|
Reverse Engineering
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.7" data-path="3-07-00-graphics.html">
|
|
|
|
<a href="3-07-00-graphics.html">
|
|
|
|
|
|
Graphics Rendering
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.8" data-path="3-08-00-gaming.html">
|
|
|
|
<a href="3-08-00-gaming.html">
|
|
|
|
|
|
OpenGL, SDL, and 3D Game Development
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.9" data-path="3-09-00-audio.html">
|
|
|
|
<a href="3-09-00-audio.html">
|
|
|
|
|
|
Audio Generation and Manipulation
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.10" data-path="3-10-00-data.html">
|
|
|
|
<a href="3-10-00-data.html">
|
|
|
|
|
|
Data Aggregation and Analysis
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.11" data-path="3-11-00-cryptosec.html">
|
|
|
|
<a href="3-11-00-cryptosec.html">
|
|
|
|
|
|
Cryptography and Security
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.12" data-path="3-12-00-fintech.html">
|
|
|
|
<a href="3-12-00-fintech.html">
|
|
|
|
|
|
Financial Software and Crypto-Currencies
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.13" data-path="3-13-00-scientific-computing.html">
|
|
|
|
<a href="3-13-00-scientific-computing.html">
|
|
|
|
|
|
Scientific Computing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.14" data-path="3-14-00-computational-physics.html">
|
|
|
|
<a href="3-14-00-computational-physics.html">
|
|
|
|
|
|
Computational Physics
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.15" data-path="3-15-00-quantum-computing.html">
|
|
|
|
<a href="3-15-00-quantum-computing.html">
|
|
|
|
|
|
Quantum Computing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.16" data-path="3-16-00-nlp.html">
|
|
|
|
<a href="3-16-00-nlp.html">
|
|
|
|
|
|
Natural Language Processing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.17" data-path="3-17-00-ai.html">
|
|
|
|
<a href="3-17-00-ai.html">
|
|
|
|
|
|
Artificial Intelligence
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.18" data-path="3-18-00-robotics.html">
|
|
|
|
<a href="3-18-00-robotics.html">
|
|
|
|
|
|
Robotics
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.19" data-path="3-19-00-space-tech.html">
|
|
|
|
<a href="3-19-00-space-tech.html">
|
|
|
|
|
|
Space Tech
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.20" data-path="3-20-00-neurotech.html">
|
|
|
|
<a href="3-20-00-neurotech.html">
|
|
|
|
|
|
Neuroscience and Thought-Controlled Computing
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.21" data-path="3-21-00-lispos.html">
|
|
|
|
<a href="3-21-00-lispos.html">
|
|
|
|
|
|
A Simple LispOS
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.22" data-path="3-22-00-lisp-machine.html">
|
|
|
|
<a href="3-22-00-lisp-machine.html">
|
|
|
|
|
|
Build Your Own Lisp Machine
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
<li class="chapter " data-level="5.1.23" data-path="3-23-00-gov-mil.html">
|
|
|
|
<a href="3-23-00-gov-mil.html">
|
|
|
|
|
|
Government and Military Grade Systems
|
|
|
|
</a>
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="divider"></li>
|
|
|
|
<li>
|
|
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
|
|
Published with GitBook
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
</nav>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="book-body">
|
|
|
|
<div class="body-inner">
|
|
|
|
|
|
|
|
<div class="book-header" role="navigation">
|
|
|
|
|
|
<!-- Title -->
|
|
<h1>
|
|
<i class="fa fa-circle-o-notch fa-spin"></i>
|
|
<a href="index.html" >Extra Credit: Persistence and Databases</a>
|
|
</h1>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="page-wrapper" tabindex="-1" role="main">
|
|
<div class="page-inner">
|
|
|
|
<div id="book-search-results">
|
|
<div class="search-noresults">
|
|
|
|
<section class="normal markdown-section">
|
|
|
|
<h1 id="chapter-24-----extra-credit">Chapter 2.4 --- Extra Credit</h1>
|
|
<h2 id="persistence-and-databases">Persistence and Databases</h2>
|
|
<blockquote>
|
|
<p>"You have attributed conditions to villainy that simply result from stupidity."</p>
|
|
<footer>Robert A. Heinlein, <em>Logic of Empire</em></footer>
|
|
|
|
</blockquote>
|
|
<p>All applications that allow a user to create or modify data must also allow that user to store their data somewhere, either on their own filesystem, on a server in the cloud, or in a database, and load it back into memory again. After all, once an application quits, everything in its memory space is effectively lost. To have that data persist across sessions, it has to be stored <em>somewhere</em>, and loaded back into an application's memory when it is needed. Many strategies exist to achieve this---and we've looked at a couple simple ones already.</p>
|
|
<p>Another advantage of storing data outside of an application's memory space, is that it encourages you to validate all data before running it through your program. In any real-world application, this should be done anyway; but when you know the data is coming from an untrusted source (<em>i.e.</em>, anyone who isn't you, the application developer), you're more likely to do things the right way. While validation of all program input is a non-trivial task, it is essential for building robust user experiences that can handle bad user input as well as malicious attacks against your software.</p>
|
|
<p>Whether you store your application's data in a file on a user's computer or in a database where a number of authorized users can access it, you need to spend some time thinking about every piece of data that your application might need to store. Imagine that the program is loading from scratch, and only has a saved file to restore everything from the last session to memory---if you've stored everything you need to, a user will be able to pick up right where they left off; if you missed anything, you might just annoy a user if it was nothing more than a trivial customization to the UI that you forgot to save, but you could just as easily crash the entire application and corrupt the user's data. Conversely, if data needs to be converted before being used, it's equally important to remember to convert both ways, on the way in, and on the way out.</p>
|
|
<p>Sometimes you may also want to serialize and store not just your data, but your code too---saving you the time and effort of rebuilding objects in memory from where they are stored. This is possible in Lisp because of its homoiconicity. Being able to treat code as data, and data as code can be just as much of a time-saver as it is a powerful tool for expressing code patterns in macros. Again, careful thought has to be put into your complete application's life-cycle---if you store executable code, expecting it to run in your application, you'll have to validate it before allowing it to be evaluated. This brings up the principle of <em>secure programming</em>---writing software with certain best practices up front, instead of merely adding security features on at the end.</p>
|
|
<p>Lastly, you can also dump an entire Lisp session to your file system, and run it instead of having to load everything into memory again. Everything you had in memory will be there again when you launch this dumped executable. This can be useful if you have a lot of customizations, or default packages that you use all the time---but naturally, this too comes with its caveats.</p>
|
|
<h3 id="exercise-241">Exercise 2.4.1</h3>
|
|
<p><strong>Validating Input</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-242">Exercise 2.4.2</h3>
|
|
<p><strong>More Validation</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-243">Exercise 2.4.3</h3>
|
|
<p><strong>Even More Validation</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-244">Exercise 2.4.4</h3>
|
|
<p><strong>Binary File Formats</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-245">Exercise 2.4.5</h3>
|
|
<p><strong>Outputting Binary Files</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-246">Exercise 2.4.6</h3>
|
|
<p><strong>Reading Binary Files</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-247">Exercise 2.4.7</h3>
|
|
<p><strong>Binary Files as Programs</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-248">Exercise 2.4.8</h3>
|
|
<p><strong>Hand Compilation</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-249">Exercise 2.4.9</h3>
|
|
<p><strong>Custom Lisp Images</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2410">Exercise 2.4.10</h3>
|
|
<p><strong>Dumping Custom Lisp Images</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2411">Exercise 2.4.11</h3>
|
|
<p><strong>Loading Custom Lisp Images</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2412">Exercise 2.4.12</h3>
|
|
<p><strong>Serializing Lisp Objects</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2413">Exercise 2.4.13</h3>
|
|
<p><strong>More Serialization</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2414">Exercise 2.4.14</h3>
|
|
<p><strong>Even More Serialization</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2415">Exercise 2.4.15</h3>
|
|
<p><strong>Relational Databases</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2416">Exercise 2.4.16</h3>
|
|
<p><strong>Document-based Databases</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
<h3 id="exercise-2417">Exercise 2.4.17</h3>
|
|
<p><strong>Graph Databases</strong></p>
|
|
<pre><code class="lang-lisp">
|
|
|
|
</code></pre>
|
|
|
|
|
|
</section>
|
|
|
|
</div>
|
|
<div class="search-results">
|
|
<div class="has-results">
|
|
|
|
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
|
|
<ul class="search-results-list"></ul>
|
|
|
|
</div>
|
|
<div class="no-results">
|
|
|
|
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<a href="2-03-0-objects-control.html" class="navigation navigation-prev " aria-label="Previous page: Objects and Control Structures">
|
|
<i class="fa fa-angle-left"></i>
|
|
</a>
|
|
|
|
|
|
<a href="2-05-0-extended-types.html" class="navigation navigation-next " aria-label="Next page: Extended Types">
|
|
<i class="fa fa-angle-right"></i>
|
|
</a>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<script>
|
|
var gitbook = gitbook || [];
|
|
gitbook.push(function() {
|
|
gitbook.page.hasChanged({"page":{"title":"Extra Credit: Persistence and Databases","level":"4.1.4","depth":2,"next":{"title":"Extended Types","level":"4.1.5","depth":2,"path":"2-05-0-extended-types.md","ref":"./2-05-0-extended-types.md","articles":[]},"previous":{"title":"Objects and Control Structures","level":"4.1.3","depth":2,"path":"2-03-0-objects-control.md","ref":"./2-03-0-objects-control.md","articles":[]},"dir":"ltr"},"config":{"plugins":["hints","folding-chapters"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"folding-chapters":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"\"the Phoeron\" Colin J.E. Lupton","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"index.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Learn Lisp The Hard Way","gitbook":"*"},"file":{"path":"2-04-0-data-persistence.md","mtime":"2022-08-22T23:18:17.300Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-08-24T16:15:01.957Z"},"basePath":".","book":{"language":""}});
|
|
});
|
|
</script>
|
|
</div>
|
|
|
|
|
|
<script src="gitbook/gitbook.js"></script>
|
|
<script src="gitbook/theme.js"></script>
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-folding-chapters/folding-chapters.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-search/search.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
|
|
|
|
|
|
|
|
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|
|
|