一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

SICP

1.2.3 Orders of Growth 〜 1.2.5 Greatest Common Divisors

1.2.3 〜 1.2.5は、例題によって理解を深める節。1.2.6も例題だけど、えらく長いので1.2.6は別に分ける。 1.2.3 Orders of Growth 問題の大きさに伴って、空間計算量と時間計算量がどのように増えていくかをΘ記法を用いて説明したもの。具体的なΘ記法の説明…

1.2.2 Tree Recursion

Fibonacci numbersの計算をrecursive processとiterative processの両方で実装してみせて、iterative processの方が性能が良い事を示した。けれども、recursive processが全ての場合において悪いというわけではない、という事も示唆していた。 fibonacci num…

1.2 Procedures and the Processes They Generate 〜 1.2.1 Linear Recursion and Iteration

最も基本的な演算やその組み合わせなんかを第1.1節でやったけど、それだけじゃプログラムは組めないので、第1.2節ではプログラムを書く為のハウツーを伝授しましょう、という章。 1.2.1 Linear Recursion and Iteration 階乗を求めるプログラムの再帰版・繰…

1.1.8 Procedures as Black-Box Abstractions

再帰の事は取り合えず棚に上げておいて、プログラムを分割して開発する事の重要性を説いた一節。そしてprocedureの引数の特徴について述べている。引数の事をbound variableというらしい。boundされていない状態はfreeというらしい。 次に、procedureの中にp…

1.1.7 Example: Square Roots by Newton's Method

ニュートン法で平方根を求めるという問題。一般的に、数学の方法で問題の解き方を記述するとdeclarative (what is) descriptionになる。けれども、コンピュータでプログラミングをする時にはimperative (how to) descriptionで考えないとprocedureは書けない…

1.1.6 Conditional Expressions and Predicates

まずはcond。 (cond (predicate-1 expression-1) (preficate-2 expression-2) ... (else expression-otherwise))predicate-1を評価して#tなら、expression-1を評価して終了。#fならpredicate-2を評価して、#tならexpression-2を評価。#fなら…。もし全てのpre…

1.1.4 Compound Procedures 〜 1.1.5 The Substitution Model for Procedure Application

procedure definition (define (procedure-name arg1 arg2 ...) (body))しかし、個人的には (define procedure-name (lambda (arg1 arg2 ...) (body)))という形式の方が、λ式をsymbolに束縛しているというイメージがはっきりするので好き。 一応、procedure…

Chapter 1 Building Abstractions with Procedures

まだ序章といった感じ。「プログラム」「データ」「プログラム言語」を簡単に紹介して、プログラミングが如何なる物かを解説している。 後半はLispとSchemeを紹介して、本書の中でLispを用いる理由を説明している。 問題が出てくるのは次のセクションからな…

1.1 The Elements of Programming 〜 1.1.3 Evaluating Combinations

"primitive expressions" literalとか "means of combination" 複数の物を組み合わせて新しい物を作る物 "means of abstraction" 名前付けとか Lispの式の例 numerals 1 13 45 expression (+ 5 10 15) ネストも可能 (+ (* 10 5) (+ 2 10)) Schemeでの名前の…

Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)

MITでの講義を元にして書かれたという、かの有名な "Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)" (通称SICP) を読んで、計算機について勉強しようと思います。書籍はとりあえず購入せずに、Web…