[生活]鼻骨
が折れた。鼻水がおもいっきし、かめなくてムズムズする。
[本][プログラミング]SICP:1-2-2
1.2.2 Tree Recursion
- tree-recursive processはプログラムやデータ構造を理解するにはとても役に立つ(ただし、計算量は?)
- tabulation or memoization タブorメモ 計算された値を自動的にテーブルで保存し、値がすでに計算されていないかどうか(テーブルに値が格納されていないかどうか)を最初に参照し、冗長な計算を防ぐ戦略・方法
Exercise 1.12
(define (pascal n k)
(cond ((= k 0) 1)
((= k n) 1)
(else (+ (pascal (- n 1)(- k 1))
(pascal (- n 1) k)))))
n段のk番目の値はn-1段目のk-1番目の値とn-1段目のk番目の値を足したものになります。
なんというか変数間の関係が分かれば、こうも簡単に再帰的に表現できるものなのだろうか?二項係数の値を求めるのと同じなのだが、組み合わせも関数なのだというの再確認しました。
1.2.3 Orders of Growth
- Orders of growthはbehavoir of a processの概算
1.2.4 Exponentiation
- successive squaring
- technique of defining an invariant quantity
参考
余談
熱(射|中)症の影響でダウン。日焼け痕が疼く。先の症状かなと思ったら、頚動脈に冷たいものを当てるといいですよ。
皆さんもお気をつけて。
[徒然]私が携帯インターネット端末にほしいたった一つの機能
ちまたではiPhoneの話題で沸騰中って、遅いか。こんな私でも、少しは注目していました。
iPodは私の手から離れて、donateしてしまったんですが、
私のapple遍歴は大学在籍中のiMac,そして数世代に渡るiPodのみ。だから、そんなに多くを語れる訳ではありません。
タイトルに関してですが、少なくともこんな機能がほしいというものです(初めてキャッチーなものにしてしまった恥ずかしい)。
それは、「キーワードを入力したら、そのキワードでWEB検索されて、携帯インターネット端末と同期したホストPCにその検索結果を送信し、受信したホストPCが起動後にすぐそのキワードでブラウザからタブブラウジングが可能であること(できるなら、私の意志を機械的に学習してページをaggregateしてくれると助かりますが)」
別にiPhoneにこだわるわけじゃありません。
これは私がちょっとしたことで日常的に行っているものを自動化したいからです。んなことはすでに既存の技術や商品でできるわい!ということを知っている方がいらっしゃいましたら、教えていただけるととてもうれしいです。
あ〜最後のところって、AIだよな。うずうず
[本][プログラミング]SICP:1-2-1
1.2 Procedures and the Processes They Generate
1.2.1 Linear Recursion and Iteration
- iterative processにおけるstate variables
- 1.遷移過程の記述,2.仮に計算を止めても、その時の常態(変数の値)を保持
- iterationとrecursionを対比するときは注意しなければならない
- なぜなら、構文上(procedure)と計算上(process)では問題にしている概念が違う
- processがどうようにevolveするかが重要
- looping constructはiterative processをdescribeするため
- 5章で扱うschemeの実装方法はrecursive procedureのiterative processでも一定のメモリでiterative processを実行できるだろう。←この特性をもつ実装をtail-recursiveという
- tail-recursiveを使えば、普通の手続きの呼び出しのメカニズムでiterationを表現できる。special iteration construct
余談
evolveってなつかしす。よくポケモンは進化じゃなくて、ドヘンタイだ!って騒いでいた(そうです、私が変なxxxって違うか)。
drastically developmental change。略してド変態。コイキングからギャラドスってありえなくね?
そうそう、オブジェクト指向でインヘリタンスとかポリモルフィズムとか生物学にもある概念なんですよね。私なんか、生物学的概念が真っ先にくるもんですから、日本語で継承とか多態性とか言われても?って感じになってしまうんです。ということはオブジェクト指向は生物学系の人には理解しやすいというか考えやすいのかもしれません。
ということで、「生物学思考におけるオブジェクト指向プログラミング」という本をお願いします。でたら、私は買います(手頃な値段でね♪)
tail-recursiveってcompiler optimization trickなんだって、わくわく。それで以下の論文だけはdlでけた
参考
- Viewing Control Structures as Patterns of Passing Messages Hewitt, Carl 1976
- Ackermann function
[本][プログラミング]SICP:1-1の続き
1.1.7 Example:Square Roots by Newton’s Method
- mathematical functionsとcomputer proceduresの違い:proceduresはeffectiveでなければならない
Exercise 1.7
修正前
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
修正後
(define (good-enough? guess x)
(< (abs (- 1.0 (/ x (square guess)))) 0.001))
内部挙動は置いといて、とりあえず、大きい値でも計算されるようになりました(ただし、精度は?)。
squareの計算が先よりも、除算の適用が展開後の引数に対して一つずつ行われているような感じである。
後は、toleranceの値を低くすればいい
toleranceが0.001(1.0e-3)の場合
>(sqrt 1.0e100)
1.000000633105179e50
toleranceが0.000001(1.0e-6)の場合
>(sqrt 1.0e100)
1.0000000000002003e50
1.1.8 Procedures as Black-Box Abstractions
- sqrt-iterの定義はrecursive.”circular” definition
- a bound variable = a formal parameter of a procedure in a procedure definition
- a free variable = not a ~
- scopeは束縛が名前を定義する表現の集まり。
- nesting of definitions = block structureはname-packaging問題を解決する簡単な方法
- lexical scoping 内部定義の束縛変数を自由変数として扱える。procedureのbodyに表現にしなくてもいい
- interpreterのdetailed behaviorとenvironmentは3章で
[徒然]さてさて
CSV/XML互換データ作成依頼がきたが、どうしたものか。
XMLってよくわからんし、CSVファイルってExcelから出力するのか???
”とか’が混じってると大変なんだよな。
最終的にはソフトを使えば?という案があったが、それじゃオモロくない!
XML Hacksの本をパラパラと眺めていたら、あるじゃないの。でも、javaで書かれたtoolを利用しましょうだって。
いっちょ、情報収集しますか♪
[本][プログラミング]SICP:1-1
とりあえず、1章を読み終えたので、メモ
1.Building Abstractions with Procedures
1.1 The Elements of Programming
1.1.1 Expressions
- prefix notationは手続きを集約できる/ネスト構造を直線的に拡張できる
1.1.2 Naming and the Environment
- interpreterはNamingとObjectをpairsでkeep trackするある種のメモリをメンテナンスしなければならない
- そのメモリをenvironmentと呼ぶ(より正確に言うと、global environment)
1.1.3 Evaluating Combination
- define句は組み合わせではない
- Lispはspecial formsが少ない
1.1.4 Compound Procedures/1.1.5 The Substitution Model for Procedure Application
- Substitutionの目的は思考の助であり、interpreterがそのようにworkするdescriptionを与えない
- Substitutionはformal parametersのためのlocal environmentを利用して行われる
- culminate
- Applicative order versus normal order →Evaluation strategy
- stream processing←3章で説明
1.1.6 Conditional Expressions and Predicates
- predicate
- clausesと呼ばれるカッコペアの表現
- interpreterはpredicate’s valueをfalseかどうか判断して、それ以外の値をtureとして扱う
- andとorは手続きではなく、special forms。なぜなら、必ずしも全てのExpressionは評価されないから
とりあえず、ここらでポスト
余談
マップ記号は固定点からバネを吊り下げた。
参考
[本][雑談]ふつうのHaskellプログラミングを読んだ
SICPを勉強中なんだけど、あまりの進まなさに少し耐えきれなくなったので、Haskellの本を読んでしまった。てへ
私のような初学者にとって、関数とかでもひとつひとつ丁寧に解説されていてとても有難い。高階関数とか無名関数はschemeでやったし、あまり違和感なく理解はできたんですけど、クラスとかインスタンスのようなオブジェクト指向的な考え方が未だによくわからない(たぶん、表現方法の問題なんだと個人的には思う)。モナドの役割もわからんでもない。簡単に言えば、手続きの抽象化(流れ)を明示的にわかりやすくするものってことですかね。最後にはWikiの実装演習もあるので、SICPが終わったら、もう一度読み直そう。そしてチャレンジ!!
参考
下の方は今年の9月に発売させるそうで、Amazonで予約受付中です。これはようチェックやで〜
少し雑談を。
Haskellでzip関数とかconcat関数とかあるんですけど、zipってあのWindowsとかのデータ圧縮ファイルのアイコンになっているzipperを意味していたんですね。社会の窓だって、当然短い方に合わせるってそんなこと有り得ないんですけど(笑)。あと、先輩がよくコンカチせなって呟いていたんですが、「君意味知っとるか?」って聞かれたので、「本来の意味はようわかりませんが、(列車とかが)繋がるイメージですかね」と。「ほう〜若いのによう知ってんな」と言われました。ってそういうことが言いたいのではなくて、電車に乗るとき、私はなるべくホームの先頭側に立って、駅に電車が近づいてくるのを見るのが好きなんですが、その話をある人にしたら、同様のことをしていると言われました。それで、電車待談義に花を咲かせてしまったんです。その中で面白い話になって、駅のホームは実は直方形ではなく凸に湾曲しているという話になったんです。なぜかって、乗客が乗るのを車両の前後にいはる車掌さんが確認しやすいようにってね(本当かどうかは知らない)。だから、電車・リストには[]だけでなく、()も必要だねってことでお後がよろしいようで。チャンチャン
コメントを書く