info

2011-01-01から1年間の記事一覧

書籍「7つの言語7つの世界」Io言語2日目セルフスタディ

http://github.com/yppp/sevenlang二次元配列の総和 dim2sum := method(n, n flatten sum) dim2sum := method(n, n prepend(0) reduce(x, y, x = x + y sum)) Listに自分で定義した平均を求めるメソッドを追加、数字以外が混ざっていたら例外を投げるように …

書籍「7つの言語7つの世界」Io言語やってみる

フィボナッチ数 fib := method(n, if(n < 2, n, fib(n - 1) + fib(n - 2)) ) Io> fib(10) ==> 55 ループ版 fib := method(n, fir ::= 0 sec ::= 1 tmp ::= 0 n repeat( tmp = sec sec = sec + fir fir = tmp ) fir ) fib(31) println 分母がゼロの時答えがゼ…

書籍「7つの言語7つの世界」Rubyの章の最後の問題

method_missingテクニックを使って、CSVの一行目にある物をメソッド名にしてあとの二行をその列にある物を表示させる、attr_accessorもこんなふうに実現してるのかなあgithubにリポジトリつくったよ http://github.com/yppp/sevenlang # -*- coding:utf-8 -*…

書籍「7つの言語7つの世界」でRubyの章を読み飛ばそうと思ったけど、一部の問題だけ解く

配列をハッシュにしろ [1,2,3].zip([[4, 5, 6],5,6]).inject(Hash::new){|x, y| x[y[0]] = y[1]; x} 配列が入れ子じゃなかったら Hash[*[1,2,3].zip([4,5,6]).flatten] 16個と4個の配列を4個と1個づつで表示させろ eachを使って te = Array::new(16){|x| x} …

RubyでBrainfuck処理系作ってみた

意味無いと思うけどジャンプテーブル構築時についでに命令文字をシンボルにコンパイルするようにしてる https://github.com/yppp/brainf_ck # -*- encoding:utf-8 -*- class Brainfuck class ProgramError < StandardError end def initialize(src) @souce =…

Brainfuck言語やってみた

九九を9の段から1の段までASCII文字じゃなく数字として出力 +++++++++ [>+++++++++ [<[>>+>+<<<-]>>>[<<<+>>>-]<.><<-] >[-]<<-]使うメモリの番地 0 出力する段の数 1 足す回数のカウンタ 2 結果になる値 3 コピーのための0番地に戻すテンポラリ領域http://c…

RubyKaigi2011に行ったかんそう

こころにのこったはっぴょう、いくつか parse.yは簡単に改造できる Rubyでなんでも使いこなせると思うには 1.標準ライブラリをさわる 2.きれいなコードを書くこころがけ(副作用がある操作のおすすめはeachよりmap!らしい) 3.gemやRuby本体を改造する matz曰…

scheme(gauche)で世界のナベアツ問題

3がつく数と3の倍数の時だけアホになる(片仮名になる)それ以外は普通に数字を表示 peercastの大会で課題だったので、っていうか就活の課題やれ俺www (use srfi-1) (use srfi-13) (define (unpack x y) (if (= x 0) y (unpack (quotient x 10) (append (list …

luaでメタプログラミング(DSL)

宣言、luaは引数が文字列リテラル、テーブルリテラルだと、括弧が省略できる、ここではgenerateという関数を作っている、ようするに何かを操作する関数を作ればいい generate "iroiro" 文脈依存、luaにはRubyやCommonLispのような、instance_evalのみたいな…

ANTLR、とりあえずS式がパースできるようになった

あとはアクションを書く シンボルの定義が予想以上に文字を食うのでそこらへんに手まどった。 C言語のAPiとか、ANTLR_VECTOR構造体のメンバがわからなかったけど公式ページにドキュメントがあってよかった。 toplevel : s_expr* ; s_expr : atom | list | '\…

Rubyのメモ化をメタプログラミングを使わずにやる

一度は諦めたこの方法でできた def memoize(f) dp = {} lambda {|*arg| dp[arg] || dp[arg] = f.call(*arg)} end def ack(m, n) if m == 0 then n + 1 elsif n == 0 then ack(m - 1, 1) else ack(m - 1, ack(m, n - 1)) end end ack = memoize(lambda{|*arg|…

Arduino買った

LEDピカピカさせた。タクトスイッチをつけて、スイッチを押すたびにLEDのON/OFFが切りかわるやつやった。リアルタイムプログラムの処理はゲームと似た感じだ、1.処理して 2.表示する #define LED 13 #define BUTTON 7 //LEDやタクトスイッチが繋がれてるポー…