2012-01-01から1ヶ月間の記事一覧

1月を振り返る(2012)

1月はHello Algorithmを作っていたこともあって、blogのエントリもほとんどそれに関するものです。もっとオープンな技術に関する記事を書きたいのですが、勉強不足になりました。1月は、いくつか機能を追加することには成功しましたが、2月はUIを改善したい…

変数追跡機能

現在Hello Algorithmに変数追跡機能を追加しようとしています。だいたいどんな感じの機能か伝わるようなデモができたので、デモだけ公表します。 これまでのおおよその機能は数学ガール-乱択アルゴリズム-のp109にあるようなシーンを再現することをイメージ…

unit/test(1ファイルの場合)

Rubyでテスト駆動開発するのはとても簡単です。test/unitをrequireして、TestCaseを継承したclassをファイルに作って実行するだけです(テストメソッドは多分"test_"で始まる必要がある)。test/unit.rbの方でテストの実行が記述してある(test/unit.rbの最後の…

特殊変数$!

るりまサーチによると最後に発生した例外が$!に入るそうです。 #!/usr/local/bin/ruby puts "$! = #{$!}(#{$!.class})"#=>"$! = (NilClass)" begin raise "test" rescue puts "$! = #{$!}(#{$!.class})"#=>"$! = test(RuntimeError)" end puts "$! = #{$!}(#…

ブロック付きメソッド

Rubyを今日から触りはじめてます。test/unitを見ててat_exitというブロック付きメソッドを見つけたので、動作を確認してみました。 #!/usr/local/bin/ruby $wasrun = false def say_hello_once at_exit { puts "hello, world!" }unless $wasrun $wasrun = tr…

YIELD関数利用可能になりました

YIELD関数がHello Algorithmから利用可能になりました。YIELDは、関数を壊さずに変数の変動を追うことができる便利な関数かなと思います。

YIELD関数を作ってみた

現在、前の投稿で考えていたYIELD関数を作っています。機能は少し変わりました。実際に作っているYIELD関数はYIELD(関数名, 引数1, 引数2,..., '変数1 変数2 ...')でジェネレーターオブジェクトを生成します。NEXT(ジェネレーター)で最後の引数で指定した変…

もしpythonにyieldを埋め込む関数があると

以前、コルーチン化することで関数のテストのしやすさが上がるんじゃないかと考えたことがあります。そのときはpythonでyieldを使っていたのですが、テストのためだけにyieldを入れることはまずありえないです。替りにコメント中のyieldを実行する関数YIELD…

3-SATを解く乱択アルゴリズムがHello Algorithmで動いた

以前Pythonで実装したソースコードを数学ガールに登場する擬似コード風に書きなおしてみました。省略しているところを補えばこのコードは、Hello Algorithmで動かすことができます。 failed <- [] procedure RANDOM-WALK-3-SAT(f, f_size, n, R) #p353。ただ…

3-SATを解く乱択アルゴリズムを実装してみた

数学ガール-乱択アルゴリズム-の9章にある3-SATを解く乱択アルゴリズムをPythonで実装してみました。p336の強正美優問題は正しく計算できるところまで確認しました(テストではupdateとbf_three_satを使ってます)。ラウンドあたりの成功率が妥当かどうか調べ…

Hello Algorithmで「アルゴリズムイントロダクション」

「アルゴリズムイントロダクション(改訂二版:第一巻)」にあるプログラムを「Hello Algorithm」上で動作できるようにしようとし始めました。そのためにOR, AND演算子を追加しました。データ構造への対応するかどうかは検討中です。対応状況 p16:挿入ソート

Hello Algorithmが"みんなの「数学ガール」"に載りました

画像・動画・音楽・感想文などで、 数学ガールの世界を盛り上げる読者のページとして"みんなの「数学ガール」"があります。今日、そこにHello Algorithmのリンクが追加されることになりました。(結城さん、ありがとうございます。)このページにリンクされた…

デバッグモードを追加しました

デバッグモードを追加しました。行ごとにプログラムを実行できるのが特徴です。print関数のフォーマット部分が特に未熟です。記念に動画も撮っておきました。 技術的な話 作ったモノを記録するだけだと、ブログとしての意味あいが薄れるので、情報を共有した…

Hello Algorithmで再帰関数が使えるようになりました

Hello Algorithmで再帰関数が使えるようになりました。たとえば、次のようなプログラムも動かせます。 procedure Fib(n) if n = 1 or n = 2 then return 1 else return Fib(n - 1) + Fib(n - 2) end-if end-procedure print('Fib(5) = %d\n', Fib(5))

巨人の肩に立つ(2012年の抱負)

ぼくはいわゆる"今年の抱負"というのを決めたことがないです。細かいことを決めると、色々あって結局しないだろうし、大きな目標にしても、大抵は決まりきっていたので掲げるほどでもありませんでした。ところが、今年くらいからは、さて今年は何をやろうか…