Ruby

SKIコンビネータでSKK = I(Ruby版)そのに

lambdaが入れ子になっているところをまとめてみました。だいぶ読み易くなりました。 def nlambda(n, xs = [], &f) if n <= 0 f[*xs] else lambda {|x| nlambda(n - 1, xs + [x], &f) } end end I = nlambda(1) {|x | x } K = nlambda(2) {|x, y | x } S = nl…

SKIコンビネータでSKK = I(Ruby版)そのいち

Rubyで書くとこんな感じかな。カリー!! カリー!! I = lambda {|x| x } K = lambda {|x| lambda {|y| x }} S = lambda {|x| lambda {|y| lambda {|z| x[z][y[z]] }}} p S[K][K][100] == I[100] # => true

Hashのmap

まじにめにどんなのがうれしいか書いてみる - takkan_mのNo planな日常 僕もHashのmapはHashの方がしっくりします。こっちの方が汎用に使えそうなんですよね。あー、でもmapはEnumerableでeachを使って実装されているのかー。悩ましい。。。 class Hash def …

Ruby/Rails勉強会@関西-21に参加しました

六甲駅から神戸大学まで歩いて行きました。神戸大学は山腹にあるので結構汗かきました。以下、個人的なメモです。聞き間違い、書き間違いあるかも。

indent2tree - メモ帳

僕もRubyで実装してみました。いきなり2つインデントした場合とかのエラーチェックは実装していません。手抜きです。 class Node def initialize(data = nil) @data = data @children = [] end def <<(node) @children << node end def dump(prefix = '', ne…

HaskellのDLLを作ってRubyから呼ぶ

18. Running GHC on Win32 systems — Glasgow Haskell Compiler 8.6.4 User's Guideを参考にやってみました。Haskellで書いたフィボナッチ関数をDLLにして、それをRubyのWin32APIを使って呼びます。Haskellのコードは必然的にIOになります。 ファイル名: fib…

RubyからHaskellを呼び出すライブラリ

RubyからHaskellを呼び出すライブラリ、Rubiskellを作ってみた - Greenbear Diary yharaさん、GJです。 runghcはお手軽でよいのですが、Rubyの拡張ライブラリとしてHaskellを直接組込めないものでしょうか? この辺の技術を組み合わせればできそうな気がしま…

String#to_proc

via: http://www.rubyist.net/~matz/20071030.html#p04 関数型言語ファンに朗報です。 これは興味深いです。特に演算子のカリー化ぽいことができるあたり。Ruby標準にはいらないけど面白いなぁ。 (1..5).map &'*2' → [2, 4, 6, 8, 10]

継続で末尾再帰

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかるより。 letを改造すると継続で末尾再帰がもう少しシンプルに書けるような気がします。こんな感じ。 module Let def _set_scope_accessor(scope, assigns) assigns.each do |name, value| scope…

ujihisaくんが動かない〜って言ってたコード

ですが、こんな感じになるのではないでしょうか。inlineのはよくわからないので普通に拡張ライブラリとして書いてみました。 ファイル: foo.c #include "ruby.h" static VALUE in_getproc_c(VALUE args, VALUE self) { VALUE x = RARRAY(args)->ptr[0]; doub…

Pattern Matching in Ruby

これはー。Rubyでlet、パターンマッチ、内包表記。どきどきします。魅かれます。 Pattern Matching in Ruby (The Scariest Fun : notes from a web startup) パターンマッチの続き

知人のRubyコードを勝手に添削してみました

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかる 勝手に添削をさらに勝手に書き直す - takkan_mのNo planな日常 僕も添削してみました。縛りは他の方と同じで「プログラムの構造など、劇的な変化はしない。例: クラスやメソッド構造など」で…

GraphvizRでRubyのクラス継承図を描いてみる - @jitteの日記

お。Graphviz + Ruby、面白そうです。ちょっと変更したら以下のような用途に使えないかな。 require 'rubygems'をした前と後でクラスの継承ツリーがどう変化しているかグラフ表示する。 あるプログラムを実行して、requireしたファイル、されたファイルをグ…

irbで実行した内容を簡単にユニットテストにする。

Gauche でテスト作成支援 gca.el - higepon blogを見て、Rubyっ子だったらやっぱりirbでやりたいなぁと思って試してみました。 irbで評価した内容とその返り値がTest::Unitのassertの形式でクリップボードにコピーします(Windows限定。gemでwin32-clipboard…

Proc.newとproc、lambdaとのセマンティクスの違い

Proc.newとproc、lambdaでは、returnの扱いが違います。おー、これはサプライズです。まぁProc.newはまず使わないからあまり影響はないのですが。 def foo Proc.new { return 'Proc.new' }[] return 'foo' end def bar proc { return 'proc' }[] return 'bar…

Rubyロゴコンテスト結果発表

http://www.ruby-assn.org/logo-contest.html.ja お。発表されています。これこれ。んー、シンプルでよいロゴです。 ※このロゴはCreative Commons Attribution-Share Alikeライセンスだそうです。

pipepo-0.1aリリース

勉強会を聞きながら内職していました。すみません。 はじめに PRaggerは便利そうなのですが、YAMLで設定ファイルを書くのが面倒だなぁと思って、Ruby自体をDSLとしたPRaggerみたいなものを作ってみました。 名前の由来は、パイプぽい(PIPE POi)何かです。 ダ…

第20回Ruby/Rails勉強会に参加しました

50分くらい遅刻しました。がっくり。今回は比較的こじんまりでしょうか?

PRaggerみたいな何か - pipepo(ぴぺぽ)

PRaggerは便利そうなのですが、YAMLで設定ファイルを書くのが面倒だなぁと思って、Ruby自体をDSLとしたPRaggerみたいなものを作ってみました。名前はpipepo(ぴぺぽ)です。名前の由来は、パイプぽい(PIPE POi)何かです。 ファイル: pipepo.rb #!/usr/bin/env …

Rubyで非決定性計算

以前ここで有名なBaker, Cooper…の非決定性計算をRubyで解いてみました。コードはこんな感じです。 #!/usr/bin/env ruby module Enumerable def distinct? table = {} each do |e| return false if table[e] table[e] = true end return true end end solve …

英語多読を日記に書くときの支援スクリプト

英語多読の本を読んだら、上みたいに日記に書いて記録を残しています。で、語数とかISBNとかをSSS英語学習法/多読+シャドウイングで調べているのですが、いい加減面倒なので、SSS英語学習法の検索結果をはてなダイアリーのフォーマットに変換する支援スク…

copen(こぺん)-0.1aをリリースしました

メールをEmacsで読んでて、その中に書かれているリンクをいちいちブラウザにコピー & ペーストするのが面倒くさいなぁと思って作ってみました。適当なランチャ経由で実行するのがオススメです。 ダウンロードは下記からお願いします。 Google Code Archive -…

Ruby/Rails勉強会@関西-19に参加しました

以下メモです。

日本Rubyの会 公式Wiki - Ruby/Rails勉強会@関西-19に参加します。

今週末です。参加される皆様、よろしくお願いします。Scalaは楽しみです。

配列ベースプログラミング言語「ざぼん」

LispにS式があってマクロがあるように。 Rubyの配列を使ってプログラミング言語を書いてみました。Ruby本体を使ってプログラム(= 配列)を操作することで、Lispのマクロのようなことができます。言語の名前は「ざぼん」です。「ざ」をいただきました。 とりあ…

遅延評価

世の中遅延評価が流行っているみたいです。 僕も抽象構文木を作って遅延評価する逆ポーランド電卓を作ってみました。値が再利用されないので、ぜんぜん面白くありません。いまいち。やっぱり関数定義くらいはできないとなぁ。 class Node def initialize(nam…

言語開発合宿に参加しています

今日やったことを書いておきます。 11:30 大阪発。昼食は新幹線の中で「京のおばんざい弁当」。ヘルシーです。 14:45 中津川付近の会場に到着。少し迷いました。 15:00 付近。ネットワークに繋がらずご迷惑をおかけしました。 15:30 自己紹介。携帯向けBASIC…

Rubyでもカリー化

関数型言語ラブな人は、Rubyでもカリー化したくなってくると思います(特にHaskellラブな人はその傾向が強いように思います)。ということで、こんなメソッドを書いてみました。 module Kernel def curry(sym, *a1) f = sym.respond_to?(:call) ? sym : method…

RubyでParsec

HaskellのいけてるパーサコンビネータライブラリParsecってRubyで使えるのかなと思って調べてみました。ふむ。とりあえずふたつ実装が見付かりました。 参照: HaskellのParsecを,Rubyで - もち Ruby Parsec - www.textfile.org

第18回Ruby/Rails勉強会に参加しています

思いの外遠かったです。学園都市線 & 駅降りてからがこんなにかかるとは。駅からウダーの方と一緒に行きました。No Ruby No Lifeのバッグのおかげです。