簡単に紹介してみます。Scheme(Lisp)をベースとしたプログラミング言語です。WindowsでもLinuxでも実行できて、GUIアプリケーションも作れます。Schemeという名前でしたが、色々あってRacketという名前になったようです。(参考:http://racket-lang.org/new-name.html)どうせならもっとググりやすい名前にしてほしかったなーと思わないでもないです。Worldを書いてみましょう。world');endhello.rktと言う名前でファイルに保存してコマンドラインから実行してみます。引数としてファイル名を渡すと、プログラムを実行してくれます。world次はもう少し複雑な例として、フィボナッチ数を再帰処理で求めるプログラムを書いてみます。printnln(fib(10));endLispは括弧が多いのが特徴の言語らしいですが、このプログラムの括弧の数はたったの10個。fib.rkt55以上、入門終わり。実行もできるRacketのプログラムです。使用する言語を切り替える機能があります。普通のRacketプログラムを書きたい場合は、次のようになります。プログラムを解釈してくれ、というような意味となります。いった関数で行っています。worldのようなLispとはかけ離れた見た目のプログラムも実行できるのです。型があっていないと、実行時ではなくロード時に怒られます。いったものがあります。いった言語もあります。自分で独自の言語を作りたい場合でも、read関数を自分で用意すればよいだけです。Racketだけで対応できそうです。読み込み処理以外にもいろいろいじれるので、試しに触って遊んでみると楽しいのではないでしょうか。このAPIを利用して大きなファイルを扱おうとすると大量のメモリを必要とし、OutOfMemoryが発生します。APIを使うxlsxファイルを解凍して中身のxmlファイルを処理するといった解決方法があるようです。APIを利用したコードを書いてみます。見た限りではxlsxファイルを解凍して処理する手間の一部を省いてくれているだけのようです。Clojure2012年11月15日木曜日Clojure+seesawでMigLayoutを利用するClojureのGUIライブラリseesawでMigLayoutを使ってみます。簡単なツールを作ったときにGUIをでっちあげるのに使えそうです。酒に関する用語のうち、単位や量に関するもののメモ。飲酒するときの適量はアルコール量でだいたい20mlくらいらしい。一般的な度数で考えると、飲酒量換算は以下のようになると思われる。酒の容量のうちどの程度がアルコール(エタノール)かを表す割合。proofアルコール容量の単位。パイント(pint)体積の単位。イギリスでは570ml(20英液量オンス)、アメリカでは470ml(16米液量オンス)。シングル主に洋酒を飲むときのお酒1杯あたりの容量。だいたいの場合30ml。ダブルシングルの倍の容量。合(ごう)尺貫法の体積の単位で1/10升。1合=180mlくらい。日本酒の瓶の小さめのものは4合瓶なので720ml入り。升(しょう)尺貫法の体積の単位で10合。1升=10合=1800mlくらい。日本酒の瓶の大きいものは1升瓶なので1800ml入り。ドロップ(drop)カクテルのレシピに書いてある量。ダッシュ(dash)カクテルのレシピに書いてある量。1ダッシュは5,6滴(1ml)くらい。ティースプーン(tsp)カクテルのレシピに書いてある量。+になるほど糖分が少なく(辛口)、-になるほど糖分が多い(甘口)。日本酒の甘口・辛口の目安。Units)ビールの苦味の単位。階乗(factorial)を利用して以下の用に書けます。r)))))この式はn個の中からr個を取る組み合わせ(combination)の数を求める式でもあります。要素の順番も考慮する順列(permutation)の数の場合は、以下のようになります。r))))多くのプログラミング言語では順列を生成するための機能が用意されているようです。RubyのArrayクラス(array.cで定義)とC++のstd::next_permutationを使ってみます。Lispで書いてみます。プログラム中で順列を生成したりしたい場合はわざわざ自作せずありがたく利用させて頂きましょう。0)他にも色々なアルゴリズムが存在するようです。利用したプログラムを書いてみます。Lispで書いてみます。載っていたウラムの螺旋を出力するコードです。オイラーの贈物2012年10月16日火曜日coutへの出力をstringstreamへの出力に切り替える標準出力(std::cout)への出力を別のストリーム(std::stringstream)への出力に切り替えてみます。0;}C++ならrdbuf、C言語ならfreopenなどを使えば良さそうです。C++scratchバッファをorg-modeにするorg-babelがとても便利なので、scratchバッファをデフォルトでorg-modeにしてみます。ものぐさでorg-rememberを使いこなせない私でも日々org-modeを活用できそうです。Lispで書いてみます。POIいつか業務でこっそり使うことを夢見てExcelをいじってみます。Emacs環境を作るいつのまにかすごく簡単にできるようになってました。Clojure本体もダウンロードしてくれるらしいです。u+x)leinスクリプトを実行する。swank-clojureのGithubのページに、新しいユーザはnreplかRitzを使うと良い、と書いてあるので、nrepl.elを入れてみます。ErrorをフックするWeb系がさっぱりわからないので、勉強がてらなにか書いてみようと思いました。Errorとしてブラウザに表示させるようにしてみます。未定義の関数を呼び出す。S-Expression)でFizzBuzzってみます。Gauche2012年7月5日木曜日[CommonLisp]MOPを使って型指定子によりメソッドを特定するWikipedia日本語版の「列挙型」の項目に、CommonLispの型指定子はメソッドの引数特定には使えませんよ、と書いてあったので、無理やり実現する方法を考えてみました。マクロを使うと負けな気がするので、MOPを利用してみます。t)))以下のようにして使います。最初に見つかったものを呼び出しているだけなので、<type-spec-meta>のインスタンス間での優先度は扱っていません。CommonLisp[graphviz]consセルを描くgraphviz(DOT言語)についてのメモ。いう内容のコンスセルを描画してみます。record型にするとlabelをバー(|)で区分けできる。{}で囲うと並べる向きを変えられる。先頭を<xxx>とすると要素への接続ポート名を定義できる。エッジの指す先が要素の位置になる。}ファイル"cell.dot"に保存して、以下のコマンドで画像ファイルを作成できます。cell.png作成される画像は以下。graphviz2012年7月4日水曜日[Racket]スタンドアローンな実行ファイルを作成するRacketで作成したプログラムをパッケージ化したり実行ファイルにしたりするには、Racketのインストール時についてくるracoというツールを使います。画面に"はろーわーるど"と表示するだけのGUIプログラムを書いてみます。guitest.rktと入力すれば実行できます。このソースコードを実行ファイルにする場合は、racoコマンドを実行します。exeコマンドの実行結果として、"guitest.exe"という実行ファイルが作成されます。(Windowsの場合)さらに、実行ファイルを他のマシンでも実行できるようにするために再度racoコマンドを実行します。distributeコマンドの実行結果として、"dirname"ディレクトリが作成され、ディレクトリ以下には"guitest.exe"と必要なライブラリ類がまとめられます。これで、"dirname"ディレクトリの内容を他のマシンにコピーして実行可能となります。Racket2012年6月27日水曜日[Python]help関数とpydocPythonの情報を得たい場合、help関数やpydocコマンドが便利なようです。ドキュメントの調べ方を知っていると、ググれない空間にとらわれても安心ですね。対応するドキュメントが閲覧できます。help("open")pydocコマンドを使うとhelp関数と同じようなドキュメント閲覧をコマンドラインから行えます。Webサーバーを立ち上げてブラウザで閲覧できるようにしてくれたりするようです。CFFIでWindows上でselectしてみます。CommonLisp2012年6月23日土曜日[Racket]クリップボードにある画像をファイルに保存するクリップボードにあるデータが画像である場合に、ファイルに保存させてみます。PrintScreen+ファイル保存を1つのキーで実行できます。Racket2012年6月21日木曜日[Racket]MzCOMを利用してPowerShellからRacketを利用するMzCOMを利用するとRacketをCOMオブジェクトとして利用できます。以下のようにしてPowerShellからRacketの関数を呼び出せます。Racket[Racket]OpenGLでテクスチャ球にテクスチャを貼り付けてみます。掲示板やgistにあったコードを参考にしました。Racket2012年6月20日水曜日[Racket]GUIの中でOpenGLを利用するRacketのGUIでは、canvas%クラスを利用してOpenGLによる描画を行えます。日ごろ書いているのは'正しい'Cではない可能性が高いということに気付きました。gccで拡張機能を無効にするには-pedanticオプションをつければよいようです。GCC2012年6月10日日曜日[PowerShell]ExcelのシートをCSV形式で保存するExcelのファイル中の各シートをCSV形式で保存します。Interface)を利用して、Windows上でメッセージボックスを表示してみます。LispFFIは処理系依存です。各処理系の差異を吸収してくれる、CFFIというライブラリがあります。CFFIはQuicklispでインストール可能です。設定されている値が利用されます。:int32)RacketRacketではffi/unsafeライブラリを利用すればよさそうです。0)RubyRubyでWindowsのDLLの関数を呼び出すには、Win32APIライブラリを利用すればよさそうです。0)PythonPythonではctypesライブラリを利用すればよさそうです。Contrat)っぽいことを行ってみます。