ruby

英語の単語を原形に戻す WordNet-based lemmatizer

nltk の実装を移植する。 http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus.reader.wordnet-pysrc.html#WordNetCorpusReader.morphy使う情報: WordNet の ${WNHOME}/dict/*.exc 不規則変化 WordNet の ${WNHOME}/dict/index.* 語基 品詞ごとの接尾…

ruby 1.9 test/unit/ui/console/testrunner のバグ

現在の ubuntu 8.10 でインストールできる ruby1.9 は test/unit がうまく動かない。 (バージョン:ruby 1.9.0 (2008-06-20 revision 17482)) 具体的にはこういうエラーが出る。 /usr/lib/ruby/1.9.0/test/unit/ui/console/testrunner.rb:94:in `sub!': ca…

SizedQueue

class SizedQueue < Array def initialize(n) @N = n @i = 0 end def push(x) ret = self[@i] self[@i] = x @i = (@i+1) % @N return ret end def pop() old_i = @i @i = (@i+@N-1) % N return self[old_i] end end

現時点で ruby-1.9 は使いにくいので ruby-1.8.7

ruby-1.9 のいいところ(injectがreduceで呼べるとか) http://blog.afoolishmanifesto.com/archives/49 はだいぶ ruby-1.8.7 にバックポートされている反面、1.8 のよく使う機能(base64とか)が 1.9 に入っていない。 ので 1.8.7 を使う

「Ruby 1.9 を語る」 by まつもとゆきひろ

http://mono.kmc.gr.jp/~yhara/d/?date=20071215#p03 String * String#eachが廃止された。つまり、String自身はもうEnumerableではない。 * なぜか? o String#eachは、何について繰り返すべきか自明でない(行?文字?バイト?) o 1.9では、明示的にいずれか…

ruby-1.8 では同名でスコープの違うローカル変数を作れない

http://www.ruby-lang.org/ja/man/?cmd=view;name=%ca%d1%bf%f4%a4%c8%c4%ea%bf%f4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4 ローカル変数スコープ(クラス、モジュー ル、メソッド定義の本体)における小文字で始まる識別子への最初 の代入はそのスコープに属…

アナグラム

意外な単語がアナグラムだったりします。 thread HATRED reproduce PROCEDURE thousand HANDOUTS generate TEENAGER process CORPSES PROCESS ruby -e'class String; def sort(); self.split(//).sort.join;end;end; dic={}; ARGV.each{|f| File.open(f).eac…

Rubyにおける改行

オブジェクトとメソッドのあいだには改行があってはいけないようです。 ↓コンパイルエラー p(1 + 2)↓もちろんこれはOK p(1+ 2)

配列の順列の列挙

class Array def perm() if self.length <= 1 then [self] else a=self[1..-1].perm; c=[]; a.each { |x| 0.upto(x.length) { |y| c.push( (y==0 ? [] : x[0..y-1]) + [ self[0] ] + x[y..-1]) } } c.uniq end end end "123".split(//).perm.each{ |x| p x }…

ruby でmultibyte文字単位の処理

/usr/bin/ruby -Ke -rjcode -e'STDIN.each{|x| if x.jlength>70 then puts x; end} 文字数70以上の行だけを出力する例

use utf8 より $KCODE='UTF8' のほうが速い

#! /usr/bin/env ruby $KCODE='UTF8' require 'moji' DAKUON = Hash[*('ウヴカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバヒビフブヘベホボ'.split //)] HANDAK = Hash[*('ハパヒピフプヘペホポ'.split //)] DAKUON_ORIGIN = DAKUON.ke…

nesugi.net - swigの使い方のメモ書き

http://www.nesugi.net/hiki/?swig%a4%ce%bb%c8%a4%a4%ca%fd%a4%ce%a5%e1%a5%e2%bd%f1%a4%ad 1. moduleにしたいプログラムのsource(*.cppとか)を持ってくる 2. cppファイル毎に*.iを書く ← これがswig語 3. swigコマンドで*.iを各スクリプト言語用のwrapper(…

Amrita Homepage

http://amrita.sourceforge.jp/ HTML の id ベースの HTMLテンプレート

one-liner Fibonacci

perl -e '$x=0;$y=1; ($x,$y)=($y,$x+$y)for(1..<>); print"$x\n"' ruby -e 'x=0;y=1; gets.to_i.times{y=x+y;x=y-x}; p x' Ruby の方が短い。

Ruby のデフォルト文字コードの変更

どうも、SUSE (もしかしたら Fedora Code も?)だとデフォルトが utf-8 になっていて、 eucjp を想定しているプログラムがこけたりする。デフォルト文字コードは、環境変数で指定する: export RUBYOPT="-Kn"

Ruby のある風景

http://mono.kmc.gr.jp/~oxy/ 若き情報学者? anthy の開発者の一人でもある。

Rubyリファレンスマニュアル 1.6.8から1.8.0への変更点(まとめ)

$stdin [change] $stdout, $stderr は、$defout, $deferr の別名になり $defout, $deferr は obsolete になりました $stdin は、普通のグローバル変数となりました(STDINをリダイレクトする動作はなくなりました) $defout や $deferr に代入を行うと警告がで…

Ruby でプロセス間通信

#! /usr/bin/ruby # 2対のパイプを用意 pin, cout = IO.pipe cin, pout = IO.pipe Process.fork { # この中は子プロセス STDIN .reopen cin STDOUT.reopen cout pout.close_write pin.close_read exec "bc" # 子プロセスはこのあと bc になる } # この後は親…