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

加算ができた

やった。加算ができたっ。 $ cat example/add.scm (print (+ 1 2)) $ ./main.byte -o add example/add.scm $ avmplus add 3トークンを作るときに、"+1"(整数の1)と"+ 1"(+というシンボルと1という整数)を区別するのが大変だった。整数のパースを先にやると+…

OCamlのintは31ビット

OCamlのintは31ビットしかない。0x7FFF_FFFFが-1になるから、変だとは思ってたんだよ。 ABCでは32ビットの整数が欲しい状況がいくつかあるから、どうしよう。Int32モジュールを使えばいいんだけど、扱いが面倒そうなんだよなぁ。追記: Int32は1lみたいな記法…

みんなでOPMLを作って、共有しよう

http://howdyworld.org/opml/?TestみんなでアルファブロガーOPMLパックみたいなのを作れる、OPMLエディタ+Wikiみたいなサービスを作ったらおもしろくね?みたいな話をid:mallowlabsさんとしてた。その後、『Railsでフルスクラッチで書くのは面倒だけど、Hiki…

Problem31

30分プログラム、その304。Problem31 via ProjectEuler。 イギリスでは硬貨はポンド£とペンスpがあり,一般的な流通ではこれらの8つの硬貨がある. 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p). 以下の方法で£2を作ることが可能である. 1×£1 + 1×5…

Project Eulerの注意書き

Project Eulerの問題ページの一番下に注意書きがあった。 NOTE: Please do not contact Project Euler if you are unable to solve a particular problem. If you can't solve it, then you can't solve it!注意: 解けなくても、メール送ってこないでね。君…

Problem30

30分プログラム、その303。Problem30 via Project Euler。 驚くべきことに, 各桁を4乗した和が元の数と一致する数は3つしかない. 1634 = 1^4 + 6^4 + 3^4 + 4^4 8208 = 8^4 + 2^4 + 0^4 + 8^4 9474 = 9^4 + 4^4 + 7^4 + 4^4 ただし, 1=1^4は含まないものとす…

整数リテラルが使えるようになった

http://github.com/mzp/scheme-abc/tree/master整数リテラルが使えるようになった。やった! $ cat example/int.scm (print 42) $ ./main.byte example/int.scm $ avmplus a.abc 42

Problem30が分らない

Problem 30 - PukiWikiが全然分らない。 どこから手をつけたらいいんだろう。せめて桁数だけでもわかっていれば・・。

Problem29

30分プログラム、その302。Problem29 via Project Euler。 2 ≤ a ≤ 5 と 2 ≤ b ≤ 5について, abを全て考えてみよう: 2^2=4, 2^3=8, 2^4=16, 2^5=32 3^2=9, 3^3=27, 3^4=81, 3^5=243 4^2=16, 4^3=64, 4^4=256, 4^5=1024 5^2=25, 5^3=125, 5^4=625, 5^5=3125 …

ためしてみよう、スタックトレース(stack backtrace)

JavaやLL言語ではよくある、「スタックトレース」を、OCamlでも出してみましょう。 ソース mod1.ml(例外が発生): let test () = (function (a::_) -> a) [] mod2.ml: let test () = Mod1.test () main.ml: let _ = Mod2.test () debug.ml (* スタックトレー…

Problem28

30分プログラム、その301。Problem28 via Project Euler。 1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される: 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 両対角線上の数字の合計は101で…

OUnitの使い方

OCamlのユニットテストフレームワークのOUnitの使い方。基本的にはHaskellのHUnitと同じらしい。 環境 GODIでOUnitをインストールしてある。OCamlのバージョンは3.10で。あと、ディレクトリは以下のような構造をしている。 ディレクトリ名 用途 src/ テスト…

GitHubでアバター画像を設定したい

GitHubのSource Browserなどで表示されるアバター画像の設定でつまったので、メモ。まず、Gravatar - Globally Recognized Avatarsでアバター画像を設定する。Operaだと、うまくアップロードできなかったので、Firefoxを使った。次に、GitにGravatorに登録し…

Problem27 -実際に計算してみた-

30分プログラム、その300。昨日のコード(id:mzp:20080507:concurrent)を実際にマルチコアマシンで走らせてみた。 そこそこ時間がかかったけれど、時間をはかるのを忘れたので、どれくらいかかったのかはよくわからない。あと、一回、メモリ確保関連っぽいエ…

GitHub登録

Schemeっぽい言語コンパイラ for ABCをGitHubに登録してみた。http://github.com/mzp/scheme-abc/tree/master

git submodule

http://d.hatena.ne.jp/woremacx/20080308/1204986198のように、gitで外部レポジトリを扱えるようにする方法。 外部レポジトリの追加 git submodule addすると、外部レポジトリをサブモジュールとして取り込めるようになります。 # cloneする $ git clone gi…

Hello,world!!がコンパイルできたっ

Schemeっぽい言語をコンパイルして、ActionScript3 Bytecode(ABC)を出力するコンパイラを最近書いている。 やっとHello,world!!がコンパイルできるようになった。いえい。 $ cat foo.scm ;; First Program (print "Hello," "world") (print "It's wonderfull…

Problem27 -並列版-

30分プログラム、その299。- Problem27を並列で計算するように書き直した。 計算が遅いので、並列で計算して力づくで解いてしまう戦略。一応、並列版のmapを定義したり、io:formatがボトルネックにならないように別プロセスで出力するようにしたいりと、工夫…

Problem27

30分プログラム、その298。Problem27 via Project Euler。 オイラーは以下の二次式を考案している:n^2 + n + 41この式は, nを0から39までの連続する整数としたときに40個の素数を生成する. しかし, n = 40のとき402 + 40 + 41 = 40(40 + 1) + 41となり41で割…

Problem26

30分プログラム、その297。Problem26 via ProjectEuler。 解けたっ。自前で小数点の計算をして、循環を検出するようにした。1/983は983もの長さの循環節を持つらしいんだけど本当かよ。 使い方 $ time perl problem26.pl ..... 887 : 886 937 : 936 941 : 94…

Problem26

30分プログラム、その297。Problem26 via Project Euler。 単位分数とは分子が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 = …

Problem25

30分プログラム、その296。Problem25 via ProjectEuler。 フィボナッチ数列は以下の漸化式で定義される: F(n) = F(n-1) + F(n-2), ただし F(1) = 1, F(2) = 1.最初の12項は以下である. F(1) = 1 F(2) = 1 F(3) = 2 F(4) = 3 F(5) = 5 F(6) = 8 F(7) = 13 F(8…