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

時間を所得

string date = ctime(time()) - "\n"; 文字列A - 文字列B で、文字列Aの中から文字列Bを取り除ける。 文字列A / 文字列B で、文字列Aを文字列Bでsplitした配列を返す。

YatAnotherWayToDo ...

from operator import mul def fact(num): if num

Python, Ruby, Pike でDesignPatternのBridgeパターンを実装してみた。 C++にも挑戦してみるが、インターフェースの定義で行き詰まる(TODO)

アキュームレータ

# let accgen n = let m = ref n in fun x -> m := m!+x; !m;;

C/C++言語ライクな関数

PeterNorvig氏のPython IAQより・・・ 他にも EnumやStructの簡単な実装が書かれてあった。 enumは、僕が昨日日記に書いたのとは別の方法だった。 簡単な例では、red,green,blue=range(3)から、 他の例ではクラスを使ってクラスの__dict__に直接読み込む方法…

Adapter/Adaptee pattern

pythiusプロジェクトのaop.pyも使ってみたが、 独自の実装でAdapterパターン with AOP from types import FunctionType from __future__ import nested_scopes import sys if sys.version_info[0:2] api(_adapter, adaptee): for name,value in _adapter.ite…

Enum

Pythonで列挙体を生成するユーティリティ関数作ってみた。 コンパイル時に型チェックしない言語/環境では、 その恩恵を受けられないため軽視されがちだけど。値の生成だけでも欲しくなった。ここでは名前のリストを渡して、 値が適当に重複しない値になって…

Stringクラスにメソッドを追加する。 String.prototype.toTwoDigit = function () { return (this.length) ? "0".concat(this) : this; } Ruby等の動的なスプリプト言語なら大抵はサポートしてる機能。 Python でプリミティブ型のクラスの拡張どうやってやる…

MEMO

SeRuby : Implement Self by Ruby http://kumiki.c.u-tokyo.ac.jp/~ichiyama/mt/archives/000026.html Python 構文木へのアクセス http://kumiki.c.u-tokyo.ac.jp/~ichiyama/mt/archives/000025.html とりくんの MT http://f15.aaacafe.ne.jp/~maco/blog/tri…

http://nice.sf.net/ class Person { String : word; String : say(); } say(p@Person) { return p.word; } void main(String[] args) { let p = new Person(word: "Hello, world"); System.out.prinln(p.say()); } JAVAの拡張だけあって、JAVAで出来ること…

types and subtypes

Ada

type Hours24 is new Integer range 0 .. 23; type Hours is new Integer range 1 .. 12; Hours24 and Hours are different types. You can not assignment Hours's var to Hours24 variables. type Hours24 is new Integer range 0 .. 23; subtype Hours is…

print "Hello\ world label "Hello\ world print だとコンソールに、labelだとキャンバスの方に文字を描写する。 aptのパッケージにあった、バークレイのLOGOを使ってみたんだけど、 ウィンドウ重ねると線が消えてしまうのはバグだろうか?それとも仕様?

hello.adb with Text_IO; use Text_IO; procedure Hello is begin Put_Line("Hello, world"); end Hello; > gnatmake hello 前々からコードは読んでいたけど、コンパイルの仕方がわからなかった。 gnatmakeを使うと簡単に出来るらしい。ファイル名は拡張子 .…

#include #include #include #include int main(void) { Display *display; Window window; XSetWindowAttributes attres; XEvent event; display = XOpenDisplay(NULL); window = XCreateSimpleWindow( display, RootWindow(display, 0), 100, 100, 256, 25…

import javax.swing.*; public class HelloWorld extends JFrame { HelloWorld(String title) { super(title); setSize(100, 100); setLocation(10, 10); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] argv) { HelloWorld …

#Include int main(int argc, char **argv) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; } gcc -Wall hello.c `gtk-config --cflags` `gtk-config --libs`

#include #include int main(int argc, char **argv) { QApplication app(argc, argv); QPushButton button("Hello world!", 0); app.setMainWidget( &button ); button.resize(100, 30); button.show(); return app.exec(); } コードはQtのチュートリアルよ…

[Zsh]

標準のシェル変更しました。 ディレクトリ名の展開にワイルドカード使えるのとか便利だなぁ と思いつつも、今までは必要な時だけ切り替えしてたのを、思い切って変更。 変更を決意した理由は、キーワードの補完でタブを続けて押すと、一覧表示の後順に挿入し…

GUI にも手を染めてみた。 GTK, X11, Qt, Tk, wxWindows,...etc 言語は、いまのところ C/C++ か Perl, Python だけど。 PythonのAnyGUIや、GtkのOCaml, Schemeも予定。 #include class MyApp : public wxApp { public: virtual bool OnInit(); }; bool MyApp…

PEAR に手をつけてみた。まずは、php.iniの設定。 UNIXでは : がセパレータらしい。 include_path ".:/usr/share/pear" 簡単な DB 接続のサンプル。DSN で利用するデータベースのタイプ、 ユーザー、パスワード、データベース名等を一括して指定できる。 inc…

行列のソート

Gnu text utilities の sort コマンド。 perl でいろんなソート方法を考えてみたけど、 配列を使うものはやっぱり遅かった。 Sort::Fieldモジュールにも、大量のデータを扱う場合は sort(1) 使った方がいいよぉ〜みたいなことが書かれていた。 sort -n -t , …

Peter Norvig 氏の邦訳記事を探していて、 発見したサイトでポストしてみた。 Haskellや MLのパターンマッチっぽく書けないかな。 python にも型推論欲しい... import parser, symbol def change(ast): if type(ast) is list: return map(change, ast) else:…

オブジェクト指向のサポートには全然目を向けていなかったので、 少しずつやり始めてみる。 class screen = object method outputToStdout s = print_string s end class printer s = object val screen = s method print s = screen#outputToStdout s end l…

Languages.PLIS って LISPライク(Schemeかな) インタプリタが組み込まれているらしい。 pike からPerlを利用するモジュールもある(オプション)

Rubyだと、既存のクラスにメソッドやイテレータを追加出来る。 これ、Python で出来ないかなぁ。 class Array def inject(n) each { |v| n = yield(n, v) } n end def sum() inject(0) { |n, v| n + v } end end [1,2,3,4,5, 6, 7, 8, 9, 10].sum 55

リストクラスを継承してあたらしいクラスを作る。 class NewArray(type([])): def sum(self): return reduce(lambda x,y: x+y, self) >>> alist = NewArray(range(1,11)) >>> alist.sum() 55

やりたいことの整理

HelloWorld を、いろいろな言語で実装する。 SICP の演習問題をいろいろな言語で解いてみる。 GoF のデザインパターンを、いろんな言語で・・・。 言語毎に独自な、もしくは共通の機能や特徴を掴む。 A knowledge database of programming langauge translat…

class Screen def outputToStdout(s) puts s end end class Printer def output(s) end end class PrinterScreenAdapter < Printer def initialize(screen) @screen = screen end def output(s) @screen.outputToStdout(s) end end screen = Screen.new adap…

class Screen { void outputToStdout(string s){ write(s); } } class Printer { void print(string s){ } } class PrinterScreenAdapter { inherit Printer; Screen screen; void create(Screen s) { screen = s; } void print(string s) { screen.outputTo…

import sys class Screen: def outputToStdout(self, s): sys.stdout.write(s) class Printer: def output(self, *args): raise NotImplementedError class PrinterScreenAdapter(Printer): def __init__(self, screen): self.__screen = screen def output(…