Would you like to see this page in English? Click here.


または
1-Clickで注文する場合は、サインインをしてください。
または
Amazonプライム会員に適用。注文手続きの際にお申し込みください。詳細はこちら
こちらからも買えますよ
この商品をお持ちですか? マーケットプレイスに出品する
Purely Functional Data Structures
 
 
Kindle化リクエスト
このタイトルのKindle化をご希望の場合、こちらをクリックしてください。

Kindle をお持ちでない場合、こちらから購入いただけます。 Kindle 無料アプリのダウンロードはこちら

Purely Functional Data Structures [ペーパーバック]

Chris Okasaki
5つ星のうち 5.0  レビューをすべて見る (1 件のカスタマーレビュー)
価格: ¥ 5,097 通常配送無料 詳細
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
在庫あり。 在庫状況について
この商品は、Amazon.co.jp が販売、発送します。 ギフトラッピングを利用できます。

フォーマット

Amazon 価格 新品 中古品
ハードカバー ¥ 8,159  
ペーパーバック ¥ 5,097  

会員なら、この商品は10%Amazonポイント還元 (ポイントが表示されている場合は、表示ポイント+10%還元)。

キャンペーンおよび追加情報


よく一緒に購入されている商品

Purely Functional Data Structures + Types and Programming Languages
合計価格: ¥ 13,292

選択された商品をまとめて購入
  • Types and Programming Languages ¥ 8,195

この商品を買った人はこんな商品も買っています


商品の説明

内容説明

Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques so that programmers can develop their own functional data structures. It includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs can easily be adapted to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.

Book Description

Most books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques that allow programmers to develop their own functional data structures. The author includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs are easily adaptable to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.

登録情報

  • ペーパーバック: 232ページ
  • 出版社: Cambridge University Press (1999/7/1)
  • 言語 英語, 英語, 英語
  • ISBN-10: 0521663504
  • ISBN-13: 978-0521663502
  • 発売日: 1999/7/1
  • 商品パッケージの寸法: 15.2 x 1.3 x 22.8 cm
  • おすすめ度: 5つ星のうち 5.0  レビューをすべて見る (1 件のカスタマーレビュー)
  • Amazon ベストセラー商品ランキング: 洋書 - 35,019位 (洋書のベストセラーを見る)
  •  カタログ情報、または画像について報告

  • 目次を見る

この本のなか見!検索より (詳細はこちら
書き出し
A distinctive property of functional data structures is that they are always persistent-updating a functional data structure does not destroy the existing version, but rather creates a new version that coexists with the old one. 最初のページを読む
その他の機能
頻出単語一覧
この本のサンプルページを閲覧する
おもて表紙 | 著作権 | 目次 | 抜粋 | 索引 | 裏表紙
この本の中身を閲覧する:

この商品を見た後に買っているのは?


カスタマーレビュー

星4つ
0
星3つ
0
星2つ
0
星1つ
0
最も参考になったカスタマーレビュー
25 人中、24人の方が、「このレビューが参考になった」と投票しています。
形式:ペーパーバック
関数プログラミング向けのデータ構造というものについて、考えたことがあるでしょうか?

良くアルゴリズム本に出てくるデータ構造は、破壊的更新を使った命令的(手続き的)なスタイルで使われることを前提に定義されています。そのためデータ構造の中には、Standard ML(SML)や Haskell などのような関数型言語で使おうとすると(非常に)効率が悪いものもあります。

本書ではならし解析や遅延評価を用い、「どうしたらより効率の良いデータ構造が構築できるか」についてせまっていきます。

本書は実は Haskell ではなく SML を対象として書かれているのですが、Haskell をやっていく中でもその重要度が劣ることはありません。寧ろ、Haskell 的にはその価値が増すかもしれません。破壊的更新を一切行わず、代わりに遅延評価を用いるという方針は、Haskell にこそ向いたものです。実際、GHC や Hugs などの Haskell の処理系に付属するライブラリには、Data.Queue や Data.Sequence など、本書で述べられているテクニックやその発展を使っているものもあります。

また、SML のような本来遅延評価ではない言語に遅延評価を差し込んでいくという形で議論が展開されていくため、遅延評価って何が良いのかよくわからない人は本書を読むことで遅延評価というものの価値を知ることができるでしょう。

本書のソースコードは SML を使って書かれていますが、巻末に Haskell でのコードが載っているので、巻末のコードと照らし合わせながら読めば Haskell しか知らない人であっても分からないということはないと思います。

ただ、一点注意しておかなればならないのは、本書はその性格上アルゴリズムの知識を前提とすることです。他にアルゴリズム本を読んだことがなければ、先に何か適当な本を読んでおくと良いでしょう。Algorithms: A Functional Programming Approach という Haskell を使ったアルゴリズム本があるので、Haskell をやっている人であれば先にこれを読んでおくと良いかもしれません。
このレビューは参考になりましたか?
Amazon.com で最も参考になったカスタマーレビュー (beta)
Amazon.com: 5つ星のうち 4.4  10件のカスタマーレビュー
111 人中、110人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 5.0 An elegant book 2005/3/31
By Randall Helzerman - (Amazon.com)
形式:ペーパーバック
Okasaki's slim volume is one of the best expositions on implementing data structures & algorithms in a functional language. After taking an introductory course on functional programming, this would be the book which tells you where to go next.

This book doesn't just present a rehash/rewrite of imperative data structures, only written in a functional language. Instead, Okasaki makes sure to emphasize benefits which only functional programming can bring to the table. For example, many functional data structures can compactly represent not just their current state, but all of their past states as well--a feature called "Persistence". Also, functional newbie programmers might be wondering why lazy vs. strict programming is a big deal, and Okasaki shows clearly where data structures can benefit from either being lazy or being strict.

For the advanced reader, Okasaki also presents several powerful techniques for analyzing the runtime of algorithms, including the so-called "Banker's Method" and the "Physicist's Method" for analyzing amortized algorithms.

I hope that Okasaki comes out with a 2nd edition of this book; there is one missing piece in particular which I really wish he would have included: Although he presents an EXTREMELY lucid description of how to implement Red-Black trees in a functional language, he only presented algorithms for insertion and querying. Of course, deletion from a red-black tree is the hardest part, left here, I suppose, as an exercise to the student. If you want to supply this missing piece yourself, check out a paper by Stefan Kars, "Red-black trees with types", J. Functional Programming 11(4):425-432, July, 2001. It presents deletion routines, but you'll still want to read Okasaki's book first, for unless you're very much smarter than me you won't be able to understand Kars' paper until you read Okasaki's exposition of red black trees.

Finally, this book is not just useful for programmers in functional languages; logic programmers, using prolog or a varient, will also find this book very helpful, because most of the techniques (all of the techniques, really, with the exception perhaps of the lazy programming stuff) can be directly applied in a prolog programming setting as well.

After reading this book and implementing some of the data structures for yourself, you'll be amazed at how fast algorithms can run, even when written in a functional language!
55 人中、47人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 4.0 Strange choice of implementation languages 2006/11/7
By S. Brickner - (Amazon.com)
形式:ペーパーバック
The description of the book says it includes source code in both ML and Haskell. Unfortunately, the body of the text uses ML exclusively, and the Haskell code is banished to an appendix.

I say "unfortunately", because many of the data structures used depend on lazy evaluation, which comes quite naturally to Haskell, and seems to require some sort of non-standard extension in ML.

While the content is good, I wish it would have used Haskell as the primary exposition language.
8 人中、8人の方が、「このレビューが参考になった」と投票しています。
5つ星のうち 5.0 One of my favorite computer science books 2010/11/18
By David Bakin - (Amazon.com)
形式:ペーパーバック
[This review copied from my moribund blog at [...] ]

The typical data structures most programmers know and use require imperative programming: they fundamentally depend on replacing the values of fields with assignment statements, especially pointer fields. A particular data structure represents the state of something at that particular moment in time, and that moment only. If you want to know what the state was in the past you needed to have made a copy of the entire data structure back then, and kept it around until you needed it. (Alternatively, you could keep a log of changes made to the data structure that you could play in reverse until you get the previous state - and then play it back forwards to get back to where you are now. Both these techniques are typically used to implement undo/redo, for example.)

Or you could use a persistent data structure. A persistent data structure allows you to access previous versions at any time without having to do any copying. All you needed to do at the time was to save a pointer to the data structure. If you have a persistent data structure, your undo/redo implementation is simply a stack of pointers that you push a pointer onto after you make any change to the data structure.

This can be quite useful--but it is typically very hard to implement a persistent data structure in an imperative language, especially if you have to worry about memory management [1]. If you're using a functional programming language--especially a language with lazy semantics like Haskell--then all your data structures are automatically persistent, and your only problem is efficiency (and of course, in your functional languages, the language system takes care of memory management). But for practical purposes, as a hardcore C++ programmer for professional purposes, I was locked out of the world of persistent data structures.

Now, however, with C# and C++/CLI in use (and garbage collection coming to C++ any time now ... [2]) I can at last contemplate the use of persistent data structures in my designs. And that's great, because it gave me an excuse to take one of my favorite computer science books off the shelf and give it another read.

The book is Purely Functional Data Structures, by Chris Okasaki. I find it to be a very well written and easy to understand introduction to the design and analysis of persistent data structures--or equivalently--for the design and analysis of any data structure you'd want to use in a functional language.

There are two key themes of the book: First, to describe the use and implementation of several persistent data structures, such as different kinds of heaps, queues, and random-access lists, and second, to describe how to create your own efficient persistent data structures.

A nice feature here is the inclusion of "Hint to Practitioners" sidebars that point out which of these data structures work especially well in various contexts.

The second theme is the more demanding one--but of course, it is teaching something really valuable. First, the methods of analyzing amortized time taken by operations in a data structure are fully explained. The two basic techniques are the "banker's method" and the "physicist's method", and they have to do with different ways of accounting for time spent in in the different operations on a data structure so that bounds on the time spent can be computed. (The "credits" and "debits" used for accounting for time are not reflected in the code for the data structure - they are "virtual" and only used for the analysis.) Then, Okasaki adapts these methods to work for persistent data structures, and provides several fully worked out examples.

With analysis of persistent data structures explained he then goes on to describe several methods of creating efficient persistent data structures from non-persistent data structures. These methods are lazy rebuilding,use of numerical representations in building data structures, data-structural bootstrapping, and implicit recursive slowdown. These methods are all interesting, but the one which is most fun (and for me, the easiest to understand) is the use of numerical representations. In this method data structures are built by composing smaller structures in a form that is similar to the representation of a binary number--and merging and deleting items from the data structure is modeled as adding or subtracting from a number. Also, different kinds of binary number representations are used, and the use of base 3 and base 4 numbers is mentioned. [3]

The persistent data structures described are given with code (in an ML variant that includes explicit notations for lazy evaluation, and also in Haskell). After the book was published the data structures described were "productized" into a Haskell library called Edison, originally written by Chris Okasaki, but which is now maintained and enhanced by Robert Dockins and available at [...]

--------------------------------------------------------------------------------
1: A good starting point to look for papers on the subject of imperative persistent data structures is to search for papers co-authored by Robert E Tarjan with the word "persistent" in the title.

2: GC is part of the C++0x language and compilers will be required to support it, so that means we'll get to use it by 2015, I'm sure!

3: You can get the flavor of this kind of thing from this paper by Ralf Hinze - [...]
これらのレビューは参考になりましたか?   ご意見はクチコミでお聞かせください。
カスタマーレビューの検索
この商品のカスタマーレビューだけを検索する

クチコミ

クチコミは、商品やカテゴリー、トピックについて他のお客様と語り合う場です。お買いものに役立つ情報交換ができます。
この商品のクチコミ一覧
内容・タイトル 返答 最新の投稿
まだクチコミはありません

複数のお客様との意見交換を通じて、お買い物にお役立てください。
新しいクチコミを作成する
タイトル:
最初の投稿:
サインインが必要です
 

クチコミを検索
すべてのクチコミを検索
   


リストマニア


関連商品を探す


フィードバック


Amazon.co.jpのプライバシー ステートメント Amazon.co.jpの発送情報 Amazon.co.jpでの返品と交換