もし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年の抱負)

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

数学ガールに登場する擬似コード風のプログラミング言語が実行できるwebアプリを作り始めました

なんで作り始めたのかとか、色々説明したいと思いますが、とりあえずデモ動画を貼りつけておきます。 アプリ名前は「Hello Algorithm」で、urlはhttp://helloalgorithm-nnabeyang.dotcloud.com/です。 ステータス 僕自身が"Hello Algorithm"を使って実装した…

2011年を振り返る

5月 C/C++のポータブルな実行環境としてのGoogle NaCl はてなブログは5月13日から始めたようです。実はこれが一番ブクマされた 記事です。たしかこの日にグーグルのイベントがあってNaClってのが旬だったという ことが大きいと思います。当時はNaClはflagを…

dotcloudを使ってみた

一つ前の記事で紹介した"Tour of BASIC"をdotcloud上にアップしてみました。 使い方については動画を見たら分かるかと思うので、再掲しておきます。 動画: url:http://hellobasic-nnabeyang.dotcloud.com/index.html

Basic言語のインタプリタのwebuiを作ってみた

こんな感じです。 とは言っても"Tour of Go"をいじってGoの代わりにPLYに入ってたBASIC言語を実行するように変えただけなんですけれども(serverもpythonに変えた)。

PLYの中にBASIC処理系が入ってた

PLYはPython製のlexer,yaccなんですが、その中のexampleとしてBASIC処理系が入っていました。BASIC言語はさわった事が無かったので、次のようなシェルを作って遊んでみました。一応、viとも連携してファイルを編集(edit_ fpath)、削除(rm fpath)、そしてBASI…

linear searchのloop不変式について考えてみた。

リニアサーチは配列arrayからある値valueのある位置(インデックス)の最小値を返します。もしarrayの中にvalueが無ければNoneを返します。このときのloop不変式としては、loopをlower [ループ前] array[lower:upper+1]=array[0:len(array)+1]=arrayなので、成…

cmdモジュールでファイルパスを補完(readline)

コマンドラインツールを作るとき、外部ファイルを読みだしてゴニョゴニョすることが多々あるかと思いますが、そんなとき、ファイルパスを補完するように書かないと、正直使えません。Pythonのcmd.Cmdを継承すると、そういうことが簡単にできます。そういうこ…

wsgiで静的ファイルを扱うサーバーを書く

タイトルの通り、SimpleHTTPServerのように動くwsgi的なアプリケーションを書きました。HTTPRequestHandlerの部分が少し癖があるので、標準のハンドラではこのアプリケーションは動かないと思います。あとはエラー処理もしていないですね。 #!/usr/bin/env p…

webブラウザからのリクエストを書き出す

前回書いたHTTPRequestHandlerのhandleメソッドを次のように書き直して、ブラウザから送られてくるリクエストを調べるツール?を作ってみました。JavaScriptの場合とかも試してみたいとも思いますが、今回はHTMLのフォームからPOSTメソッドでリクエストを送…

HTTPリクエストハンドラ:ディレクトリ一覧

HTTPリクエストハンドラにディレクトリ一覧機能だけ追加 import StringIO .. def send_head(self): path = "." + self.path if os.path.isdir(path): return self.list_directory(path) .. def list_directory(self, path): f = StringIO.StringIO() f.write…

HTTPリクエストハンドラを書く

PythonのSimpleHTTPServerはクライアントからのreqestを受け取るとそれをRequestHandlerClassに渡してインスタンス化します。これはSocketServerモジュール中のBaseServerを見ると分かります。 def finish_request(self, request, client_address): """Finis…

HTTPリクエストのモックを作る

SimpleHTTPRequestHandlerを利用してHTTPリクエストのモック(MockConnection)を作りました。というのはたぶん奇妙な言い方で、SimpleHTTPRequestHandlerの動作を確認してみました。 #!/usr/bin/env python2.6 import unittest from test import test_support…

symfony1.4でhello, world

symfony1.4のインストールはPractial Symfonyの1日目の通りにすれば出来ます。ここでは"Hello, World"とだけ出すモジュールを作って、URLルーチンとそのテスト(機能テスト)をすることを目指します。つくるものはCodeZineにあるやつのアップデート版と考えて…

QuickCheckも動かす:test-framework

Haskellを使う段階においては、HUnitよりもQuickCheckが必要なんじゃないかと思います。だから本当はQuickCheck用のテストと少しのHUnitテストを書くことになると思うのですが、これを同時に扱うライブラリにtest-frameworkがあります。まず挿入ソートを前の…

HUnitの使い方(2)

MyTreeモジュールをHUnitでテストしながら作ってみます。ここの文章を読めば、HaskellでHUnitを使いながらモジュールを作る方法が分かります。ではまずテストを作ります。 $ghci GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading pac…

Hugsにエディタを設定する

hugs上で":e "するとを開いて編集できるので、とても便利です(二回目以降は":e"だけで以前のファイルを開くようです)。 hugsは":s -Evi"とすると、viをエディタに設定できますが、この設定は一時的なものです。 hugsは環境変数EDITORに設定されているエデ…

HUnitの使い方(1)

HUnitをとりあえず実行してみました。次回、モジュールをテストする方法も説明するつもりです。まずghciを立ち上げてwasrun.hsを作ります。 noriaki@noriaki-laptop:~$ ghci GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package…

コルーチン化によって関数のテスト可能性を高める

マージソートみたいな関数は、テストが書きにくいと思います。マージソートを書くときはだいたい下のようにprintで書きだして、動いているか見ながらプログラムを書くような感じになると思います。 def MergeSort0(data, l=0, r=None): if r is None: r = le…

PySQL

バグバグですが、githubに置きました(https://github.com/nnabeyang/pysql/tree/)。 git clone git@github.com:nnabeyang/pysql.git でリポジトリが得られます。READMEに書き忘れましたが、現在bitstringを使っています。

パッケージを作る

パッケージの作る方法は「Goコードの書き方」にあります。これに従って、Makefileを作ります。my_sort.goにmysortパッケージを作るとすると、Makefileは include $(GOROOT)/src/Make.incTARG=mysort GOFILES=\ my_sort.go\include $(GOROOT)/src/Make.pkg と…

パッケージ利用者から参照可能なシンボル

golangは、Cとも違うし、C++, Javaなどとも少し毛色が違った言語のような気がするので、触りはじめました。とは言っても、オブジェクト指向プログラミングもできるようなので、とっつきやすいとも思います。パッケージsortの中身を見ると、insertionSort, qu…

rangeの文字版c_rangeを書いた(binasciiの使用例)

Python Learners!で教えて貰ったのですが、rubyだと"('!' .. '?').each{ |e| print e, ' ' }"で、"! \ " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; ?"を書きだすことができるんだとか。rubyは数字も文字の場合も扱えるのでPythonのrangeより賢いじ…