F#で試してみた

F#つーかOCamlつーかどっちでもいいけどどっちも全然わからねー。
書くの大変すぎる。つーかOCamlがハイライトに対応してるのがおどろき。

#light

open System
open System.Windows.Forms
open Printf

type Form1 = 
    inherit Form as base

    new () as this =
      { }
      then 
        this.Text <- "Form1"
        this.Name <- this.Text

        this.SuspendLayout()
        let button1 = new Button()
        button1.Text <- "button1"
        button1.Name <- button1.Text
        button1.UseVisualStyleBackColor <- true
        button1.Click.Add(fun e -> 
            printf "click!\n")
 
        this.Controls.Add(button1)
        this.ResumeLayout()

    override this.Dispose(disposing) =
        printf("dispose\n")
        base.Dispose(disposing)

#if COMPILED
[<STAThread>]
do  Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(false)
    Application.Run(new Form1())
#endif

んで、これも動きますね。IronRubyだけoverrideが無理なんだな。
か、無理じゃなくてやり方の問題なのか。

IronPythonで試してみた

IronRubyで試したフォームの表示をIronPythonでもやってみた。


CodePlex Archive
もうバージョンが2.0Beta3までいってんのね。

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import *

class Form1(Form):
    def click(self, a, b):
        print("click!")

    def __init__(self):
        self.Name = self.Text = "Form1"

        self.SuspendLayout
        button1 = Button()
        button1.Name = button1.Text = "button1"
        button1.UseVisualStyleBackColor = True
        button1.Click += self.click

        self.Controls.Add(button1)
        self.ResumeLayout

    def Dispose(self, disposing):
        print(disposing)
        Form.Dispose(self, disposing)

Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(Form1())

Disposeがちゃんと動いた。やっぱりIronPythonのが完成度高いのな。

ironruby

via IronRuby アルファのリリース – 荒井省三のBlog


ironrubyのアルファ試してみた。

require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

class Form1 < System::Windows::Forms::Form
  def layout
    p "layout"
    self.SuspendLayout
    yield
    self.ResumeLayout
  end

  def initialize
    p "initialize"
    self.Name = self.Text = "Form1"

    layout{
      button1 = System::Windows::Forms::Button.new
      button1.Name = button1.Text = "button1"
      button1.UseVisualStyleBackColor = true;
      button1.Click{
        p "click!"
      }
      self.Controls.Add(button1)
    }
  end

  def Dispose(disposing)
    p disposing
  end
end

System::Windows::Forms::Application.EnableVisualStyles
System::Windows::Forms::Application.SetCompatibleTextRenderingDefault(false)
System::Windows::Forms::Application.Run(Form1.new)

これが普通に動いた!素敵!
フォームが出てボタンクリックするとちゃんとコンソールにメッセージが出るよ。


まえに試した時はp位のメソッドから使えなかった気がしたけど今回は余裕です。
まあRailsがちらっと動くくらいの勢いらしいので当たり前かもだけど。


ボタンのイベント直にブロックいけるとかはナイスだよね。
Disposeは良く分からないつーか.Netが良く分からない。
けどでも応援したい気持ちになりました。

Rubyで同値関係を求めるパズルやってみた。

Rubyで同値関係を求めるパズル - rubyco(るびこ)の日記
今回もid:sumimさんは既訳なわけですが気にせず。

#!ruby -Ku

require 'set'

text = "少女=リズ
少年=ペタ
楽天家=ゲルト
老人=モーリッツ
ジム=ジムゾン
アル=商人
村長=ヴァルター
木こり=トーマス
旅人=ニコラス
ならず者=ディーター
少女=リーザ
行商人=アルビン
ジムゾン=神父
女将=宿屋の女主人
ヴァルター=ヴァル
商人=行商人
少年=ペーター
翁=モーリッツ
羊飼い=カタリナ
パン屋=オットー
青年=ヨアヒム
村娘=パメラ
農夫=ヤコブ
宿屋の女主人=レジーナ
リー=少女
ならず者=ディー
ペー太=ペタ"

text = "a=b
A=D
b=c
A=B
B=C
a=A
"
group = []

text.split(/\n/).each{|line|
  left, right = *line.split(/=/)

  group.delete(set_a = group.find{|set| set.include?(left)} || Set.new)
  group.delete(set_b = group.find{|set| set.include?(right)} || Set.new)
  group << ((set_a+set_b) << left << right)
}

p group.map{|set| set.sort}

標準入力じゃないとか出力形式とかは見逃してください。
それよりもgroup.delete(a = group.find{cond})の部分はそういうメソッドってないんでしたっけ。
配列から条件にあった要素を取り出すイメージなんですけど。

どーかくよ?

久しぶりにどう書く?やってみた。

http://ja.doukaku.org/comment/6703/


比較しないソートってなんなんだなぜなんだつーか矛盾じゃないのかと興味惹かれて読んだんだけど
結局配列に判断任せて暗黙に比較期待してる気がして残念だった。
いや2,3のバケットソート以外のコードは読んでないから驚愕のソートがあるのかも。