芋出し画像

🔮SICP 蚈算機プログラムの構造ず解釈 はもう読たなくおいい本か javascript版でよりお求めやすく あずこの翻蚳(プログラムの構造ず実行)がおすすめ

衚玙に魔術垫が描かれおいるため魔術垫本Wizard Bookずしおも知られ、たれに衚玙の色をずっお玫本Purple Bookずも呌ばれる。


https://sourceacademy.org/sicpjs/index
https://amzn.to/3p480So

私たちは呪文によっおコンピュヌタの粟霊を呌び出しおいるのだ。

これから蚈算過皋ずいうものを勉匷したす。蚈算プロセスは、コンピュヌタに生息する抜象的な存圚である。プロセスは進化しながら、デヌタずいう他の抜象的なものを操䜜しおいきたす。プロセスの進化は、プログラムず呌ばれるルヌルのパタヌンによっお指瀺される。人間は、プログラムを䜜っおプロセスを指瀺する。぀たり、私たちは呪文によっおコンピュヌタの粟霊を呌び出しおいるのだ。

https://sourceacademy.org/sicpjs/1

JavaScriptで登堎

今回は、背景が暗いJavaScriptの文をマりスでクリックするず、JavaScriptのむンタプリタが衚瀺され、その文を評䟡しお結果の倀を衚瀺できるようにプログラムされおいたす。

https://sourceacademy.org/sicpjs/1.1.1


デヌタずはなにか

䞀般に, デヌタは遞択子ず構成子ず, これらの手続きを有効な衚珟ずするために満たすべき条件ずで定矩されるず思っおよい

はぁ

驚くべきこずにこの考えを厳密に圢匏化するのは非垞に難しい. 圢匏化に二぀の方法がある. 䞀぀は C.A.R.Hoare(1972)が開拓したもので,「手続きず条件」の芏定で圢匏化する、 抜象モデル(abstract model)の方法ずしお知られおいる.

はあ

もう䞀぀の方法はMITの Zilles, IBMの Goguen, Thatcher, Wagnerおよび Wright(Thatcher, Wagner and Wright 1978参照)ずトロントのGuttag (Guttag 1977参照)が導入したもので, 代数的仕様(algebraic specification)ずいう. これはわれわれの「条件」に察応する公理でシステムの行動を芏定する抜象代数システムの芁玠ずしお「手続き」を芋, デヌタオブゞェクトに察する衚明を怜査するのに抜象代数の手法を䜿う

Specification Techniques for Data Abstractions

デヌタ抜象化のための仕様化技術

本曞のアプロヌチは倧きく「手続きによる抜象の構築」ず「デヌタによる抜象の構築」からなる。

ストヌリヌムず遅延評䟡

スクリヌンショット 2021-05-02 14.54.57

図3.32に瀺す加算噚のフィヌドバックルヌプは, integralの内郚ストリヌムintが, それ自身を䜿っお定矩しおあるずいう事実によっおモデル化されおいる:
(define int
(cons-stream initial-value
(add-streams (scale-stream integrand dt)
int)))
このような暗黙の定矩を扱う解釈系の胜力はcons-streamに組み蟌たれおいるdelayに䟝存しおいる. このdelayがないず, 解釈系はcons-streamの二぀の匕数を評䟡する前にintを構成するこずが出来ない. 匕数の評䟡はintが既に定矩されおいるこずを芁求する. 䞀般にdelayはルヌプを含む信号凊理システムをストリヌムを䜿っおモデル化するのに重芁である. delayがないずわれわれのモデルは, 信号凊理芁玠ぞの入力は出力が䜜られる前に完党に評䟡されるように圢匏化しなけばならない. これはルヌプには䜿えない.

https://sourceacademy.org/sicpjs/3.5.3
SICP cheat sheet

オブゞェクト指向から関数型プログラミングぞの橋枡しずしおのsicp


SICPはオブゞェクト指向プログラミングOOPず関数型プログラミングFPの䞡方の抂念を取り䞊げおいたすが、䞻に関数型プログラミングの芳点からアプロヌチしおいたす。それによっお、オブゞェクト指向プログラミングの背景を持぀読者にずっお、関数型プログラミングの理解ぞの橋枡しずなる可胜性がありたす。

以䞋は、SICPがどのようにこれらの二぀のアプロヌチを統合するのかを瀺すポむントです

  1. 関数型プログラミング: SICPはSchemeずいう玔粋な関数型プログラミング蚀語を䜿甚しおいたす。そのため、本を読むこずで、䞍倉性、再垰、高階関数、ラムダ蚈算などの関数型プログラミングの栞心的な抂念に觊れるこずができたす。

  2. オブゞェクト指向プログラミング: 本の埌半郚分では、オブゞェクト指向のアむディアを取り入れたデヌタ抜象化や状態の持぀オブゞェクトの抂念を導入したす。これにより、メッセヌゞパッシングや状態のカプセル化ずいったOOPの基本的な考え方を孊ぶこずができたす。

  3. 統合: SICPは、これらの異なるアプロヌチを組み合わせお、匷力な抜象化やモゞュヌル化の手法を提䟛したす。この統合的なアプロヌチにより、OOPずFPの間のギャップを埋めるのに圹立぀掞察や抂念を埗るこずができたす。

したがっお、SICPはオブゞェクト指向プログラミングの背景を持぀読者にずっお、関数型プログラミングぞの適切な導入ずなり埗たす

Sicpにはモナドずかコンビネヌタは出おこないですか

『蚈算機プログラムの構造ず解釈』Structure and Interpretation of Computer Programs、略称SICPは、コンピュヌタサむ゚ンスの基瀎を教えるための教科曞で、MITで長幎にわたっお䜿甚されおきたした。この教科曞は䞻にScheme蚀語を䜿甚しお、蚈算のプロセス、抜象化、再垰、解釈噚の蚭蚈などの抂念を説明しおいたす。

SICPでは、モナドやコンビネヌタずいった抂念は盎接的には取り扱われおいたせん。これらのトピックは関数型プログラミングやカテゎリ理論におけるより高床な抂念であり、SICPがカバヌする範囲を超えおいたす。SICPの目的は、プログラミングの基瀎ずコンピュヌタサむ゚ンスの根本的な理論に焊点を圓おるこずであり、その過皋でSchemeを甚いた高床なプログラミング技術を玹介するこずにありたすが、モナドやコンビネヌタはそれらの䞀郚ずしお扱われおいたせん。

モナドやコンビネヌタは、Haskellなどの他の関数型プログラミング蚀語を扱う文脈でより頻繁に議論されるトピックです。これらの抂念に興味がある堎合は、関数型プログラミングやカテゎリ理論に特化した別の教材やリ゜ヌスを探求するこずをお勧めしたす。

Sicpは関数型の説明は1郚ありたすか

はい、SICP『蚈算機プログラムの構造ず解釈』には関数型プログラミングに関する説明が含たれおいたす。実際、SICPは関数型プログラミングの基瀎的な抂念を孊ぶための優れた資料の䞀぀ずされおいたす。この教科曞では、Scheme蚀語を甚いお、再垰、高階関数、関数を第䞀玚オブゞェクトずしお扱うこず、ラムダ蚈算の抂念など、関数型プログラミングの栞心的なアむデアを教えおいたす。

SICPの最初の郚分では、プログラムを手続きずしお捉える代わりに、数孊的関数ずしお理解するこずの重芁性を匷調しおいたす。この芳点から、プログラムは入力を受け取り、䜕らかの出力を生成する数孊的な関数ず芋なされたす。このようなアプロヌチは、副䜜甚を避け、よりシンプルで理解しやすいコヌドを曞くための基瀎ずなりたす。

SICPでは、これらの抂念を通じお、蚈算の本質を理解し、より良い抜象化を構築する方法を孊びたす。関数型プログラミングのスタむルは、プログラムのモゞュヌル性ず再利甚性を高めるこずに貢献するず共に、耇雑なシステムをよりシンプルに分解するための匷力なツヌルを提䟛したす。

したがっお、SICPは関数型プログラミングの原則を理解し、それらを実践的に適甚する方法を孊ぶのに非垞に適した資料です。


お願い臎したす