| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
76 バイト追加 、 2020年2月16日 (日) 04:31
編集の要約なし
==[[Racket]]==
{{amazon|489471163X}}
*http://mitpress.mit.edu/sicp/
===なぜList===
*Lispは主流の言語ではないが[[Lisp]]は主流の言語ではないが**プログラムの構成やデータの構造を学び、言語の基礎となる言語学的昨日に関係づけるのに優れた媒体としての特徴を持つプログラムの構成やデータの構造を学び、[[言語]]の基礎となる[[言語]]学的昨日に関係づけるのに優れた媒体としての特徴を持つ**主な特徴として、プロセスの手続き(procedures)というListによる記述自体がLispデータとして表現、処理できるというListによる記述自体が[[Lisp]]データとして表現、処理できる
**「受動的」なデータと「能動的」なプロセスという区別をしないプログラム設計技法が使える
**手続きをデータとして表す能力は、実在する言語で一番便利手続きをデータとして表す能力は、実在する[[言語]]で一番便利
===インストール===
====[[Ubuntu ]] にインストール====
$ apt-cache search racket
$ apt-cache show plt-scheme
500 http://jp.archive.ubuntu.com/ubuntu/ quantal/universe i386 Packages
$ sudo apt-get install plt-scheme
====CentOSにインストール[[CentOS]]にインストール====*[[Racket をCentOS にインストール]]
==プログラムの要素==
*言語はプロセスに関する考えをまとめる枠組み[[言語]]はプロセスに関する考えをまとめる枠組み*単純な概念を統合して複雑な概念を構成するための手段を用意単純な[[概念]]を統合して複雑な[[概念]]を構成するための手段を用意*強力な言語には3つの仕掛けがある強力な[[言語]]には3つの仕掛けがある
{|class="wikitable"
!プログラムの要素
|-
|基本式
|言語が関わるもっとも単純なもの[[言語]]が関わるもっとも単純なもの
|-
|組合せ法
===名前と環境===
*名前を使って計算オブジェクトを指す手段を用意することが、プログラム言語の重要な点名前を使って計算オブジェクトを指す手段を用意することが、プログラム[[言語]]の重要な点
*オブジェクトを値(value)とする変数(variable)を識別するのものが名前
*defineで名前付け
> size
2
*値と記号を対応付け、後にそれを取り出せるようにするために記憶しておくことを環境(environmenten[[vi]]ronment) より正確には、大域環境(global environmenten[[vi]]ronment)という
===組合せと評価===
#組合せの部分式を評価する
*反復ではどの時点においても、プログラム変数がプロセスの状態の完全な記述を持っている(計算の一時停止/再開に必要なのは、3つのプログラム変数だけ)が、再帰プロセスではそうはならない(プログラム変数以外に、プロセスのいる場所という隠れた情報が必要)。
*再帰的プロセス(process)と再帰的手続き(procedure)を混同しないようにしなければならない(上記 facto-iter は記述構文としては再帰的だが、プロセスは反復的である)
*紛らわしいのは、通常の言語の実装で消費する記憶量がプロセスが原理的に反復的であっても、手続き呼び出し数とともに増加する紛らわしいのは、通常の[[言語]]の実装で消費する記憶量がプロセスが原理的に反復的であっても、手続き呼び出し数とともに増加する(stack につまれる)ように設計してあるからである。**これらの言語で反復プロセスは、do,repeat,for,while のような特殊目的のループ構造でしか記述できないが、Scheme([[Racket]])にはこの欠点がなく、固定スペースで実行できる。
**この性質の実装を末尾再帰的(tail recursive)という。
===木構造再帰===
TODO 12/22

案内メニュー