「Prolog」を含む日記 RSS

はてなキーワード: Prologとは

2018-12-04

増田プログラマー養成講座 その23 SQLを巡る物語

前回は、データベース設計について学びました。

今回は、その他のデータベース話題について見てみましょう。

 

 

リレーショナル・データベース理論

問合型言語SQLは、「関係代数」という計算モデルを基に作られたプログラミング言語

一度「関係代数」について学んでおくと、RDBの使い方について、理解が深まる。

↑このスライド作者さんは他にもDB関係資料作成されてるので見ておくといいかも?

 

 

SQL以外の問合型言語

SQL以外にも「SPARQL」、「TMQL」(Topic Maps Query Language)等、いろいろな問合型言語がある。

実際に使う機会は少ないかもしれないが、「問い合わせ」で処理するという発想は参考になるかも?

 

Datalog

Datalogは「Prolog」(論理言語)を源流にもつ宣言的なデータベース問合せ言語。DatalogはSQLと同等の表現力を持つ。

Datalogは様々なプログラミング言語で利用できる。

 

トピックマップ

トピックマップ」は、本の索引もっと機能にしたような仕組みで、RDBとは違う形でデータを蓄積/検索できる。

 

 

RDB以外のデータベース

SQLを使わないデータベースもある。

 

NoSQL

NoSQL一般に "Not only SQL" と解釈される)とは、関係データベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語である

関係モデルではないデータストアの特徴として、固定されたスキーマに縛られないこと、関係モデルの結合操作を利用しないこと(場合によっては単にそのような機能が欠落しているだけ)、水平スケーラビティが確保しやすい事が多いこと、トランザクションを利用できないものが多いことなどが挙げられる。

学術的な世界では、この種のデータベースのことを構造ストレージ (structured storage) と呼ぶことが多い。

 

NoSQLデータベースは、関係データベースのような汎用性は欠くものの、その制約された条件下ではRDBMSより高いパフォーマンスを持つ。

そのためビッグデータソリューションでしばしば活用される。

NoSQLデータベース管理システム有用な場面は、関係モデル必要としないデータを扱う時や、大量のデータを扱う時である

 

有名な実装として、GoogleBigTableアマゾンAmazon DynamoDBなどがある。オープンソース実装も数多く存在し、例えばMongoDBRedisApache HBase、HyperTable, Apache Cassandraなどがある。

 

 

SQLRDBに慣れたら、NoSQLも調べてみよう!

 

 

その他、データベース関係話題

DB運用管理で学んでおきたい話題を列挙してみよう。

 

 

SQL開発物語

問合型言語学習最後に、SQLを巡る物語も見てみよう。(SQL学習ドラマチックで楽しいものにしたいねw)

 

 

RDB活用すれば、大量のデータを処理して、多くの仕事効率化できる。(金持ちへの扉が開かれる。)

暇があったら、SQL物語登場人物も見ておこう。

 

エドガーフランク・コッド(Edgar Frank "Ted" Codd, 1923年8月23日 - 2003年4月18日)は、イングランドまれ計算機科学者

関係データベース理論的基盤であるデータベース管理関係モデル発明した。

 

1960年代から1970年代、コッドはデータ配置に関する理論を構築し、1970年 "A Relational Model of Data for Large Shared Data Banks" (大規模共有データバンクのデータ関係モデル)という論文を発表した(IBM内ではその1年前に公表している)。

しかし、IBMライバルがそれを実装し始めるまで彼の提案を実行に移そうとせず、コッドは失望した。

当初、IBMはIMS/DB収益を守るため、関係モデル実装することを拒んだ。

コッドはIBM顧客自身モデル実装した場合可能性を提示し、顧客からIBM圧力をかけさせた。

そこでIBM関係モデル実装を開発する System R プロジェクトを Future Systems プロジェクトに含める形で立ち上げたが、その開発チームとコッドは分離され、しかもコッドの理論精通した者はチーム内にいなかった。

結果として彼らはコッドの Alpha 言語を使わずリレーショナルでないSEQUEL言語を開発した。

 

ラリーエリソンSEQUEL 完成前に発表された論文に基づいて Oracle を完成させ、先に発売している。

IBMは、SQL/DS を発売した。

幹部技術音痴だと、部下の名案も却下してしまうんですね?

 

ローレンス・ジョセフ・エリソン(Lawrence Joseph Ellison、1944年8月17日 - )は、データベースソフトをはじめとする大手ビジネスソフトウェア企業オラクルコーポレーションの共同設立者であり、元CEO会長CTOである

2014年現在総資産は500億ドルで、世界で5番目の富豪である

 

ニューヨーク出身アシュケナジムユダヤ人母親フローレンススペルマン(Florence Spellman)は出産当時未婚の19歳で、生後9ヶ月のラリーシカゴに住む叔母リリアンエリソンとその夫である義理叔父ルイスエリソン養子として引き取ってもらった。ラリーは実の母の名も知らず育ったが、48歳の時に初めて対面した。

 

高校時代秀才だが、無愛想な生徒だった。イリノイ大学アーバナシャンペーン校に二年生まで通っていたが、リリアンの死後まもなく退学。カリフォルニア州北部で夏を過ごした後、シカゴ大学で学ぶために実家に戻ったものの三ヶ月でまたも退学し、カリフォルニア移住。この頃、コンピュータに触れ始めている。

 

1970年代エリソンはアンペックスで働いた。彼の関わったプロジェクトのひとつCIA向けデータベース開発があり、彼はそれに「オラクル (Oracle)」と名づけた。

エリソンエドガー・F・コッドのリレーショナルデータベースシステムに関する論文 A Relational Model of Data for Large Shared Data Banks に触発され、1977年自己資金1400ドルオラクル設立した。

彼はIBMのSystem Rデータベースがコッドの理論に基づいたものであると聞き、Oracleもこれと互換性のある製品にしたかったのだが、IBMエラーコード秘密にすることによって互換製品が出てくるのを防いでいた。

オラクル最初製品Oracle 2であり、Oracle 1は存在しない。このリリース番号は、それ以前のバージョンバグが全て解決されていることを暗示しようとして付けられた。

 

1997年8月ラリーエリソン親友スティーブ・ジョブズアップルに戻った後、同社の取締役就任した。2002年9月20日取締役会に出席する時間が充分に取れないことを理由アップル取締役を辞任した。

この人、キャラクター的にはあまりきじゃないけど、行動力はすごいね

コッド博士論文を見て自分RDBを作っちゃった!

Oracleバージョンを「2」から始めて、改良されているように見せかける。~ちょっと詐欺っぽいけど、商売うまい?w

 

 

 

SQLデータベース活用して、素敵なアプリWebサービスを開発してください。

では、これでいったん、増田プログラマー養成講座を終了します。

御清聴いただき、どうもありがとうございました。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラム=データ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミングの練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181119224031 増田プログラマー養成講座 その22 データベース設計 概念物理

anond:20181204142213 増田プログラマー養成講座 その23 SQLを巡る物語 ←★今ここ★

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-11-28

anond:20181128205538

週3日勤務で手取り10

取り急ぎ使い物になる言語c#js

prologとかlispなんかも触ったことある

情報系だったので

2018-11-27

プログラミングの入門はPythonでOK?

これからプログラミング勉強しようと思う人は、その前にポール・グレアムの「ハッカー画家」という本を読んでみて欲しい。(一部はネットでも読める)

 

時間がなければ一部のエッセイだけでもいい。

エリックレイモンドはエッセイハッカーになろう」の中で、 他のいろいろなアドバイスに混じって、ハッカーになりたい人はどんな言語勉強すべきかを述べている。

まずPythonJavaから始めよ、学ぶのが容易だから

真剣ハッカーさらに、UnixをハックするためにCを学び、システム管理CGIスクリプトのためにPerlを学ぶべし。

そして本当に真剣ハッカーLispを 学ぶことを熟慮すべきだ。というのも:

 

LISPは、それをものにしたときのすばらしい悟り体験のために勉強しましょう。

この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。

たとえ、実際にはLISPのものをあまり使わなくても。

 

この意見を参考にするなら

  1. Python
  2. Java
  3. C
  4. Perl
  5. Lisp

という5つが挙げられる。

大事なことはいずれにせよ、1度はLisp関数型プログラミング言語)を学ぶべきだということ。

 

Lisp教科書

今ならこの本が分かりやすいと思う。

時間があれば、関数型プログラミング言語Lispの他にOCamlもやってみよう。

 

Lisp以外ならPython

Lisp以外のプログラミング言語も含めるなら

  1. Python
    1. スラスラ読める Pythonふりがなプログラミング https://www.amazon.co.jp/dp/4295003867/
    2. 独学プログラマー Python言語の基本から仕事のやり方まで https://www.amazon.co.jp/dp/4822292274/
    3. レトロゲームエンジン Pyxel でプログラミングを始めよう! http://b.hatena.ne.jp/entry/tkitao.hatenablog.com/entry/2018/11/24/185346
  2. SQL
    1. スッキリわかるSQL入門 第2版 ドリル222問付き https://www.amazon.co.jp/dp/4295005096/
    2. おうちで学べるデータベースのきほん https://www.amazon.co.jp/dp/479813516X/
  3. Lisp
    1. Land of Lisp https://www.amazon.co.jp/dp/4873115876/
    2. On Lisp http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/
  4. Prolog
    1. Prologへの入門 https://www.amazon.co.jp/dp/476490165X/

という順番にするとバランス良く学べるだろう。

 

時間がないなら消去法で

  1. Python
  2. Lisp

の2つでもいいだろう。

2018-11-25

anond:20181125100933

増田説明が下手すぎるんだよマジで

何にも知らない相手Python良いよって言ったってポカーンとするだけだ

いきなりR良いよProlog良いよって言われるような感じだぞ

もうちょっと噛み砕いて説明したほうが良いし、俺なら説明比較して確実にCを選ぶわ

だってCを説明してくれた増田の方がわかりやすもの

2018-10-24

増田プログラマー養成講座 コンテンツ一覧

コンテンツが増えてきたので、一覧ページを用意します。

 

第1章 準備

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

 

第2章 手続言語

2-1 構造プログラミング

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

2-2 オブジェクト指向プログラミング

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

 

第3章 問合型言語

3-1 SQLの基礎

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

3-2 SQLの応用

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

3-3 データベース設計

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181119224031 増田プログラマー養成講座 その22 データベース設計 (2)概念設計 → (3)論理設計 → (4)物理設計

3-4 その他

anond:20181204142213 増田プログラマー養成講座 その23 SQLを巡る物語

 

第4章 関数型言語(未定)

  1. Lisp
  2. OCaml

 

第5章 論理言語(未定)

  1. Prolog

 

Java講座(未定)

  1. Android

 


元ネタ

anond:20181015215004 未経験からプログラマーなんだが全然からない

 

追記 2018-10-26

増田プログラムコードが入った記事投稿すると、IPアドレスアクセス制限されるようです。(今は別のIPアドレスからアクセスちょっと対処方法検討してみます。m(__)m

2018-10-16

増田プログラマー養成講座 その2 プログラムデータ+処理

プログラムとは何か?

プログラムは、コンピューター電子計算機)に与える指示書のこと。

人間プログラムコード)を書いてコンピューターに与えると、コンピュータープログラムに書かれている命令を実行する。

 

コンピューター電気仕掛けの召し使いだ。いくらコキ使っても誰にも文句を言われない。パソコンを10台持っていれば部下が10人いるようなもの。こいつらに仕事やらせれば人間様は遊んで暮らせる。どうだ?命令してみたくなっただろう?

しかし、こいつらはアホだ。正確に命令を出さないと、ほんの少しでも間違っていれば、間違ったなりの動作しかしない。融通が利かない頑固者だ。命令するときバグ(間違い)がないように注意しよう。(命令するのも一苦労なんだよな~w)

 

プログラム構成要素

プログラムは、

  1. データ
  2. 「処理」

の2つから成り立っている。それ以外の要素はない。基本はたったの2つだけなら、シンプルで分かりやすいだろ?

 

問題は、この「処理」をどうやって書くか?なんだ。

「処理」の書き方を巡って、人類試行錯誤を繰り返し、いろんな書き方を編み出して来た。

現代の主な書き方(プログラミングパラダイム)には、主に2つの流派がある。

 

命令型と宣言

  1. 命令プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
  2. 宣言プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E5%AE%A3%E8%A8%80%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

 

さらに細分化すると4つある。

  1. 手続型:C、Javaなど
  2. 関数型:LispHaskellなど
  3. 問合型:SQLなど
  4. 論理型:Prologなど

 

手続型は命令型に属する。関数型、問合型、論理型は宣言型に属する。)

これら4つは見た目がちょっと違うけど、「チューリング完全」と言って、計算できることは同じと保証されている。(同じ計算能力がある)

頭の悪いプログラマーはそれぞれの優劣を論じて宗教戦争をやってるけど、賢いプログラマー必要に応じて全部使えるようにしているので、どれを使っても問題ない。

まずは、直観的に分かりやすい「手続型」で練習してみよう。その後、問合型(データベースの操作)、関数型(参照透過性の活用)を練習してみよう。


(ここまでの話は、歴史用語、全体を俯瞰した地図の話だから、今の段階で理解できなくてもOK

 

手続プログラミング言語学習項目

次の2ステップに分けられる。

  1. 構造プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
  2. オブジェクト指向プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

 

この2点を理解したら、Javaコードを書ける。

次回、この2つを見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類 ←★今ここ★

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-13

プログラミングの独学プラン

  1. 10日間:「構造プログラミング」の基本(順次、反復、分岐)を学習子ども向けの教材「Scratch」がお勧め https://scratch.mit.edu/
  2. 60日間:手続言語PythonPHP等)を学習Webサイトを作ってみる→スラスラわかるPHP https://www.amazon.co.jp/dp/4798125806/
  3. 30日間:問合型言語データベースSQL)を学習MySQLを使ってみる→おうちで学べるデータベースのきほん https://www.amazon.co.jp/dp/479813516X/
  4. 30日間:関数型言語(合成、再帰パターンマッチ)を学習ポイントは「参照透過性」の活用。教材は「OCaml」がお勧め http://pllab.is.ocha.ac.jp/~asai/book/Top.html

 

 

からないことがあればteratailで質問できますhttps://teratail.com/

 

追記

プログラミング言語の選定は、作りたいものに応じて選ぶのが基本。学習目的なら、とりあえず最初の1歩には以下の言語お勧めします。

  1. 手続言語Python
  2. 問合型言語SQL
  3. 関数型言語OCaml
  4. 論理言語Prolog

 

参考書

 

anond:20181013190413 プログラミングってやっぱり数学知識いるかな?

anond:20181014003945 プログラムを学びたい

anond:20181015215004 未経験からプログラマーなんだが全然からない

2017-10-26

プログラマーのススメ

日本人は全員プログラミング勉強した方が良い。

プログラミング簡単だし、IT企業なら開業資金も少額で済む。(最初パソコン回線プリンターがあれば十分)

 

自己資金で数カ月で軌道に載せれるようなネタしかできない。

 

IT起業の道のりを教えてあげるよ。

  1. 下請け他人が作って欲しいものを作って納品する=資金を増やす自転車操業の段階。
  2. 自社開発:自分で作りたいものを作って売る=自転車操業からストックビジネスに移行する。
  3. レベニューシェア下請けと自社開発の中間ビジネスモデル

 

増田投稿できるってことは、パソコンぐらい持ってるんだろ?

本屋図書館に行って、自分に合った分かりやすプログラミングの本を探してみよう。

 

仕事を取ってくる方法は、ソニックガーデンのやり方を参考にしたら良い。 https://www.sonicgarden.jp/

プログラミング入門

最初に1冊だけ推薦するなら「プログラミングの基礎」という本をお勧めする。 https://www.amazon.co.jp/dp/4781911609/

買う前に、著者のサポートページを見てみると良い。

 

プログラミングパラダイム(考え方)には4種類ある。(【】内は基礎となる計算モデル

計算可能理論で見ると、どれもノイマン型のCPU上で動作する点で同じと言えば同じと言える。(優劣はない)

ただ、筋の良いプログラミング作法を身に付けたいなら、最初関数型を理解しておくことをお勧めする。

関数型の中で一番簡潔かつ強力なのはOCaml」というプログラミング言語だ。(HaskellをやりたければOCamlの次に学ぶスムーズ理解できる。)

関数型言語を学んだ後なら、手続言語はすぐに習得できるだろう。

WEB開発

WebサービスWebアプリを作るのは簡単

  1. HTML
  2. CSS
  3. JavaScript
  4. PHP
  5. MySQL
  6. Linuxサーバー構築)
  7. TCP/IPネットワークセキュリティーの基礎知識

を学べば作れるようになる。3か月勉強すればものになるよ?

 

Webアプリの特徴は、システム構造ネットワークを介して「サーバー側とクライアント側」に分割されていること。(REST - Wikipedia

Webアプリを作るってことは、一言で言えば、データベースラッパーCRUD)を作るだけの話。

アプリ開発

スマホアプリは、GUIの仕組みが分かれば簡単に作れる。

iPhoneアプリ

iPhoneの仕組みは糞だから後回しにしてもOK

XcodeじゃなくてAppCodeで作れるような段階に成熟したら手を出しても良い。

まあ、iPhoneアプリは金のためなら避けられない道だと思うので、苦労覚悟で取り組んでほしいw

Androidアプリ

Androidの中身はLinuxJavaアプリを開発できる。今ならJetBrainsIDEKotlinで楽々開発できる。

日本じゃAndroid貧乏しか使ってないので、あまり金にならないかも。

資金集め

お前偉そうなこと言うのなら、誰か起業してやろうというやつにガッツリ寄り添って手伝ってやりな。

俺はハゲタカじゃないから、無知な奴から搾取することはしない。

というか、自分のことで精一杯だから他人のケツ拭いまでやる体力・気力・理由がないw

 

他人から金をもらうと相手支配下に置かれる。だから資金調達お勧めしない。

自己資金で行けるところまで行って、ダメならまた社畜生活に戻ればいいだけの話。(パソコンインターネットがなくならない限り、プログラマーならIT業界で食っていける)

 

俺は、NPO法人とか社会起業しようとしてる奴だけ無償で手助けすることにしている。(プロボノ

社会起業家は、社会変革の担い手として、社会課題を、事業により解決する人のことを言う。

社会問題認識し、社会変革を起こすために、ベンチャー企業創造組織化経営するために、起業という手法を採るものを指す。

プロボノ(Pro bono)は、各分野の専門家が、職業上持っている知識スキル経験を活かして社会貢献するボランティア活動全般。また、それに参加する専門家自身

 

おまえが将来、社会起業することがあったら増田で呼びかけてくれ。

増田で返答できる範囲アドバイスするよ。頑張れ!

 

(追記)プログラミングパラダイムの4分類は「日経ソフトウェア」という雑誌説明表記しました。

ちなみにSQLチューリング完全なので、問合型言語でもプログラミング可能です。 https://qiita.com/utgwkk/items/20e887645da18e460fee

かに俺は理系だが情報学出身じゃない。独学でプログラミングを学びました。技術的な誤りがあったらブコメで教えてw(夜露死苦

 

(追記2)マイクロソフト関数型言語F#」は、OCamlベースにして開発されました。

現在マイクロソフトで開発中の量子コンピューターではF#が動く予定だそうです。(将来OCaml知識が役に立つでしょう) http://ascii.jp/elem/000/001/569/1569477/

 

(追記3 10/28ブコメレス全部拝見しました。様々なご意見・ご指摘をいただきありがとうございます。大変参考になりました。

「何か既視感があるな」と思ったら、最近ホリエモンが「保育士は誰でも出来る仕事」と言って炎上してたのと似てますね?→「プログラミング簡単」(プログラマーは誰でも出来る仕事

プログラミング学習や実務で苦戦されている方が多いようですね? だとすれば、それを改善支援するサービスニーズがありそう。

具体的にはディアゴスティーニ雑誌みたいに「週刊 プログラミングゲームを作る」みたいな教材があればいい。

https://deagostini.jp/

拝承いたしました。(微力ながら、皆様のお役に立てるよう作ってみたいと思います。)

 

(追記4 10/28OCaml関数型言語メリットについて

ちょっと前に岡部健氏(通称:毛の壁、kenokabe)が、関数型言語を巡りQiita等で論争を巻き起こしていましたが、俺は是々非々岡部氏の意見に一部賛同していました。(全部じゃない)

関数型言語を難しいものとして敬遠するのではなく、まずは使ってみて便利だったら嫌う必要はないと考えています

構造プログラミング命令型、手続型)との対応で言えば、関数型プログラミングは再代入なしでも、

で同じことができます。(優劣はない)

最初関数型プログラミング習得しておけば、参照透過性に注意を払う癖が身につき、テストときに「組合せ爆発」を少なくできます

関数型言語はたくさんありますが、OCamlが良いと思ったのは(自分にとって)分かりやすい教材が揃っており、学習コストが低いと思ったからです。

プログラミングを学ぶとき、独学ではなく、周りに聞ける人がいるなら他の言語でもOKです。

 

(追記5 10/28)「iPhoneの仕組みは糞」=storyboardが使いづらいと思いました。あくま個人の感想なので、Apple関係者信者の方はスルーしていただければ幸甚です。(Swift開発者クリスラットナー氏は、Appleからテスラ転職してしまいましたが、今後もAppleObjective-CからSwiftへの移行を押すのでしょうか?)

幸いiOSアプリ開発は分かりやす教科書がたくさんあるので、初心者でも心配無用です。iOSアプリ開発は(最初簡単なので)気軽に始めてみてくださいw

2017-09-11

まずは自分がプログラマーになってみよう!

山本五十六名言「やってみせ」

やってみせ、言って聞かせて、させてみせ、ほめてやらねば、人は動かじ。

話し合い、耳を傾け、承認し、任せてやらねば、人は育たず。

やっている、姿を感謝で見守って、信頼せねば、人は実らず。

まずは、あなた自身プログラマーになって、見本を見せることが第1歩です。

プログラマーに向いている性格

その後受託系の会社就職できたのだけど、人間関係がうまくいかなかったようで数ヶ月で辞めた。

鬱病気味になったみたい...。

どうやら、プログラミングという仕事の特徴について、あなた理解していないようですね?

 

プログラミングの特徴は、「コンピューター相手なので、嘘やハッタリが一切通用しない」ということです。

人間相手なら、適当に指示を出したり、いい加減な対応でも何とかなるけど、コンピューター相手だと1mmも融通が利きません。

 

従って、プログラマーに向いている性格は、

  1. 嘘をつかない
  2. 几帳面
  3. パズルを解くのが好き

という3点が必要です。

 

警察職務質問されて有名になった江添亮さんのブログ等を読んで、この方のようにネチネチと論理をこねくり回すのが好きなら、プログラマーに向いています

(例)本の虫: 麻布十番職務質問を受けた話 https://cpplover.blogspot.jp/2017/08/blog-post.html

関数型プログラミング

プログラムというのは、小さな部品を組み合わせて、大きなシステムが作られています

さな部品パズルピースに相当して、大きなシステムパズルの完成品です。

まり、大きな問題を小さな問題に分解して、1つずつ順番に問題をつぶして行く姿勢必要です。

 

プログラミングパラダイム(考え方)には、

  1. 命令
    1. 手続き型(Java等)
  2. 宣言
    1. 問合せ型(SQL等)
    2. 関数型(Haskell等)
    3. 論理型(Prolog等)

があります

 

命令型のプログラミング言語しか使えない人がプログラマーになると、テスト地獄に陥って、結果的鬱病発症やすくなるだろうと危惧しています

上述のように、パズルピースを組み合わせてプログラムを作るには、「関数型」の作法を身に付けておくと良いでしょう。

Haskell

関数型プログラミング習得するために、今なら「Haskell」または「OCaml」というプログラミング言語お勧めします。

HaskellOCamlは、良い参考書がたくさんあるので、本屋に行って実物を確かめてください。

 

Haskellを学んでみて、パズルピースを組み合わせる感覚理解できたら、あなたテスト地獄に苦しめられないプログラマーになれるでしょう。

もしも、Haskell理解できないようだったら、残念ですがプログラマーには向いていないかもしれません。

例外的に、あなたマゾで、テスト地獄残業徹夜楽しいと思える性格なら、Haskell理解できなくても大丈夫かもしれません。)

 

Haskellの教材(英語)を紹介するので、参考までに読んでみてください。

http://learnyouahaskell.com/chapters

(このサイトの内容は、日本語書籍「すごいHaskellのしく学ぼう!」として出版されています。)

 

Haskellは、順番に学べば必ず理解できるようになっています

もしも、Haskell習得できなければ、大きな問題を小さな問題に分解して解決していく作業には不向きな性格かもしれないので、他の仕事検討してはいかがでしょうか?

人生は一度きり。時間無駄にならないようにお気を付けください。)

 

あなたと友人が、無事Haskell習得して、テスト地獄を乗り超えるスーパーハッカーになり、日本IT産業を牽引されることに期待いたします。

 

(追記)

まずは、自分が作りたいアプリサービスを作ってみよう。

自分が作りたいプログラムすら作れない人が、他人希望するプログラムを作るなんてできっこいからねw

プログラマーが楽で簡単仕事だと思ったら大間違いですよ?)

 

(追記 その2)

関数型プログラミングマスターしておけば、OOPでも役に立つよ。(現実には、関数型もOOP必要に応じて投入するし)

iOS→「プロトコル指向プログラミング」「RxSwift」、Android→「RxJava」辺りのキーワードでググってみて。

別に皮肉とか宗教戦争で煽ってるわけじゃなくて、自分も苦労して辿りついた口だから、今から始める人には遠回りして、余計な苦労を味わって欲しくない。

 

(追記 その3)

他の人が書いてたけど、1人でプログラミングするんじゃなくて、2人(ペアプログラミング)や3人以上(モブプログラミングから始めたら良いかも。

Googleの「プロジェクトアリストテレス」で、仕事生産性改善するには「心理的安全性」が重要と分かり、プログラミング仕事もやり方が変わって来ています

ソニックガーデン倉貫さんの働き方が参考になると思います

https://kuranuki.sonicgarden.jp/2017/01/psychological-safety.html

 

(追記 その4)

記事が消えていたのでバックアップしておきます。(この投稿だけ読むと意味が分からなくなるため)

https://anond.hatelabo.jp/20170910205249

2017-09-10

■知り合いをプログラマにさせたいんだけど知恵を貸してくれ

プログラマって育休からの復帰しやすいだろうし、アルバイトよりは待遇いいし、勤怠ゆるいし、労力の割に楽ちんだと思うんだよね。

接客バイトで消耗するくらいなら、プログラマになればいいと思っているのだが、その知り合いは自身のことをプログラミングを不向きと評価しているらしい。私は、プログラミングに限らず物事時間をかければ習熟していくものだと思っているので、不向きではないと思うんだ。不向きというのは物理的に制限のある時だと思う。

その知り合いについて。

Vimはぎこちないけど使える。日常的にmacOSを使っていてターミナル操作はできている。cd, ls あたりは理解している。

趣味を含めてアプリケーションを完成させた経験はないが、ifやfor文などの基本構文は理解している。数年前にプログラミングスクールのようなところに半年間通っていた。その後受託系の会社就職できたのだけど、人間関係がうまくいかなかったようで数ヶ月で辞めた。鬱病気味になったみたい...。

何か成功体験があれば自然とのめり込んでと思うんだけどなかなかスイッチが入っていないみたい。

こちら側からは、プログラマーになれば?と直接は伝えてはなくて、素人でもプログラミングできましたみたいなネット記事シェアーしているくらい。(心理的リアクタンス避け)

知恵を貸して欲しい。

2017-07-03

なんだかんだAIを名乗るならPrologチックな論理AIも知るべきなんだろうけど

でぃーーーぷらーーーにんぐーーーとかで画像認識位なら無思考でできるようになってしまった今、

述語論理型の言語との組み合わせとか狙わないと新規性ないんじゃないかって思う。

とか、わかった風なこと言ってみる。

2013-04-19

http://anond.hatelabo.jp/20130419102934

ちょっとよくわからないんだが、LispしろPrologしろ199X年代には少なくとも大学で授業として教えるような”古典”だったわけだが

2005年だったか2006年だったか出版の話があったようでその後2007年に発売されたわけだが、当時Lisp情報ってあんまりなくて、翻訳苦労してるみたいなことをはてダに書いていた(ような気がする)。

すくなくともLISP情報が少ないということはなかったと思うぞ。

書籍無料化されたもの古典からだろ。

Perlが198X年代だがLISPは195X年代で、超がつくほどの古典言語で、日本語でも山ほど文献があるはずなんだが、最近進化していないので、ネット上に文献があるか?という話では難しいが、古い図書館に行けば古い本がいっぱいあるだろ。

2011-12-12

コンピュータプログラミング概念技法モデル」の目次

第1章 プログラミング概念入門
	1.1 計算器
	1.2 変数
	1.3 関数
	1.4 リスト
	1.5 リストについての関数
	1.6 プログラムの正しさ
	1.7 計算量
	1.8 遅延計算
	1.9 高階プログラミング
	1.10 並列性
	1.11 データフロー
	1.12 明示的状態
	1.13 オブジェクト
	1.14 クラス
	1.15 非決定性と時間
	1.16 原子性
	1.17 ここからどこへ行くのか?
	1.18 練習問題

第1部 一般的計算モデル

第2章 宣言的計算モデル
	2.1 実用プログラミング言語定義
		2.1.1 言語の構文
		2.1.2 言語意味
	2.2 単一代入格納域
		2.2.1 宣言的変数
		2.2.2 値格納域
		2.2.3 値生成
		2.2.4 変数識別子
		2.2.5 識別子を使う値生成
		2.2.6 部分値
		2.2.7 変数の,変数への束縛
		2.2.8 データフロー変数
	2.3 核言語
		2.3.1 構文
		2.3.2 値と型
		2.3.3 基本型
		2.3.4 レコード手続き
		2.3.5 基本操作
	2.4 核言語意味
		2.4.1 基本概念
		2.4.2 抽象マシン
		2.4.3 待機不能な文
		2.4.4 待機可能な文
		2.4.5 基本概念再訪
	2.5 メモリ管理
		2.5.1 末尾呼び出し最適化
		2.5.2 メモリライフサイクル
		2.5.3 ガーベッジコレクション
		2.5.4 ガーベッジコレクションは魔術ではない
		2.5.5 Mozartのガーベッジコレクタ
	2.6 核言語から実用言語へ
		2.6.1 構文上の便宜
		2.6.2 関数(fun文)
		2.6.3 対話的インターフェース(declare文)
	2.7 例外
		2.7.1 動機と基本概念
		2.7.2 例外を持つ宣言的モデル
		2.7.3 親言語の構文
		2.7.4 システム例外
	2.8 進んだ話題
		2.8.1 関数型プログラミング言語
		2.8.2 単一化と内含(entailment)
		2.8.3 動的型付けと静的型付け
	2.9 練習問題

第3章 宣言的プログラミング技法
	3.1 宣言的とはどういうことか?
		3.1.1 宣言的プログラムの分類
		3.1.2 仕様記述言語
		3.1.3 宣言的モデルにおいてコンポーネントを実装すること
	3.2 反復計算
		3.2.1 一般的図式
		3.2.2 数についての反復
		3.2.3 局所的手続きを使うこと
		3.2.4 一般的図式から制御抽象へ
	3.3 再帰計算
		3.3.1 スタックの大きさの増加
		3.3.2 代入ベース抽象マシン
		3.3.3 再帰計算を反復計算に変換すること
	3.4 再帰を用いるプログラミング
		3.4.1 型の記法
		3.4.2 リストについてのプログラミング
		3.4.3 アキュムレータ
		3.4.4 差分リスト
		3.4.5 キュー
		3.4.6 木
		3.4.7 木を描画すること
		3.4.8 構文解析
	3.5 時間効率空間効率
		3.5.1 実行時間
		3.5.2 メモリ使用量
		3.5.3 償却的計算量
		3.5.4 性能についての考察
	3.6 高階プログラミング
		3.6.1 基本操作
		3.6.2 ループ抽象
		3.6.3 ループ言語的支援
		3.6.4 データ駆動技法
		3.6.5 明示的遅延計算
		3.6.6 カリー化
	3.7 抽象データ型
		3.7.1 宣言的スタック
		3.7.2 宣言的辞書
		3.7.3 単語出現頻度アプリケーション
		3.7.4 安全抽象データ型
		3.7.5 安全な型を備えた宣言的モデル
		3.7.6 安全な宣言的辞書
		3.7.7 資格セキュリティ
	3.8 宣言的でない必要物
		3.8.1 ファイルを伴うテキスト入出力
		3.8.2 グラフィカルユーザインタフェースを伴うテキスト入出力
		3.8.3 ファイルとの状態なしデータI/O
	3.9 小規模プログラム設計
		3.9.1 設計方法
		3.9.2 プログラム設計の例
		3.9.3 ソフトウェアコンポーネント
		3.9.4 スタンドアロンプログラムの例
	3.10 練習問題

第4章 宣言的並列性
	4.1 データ駆動並列モデル
		4.1.1 基本概念
		4.1.2 スレッド意味
		4.1.3 実行列
		4.1.4 宣言的並列性とは何か?
	4.2 スレッドプログラミングの基本的技法
		4.2.1 スレッドを生成すること
		4.2.2 スレッドブラウザ
		4.2.3 スレッドを使うデータフロー計算
		4.2.4 スレッドスケジューリング
		4.2.5 協調的並列性と競合的並列性
		4.2.6 スレッド操作
	4.3 ストリーム
		4.3.1 基本的生産者消費者
		4.3.2 変換器とパイプライン
		4.3.3 資源管理し,処理能力改善すること
		4.3.4 ストリームオブジェクト
		4.3.5 ディジタル論理シミュレーション
	4.4 宣言的並列モデルを直接使うこと
		4.4.1 順序決定並列性
		4.4.2 コルーチン
		4.4.3 並列的合成
	4.5 遅延実行
		4.5.1 要求駆動並列モデル
		4.5.2 宣言的計算モデル
		4.5.3 遅延ストリーム
		4.5.4 有界バッファ
		4.5.5 ファイルを遅延的に読み込むこと
		4.5.6 ハミング問題
		4.5.7 遅延リスト操作
		4.5.8 永続的キューアルゴリズム設計
		4.5.9 リスト内包表記
	4.6 甘いリアルタイムプログラミング
		4.6.1 基本操作
		4.6.2 ティッキング(ticking)
	4.7 Haskell言語
		4.7.1 計算モデル
		4.7.2 遅延計算
		4.7.3 カリー化
		4.7.4 多態型
		4.7.5 型クラス
	4.8 宣言的プログラム限界拡張
		4.8.1 効率性
		4.8.2 モジュラ性
		4.8.3 非決定性
		4.8.4 現実世界
		4.8.5 正しいモデルを選ぶこと
		4.8.6 拡張されたモデル
		4.8.7 異なるモデルを一緒に使うこと
	4.9 進んだ話題
		4.9.1 例外を持つ宣言的並列モデル
		4.9.2 さらに遅延実行について
		4.9.3 通信チャンネルとしてのデータフロー変数
		4.9.4 さらに同期について
		4.9.5 データフロー変数有用性
	4.10 歴史に関する注記
	4.11 練習問題

第5章 メッセージ伝達並列性
	5.1 メッセージ伝達並列モデル
		5.1.1 ポート
		5.1.2 ポート意味
	5.2 ポートオブジェクト
		5.2.1 NewPortObject抽象
		5.2.2 例
		5.2.3 ポートオブジェクトに関する議論
	5.3 簡単なメッセージプロトコル
		5.3.1 RMI(遠隔メソッド起動)
		5.3.2 非同期RMI
		5.3.3 コールバックのあるRMI(スレッド使用)
		5.3.4 コールバックのあるRMI(継続のためのレコード使用)
		5.3.5 コールバックのあるRMI(継続のための手続き使用)
		5.3.6 エラー報告
		5.3.7 コールバックのある非同期RMI
		5.3.8 二重コールバック
	5.4 並列性のためのプログラム設計
		5.4.1 並列コンポーネントを使うプログラミング
		5.4.2 設計方法
		5.4.3 並列性パターンとしての機能的構成要素
	5.5 リフト制御システム
		5.5.1 状態遷移図
		5.5.2 実装
		5.5.3 リフト制御システムの改良
	5.6 メソッド伝達モデルを直接使用すること
		5.6.1 1つのスレッドを共有する複数のポートオブジェクト
		5.6.2 ポートを使う並列キュー
		5.6.3 終点検出を行うスレッド抽象
		5.6.4 直列依存関係の除去
	5.7 Erlang言語
		5.7.1 計算モデル
		5.7.2 Erlangプログラミング入門
		5.7.3 receive操作
	5.8 進んだ話題
		5.8.1 非決定性並列モデル
	5.9 練習問題

第6章 明示的状態
	6.1 状態とは何か?
		6.1.1 暗黙的(宣言的)状態
		6.1.2 明示的状態
	6.2 状態とシステム構築
		6.2.1 システムの性質
		6.2.2 コンポーネントベースプログラミング
		6.2.3 オブジェクト指向プログラミング
	6.3 明示的状態を持つ宣言的モデル
		6.3.1 セル
		6.3.2 セル意味
		6.3.3 宣言的プログラミングとの関係
		6.3.4 共有と同等
	6.4 データ抽象
		6.4.1 データ抽象組織する8つの方法
		6.4.2 スタックの変種
		6.4.3 多態性
		6.4.4 引数受け渡し
		6.4.5 取り消し可能資格
	6.5 状態ありコレクション
		6.5.1 インデックス付きコレクション
		6.5.2 インデックス付きコレクションを選ぶこと
		6.5.3 その他のコレクション
	6.6 状態に関する推論
		6.6.1 不変表明
		6.6.2 例
		6.6.3 表明
		6.6.4 証明規則
		6.6.5 正常終了
	6.7 大規模プログラム設計
		6.7.1 設計方法
		6.7.2 階層システム構造
		6.7.3 保守性
		6.7.4 将来の発展
		6.7.5 さらに深く知るために
	6.8 ケーススタディ
		6.8.1 遷移的閉包
		6.8.2 単語出現頻度(状態あり辞書を使用する)
		6.8.3 乱数を生成すること
		6.8.4 口コミシミュレーション
	6.9 進んだ話題
		6.9.1 状態ありプログラミング限界
		6.9.2 メモリ管理と外部参照
	6.10 練習問題

第7章 オブジェクト指向プログラミング
	7.1 継承
	7.2 完全なデータ抽象としてのクラス
		7.2.1 例
		7.2.2 この例の意味
		7.2.3 クラスオブジェクト定義すること
		7.2.4 クラスメンバ
		7.2.5 属性初期化すること
		7.2.6 第1級メッセージ
		7.2.7 第1級の属性
		7.2.8 プログラミング技法
	7.3 漸増的データ抽象としてのクラス
		7.3.1 継承グラフ
		7.3.2 メソッドアクセス制御(静的束縛と動的束縛)
		7.3.3 カプセル化制御
		7.3.4 転嫁委任
		7.3.5 内省
	7.4 継承を使うプログラミング
		7.4.1 継承の正しい使い方
		7.4.2 型に従って階層を構成すること
		7.4.3 汎用クラス
		7.4.4 多重継承
		7.4.5 多重継承に関するおおざっぱな指針
		7.4.6 クラス図の目的
		7.4.7 デザインパターン
	7.5 他の計算モデルとの関係
		7.5.1 オブジェクトベースプログラミングコンポーネントベースプログラミング
		7.5.2 高階プログラミング
		7.5.3 関数分解と型分解
		7.5.4 すべてをオブジェクトにすべきか?
	7.6 オブジェクトシステムを実装すること
		7.6.1 抽象図
		7.6.2 クラスを実装すること
		7.6.3 オブジェクトの実装
		7.6.4 継承の実装
	7.7 Java言語(直列部分)
		7.7.1 計算モデル
		7.7.2 Javaプログラミング入門
	7.8 能動オブジェクト
		7.8.1 例
		7.8.2 NewActive抽象
		7.8.3 フラウィウス・ヨセフスの問題
		7.8.4 その他の能動オブジェクト抽象
		7.8.5 能動オブジェクトを使うイベントマネージャ
	7.9 練習問題

第8章 状態共有並列性
	8.1 状態共有並列モデル
	8.2 並列性を持つプログラミング
		8.2.1 さまざまな手法概観
		8.2.2 状態共有並列モデルを直接使うこと
		8.2.3 原子アクションを使うプログラミング
		8.2.4 さらに読むべき本
	8.3 ロック
		8.3.1 状態あり並列データ抽象を構築すること
		8.3.2 タプル空間(Linda)
		8.3.3 ロックを実装すること
	8.4 モニタ
		8.4.1 定義
		8.4.2 有界バッファ
		8.4.3 モニタを使うプログラミング
		8.4.4 モニタを実装すること
		8.4.5 モニタの別の意味
	8.5 トランザクション
		8.5.1 並列性制御
		8.5.2 簡易トランザクションマネージャ
		8.5.3 セルについてのトランザクション
		8.5.4 セルについてのトランザクションを実装すること
		8.5.5 トランザクションについてさらに
	8.6 Java言語(並列部分)
		8.6.1 ロック
		8.6.2 モニタ
	8.7 練習問題

第9章 関係プログラミング
	9.1 関係計算モデル
		9.1.1 choice文とfail文
		9.1.2 探索木
		9.1.3 カプセル化された
		9.1.4 Solve関数
	9.2 別の例
		9.2.1 数値例
		9.2.2 パズルとnクイーン問題
	9.3 論理プログラミングとの関係
		9.3.1 論理論理プログラミング
		9.3.2 操作意味論理意味
		9.3.3 非決定性論理プログラミング
		9.3.4 純粋Prologとの関係
		9.3.5 他のモデルにおける論理プログラミング
	9.4 自然言語構文解析
		9.4.1 簡単な文法
		9.4.2 この文法に従う構文解析
		9.4.3 構文木を生成すること
		9.4.4 限定記号を生成すること
		9.4.5 パーサを走らせること
		9.4.6 パーサを「逆向きに(backward)」走らせること
		9.4.7 単一化文法
	9.5 文法インタプリタ
		9.5.1 簡単な文法
		9.5.2 文法のコード化
		9.5.3 文法インタプリタを走らせること
		9.5.4 文法インタプリタを実装すること
	9.6 データベース
		9.6.1 関係を定義すること
		9.6.2 関係を使って計算すること
		9.6.3 関係を実装すること
	9.7 Prolog言語
		9.7.1 計算モデル
		9.7.2 Prologプログラミング入門
		9.7.3 Prologプログラムを関係プログラム翻訳すること
	9.8 練習問題

第2部 特殊化された計算モデル10グラフィカルユーザインタフェースプログラミング
	10.1 宣言的/手続き的方法
	10.2 宣言的/手続き的方法を使うこと
		10.2.1 基本的ユーザインタフェースの要素
		10.2.2 GUIを構築すること
		10.2.3 宣言的座標
		10.2.4 リサイズ時の宣言的振る舞い
		10.2.5 ウィジェットの動的振る舞い
	10.3 対話的学習ツールPrototyper
	10.4 ケーススタディ
		10.4.1 簡単なプログレモニタ
		10.4.2 簡単なカレンダウィジェット
		10.4.3 ユーザインタフェースの動的生成
		10.4.4 状況順応時計
	10.5 GUIツールを実装すること
	10.6 練習問題

第11章 分散プログラミング
	11.1 分散システムの分類
	11.2 分散モデル
	11.3 宣言的データの分散
		11.3.1 オープン分散と大域的ネーミング
		11.3.2 宣言的データを共有すること
		11.3.3 チケット配布
		11.3.4 ストリーム通信
	11.4 状態の分散
		11.4.1 単純状態共有
		11.4.2 分散字句的スコープ
	11.5 ネットワークアウェアネス
	11.6 共通分散プログラミングパターン
		11.6.1 静的オブジェクトモバイルオブジェクト
		11.6.2 非同期的オブジェクトデータフロー
		11.6.3 サーバ
		11.6.4 クローズド分散
	11.7 分散プロトコル
		11.7.1 言語実体
		11.7.2 モバイル状態プロトコル
		11.7.3 分散束縛プロトコル
		11.7.4 メモリ管理
	11.8 部分的失敗
		11.8.1 失敗モデル
		11.8.2 失敗処理の簡単な場合
		11.8.3 回復可能サーバ
		11.8.4 アクティブフォールトトレランス
	11.9 セキュリティ
	11.10 アプリケーションを構築すること
		11.10.1 まずは集中,後に分散
		11.10.2 部分的失敗に対処すること
		11.10.3 分散コンポーネント
	11.11 練習問題

第12章 制約プログラミング
	12.1 伝播・探索法
		12.1.1 基本的考え方
		12.1.2 部分情報を使って計算すること
		12.1.3 例
		12.1.4 この例を実行すること
		12.1.5 まとめ
	12.2 プログラミング技法
		12.2.1 覆面算
		12.2.2 回文積再訪
	12.3 制約ベース計算モデル
		12.3.1 基本的制約と伝播子
		12.3.2 計算空間の探索をプログラムすること
	12.4 計算空間定義し,使うこと
		12.4.1 深さ優先探索エンジン
		12.4.2 検索エンジンの実行例
		12.4.3 計算空間の生成
		12.4.4 空間の実行
		12.4.5 制約の登録
		12.4.6 並列的伝播
		12.4.7 分配(探索準備)
		12.4.8 空間の状態
		12.4.9 空間クローン
		12.4.10 選択肢を先に任せること
		12.4.11 空間マージすること
		12.4.12 空間失敗
		12.4.13 空間計算を注入すること
	12.5 関係計算モデルを実装すること
		12.5.1 choice文
		12.5.2 Solve関数
	12.6 練習問題

第3部 意味

第13章 言語意味
	13.1 一般的計算モデル
		13.1.1 格納域
		13.1.2 単一代入(制約)格納域
		13.1.3 抽象構文
		13.1.4 構造的規則
		13.1.5 直列実行と並列実行
		13.1.6 抽象マシン意味との比較
		13.1.7 変数導入
		13.1.8 同等性の強制(tell)
		13.1.9 条件文(ask)
		13.1.10 名前
		13.1.11 手続抽象
		13.1.12 明示的状態
		13.1.13 by-need同期
		13.1.14 読み出し専用変数
		13.1.15 例外処理
		13.1.16 失敗値
		13.1.17 変数置き換え
	13.2 宣言的並列性
		13.2.1 部分停止と全体停止
		13.2.2 論理同値
		13.2.3 宣言的並列性の形式的定義
		13.2.4 合流性
	13.3 8つの計算モデル
	13.4 よくある抽象意味
	13.5 歴史に関する注記
	13.6 練習問題

2011-10-01

プログラム変換」の目次

第1章 プログラム変換入門 佐藤泰介
	1.1 今なぜプログラム変換か?
	1.2 変換あれこれ
	1.3 システム化について

第2章 等式プログラム等価変換 二木厚吉
	2.1 等価変換例
	2.2 等価性
	2.3 等価変換法
	2.4 おわりに

第3章 論理言語におけるプログラム変換 玉木久夫
	3.1 はじめに
	3.2 論理プログラムとその意味論
	3.3 展開/たたみ込み変換:例題
	3.4 展開/たたみ込み変換の正当性
	3.5 他の変換との両立性
	3.6 おわりに

第4章 部分計算 二村良彦
	4.1 はじめに
	4.2 部分計算概要
	4.3 部分計算の応用例
	4.4 部分計算理論
	4.5 実用化のための課題

第5章 メタプログラミングと部分計算 竹内彰一
	5.1 はじめに
	5.2 Prologプログラムの部分計算
	5.3 メタプログラミングへの応用
	5.4 メタインタプリタの段階的特殊化
	5.5 おわりに

第6章 合成問題への新しいアプローチ 佐藤泰介
	6.1 否定技法
	6.2 二重否定技法
	6.3 論理プログラムの合成

第7章 ベクトル化とプログラム変換 安村通晃
	7.1 はじめに
	7.2 プログラム変換
	7.3 ベクトル化
	7.4 主要変換
	7.5 基軸変換
	7.6 その他の変換
	7.7 ベクトル化におけるプログラム変換の特徴
	7.8 おわりに

第8章 GHCでのプログラム変換 吉川康一
	8.1 はじめに
	8.2 簡単な問題
	8.3 フィルタプロセスの融合
	8.4 プログラム変換の手順
	8.5 電子回路シミュレータへの応用
	8.6 おわりに

第9章 実用規模プログラムの変換試行事例 吉田紀彦
	9.1 はじめに
	9.2 コンパイラの変換
	9.3 プログラム変換の実用可能性
	9.4 おわりに

2011-09-23

「続 新しいプログラミングパラダイム」の目次


第1章 並行プログラミングGHC (上田和紀)
	1.1 はじめに
	1.2 ターゲットを明確にしよう
	1.3 はじめが大切
	1.4 GHCが与える並行計算の枠組み
		1.4.1 GHCにおける計算とは,外界との情報のやりとり(通信)である
		1.4.2 計算を行う主体は,互いに,および外界と通信し合うプロセスの集まりである
		1.4.3 プロセスは,停止するとは限らない
		1.4.4 プロセスは,開いた系(open system)をモデル化する
		1.4.5 情報とは変数と値との結付き(結合)のことである
		1.4.6 プロセスは,結合の観測と生成を行う
		1.4.7 プロセスは,書換え規則を用いて定義する
		1.4.8 通信は,プロセス間の共有変数を用いて行う
		1.4.9 外貨も,プロセスとしてモデル化される
		1.4.10 通信は,非同期的である
		1.4.11 プロセスのふるまいは,非決定的でありうる
	1.5 もう少し具体的なパラダイム
		1.5.1 ストリームと双方向通信
		1.5.2 履歴のあるオブジェクト表現
		1.5.3 データ駆動計算と要求駆動計算
		1.5.4 モジュラリティと差分プログラミング
		1.5.5 プロセスによるデータ表現
	1.6 歴史的背景と文献案内
	1.7 並行プログラミング効率
	1.8 まとめ


第2章 様相論理テンポラル・プログラミング (桜川貴司)
	2.1 はじめに
	2.2 様相論理
	2.3 時制論理
	2.4 多世界モデル
	2.5 到達可能性と局所性
	2.6 純論理プログラミングへ向けて
	2.7 Temporal Prolog
	2.8 RACCO
	2.9 実現
	2.10 まとめと参考文献案内


第3章 レコードプログラミング (横田一正)
	3.1 はじめに
	3.2 レコードと述語の表現
	3.3 レコード構造とφ-項
		3.3.1 φ-項の定義
		3.3.2 型の半順序と束
		3.3.3 KBLLOGIN
	3.4 応用――データベース視点から
		3.4.1 演繹データベース
		3.4.2 レコードプログラミングデータベース
		3.4.3 いくつかの例
	3.5 まとめ
	3.6 文献案内


第4章 抽象データ型とOBJ2 (二木厚吉・中川 中)
	4.1 はじめに
	4.2 抽象データ型と代数言語
		4.2.1 抽象データ型
		4.2.2 代数言語
		4.2.3 始代数
		4.2.4 項代数
		4.2.5 項書換えシステム
	4.3 OBJ2
		4.3.1 OBJ2の基本構造
		4.3.2 モジュールの参照方法
		4.3.3 混置関数記号
		4.3.4 モジュールパラメータ化
		4.3.5 パラメータ機構による高階関数記述
		4.3.6 順序ソート
		4.3.7 属性つきパターンマッチング
		4.3.8 評価戦略の指定
		4.3.9 モジュール表現
	4.4 おわりに


第5章 プログラム代数FP (富樫 敦)
	5.1 はじめに
	5.2 プログラミングシステム FP
		5.2.1 オブジェクト
		5.2.2 基本関数
		5.2.3 プログラム構成子
		5.2.4 関数定義
		5.2.5 FPプログラミングスタイル
	5.3 プログラム代数
		5.3.1 プログラム代数則
		5.3.2 代数則の証明
		5.3.3 代数則とプログラム
	5.4 ラムダ計算拡張
		5.4.1 ラムダ式拡張
		5.4.2 拡張されたラムダ計算の簡約規則
		5.4.3 そのほかのリスト操作演算子
		5.4.4 相互再帰定義式
		5.4.5 ストリーム(無限リスト)処理
	5.5 FPプログラム翻訳
		5.5.1 オブジェクト翻訳
		5.5.2 基本関数翻訳
		5.5.3 プログラム構成子の翻訳
		5.5.4 簡約規則を用いた代数則の検証
	5.6 おわりに


第6章 カテゴリカル・プログラミング (横内寛文)
	6.1 はじめに
	6.2 値からルフィズムへ
	6.3 カテゴリカル・コンビネータ
		6.3.1 ラムダ計算意味論
		6.3.2 モルフィズムによる意味論
		6.3.3 カテゴリカル・コンビネータ理論CCL
	6.4 関数型プログラミングへの応用
		6.4.1 関数型プログラミング言語ML/O
		6.4.2 CCLの拡張
		6.4.3 CCLに基づいた処理系
		6.4.4 公理系に基づいた最適化
	6.5 まとめ


第7章 最大公約数――普遍代数多項式イデアル自動証明におけるユークリッドの互除法 (外山芳人)
	7.1 はじめに
	7.2 完備化アルゴリズム
		7.2.1 グラス置換えパズル
		7.2.2 リダクションシステム
		7.2.3 完備なシステム
		7.2.4 完備化
		7.2.5 パズルの答
	7.3 普遍代数における完備化アルゴリズム
		7.3.1 群論の語の問題
		7.3.2 群の公理の完備化
		7.3.3 Knuth-Bendix完備化アルゴリズム
	7.4 多項式イデアル理論における完備化アルゴリズム
		7.4.1 ユークリッドの互除法
		7.4.2 多項式イデアル
		7.4.3 Buchbergerアルゴリズム
	7.5 一階述語論理における完備化アルゴリズム
		7.5.1 レゾリューション法
		7.5.2 Hsiangのアイデア
	7.6 おわりに


第8章 構成的プログラミング (林 晋)
	8.1 構成的プログラミング?
	8.2 型付きラムダ計算
	8.3 論理としての型付きラムダ計算
	8.4 構成的プログラミングとは
	8.5 構成的プログラミングにおける再帰呼び出し
	8.6 おわりに:構成的プログラミング未来はあるか?


第9章 メタプログラミングリフレクション (田中二郎)
	9.1 はじめに
	9.2 計算システム
		9.2.1 因果結合システム
		9.2.2 メタシステム
		9.2.3 リフレクティブシステム
	9.3 3-Lisp
	9.4 リフレクティブタワー
	9.5 GHCにおけるリフレクション
		9.5.1 並列論理言語GHC
		9.5.2 GHC言語仕様
		9.5.3 GHCメタインタプリタ
		9.5.4 リフレクティブ述語のインプリメント
	9.6 まとめ

「新しいプログラミングパラダイム」の目次


第1章 新しいプログラミングパラダイムをめぐって (井田哲雄)
	1.1 はじめに
	1.2 プログラミングパラダイムの形成
	1.3 プログラミングパラダイムの展開
	1.4 パラダイム作法構造プログラミング
	1.5 構造プログラミングを超えて
	1.6 関数型プログラミング論理プログラミング,対象指向プログラミング
	1.7 新しいプログラミングパラダイム
	1.8 まとめ


第2章 ラムダ計算と高階プログラミング (横内寛文)
	2.1 はじめに
	2.2 ラムダ計算
	2.3 最左戦略
	2.4 コンビネータによる計算
	2.5 まとめ


第3章 マルセイユPrologProlog Ⅱ,Prolog Ⅲ
	3.1 はじめに
	3.2 準備
		3.2.1 述語
		3.2.2 項
		3.2.3 項の単一化
		3.2.4 節およびHorn節
		3.2.5 論理式の意味
		3.2.6 論理的帰結と導出
	3.3 マルセイユProlog
		3.3.1 Prolog記法
		3.3.2 Prolog計算規則
		3.3.3 Prologプログラムの例
		3.3.4 カットオペレータ
		3.3.5 DEC-10 Prologとの相違
	3.4 Prolog Ⅱ
		3.4.1 difオペレータ
		3.4.2 freeze
		3.4.3 ループ構造
		3.4.4 Prolog Ⅱのインプリメンテーション
	3.5 Prolog Ⅲ
		3.5.1 制約の枠組
		3.5.2 Prolog Ⅲのプログラム例
		3.5.3 束縛の領域と制約系
		3.5.4 Prolog Ⅲのインプリメンテーション
	3.6 まとめ


第4章 制約論理プログラム (相場 亮)
	4.1 はじめに
	4.2 制約プログラミング
	4.3 制約の分類
	4.4 プログラムの実行
	4.5 制約の評価
	4.6 まとめ


第5章 オブジェクト指向 (柴山悦哉)
	5.1 はじめに
	5.2 モジュラリティと抽象化
		5.2.1 抽象化
		5.2.2 手続抽象
		5.2.3 データ抽象
		5.2.4 オブジェクトによる抽象化
		5.2.5 並列オブジェクトによる抽象化
	5.3 共有
		5.3.1 多相型
		5.3.2 継承
		5.3.3 多重継承
		5.3.4 Self
		5.3.5 動的束縛の意義
	5.4 対話性
		5.4.1 クラスの再定義
		5.4.2 表示機能の一体化
	5.5 オブジェクト指向の弱点
	5.6 まとめ


第6章 型推論ML (横田一正)
	6.1 はじめに
	6.2 LCFの超言語からMLへ
	6.3 プログラミング言語と型
	6.4 ML表現と型宣言
	6.5 ML型推論
	6.6 LCFへの応用
	6.7 まとめ


第7章 Miranda (加藤和彦)
	7.1 はじめに
	7.2 Miranda概観
		7.2.1 等式による定義
		7.2.2 基本データ型と基本演算子
		7.2.3 ガード付き等式とスコープルール
		7.2.4 高階関数カリー化
		7.2.5 パターンマッチング
		7.2.6 ノンストリクト性と遅延評価
		7.2.7 ドット式とZF式
	7.3 型
		7.3.1 強い型付けと静的な型付け
		7.3.2 多相型
		7.3.3 型類義
		7.3.4 代数データ型
		7.3.5 抽象データ型
	7.4 処理系
	7.5 まとめ
	7.6 文献の紹介


第8章 項書換えシステムと完備化手続き (大須賀昭彦)
	8.1 はじめに
	8.2 項書換えシステム
	8.3 TRSの停止性
		8.3.1 意味順序
		8.3.2 構文順序
	8.4 TRSの合流性
		8.4.1 完備なTRS
		8.4.2 危険対
		8.4.3 危険対を用いたTRSの合流性判定
	8.5 Knuth-Bendixの完備化手続き
	8.6 KBの応用
		8.6.1 帰納的な定理証明への応用
		8.6.2 等号論理定理証明への応用
	8.7 まとめ


第9章 等式プログラミングから融合型プログラミングへ (富樫 敦)
	9.1 はじめに
	9.2 等式プログラミング
		9.2.1 等式プログラム
		9.2.2 代表的な等式プログラム
		9.2.3 プログラミング技法
		9.2.4 正則プログラム正規化戦略
	9.3 条件付き等式プログラム
		9.3.1 条件付き書換え規則
		9.3.2 条件の種類
		9.3.3 利点と問題点
	9.4 融合型プログラミング
		9.4.1 AMLOGシステム
		9.4.2 向付き等式
		9.4.3 実行戦略の変更
		9.4.4 代入操作
		9.4.5 合流するプログラムへの変換
	9.5 まとめ

2011-09-15

コンピュータ基礎理論ハンドブック2 形式的モデル意味論」の目次

第1章  有限オートマトン
	D.Perrin:橋口攻三郎
1. 序論
2. 有限オートマトン認識可能集合
3. 有理表現
4. Kleeneの定理
5. 星の高さ
6. 星自由集合
7. 特殊なオートマトン
8. 数の認識可能集合


第2章  文脈自由言語
	J.Berstel and L.Boasson:富田 悦次

1. 序論
2. 言語
	2.1 記法と例
	2.2 Hotz 群
	2.3 曖昧性と超越性
3. 反復
	3.1 反復補題
	3.2 交換補題
	3.3 退化
4. 非生成元の探求
	4.1 準備
	4.2 生成元
	4.3 非生成元と代入
	4.4 非生成元と決定性
	4.5 主錐の共通部分
5. 文脈自由群
	5.1 文脈自由群
	5.2 Cayleyグラフ
	5.3 終端


第3章  形式言語とべき級数
	A.Salomaa:河原 康雄

1. 序論
2. 準備
3. 書換え系と文法
4. Post正準系
5. Markov系
6. 並列書換え系
7. 射と言語
8. 有理べき級数
9. 代数的べき級数
10. べき級数の応用


第4章  無限の対象上のオートマトン
	W.Thomas:山崎 秀記

序論
Ⅰ部  無限語上のオートマトン
	記法
1. Buchiオートマトン
2. 合同関係と補集合演算
3. 列計算
4. 決定性とMcNaughtonの定理
5. 受理条件とBorelクラス
6. スター自由ω言語と時制論理
7. 文脈自由ω言語
Ⅱ部  無限木上のオートマトン
	記法
8. 木オートマトン
9. 空問題と正則木
10. 補集合演算ゲームの決定性
11. 木の単項理論と決定問題
12. Rabin認識可能な集合の分類
	12.1 制限された単項2階論理
	12.2 Rabin木オートマトンにおける制限
	12.3 不動点計算


第5章  グラフ書換え:代数的・論理アプローチ
	B.Courcelle:會澤 邦夫

1. 序論
2. 論理言語グラフの性質
	2.1 単純有向グラフの類S
	2.2 グラフの類D(A)
	2.3 グラフの性質
	2.4 1階のグラフの性質
	2.5 単項2階のグラフの性質
	2.6 2階のグラフの性質
	2.7 定理
3. グラフ演算グラフ表現
	3.1 源点付きグラフ
	3.2 源点付き超グラフ
	3.3 超グラフ上の演算
	3.4 超グラフの幅
	3.5 導来演算
	3.6 超辺置換
	3.7 圏における書換え規則
	3.8 超グラフ書換え規則
4. 超グラフの文脈自由集合
	4.1 超辺置換文法
	4.2 HR文法に伴う正規木文法
	4.3 超グラフの等式集合
	4.4 超グラフの文脈自由集合の性質
5. 超グラフの文脈自由集合の論理的性質
	5.1 述語の帰納的集合
	5.2 論理構造としての超グラフ
	5.3 有限超グラフの可認識集合
6. 禁止小グラフ定義される有限グラフの集合
	6.1 小グラフ包含
	6.2 木幅と木分解
	6.3 比較図
7. 計算量の問題
8. 無限グラフ
	8.1 無限グラフ表現
	8.2 無限グラフの単項性質
	8.3 超グラフにおける等式系
	8.4 関手の初期不動点
	8.5 超グラフにおける等式系の初期解
	8.6 等式的超グラフの単項性質


第6章  書換え系
	N.Dershowitz and J.-P.Jouannaud:稲垣 康善,直井 徹

1. 序論
2. 構文論
	2.1 項
	2.2 等式
	2.3 書換え規則
	2.4 決定手続き
	2.5 書換え系の拡張
3. 意味論
	3.1 代数
	3.2 始代数
	3.3 計算能代数
4. Church-Rosser性
	4.1 合流性
	4.2 調和性
5. 停止性
	5.1 簡約順序
	5.2 単純化順序
	5.3 経路順序
	5.4 書換え系の組合せ
6. 充足可能性
	6.1 構文論的単一化
	6.2 意味論的単一化
	6.3 ナローイング
7. 危険対
	7.1 項書換え
	7.2 直交書換え系
	7.3 類書換え
	7.4 順序付き書換え
	7.5 既約な書換え系
8. 完備化
	8.1 抽象完備化
	8.2 公平性
	8.3 完備化の拡張
	8.4 順序付き書換え
	8.5 機能定理証明
	8.6 1階述語論理定理証明
9. 書換え概念拡張
	9.1 順序ソート書換え
	9.2 条件付き書換え
	9.3 優先度付き書換え
	9.4 グラフ書換え


第7章  関数型プログラミングラムダ計算
	H.P.Barendregt:横内 寛文

1. 関数計算モデル
2. ラムダ計算
	2.1 変換
	2.2 計算可能関数表現
3. 意味論
	3.1 操作意味論:簡約と戦略
	3.2 表示的意味論ラムモデル
4. 言語拡張
	4.1 デルタ規則
	4.2 型
5. 組合せ子論理と実装手法
	5.1 組合せ子論理
	5.2 実装の問題


第8章  プログラミング言語における型理論
	J.C.Mitchell:林 晋

1. 序論
	1.1 概論
	1.2 純粋および応用ラムダ計算
2. 関数の型をもつ型付きラムダ計算
	2.1 型
	2.2 項
	2.3 証明系
	2.4 意味論健全性
	2.5 再帰関数論的モデル
	2.6 領域理論モデル
	2.7 カルテシアン閉圏
	2.8 Kripkeラムモデル
3. 論理的関係
	3.1 はじめに
	3.2 作用構造上の論理的関係
	3.3 論理的部分関数論理同値関係
	3.4 証明論的応用
	3.5 表現独立性
	3.6 論理的関係の変種
4. 多相型入門
	4.1 引数としての型
	4.2 可述的な多相的計算系
	4.3 非可述的な多相型
	4.4 データ抽象存在型
	4.5 型推論入門
	4.6 型変数をもつλ→の型推論
	4.7 多相的宣言の型推論
	4.8 他の型概念


第9章  帰納的な関数プログラム図式
	B.Courcelle:深澤 良彰

1. 序論
2. 準備としての例
3. 基本的な定義
	3.1 多ソート代数
	3.2 帰納的な関数プログラム図式
	3.3 同値な図式
4. 離散的解釈における操作意味論
	4.1 部分関数と平板な半順序
	4.2 離散的解釈
	4.3 書換えによる評価
	4.4 意味写像
	4.5 計算規則
5. 連続解釈における操作意味論
	5.1 連続代数としての解釈
	5.2 有限の極大要素と停止した計算
6. 解釈クラス
	6.1 汎用の解釈
	6.2 代表解釈
	6.3 解釈方程式クラス
	6.4 解釈代数クラス
7. 最小不動点意味論
	7.1 最小で唯一の解を得る不動点理論
	7.2 Scottの帰納原理
	7.3 Kleeneの列と打切り帰納法
8. プログラム図式の変換
	8.1 プログラム図式における同値性の推論
	8.2 畳込み,展開,書換え
	8.3 制限された畳込み展開
9. 研究歴史,他の形式のプログラム図式,文献ガイド
	9.1 流れ図
	9.2 固定された条件をもつ一様な帰納的関数プログラム図式
	9.3 多様な帰納的関数プログラム図式
	9.4 代数理論
	9.5 プログラムの生成と検証に対する応用


第10論理プログラミング
	K.R.Apt:筧 捷彦

1. 序論
	1.1 背景
	1.2 論文の構成
2. 構文と証明論
	2.1 1階言語
	2.2 論理プログラム
	2.3 代入
	2.4 単一化子
	2.5 計算過程―SLD溶融
	2.6 例
	2.7 SLD導出の特性
	2.8 反駁手続き―SLD木
3. 意味論
	3.1 1階論理意味論
	3.2 SLD溶融の安全性
	3.3 Herbrand模型
	3.4 直接帰結演算子
	3.5 演算子とその不動点
	3.6 最小Herbrand模型
	3.7 SLD溶融の完全性
	3.8 正解代入
	3.9 SLD溶融の強安全性
	3.10 手続き的解釈と宣言的解釈
4. 計算力
	4.1 計算力と定義力
	4.2 ULの枚挙可能性
	4.3 帰納的関数
	4.4 帰納的関数計算力
	4.5 TFの閉包順序数
5. 否定情報
	5.1 非単調推論
	5.2 閉世界仮説
	5.3 失敗即否定規則
	5.4 有限的失敗の特徴付け
	5.5 プログラムの完備化
	5.6 完備化の模型
	5.7 失敗即否定規則の安全性
	5.8 失敗即否定規則の完全性
	5.9 等号公理と恒等
	5.10 まとめ
6. 一般目標
	6.1 SLDNF-溶融
	6.2 SLDNF-導出の安全性
	6.3 はまり
	6.4 SLDNF-溶融の限定的な完全性
	6.5 許容性
7. 層状プログラム
	7.1 準備
	7.2 層別
	7.3 非単調演算子とその不動点
	7.4 層状プログラム意味論
	7.5 完全模型意味論
8. 関連事項
	8.1 一般プログラム
	8.2 他の方法
	8.3 演繹データベース
	8.4 PROLOG
	8.5 論理プログラミング関数プログラミング統合
	8.6 人工知能への応用


第11章  表示的意味論
	P.D.Mosses:山田 眞市

1. 序論
2. 構文論
	2.1 具象構文論
	2.2 抽象構文
	2.3 文脈依存構文
3. 意味論
	3.1 表示的意味論
	3.2 意味関数
	3.3 記法の慣例
4. 領域
	4.1 領域の構造
	4.2 領域の記法
	4.3 記法上の約束事
5. 意味記述法
	5.1 リテラル
	5.2 式
	5.3 定数宣言
	5.4 関数抽象
	5.5 変数宣言
	5.6 文
	5.7 手続抽象
	5.8 プログラム
	5.9 非決定性
	5.10 並行性
6. 文献ノート
	6.1 発展
	6.2 解説
	6.3 変形


第12意味領域
	C.A.Gunter and D.S.Scott:山田 眞市

1. 序論
2. 関数帰納定義
	2.1 cpoと不動点定理
	2.2 不動点定理の応用
	2.3 一様性
3. エフェクティブに表現した領域
	3.1 正規部分posetと射影
	3.2 エフェクティブに表現した領域
4. 作用素関数
	4.1 積
	4.2 Churchのラム記法
	4.3 破砕積
	4.4 和と引上げ
	4.5 同形と閉包性
5. べき領域
	5.1 直観的説明
	5.2 形式的定義
	5.3 普遍性と閉包性
6. 双有限領域
	6.1 Poltkin順序
	6.2 閉包性
7. 領域の帰納定義
	7.1 閉包を使う領域方程式の解法
	7.2 無型ラム記法モデル
	7.3 射影を使う領域方程式の解法
	7.4 双有限領域上の作用素表現


第13章  代数仕様
	M.Wirsing:稲垣 康善,坂部 俊樹

1. 序論
2. 抽象データ型
	2.1 シグニチャと項
	2.2 代数計算構造
	2.3 抽象データ型
	2.4 抽象データ型の計算可能性
3. 代数仕様
	3.1 論理式と理論
	3.2 代数仕様とその意味論
	3.3 他の意味論的理解
4. 単純仕様
	4.1 束と存在定理
	4.2 単純仕様表現能力
5. 隠蔽関数と構成子をもつ仕様
	5.1 構文と意味論
	5.2 束と存在定理
	5.3 隠蔽記号と構成子をもつ仕様表現能力
	5.4 階層仕様
6. 構造仕様
	6.1 構造仕様意味論
	6.2 隠蔽関数のない構造仕様
	6.3 構成演算
	6.4 拡張
	6.5 観測的抽象化
	6.6 構造仕様代数
7. パラメータ仕様
	7.1 型付きラムダ計算によるアプローチ
	7.2 プッシュアウトアプローチ
8. 実現
	8.1 詳細化による実現
	8.2 他の実現概念
	8.3 パラメータ化された構成子実現と抽象化子実現
	8.4 実行可能仕様
9. 仕様記述言語
	9.1 CLEAR
	9.2 OBJ2
	9.3 ASL
	9.4 Larch
	9.5 その他の仕様記述言語


第14章  プログラム論理
	D.Kozen and J.Tiuryn:西村 泰一,近藤 通朗

1. 序論
	1.1 状態,入出力関係,軌跡
	1.2 外的論理,内的論理
	1.3 歴史ノート
2. 命題動的論理
	2.1 基本的定義
	2.2 PDLに対する演繹体系
	2.3 基本的性質
	2.4 有限モデル特性
	2.5 演繹的完全性
	2.6 PDLの充足可能性問題の計算量
	2.7 PDLの変形種
3. 1階の動的論理
	3.1 構文論
	3.2 意味論
	3.3 計算量
	3.4 演繹体系
	3.5 表現力
	3.6 操作的vs.公理意味論
	3.7 他のプログラミング言語
4. 他のアプローチ
	4.1 超準動的論理
	4.2 アルゴリズム論理
	4.3 有効的定義論理
	4.4 時制論理


第15章  プログラム証明のための手法論理
	P.Cousot:細野 千春,富田 康治

1. 序論
	1.1 Hoareの萌芽的な論文の解説
	1.2 C.A.R.HoareによるHoare論理のその後の研究
	1.3 プログラムに関する推論を行うための手法に関するC.A.R.Hoareによるその後の研究
	1.4 Hoare論理概観
	1.5 要約
	1.6 この概観を読むためのヒント
2. 論理的,集合論的,順序論的記法
3. プログラミング言語の構文論と意味論
	3.1 構文論
	3.2 操作意味論
	3.3 関係的意味論
4. 命令の部分正当性
5. Floyd-Naurの部分正当性証明手法とその同値な変形
	5.1 Floyd-Naurの手法による部分正当性証明の例
	5.2 段階的なFloyd-Naurの部分正当性証明手法
	5.3 合成的なFloyd-Naurの部分正当性証明手法
	5.4 Floyd-Naurの部分正当性の段階的な証明と合成的な証明同値性
	5.5 Floyd-Naurの部分正当性証明手法の変形
6. ライブネス証明手法
	6.1 実行トレース
	6.2 全正当性
	6.3 整礎関係,整列集合,順序数
	6.4 Floydの整礎集合法による停止性の証明
	6.5 ライブネス
	6.6 Floydの全正当性証明手法からライブネスへの一般化
	6.7 Burstallの全正当性証明手法とその一般化
7. Hoare論理
	7.1 意味論的な観点から見たHoare論理
	7.2 構文論的な観点から見たHoare論理
	7.3 Hoare論理意味論
	7.4 構文論と意味論の間の関係:Hoare論理健全性と完全性の問題
8. Hoare論理の補足
	8.1 データ構造
	8.2 手続き
	8.3 未定義
	8.4 別名と副作用
	8.5 ブロック構造局所変数
	8.6 goto文
	8.7 (副作用のある)関数と式
	8.8 コルーチン
	8.9 並行プログラム
	8.10正当性
	8.11 プログラム検証の例
	8.12 プログラムに対して1階論理拡張した他の論理


第16章  様相論理時間論理
	E.A.Emerson:志村 立矢

1. 序論
2. 時間論理の分類
	2.1 命題論理 対 1階述語論理
	2.2 大域的と合成的
	2.3 分岐的 対 線形
	2.4 時点と時区間
	2.5 離散 対 連続
	2.6 過去時制 対 未来時制
3. 線形時間論理技術的基礎
	3.1 タイムライン
	3.2 命題線形時間論理
	3.3 1階の線形時間論理
4. 分岐的時間論理技術的基礎
	4.1 樹状構造
	4.2 命題分岐的時間論理
	4.3 1階の分岐的時間論理
5. 並行計算:その基礎
	5.1 非決定性と公平性による並列性のモデル化
	5.2 並列計算抽象モデル
	5.3 並列計算の具体的なモデル
	5.4 並列計算の枠組みと時間論理の結び付き
6. 理論見地から時間論理
	6.1 表現可能性
	6.2 命題時間論理の決定手続き
	6.3 演繹体系
	6.4 モデル性の判定
	6.5 無限の対象の上のオートマトン
7. 時間論理プログラム検証への応用
	7.1 並行プログラム正当性に関する性質
	7.2 並行プログラム検証証明論的方法
	7.3 時間論理による仕様からの並行プログラム機械合成
	7.4 有限状態並行システム自動検証
8. 計算機科学における他の様相論理時間論理
	8.1 古典様相論理
	8.2 命題動的論理
	8.3 確率論理
	8.4 不動点論理
	8.5 知識


第17章  関係データベース理論の構成要素
	P.C.Kanellakis:鈴木 晋

1. 序論
	1.1 動機と歴史
	1.2 内容についての案内
2. 関係データモデル
	2.1 関係代数と関係従属性
	2.2 なぜ関係代数か
	2.3 なぜ関係従属性か
	2.4 超グラフデータベーススキーマの構文について
	2.5 論理データベース意味について
3. 従属性データベーススキーマ設計
	3.1 従属性の分類
	3.2 データベーススキーマ設計
4. 問合わせデータベース論理プログラム
	4.1 問合わせの分類
	4.2 データベース論理プログラム
	4.3 問合わせ言語と複合オブジェクトデータモデル
5. 議論:関係データベース理論のその他の話題
	5.1 不完全情報の問題
	5.2 データベース更新の問題
6. 結論


第18章  分散計算モデル手法
	L.Lamport and N.Lynch:山下 雅史

1. 分散計算とは何か
2. 分散システムモデル
	2.1 メッセージ伝達モデル
	2.2 それ以外のモデル
	2.3 基礎的概念
3. 分散アルゴリズムの理解
	3.1 挙動の集合としてのシステム
	3.2 安全性と活性
	3.3 システム記述
	3.4 主張に基づく理解
	3.5 アルゴリズムの導出
	3.6 仕様記述
4. 典型的な分散アルゴリズム
	4.1 共有変数アルゴリズム
	4.2 分散合意
	4.3 ネットワークアルゴリズム
	4.4 データベースにおける並行性制御


第19章  並行プロセス操作的および代数意味論
	R.Milner:稲垣 康善,結縁 祥治

1. 序論
2. 基本言語
	2.1 構文および記法
	2.2 操作意味論
	2.3 導出木と遷移グラフ
	2.4 ソート
	2.5 フローグラフ
	2.6 拡張言語
	2.7 その他の動作式の構成
3. プロセスの強合同関係
	3.1 議論
	3.2 強双模倣関係
	3.3 等式による強合同関係の性質
	3.4 強合同関係における置換え可能性
	3.5 強等価関係上での不動点の唯一性
4. プロセスの観測合同関係
	4.1 観測等価性
	4.2 双模倣関係
	4.3 観測合同関係
	4.4 プロセス等価性上での不動点の唯一性
	4.5 等式規則の完全性
	4.6 プロセス等価性に対するその他の概念
5. 双模倣等価関係の解析
	5.1 等価性の階層構造
	5.2 階層構造論理的特性化
6. 合流性をもつプロセス
	6.1 決定性
	6.2 合流性
	6.3 合流性を保存する構成子
7. 関連する重要な文献

2009-09-17

なんで大学の授業でみんな寝てますか

約十年前の話。地方大学工学部に通ってたんです。

その大学には情報工学部が別にあったんですが、工学部にも情報工学を学べるコースがあったんです。

自分は別のコースだったんですが、情報処理技術者試験対策に、その情報工学を学べるコースの授業をとってました。

で、何故かわからないんですが、その授業、情報工学コースの学生がみんな寝てるの。起きてるの私だけ。

なんで?

データベースの授業だったんですが、なんで私だけ起きてて、他の人はみんな寝てたんだろう…。別の授業(Prologを使ったなにか)はさすがにそんなことなかったけど。まああれは実習だしなあ…。

 

これみて思い出したんで書きました。

http://workingnews.blog117.fc2.com/blog-entry-2244.html

2009-06-09

1985. Haskelをちょっと触ってみた。

タイトルの通り、です。

Haskelをちょっと触ってみました。

感触としては……ちょっとメンドくせえ言語だな、と(笑)。

これは、アレですね。同系の「静的型付け関数型言語」だと、OCamlの方がラクかな?

少なくとも「表記法」って意味ではOCamlの方に軍配が上がるかも。

感じた事は次の3点。

1.謎の記号が多い。

いや、ホントそんな感じです(笑)。

いきなり++とか書かれていて「何じゃそりゃ?」とか思いました。Cかこれは、みたいな(笑)。

インタプリタPrelude>とかから書く、と言う「ちょっとワケの分からなさ」です。

(もっとも、EmacsでC-cC-lすると自動添付されますが)

式の最後はリターンだから二行以上書けないとか。

if〜elseじゃなくってif |だとか。

何だか良く分からん様式が多いです。

他にも「再定義」とか素直に書けないんですよね。モジュールもないし、type class宣言とか出てきて。多重定義ばかりで

パっと見で「コードの流れが把握し辛い」ような気がしました。

2.Prolog経験者の方がより分かりやすいかも。

関数型」とか言いながら中核は「パターンマッチング」があるような気がします。

つまり、実態はPrologにより近いのでは。

例えば、型推論の為、本来だったら「変数の型宣言」が必要な筈なんかないんですが、実際はほとんどの場合「変数の型宣言」を行うらしい。

どう考えても内部的には「Prolog」っぽさがどっかにある、んですよね。

まあ、「Prologが好き」って人には向いてるかもしれません。

3.対アメリカ文化が鼻につく(笑)。

2.のPrologもそうなんですけど、どっちかと言うと「ヨーロッパプログラミング言語歴史」の正統性狙って

んじゃねえのか、的なニュアンスが垣間見れます(笑)。

と言うか、ヨーロッパ文化至上主義なのか(笑)。

Prologフランス製だったよな、確か(笑)。

例えば、コメント

-- これはコメントだよ〜〜ん

{- これはコメントだよ〜〜ん -}

って書くのはあんま見かけないし、「何じゃこりゃ?」って思う可能性が多いような気がします(笑)。

まあ、実は上記のコメント形式 --、ってEiffelのものですよね(笑)。Eiffelフランス製だと思いますが、いずれにせよヨーロッパ生まれです。

「腐れアメリカ型の文化に迎合するか!!!」

的なのちょっと見えてやだなあ(苦笑)。だってホントに{- -}なんてコメント形式ってHaskelくらいしかねえだろ(笑)。

まあ、EmacsのM-;だったらどんな形式でも苦にはなんないんですけどね。一方、普通テキストエディタだったらメンド臭いハメに陥るかも。

そんなのが雑感です。

少なくとも「ネットでちょろっと見て」遊ぶには敷居が高い言語のような気がします。キチンとした本を購入して勉強すべき、って感じがします。

かつ、「実用的な関数型言語をやりたい」のなら、多分OCaml選択した方がストレスは少ないかも。

Haskelファンには申し訳ないですが。

注意

元ネタがあまりにアレだったので、OCamlHaskell を入れ替えてみた。もはや OCaml 狂信者たわごとにしか見えない。

Haskel のスペルは Haskell が正しい。ネタ

-- がコメントなのは Ada が元だと思うが、「アメリカ製」なので採用しなかった。

文中明らかにおかしい所は元もいまいちおかしい。

2009-04-05

http://anond.hatelabo.jp/20090404235214

http://anond.hatelabo.jp/20090404235214です。

ご協力ありがとうございます。

私の本棚から普通一角ダメげな一角を晒します。

普通の:

・Compiler Construction (Louden)

・Effective C# (Wagner)

・Compilers (Aho, et al.)

・Virtual Machines (Smith, Nair)

Garbage Collection (Jones, Lins)

・車窓で旅する日本列島

Common Lisp 第2版 (Steele Jr.)

Assembly Language for Intel-Based Computers (Irvine)

・Concrete Mathematics (Knuth, et al.)

・Programming Language Pragmatics (Scott)

Basic Category Theory for Computer Scientists (Pierce)

ダメげなの:

サモンナイトコレクション

きらきらみけおうアートワーク

・しろ画集

カーネリアンコレクション

Bittersweet Fools ビジュアルファンブック

ISO/IEC 13211 Information technology - Programming languages - Prolog - (Prologの規格書)

・県別マップル十数冊

整理されてなさすぎるのがよくわかった。

その他本棚にあるもの:

・危ない28号 3冊

妖界ナビ・ルナ シリーズ

・夏少女の紙袋

・ペンハリガン香水 4本

2009-02-22

もしも、あの言語で駅の券売機を作ったら

http://anond.hatelabo.jp/20090220065041

Brainf*ck

8つしかないボタンの順番を正しく押さないと目的地への切符が買えない。

COBOL

普通の英文による注文で切符が買えるハズなのだが、実際には専門家に頼んで注文を書いてもらわないと上手く買えない。

LOGO

亀を出発駅から到着駅まで移動させることで切符を買う。

Haskell

出発駅と到着駅の型が違う場合、適切な経由駅を設定しないと切符が買えない。

C++

任意の切符を発行するためのビルダーテンプレートインスタンスを生成できる。

JavaScript

切符は他の切符コピーで作られるため、切符をどう印刷するかについてのプログラムはまったく入っていない。

Prolog

到着駅と出発駅を入力すると、到達可能であることが示される。切符は出てこない。

Malbolge

この券売機切符が買えるのかどうか、まだ証明されていない。

Java

どの駅でも同じ操作で切符が買えるハズなのだけど、実際のところは微妙に違ってぬるぽで落ちる。

FORTRAN

カンマとピリオドを間違えて券売機が爆発。

2008-11-07

Haskellerと付き合い始めたのだが

http://anond.hatelabo.jp/20081105135432

彼女ができた。なんとHaskellerだ。

8月に参加したLLイベントで知り合い、10月から付き合い始めた。なんでLLイベントにHaskellerが…

これまで5人くらいのプログラマと付き合ったことがあるけれど、一般的なプログラマと比較して

といった点が目立つ。

見た目はLisperを少し丸くしたようなかわいらしさがあるのだけれど、要するに中身はPrologだ。

初めは戸惑いもあったが、案外こういうプログラマとつきあうのは楽で楽しいと分かってきた。

コードは深い問題もFizzBuzzのような軽い問題も内容を伴って書ける。

いろいろメタプログラミング・アロー記法ユニコード演算子などを試そうとするなど好奇心が強い。

純粋関数型言語も習得しているというのに論理系の言語も習得しようと勉強していて向上心の強さがある。

反面、入出力のコード論理的・合理的なのかな…と思いきや、

IOモナドコントロールできない自分に「おかしいな、普段はこんなはずじゃないのに///」と恥ずかしがる。

Haskeller、はっきり言ってオススメです。

問題はどうやって知り合うかだけれど、職場(あるのか?)という戦闘モードの時に誘うのではなく、.emacsなどを書いているオフタイムが狙い目としか。

初めの一歩が難しいだけで、後は一般的な女の子よりも付き合いは簡単かも。

だって普段Makefileに書いている論理と同じでいいんだから。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん