Scheme

Problem 52 - n倍しても同じ数が現れる

英語の簡単なものからProblem 52 - Project Euler It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6…

Problem 42 - 三角数

段々翻訳されてない所に入ってきた。英語力が無い僕には辛くなりそう。Problem 42 - Project Euler The n^th term of the sequence of triangle numbers is given by, tn = ½n(n+1); so the first ten triangle numbers are:1, 3, 6, 10, 15, 21, 28, 36, 45…

SICPを読む(104) 問題 3.21 - 3.22 - キュー(2)

もうちょい。 問題 3.21 Benのわがままを聞け。 (define print-queue car) (print-queue q) ; () な、消えてるだろ。データ構造がリストなんだからしょうがないじゃん。 問題 3.22 んじゃデータ構造変えてやればいいじゃないかと、次の問題へ。 (define (mak…

SICPを読む(103) 3.3.2 - キュー

キューなんて簡単だと思ってたら、SICPの実装が面白い。メモっておこう データ構造は(cons 先頭ポインタ 最後のポインタ) リストはポインタとしても使えるよねという発想。いただき。 挿入は(list 新規データ)として、最後のポインタを更新すればいい。 削除…

SICPを読む(102) 問題 3.16 - 3.20 対の数

ガンガンいくぞー。 問題 3.16 Benの手続きがうまくいかい理由。 (define a (cons 0 1)) (define b (cons 2 3)) (count-pairs (cons a b)) ; 3 (set-car! b a) (count-pairs (cons a b)) ; 4 (set-car! b a) (set-cdr! b a) (count-pairs (cons b b)) ; 7 無…

SICPを読む(101) 問題 3.12 - 3.15 - ポインタ

サックリと。 問題 3.12 append!について。予想が当ってて良かった。append!,last-pairはSRFI-1にあるみたい。last-pairは使ったこと無かった。活用できそう。 問題 3.13 ポインタがわかってれば大丈夫だと思う。要するに、nullのあったポインタの所に、先頭…

SICPを読む(100) 問題 3.11 - 内側ののdefine

とうとう100回を迎えてしまったが、SICPは半分も進んでいない。長い戦いになりそうだ。 問題 3.11 銀行口座手続きの説明をせよ。という問題。とりあえず、内側のdefineについてfactで考える。内側のdefineはletrecと同様と考えればいい。じゃぁ、letrecはど…

SICPを読む(98) 問題 3.9 - 評価モデル

どうもSICPの評価モデルの解説が曖昧だ。返された値がどうなるかについて解説されていないので、おかしな図になってる。 Scheme実装中なので、僕の実装で書いてみよう。 問題 3.9 階乗の再帰と反復を環境モデルで表せ。という問題。 (factional 3)で先に反復…

SICPを読む(97) 問題 3.8 - 命令プログラミングの落とし穴

問題を読み取れているのかわからない。 問題 3.8 最初に関数が呼ばれたのであれば、その値を返す。二度目以降なら0を返す。という関数にしてみた。 (define f (let ((flag #f)) (lambda (n) (if flag 0 (begin (set! flag #t) n))))) フラグが立っていなけれ…

SICPを読む(96) 問題 3.7 - 共同口座

ムズイな。 問題 3.7 パスワードつき銀行口座を改造して、共同口座を作れ。という問題。口座は同じで、パスワードが違うように設定する。 問題は、パスワードを変更してしまうと、引きずられて、元のパスワードまで変わってしまう点。ユーザーオブジェクトを…

SICPを読む(95) 3.1.3 - 代入を取り入れた対価

代入を取り入れた対価に関する解説を読む。 関数型プログラミングの素晴らしさのひとつは、デバッグのしやすさだ。 (define (square x) (* x x)) と定めたら、(square 2)は4。変わらない。絶対変わらない保障がある。バグをはっきり追える。 命令型プログラ…

SICPを読む(94) 問題 3.6 - 乱数発生器改

嗚呼、Schemeすることは難しい事じゃない。ただ脳に身を任せ・・・(謎 問題 3.6 乱数発生器を改造して、resetを付ける問題。generateは要らないと思うので、無くした。 (define random-init 12345) (define (rand-update x) (modulo (+ (* 214013 x) 253011…

SICPを読む(94) 問題 3.5 - モンテカルロ法による定積分

出ました。セキブン。 問題 3.5 モンテカルロ法を使って、定積分せよという問題。前前回の応用編。 まず、x1,x2,y1,y2という範囲を設定する。x1 範囲x1〜x2までの範囲をランダムにプロットしたいので、0〜1 * (x1 - x2) - x1として、x1〜x2を作る。 f(x1〜x2…

SICPを読む(99) 問題 3.10 - 局所変数の入れ物とフレーム

うぅん。SICPの説明がなんか納得いかない。 問題 3.10 make-withdrawのletをlambdaに書き直して、環境モデルを書き直す問題。 (define (make-withdraw internal-amount) ((lambda (balance) (lambda (amount) (if (>= balance amount) (begin (set! balance …

SICPを読む(93) 3.1.2 (3) - モンテカルロ法 (2)

難航するかと思ったら、それほどでもなくて良かった。互いに素 - Wikipediaふむふむ。なんとなく理解出来る自分がいることに驚く。 aとbが互いに素であることと 2^a-1 と2^b-1 が互いに素であることは同値。 因数分解してみるとわかる。オイラー入門1章を。 …

SICPを読む(92) 3.1.2 (2) - モンテカルロ法(1)

かなりゆっくり進んでおります。前回、M系列乱数を作ったので、モンテカルロ法を試しながら性能実験です。SICPのモンテカルロ法がよくわからないので、とりあえず単純な奴を。 単純なモンテカルロ法を使って、円周率を量る 三平方の定理から、単位円上の円は…

パターンマッチ使ってみた。

Schemeにもパターンマッチがあるらしい。 8 Pattern Matching Gauche ユーザリファレンス: 11.46 util.match - パターンマッチング 知らなかった・・・使ってみる。 (require (lib "match.ss")) (match '(1 2 3) ((a b c) (list c b a)) (_ 'else)) ; (3 2 1…

M系列乱数を作ってみた。

M系列乱数を作ってみた。 M系列乱数は、R(n) = R(n-p) xor R(n-q)の漸化式で作れる。 と言っても最初が必要なので、既存のアルゴリズムを使用して、乱数テーブルを作っておく必要がある。nを1個ずつ進めながらxorで計算していく。nの余りを取っていけば、テ…

SICPを読む(90) 問題3.1 - 3.4

簡単だったので、やっちまおう。 問題 3.1 アキュムレータを作れ。 (define ((make-accumulator n) x) (set! n (+ n x)) n) (define A (make-accumulator 5)) (A 10) ; 15 (A 10) ; 25 lambdaイラネー。 問題 3.2 これは面白い。関数の呼び出し回数を数える…

SICPを読む(91) 3.1.2 - 乱数

randの解説があるけど、randのソースが書いてなくてハマった。 (define random-init 12345) (define rand (let ((x random-init)) (lambda () (set! x (rand-update x)) x))) (define (rand-update x) (modulo (+ (* 214013 x) 253011) 32767)) (rand) ; 109…

Problem 31 - コインの両替問題

SICPでやった気がする。Problem 31 イギリスでは硬貨はポンド£とペンスpがあり,一般的な流通ではこれらの8つの硬貨がある.1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).以下の方法で£2を作ることが可能である.1×£1 + 1×50p + 2×20p + 1×5p + 1×2p…

Problem 27 - 素数生成式

素数な問題。Problem 27 オイラーは以下の二次式を考案している: n^2 + n + 41.この式は, nを0から39までの連続する整数としたときに40個の素数を生成する. しかし, n = 40のとき40^2 + 40 + 41 = 40(40 + 1) + 41となり41で割り切れる. また, n = 41のとき…

Problem 26 - 循環節

やっと解けた。Problem 26 - PukiWiki 単位分数とは分子が1の分数である。分母が2から10の単位分数を10進数で表記すると次のようになる。1/2 = 0.5 1/3 = 0.(3) 1/4 = 0.25 1/5 = 0.2 1/6 = 0.1(6) 1/7 = 0.(142857) 1/8 = 0.125 1/9 = 0.(1) 1/10 = 0.10.1(…

数学ガールを読むぞぉ 8 - 下降階乗冪

さてと、出かける前にもうちょい。それほど難しくはなかったので6章まで読み進める。 数学ってスゲー難しい言葉がバンバン飛び出してくるので、名前を聞いただけでビビっちゃう。でも、落ち着いて読めば「ナンダそんなことか」って思えることが多くなった。 …

数学ガールを読むぞぉ 7 - フィボナッチ数列の一般項(2)

フィボナッチ数列の一般項の続きです。 フィボナッチの一般項は、なんですが、(1 + √5)^nの計算が重い。結局n回展開しなければならないため、計算回数は反復の時と変わらなかった。桁落ちしてしまうので、浮動小数点は使いたくないし・・・。 むむぅ・・・と…

数学ガールを読むぞぉ 6 - フィボナッチ数列の一般項

前回,フィボナッチ数列の母関数の一般項を求めることが出来たので、後は、フィボナッチ数列の一般項に向けてゴニョゴニョやるだけっす。 写経中・・・ 出来た!!フィボナッチ数列の一般項を手に入れた!! が・・・Schemeでやると誤差が出てしまう。四捨五…

数学ガールを読むぞぉ 5 - 漸化式

Schemeのお陰で息を吸うように再帰でプログラミング出来るようになりました。フィボナッチの定義をそのまま写せば、 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 2)) (fib (- n 1)))))) (fib 10) ; 55 簡単ですね。が・・・ (fib 100…

数学ガールを読むぞぉ 4 - 無限級数

4章の前半戦。スゲー重要ポイントなので、キッチリやる。 初項1,公比xの0項からn項までの等比数列は、nを無限大まで伸ばす。 x ∞にすると、 なので、となって、等比数列の無限級数が得られた。 初項をaとしたときは、となる。 イマイチピンと来ないので、 実…

数学ガールを読むぞぉ 3 - ωのワルツ

三角関数の復習が終わったので、三章に入る。前読んだときははサッパリわからなかったんだけど、全然すんなり入ってくる。三角関数の復習して良かったかも。 写経中。・・・x^3 = 1はわかった。んじゃ、x^4 = 1はどうなる?x^4 = 1 (x^2 + 1)(x^2 - 1) = 0 (…

数学ガールを読むぞぉ 2 - 三角関数

Project Eulerやろうと思ったけど、数学の知識が足りなすぎる事に気づいた。ちと必要に迫られてきたので、高校数学の復習に数学ガールを再読することにした。 3章に進むといきなり倍角公式が出てくるけど、三角関数がヤバめだ。三角関数について復習してみた…