sicp
問題を読む。 チョロそうだ。 合成関数っていうのの説明は書いてあるし、 結局、 g(x)を作用させた後の値をyとすると さらにf(y)までやった値を返すことができる 「手続き」 を返す 手続きを作ればいいってことだ。 いちおう、教科書で使っている incやsquar…
問題を読む。 まー大丈夫そう。 必要な答えは、 1. doubleを定義する 2. (((double (double double)) inc) 5)がどういう値を返すか確かめる。 「1.」でdoubleの定義で迷うところは特になし。lambdaをつかえばいい。 「2.」の答えで、incという手続きも必要な…
問題を読んでも特に難しいことはなさそうなイメージ。念のため「零点」について調べておく。零点 http://ja.wikipedia.org/wiki/%E9%9B%B6%E7%82%B9 零点(れいてん、ぜろてん、zero)とは、ある関数 f によって、0 に移される点、すなわち f(z) = 0 を満た…
問題をよむ。 とりあえず、 正接関数の近似値を計算する手続き(tan-cf x k)を定義するのが目的 正接関数って、なんだよ。 三角関数 http://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0 という6つの値が定まる。それぞれ正弦(サイン/sine)…
問題をよむ。 よし、サービス問題的なやつかなと思ったら、大間違いでした。 とりあえず、問題1.38で作ったcont-fracをつかって自然対数の底eを求める問題のようだ。 要はパラメータとして何を入れればいいかって言う部分を考えればいいのかな。 そこでとり…
まずは問題を読む。ふむふむ。 解答が必要なのは、以下aとかbで手順があったけど、順序はばらばらにした、0. cont-fracの回帰的プロセスバージョンを定義 1. cont-fracの反復的プロセスバージョンを定義 2. k項有限分数のkをいくつぐらいにすると、黄金比の…
まず日本語をよくよむ。 求められているのは3つ0. fixed-pointを印字するようにする 1. x^x = 1000 の解を見つける。 2. ステップ数を調べて、平均緩和の時と比べる。 0. 近似値を印字するには、 tryの実行のタイミングで、表示するようにしてみる。 1. これ…
まず日本語を読む。求められているモノは2つ 0.黄金比が、ホニャララ(書くのメンドい)の不動点であることを示す。 1. fixed-pointで計算。 φ^2 = φ + 1 の正の解が黄金比の値と定義があるので、φ = x と置き換えれば、 x^2 = x + 1 両辺をxで割って x = 1 + …
とりあえず、書いてある通りのソースコードを実行してみる。 1 #!/usr/local/bin/gosh 2 ;; -*- coding: utf-8 -*- 3 4 (define (square a) (* a a a)) 5 6 (define (f g) 7 (g 2)) 8 9 10 ;; main 11 (define (main args) 12 13 (display "(f square) : ") …
方針は以下のような感じ 以下みたいな感じで、filterというパラメータを最後につける。 (filtered-accumulate combiner null-value term a next b filter) そんで、この条件だったら、combinerパラメータで引き込んだ、関数やら「+」やら「-」 やらをやって…
やばい、思ったより簡単だった。 もちろん、間違ってるかもだけど。 これは、前に出てきてるsumとproductをさらに、accumulateという関数で 抽象化できませんか?という問題。 抽象化をどうやって考えるかといえば、 ざっくり、今まで固定値だった部分を、パ…
実は理解が足りないのかもしれないが、わりと簡単に問題が解けた。 解くための方針は以下みたいな感じ。 まず、productの問題。 sumはある式の解を、がんがん足していくのだが、 productは式の解を、がんがん掛けていく。 だから基本的に以前作ったsumの「+…
この問題、ここまでまじめにやってきた僕にとってボーナス問題に近い。 反復的にっていうのは僕の解釈だと、 「今までの計算結果(状態)を引数で渡してあげちゃって、終了条件で結果を返す」 みたいな方式で、そうすると「立つ鳥後を濁さず」みたく再帰計算が…
はいはい、そうそう、 ちょっと前までの説明の dx の代わりに、 h = (b - a)/n ととかやって、 y[k] = f(a + k * h) とかやる訳ね。 よゆうよゆう と余裕をかましていたのでした。 数分後 - - - ああ、もうわかる訳がない!! こんな問題!!! なんだこりゃ…
[追記20090226] これソースコードのところ、間違ってます。 教科書の以下のくだりに目をつけた。 つまり1でもn-1でもないがその二乗がnを法として1になる数がなかったか調べる。そういうnを法とした1の自明でない平方根があれば、nが素数でないことが証明で…
ここで出ている、charmichael数っていうのは、 561、1105、1729、2465、2821 っていう数で、 Felmatテストはパスするけど、素数ではない数。 教科書に書いてあった nを法として合同 とかいうことば。 先々週ぐらいに、教えてもらったのに、そもそも意味がわ…
そもそも、 (* (expmod base (/ exp 2) m) (expmod base (/ exp 2) m)) なんてことをやると、ここで計算が二系統に分かれる。しかも同じ計算を倍々にし続けることになる。 これはめちゃくちゃスペースをくう。整数の平方を求めるのに比べて大きく遅くなる。 …
とりあえずは、ここに書いてありますexpmodを実装してみる。 1 #!/usr/local/bin/gosh 2 ;; -*- coding: utf-8 -*- 3 4 (use ggc.debug.trace) 5 (use math.mt-random) 6 7 ;;random;;;;;;;;;;;;;;;;;;;;;; 8 (define mt (make <mersenne-twister> :seed (sys-time))) 9 (defin</mersenne-twister>…
Fermat法を利用してのprime-test ちゃんと、θ(log n)な感じの計算量増加。 底を10とすると、nが100倍されても、計算量が2倍ってやつ。 nが1000倍なら計算量は3倍。いけてます。 goucheだからかわかんないけど、教科書のFermat法の実装を使うだけだとエラーが…
タイトルの問題で、Gaucheにない関数(runtimeとrandom)を使うのでそれを覚え書き。誰かのブログから取ってきたんだけど、誰のだか忘れた。 ;;runtime (define (runtime) (use srfi-11) (let-values (((a b) (sys-gettimeofday))) (+ 1000000 b))) randomは結…
こんな感じ。 #!/usr/local/bin/gosh ;; -*- coding: utf-8 -*- (use ggc.debug.trace) ;;runtime;;;;;;;;;;;;;;;;;;;;;; (define (runtime) (use srfi-11) (let-values (((a b) (sys-gettimeofday))) (+ 1000000 b))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;1-…
たぶんこんな感じ。 1 #!/usr/local/bin/gosh 2 ;; -*- coding: utf-8 -*- 3 4 (use ggc.debug.trace) 5 6 (define (square n) 7 (* n n)) 8 9 10 (define (smallest-divisor n) 11 (find-divisor n 2)) 12 13 (define (find-divisor n test-divisor) 14 (co…
教科書通りでだいたい、2倍程度はやくなった。 計算時間が、60%になったってとこか。 10%はなんかのオーバーヘッドとか、1の加算の方が、2の加算より早いとか云々。 変えたのは、21行目から25行目 1 #!/usr/local/bin/gosh 2 ;; -*- coding: utf-8 -*- 3 4 (…
http://shibuya.lisp-users.org/2009/01/30/sltt-2/おお、 第一部「Technical Talks」 14:35 Mosh Internals & SRFI-98 (ひげぽん/サイボウズ・ラボ株式会社) 15:15 休憩(10min) 15:25 Lisp quote unquote (黒田寿男/数理システム) 16:10 大休憩(35min) 16:4…
計算機プログラムの構造と解釈 第二版 P26 問題1.19 すごく難しかったが、 割とよくできたと思うので、結果を乗せておきます。 (Tpq)^2 = Tp'q' なので、Tpq を二回実行して、比較してみれば、p' q'は、もとまる。 Tpqを一回実行した結果の対をA B とすると…
会社でsicp読書会が開かれておりまして、 生意気にもいそいそとそれに参加させてもらうことになりました。そんで僕はgaucheをつかいたいんだけど、 gaucheにはtraceっていって、実行をトレースしてくれる関数がない!!ということで、調べたところ、、、 結…