Ruby

「実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう」をRubyで

実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!?をRubyで写経してみます。 Thunk、 Lambda、App、Evaluateクラスは instance_of? により型を調べるためのものです。 Thunk でくるんである以外は lambda から…

たらい回し関数によるGCC、OCaml、Haskellの速度比較

「お気楽 OCaml プログラミング入門」に色んな言語のたらいまわし関数の結果が掲載されていて、OCamlがCよりも速い驚異的な数値を叩き出していました。 Haskell がありませんでしたので比較してみました。 C #include <stdio.h> int tak(int x, int y, int z){ if (x </stdio.h>…

チャーチ数とラムダ計算

検索していたら、きしだのはてな・おとうさん、ぼくにもYコンビネータがわかりましたよ! という記事にめぐり逢って面白かったので Scheme 写経してみました。 ラムダ関数の表記 ラムダ関数は λx.x のように表記します。 λx.x λx.x*2(λx.x*2)y という関数は …

COM を学ぶ(6) : C言語でExcel を操作する(Mingw)

C++ を Haskell から呼ぶのが大変だというのが分ったので、Ruby の win32ole.c を参考にC言語で Excel を操作する関数を書いてみました。 これらの関数を Haskell から呼べば HaskellでExcel を操作出来ます(^^)/ C++ ではシートから行・列を指定してCellsオ…

Ruby の invoke メソッドだけで Excel にアクセスする。

C で Excel にアクセスするのには COM の invoke を使ってアクセスします。C で書く前に Ruby の invoke メソッドだけを使ってアクセスしてみます。 参考:Win32OLE 活用法 【第 2 回】 Excel COM を学ぶ(5) : Mingw で MS-Access,SQL server に接続 requir…

安定ソート

安定なソート(stable sort)とは、 順序的に同等な要素が複数あったときに、その並びが元のまま保たれるもののことを言います。 ソート概要(アルゴリズムとデータ構造) 例えば、個人データを認識するための番号順に並べ、さらに組別に並べても、組ごとに認…

COM を学ぶ(3) : Ruby の invoke メソッドだけでアクセスしてみる。

COMの仕組みを理解しようと Ruby の Win32OLE ドキュメント(win32ole: Ruby Standard Library Documentation)を追ってます。 前回の「COM を理解する(2):CでADODB.Connectionに接続する」にあるテーブルを表現した構造体に invoke がありますが、Ruby の …

Gauche のハッシュテーブル Ruby のハッシュテーブル

Gauche のハッシュテーブルは Key の 比較を eq?, eqv?, equal?, string=? から選択して指定します。 gosh> (hash-table 'eq? '(a . 1) '(b . 2)) #<hash-table eq? 0x89ff578> gosh> (hash-table-get (hash-table 'eq? '(a . 1) '(b . 2)) 'a) 1 gosh> (hash-table-get (hash-table 'e</hash-table>…

Ruby で迷路

「はてなブックマーク - 人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか」の「startから距離で塗りつぶして、あとはgoalから距離が減る方向に辿る(koizuka)」を参考に解いてみました。 maze_string = "**************************\n" + "*S* …

ダイクストラ法(最短経路問題)

Dijkstraのアルゴリズムの FigureSP03-01をRubyで書いてみました。 Infinity = 9999 class Node attr_reader :status, :node_distance, :temporary_distance, :decision_distance, :id, :parent, :nodes def initialize(id, distance, parent) @id = id @nod…

ヒープソートをやってみる。

常に子よりも親が大きい(小さい)値の二分木をヒープという。 今度はヒープを使ったソート、ヒープソートをやってみます。 def heap(array,n) if n > 0 parent = (n - 1) / 2 # 親の位置 if array[n] > array[parent] tmp = array[n] array[n] = array[pare…

常に子よりも親が大きい(小さい)値の二分木をヒープという。

常に子よりも親が大きい(小さい)値の二分木をヒープという。2分木を配列で表現すると各要素の位置関係は n の親は n - 1 / 2 n の左の子は 2 * n + 1 n の右の子は 2 * (n + 1) となる。 0 | +--+--+ 1 2 | | +-+-+ +-+-+ | | | | 3 4 5 6 [0,1,2,3,4,5,6]…

Ruby で Twitter

Ruby で Twitter をやってみました。本家:ここに簡単な例が出ています。http://twitter.rubyforge.org/ ドキュメント http://twitter.rubyforge.org/twitter/"gem 'twitter'" がないと "uninitialized constant Twitter (NameError)" というエラーが出る。 …

Ruby で SQL server に接続

Ruby で SQL server に接続できたのでメモ。 #!ruby -Ks require 'win32ole' module OpenRecordset def [] field self.Fields.Item(field).Value end def []= field,value self.Fields.Item(field).Value = value end def each_record if self.EOF or self.B…

噛みくだいて貰ったので理解できるクロージャの話

Python Hack : 噛めば噛むほどおいしくなるクロージャの話中島聡さんにクロージャを分り易く解説していただいたので、Ruby でやってみました。 conf=0 data=0 def _get_from_disk(conf,data) config = "初期設定:conf=#{ conf += 1}" lambda do |arg| config…

リスト文字列を1文字ずつパース

深さを自由に表現できるリストをパースする まず、どのような動作をすれば良いか書いてみる。 str=%([["A",["B"]],["C","1"]]) 希望する結果 リストをスタックに保存 そのための 結果 しながら管理する様子 命令 [] s0[] s[0]=[] [[]] [[]] s0[] s1[] s[1]=[…

文字列を1文字ずつパースして配列の配列を作る

VB は分からないので今度はRubyで。 class String def head; self[0].chr end def tail; self[1...(self.length)] end end class Array def head; self[0] end def tail; self[1...(self.length)] end end str=%([["3014","Null","0-16-087"],["1999","10","…

PhotoShare の一覧を作る

iPhone の写真共有SNSであるPhotoShare を始めてから明日で1年になります。 メッセージの交換目的というより、簡単な記録、メモとして始めたのですが、古い写真にアクセスするのが簡単でありません。 そこで、Webにインデックスを作成しようと思い、HTMLタ…

モンティ・ホール問題

ドアの選び方であなたの賢さが分かる!?——モンティ・ホール問題とはすっきりしないのでシミュレーションしてみました。 ゲームのルール 1. 3つのドア (A, B, C) に(景品、ヤギ、ヤギ)がランダムに入っている。 2. プレイヤーはドアを1つ選ぶ。 3. プレイヤ…

Haskell から Ruby を呼ぶ

System.Win32.Com の使い方が分らないので「趣味的にっき / ] iconvを外部プロセスとして呼び出して漢字コードを変換する」を参考に RubyからCOMを呼んで、そのRubyをHaskell から呼ぶことにしました。 module Main (main) where import System import Syste…

URL特殊文字のエスケープについて整理しておく

Haskell の CGI がうまく動かないので Ruby を使用して URL特殊文字のエスケープについて整理しておきます。 irb(main):004:0> URI.escape("あ") => "%E3%81%82" irb(main):008:0> uri=URI.escape("あ") => "%E3%81%82" irb(main):011:0> URI.unescape uri =…