June 15 - 22
Ships from: Mesilla Internet Sold by: Mesilla Internet
Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required. Learn more
Read instantly on your browser with Kindle for Web.
Using your mobile phone camera - scan the code below and download the Kindle app.
Follow the Author
The Reasoned Schemer (The MIT Press) 2nd ed. Edition
Purchase options and add-ons
Extending the functional language Scheme with logical constructs in order to help the functional programmer think logically and the logic programmer think functionally.
The goal of The Reasoned Schemer is to help the functional programmer think logically and the logic programmer think functionally. The authors of The Reasoned Schemer believe that logic programming is a natural extension of functional programming, and they demonstrate this by extending the functional language Scheme with logical constructs―thereby combining the benefits of both styles. The extension encapsulates most of the ideas in the logic programming language Prolog. The pedagogical method of The Reasoned Schemer is a series of questions and answers, which proceed with the characteristic humor that marked The Little Schemer and The Seasoned Schemer. Familiarity with a functional language or with the first eight chapters of The Little Schemer is assumed. Adding logic capabilities required the introduction of new forms. The authors' goal is to show to what extent writing logic programs is the same as writing functional programs using these forms. In this way, the reader of The Reasoned Schemer will come to understand how simple logic programming is and how easy it is to define functions that behave like relations.
Frequently bought together
Contrary to popular belief, logic programming doesn't always mean programming in Prolog. In this groundbreaking book, Friedman and Kiselyov extend Scheme to form a completely new kind of logic programming system, one which is in many ways even more elegant than Prolog. Written in the same classic question-and-answer format as the authors' previous book The Little Schemer, The Reasoned Schemer covers goals, first-class relations, interleaved and non-interleaved backtracking, the relationship between relational and functional programming, and much more. Reading this book will not only cause your geek rating to skyrocket and impress all the Cool Kids, it will also open your eyes to a paradigm of programming which most programmers are completely unaware of, but which will undoubtedly play a significant role in the programming systems of the future. More importantly, though, this book is great fun to read and will make you a better programmer.―Michael Vanier, Caltech
About the Author
William E. Byrd is a scientist in the Department of Computer Science at the University of Alabama at Birmingham.
Oleg Kiselyov is Assistant Professor in the Graduate School of Information Sciences at Tohoku University, Japan.
- Publisher : The MIT Press; 2nd ed. edition (October 14, 2005)
- Language : English
- Paperback : 176 pages
- ISBN-10 : 0262562146
- ISBN-13 : 978-0262562140
- Reading age : 18 years and up
- Item Weight : 10.4 ounces
- Dimensions : 6.88 x 0.38 x 9 inches
- Best Sellers Rank: #1,971,615 in Books (See Top 100 in Books)
- #1,650 in Computer Programming Languages
- #6,735 in Programming Languages (Books)
- #7,344 in Computer Software (Books)
- Customer Reviews:
About the author
Top reviews from the United States
There was a problem filtering reviews right now. Please try again later.
Non logic programming basically works from the notion of imperative data flow. This is generally represented by the concept of a function. A function takes a argument and returns a value, it takes input variables and returns output variables. A logic program creates a relation (not a function) between a set of variables. If you had a two input function, with one output, you could represent this as a logic program relation of three variables. Two of those relation variables would be what were the two inputs to the function, the third variable would be the output of the function. Here is the kicker though. You can provide concrete values for any number of those variable in any order and ask the relation what the other variables might be. At the simplest level, this means that you might run your function "backwards" (from the output to the input). But really, it means that you can ask any question relating to those variables (conceptually). Now, realistically, it is not as easy as that. Some relations may never terminate (return a answer), some grow too large and barf (overflow), some may not complete for various other reasons. It can be more complex to actually write a logical relation than a function, this must be balanced against the fact that the relation is far more powerful than the function.
If you want a primer for logical programing, this book is probably worth your time. It takes you through writing many of the fundamental parts of a logical relation. The only thing I think it really skips is the actual unification (= x y) primitive itself, which I believe it uses as a given. You can learn quite a bit by reading this code slowly and carefully. Note however, that you must complete every step of the question/answer pairings! Skimming this book will not work (unless you already know it). Really, these concepts build on each other. It is a rather small (page number and physically) book, but it will take far more time to really go through then its size would suggest. Read and work through for the purpose of understanding, and I think you will really get a good backing in logic programming, and probably enjoy yourself as well!
Note: The above statements applied to the paper edition.
The Kindle version of this Book is pure garbage. Here I am, on a 2016 Macbook Pro with a Retina Display and I can barely read the damn thing. I tried reading on my Android, just awful. I tried on my Windows PC, same. A good deal of the information in this book is communicated by bolding and italics. These are incredibly difficult to see in the Kindle version. Shame on the publisher for releasing such an inferior thing to the public. Disappointed in Amazon for not enforcing minimum legibility standards on non free Kindle books. DO NOT EVEN CONSIDER BUYING THE KINDLE EDITION!
The relational/logic programming style is usually learned by studying the Prolog language, which is how I learned it (though I'm no expert). Having a knowledge of Prolog will definitely make this book easier to understand, although the approach given here is more modern than Prolog in several ways. For one thing, the named relations of Prolog are replaced here by anonymous relations (analogous to lambda expressions being anonymous functions), and for another, the (somewhat brutal) "cut" operator of Prolog, which is used to control backtracking, is ignored in favor of more subtle approaches involving interleaving solutions and giving up after single results are found.
I think the approach of learning-by-pattern-recognition that all the "Little X" books use is fairly effective here, though I think a lot of readers (meaning me) wouldn't mind a more extended discussion of the mechanics of the system.
All in all, if you liked _The Little Schemer_ and are curious about new ways of programming, you should definitely pick up a copy of this book. It will stretch your mind like a Slinky, and when you're done you'll have learned a new way of looking at programming.
Nowhere in the preface does authors mentions that I should download the source code [...] , BTW the implementation code is excellent, and some supported implementation in order to actually run the programs.
When you add everything I wouldn't buy this book if I knew all this but on the other hand I'm not inclined to ask for a refund.
Top reviews from other countries
Das Buch erklärt leider nicht sehr viel in Prosa, es versucht eher die Welt von miniKanren durch viele Beispiele abzustecken, so wie man es in einer Deklarativen Sprache selbst machen würde. Es macht durchaus Spaß die Beispiele nachzuvollziehen und daraus zu lernen, erfordert aber noch einiges an Eigenleistung um es zu verstehen.
読者として２つのグループを想定しているようです。ひとつは miniKANREN 上のプログラミングを通して論理型プログラミングを学ぶグループです。もうひとつは巻末の miniKANREN 作成から処理系の作成を学ぶグループです。前者の場合には予備知識は不要ですが、後者の場合にはマクロ等に関する深い知識が必要です。 SICP や On Lisp を読み終わっているぐらいの知識が必要だと思います。
自分のスキルアップとともに読み取れる内容がどんどん深くなっていくのが処理系作成の醍醐味です。自分の Scheme のスキルを確認するために何度か読み返してみると新しい発見ができる面白い本だと思います。Clause and Effect と一緒に読むと Prolog を学びやすいのでお勧めです。