2008-03-01から1ヶ月間の記事一覧

鬼車

Win32環境用にはVC++用のMakefileがついてたのでその線でビルドしてみる。 (以下のような苦労をする位なら素直にMSYSで./configureしてMinGWのgccを使えといわれそうだがMS謹製の方が速いバイナリが作れそうな気がするので…) 準備 IDEは要らないので、Visual…

BEGINとEND

awk

perlにawkのBEGIN,ENDと同様の機能があったのをはじめて知った。 また、rubyにあるのはなんとなく知ってたんだけど、実際に使ったことがなかったので、変数はグローバル変数を使わなければいけない等をはじめて知った。 % ls -l | awk '{n+=$5}END{print n}'…

純Lisp

687 :デフォルトの名無しさん:2007/07/03(火) 14:32:31 質問です。 アトムとリストと、 car,cdr,cons,atom,eq これでどうやって足し算が出来たりするのでしょうか? 701 :デフォルトの名無しさん:2007/07/03(火) 22:14:31 687さんは純Lispが五つの基本関…

1.9のProc

今まではこう書いてた foo = proc{|x,y|x+y}1.9からはこう書ける foo = ->(x,y){x+y}ちなみにこうではないので注意 foo = ->{|x,y|x+y}呼び出す方も今まではこう書いてた foo.call(1,2)1.9からはこう書ける foo.(1,2)こうも書ける foo[1,2]しかしこうは出来…

表組み記法での空欄の扱い

表組みをつくる(表組み記法) - はてなダイアリーのヘルプ 半角の縦棒「|」(キーボードの「¥」とShiftキー同時押し)で区切ることで、日記の文章中で簡単にテーブルを記述できます。 http://hatenadiary.g.hatena.ne.jp/keyword/%e8%a1%a8%e7%b5%84%e3%81…

Excel版チューリングマシン

VBA

Excel上で動かすチューリングマシンシミュレータを作ってみた。 使い方 B列に縦に65536マスのテープがあると想像する。 (横ではなくて縦にしたのは、横だと256マスしかないから) その隣のA列をヘッドが現在の状態を表示しながら移動する。 チューリングマシ…

角カッコを活用する

VBA

以下のような処理は、角カッコ(Evaluateメソッド)を使って1度に済ませられる。 Range("A1:C1") = Array(1,2,3) Range("A2:C2") = Array(4,5,6) Range("A3:C3") = Array(7,8,9)↓ [A1:C3] = [{1,2,3;4,5,6;7,8,9}]ただし変数の参照等は出来ないので注意 Evalua…

排他制御

ダメなアルゴリズム 1.ID置き場をreadして他人が使用中か調べる 2.他人のIDが書いてなかったら自分のIDをwriteして権限取得失敗例 1.AがID置き場をreadする→しめしめ、誰も書いてないぞ 2.BがID置き場をreadする→しめしめ、誰も書いてないぞ 3.Aが自分のIDを…

レヴィ曲線

座標系の方を回転と伸縮させながら描くバージョン。 処理系がどう実装されているのかわかってないけど、けっこう富豪な書き方なんじゃないだろうか。 ちなみに、冒頭に書いてある数字(ここでは15)が再帰のレベル数。この数を変えると形が変わる。 %!PS-Adobe…

セマフォ

「オハジキを入れた小皿」がセマフォである。一般的に、オハジキを取る操作をP命令といい、オハジキを返す操作をV命令という。 たとえオハジキの個数を確かめられたとしても、ウカウカしていると他のコックがオハジキを取ってしまい、オハジキの個数が変わ…

陽電子

どのようにして陽電子を生成するのですか? 放射性同位元素の中にはβ+崩壊をするものたとえば22Na,68Geなどがあり、これらから放出されるベータ線は正の電荷の陽電子です。したがって、原子炉などを用いてβ+崩壊をする放射性同位元素を作れば、これを 陽電子…

であることの証明

ある処理系がチューリング完全「でない」ことを示すにはどうすればいいんだろう。 「ある」ことの証明であればチューリングマシン実装して終わりだが。 http://d.hatena.ne.jp/gnarl/20080222/1203683751 そうか!少なくともチューリング完全で「ある」こと…

dllの作り方

gcc

dllになる方のソース int foo(int x){ return x+1; }dll,def,aを一気に作成 インポートライブラリのファイル名をlibfoo.aにしているのは、gccの-lオプションのため。 出来たdllのサイズは6KBくらい。 > gcc -shared -o foo.dll foo.c -Wl,--output-def,foo.d…

dllの作り方

bcc

dllになる方のソース 関数名の前におまじないを書くらしい。 __declspec(dllexport) int foo(int x){ return x+1; }dllのコンパイル 出来たdllのサイズは45KBくらい。 > bcc32 -WD foo.c本体の方のソース #include<stdio.h> int foo(int); main(){ printf("%d\n",foo(</stdio.h>…

VMプラグイン作成おぼえがき

まずは成功体験ということで絶対値を求めるプリミティブメソッドを作ってみた。 (本当は'Hello'を返すものとかにしたかったんだけど、Stringクラスとchar*型の間の扱いがよくわからなかった。) プラグイン用クラス SmartSyntaxInterpreterPluginのサブクラ…

複数行での/./と/$/の扱い

以下の2点の各処理系での調査結果。 1.任意の1文字/./に改行は含まれるか?→"\n"=~/./でテスト。 2.行末/$/は途中の改行も含まれるか?→"1\n2"=~/1$/でテスト。 Perlの場合 テスト1 テスト2 マッチする "\n"=~/./s "1\n2"=~/1$/m マッチしない "\n"=~/./ "1\…

行頭/^/のみでの置換は無限ループに注意

aaa bbb↓ >aaa >bbbこういう処理を考える。 Rubyの場合 普通に/^/を">"に置換すればいい。 irb> "aaa\nbbb\n".gsub(/^/,">") => ">aaa\n>bbb\n" Gaucheの場合 rubyと同様に#/^/を">"に置換しようとすると無限ループになってしまう。 gosh> (regexp-replace-a…

Squeak on Nintendo DS

> I ported the VM to the DS a few month ago. > > I only spent a weekend on it, so it's not working very well but I can > make it a bit more usuable if you need to use it. > > You need to use a third party flash card to run anything that's …

RSA暗号をMaximaでやってみる

公開鍵(e,n)=(97,9577)が与えられた状況を考える。(Maximaでは:が代入演算子) e : 97 n : 9577後で使うので拡張ユークリッドの互除法を計算する関数を定義しておく xeuc(x,y,a,b) := if y=1 then b else (c:fix(x/y),xeuc(y,x-y*c,b,a-b*c))e,nを使って平文4…

Arcからの挑戦

SeaSideですごく短く書いてる例があったので、実際に動かしてみる。 Said を WAComponent ではなく WATask のサブクラスとして作成し、#renderContentOn: ではなく #go を次のように再定義。 click here は別にリンクでなくとも、ページを間に挟みさえすれば…

リーダーマクロ

CommonLispはmake-dispatch-macro-characterとかset-dispatch-macro-characterを使って定義するようだ。 Gaucheにはこういう機能はないのかな? 最近さわっている Ruby のブロックを参考に,Common Lisp のリーダーマクロを使って (mapcar (lambda (x) (* x …