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

readを作ってみよう

30分プログラム、その419。そういえばshowは結構書いたことあるけど、readは書いたことがなかったことに気がついたので書いてみた。 正直、良くわからなん。どうも中置演算子の優先順位を考慮してreadを書かないといけないっぽいんだけど・・・。まあ、deriv…

ActionScript3のthisが関数単位のスコープだよ

AS3

AS3でプログラムを書いている人、ほぼ全員が混乱しているthisのスコープの話。 あれば実は、クラスごとにthisが決まるわけじゃなくて、呼び出されるたびに決っているんだ。 thisは関数の隠し引数 AS3で全ての関数は隠し引数として、thisを受け取っている。 f…

『OCamlくんと友だちになろう!』

http://www.wankuma.com/seminar/20081206nagoya05/Default.aspx http://www.ustream.tv/channel/wankuma12/6のわんくま同盟 名古屋勉強会で『OCamlくんと友だちになろう!』というセッションがあるらしい。会場のほうはもう満員らしいので、ustreamのほうで…

乱数を生成するfor..yield

30分プログラム、その418。mapやらfilterを定義すれば、俺々データ構造でもforが使えるらしいので、試してみる。 というわけで、for(n ちなみにscala.Randomはdeprecatedで、scala.util.Randomを使うべきらしいけど、ボクのScala処理系は古いらしくてscala.u…

あなたが今まで打ったなかで一番長いコマンドは?

30分プログラム、その417。今までで打った中で一番長いコマンドが何か気になったので、調べてみた。 使い方 # そのままだと見ずらいので、重複を削除 $ gosh 417-long_hist.scm ~/.history | sed 's/^.*;//' | uniq : 1221357578:0;/System/Library/Framewor…

seqコマンドをPythonで。

30分プログラム、その416。seqコマンドをPythonで。 id:Gemmanさんがステキなコマンドを使っていたので、Pythonで再現してみる。 使い方 # 指定しないと1が始点 $ ./seq.py 5 1 2 3 4 5 # 2からスタート $ ./seq.py 2 5 2 3 4 5 # 2づつインクリメント $ ./s…

自前でglobのマッチング

30分プログラム、その415。自前でglobのマッチングをやってみた。 いきなり正規表現にチャレンジするのは大変そうだったので、まずは簡単そうなグロブから。それも使えるメタ文字は*だけの非常に単純なやつで。 本当は、グロブのマッチにはバックトラックが…

せっかくなのでRubyでも

>> (0..1000).to_a.to_s.scan(/0/).size => 193

0〜1000に含まれる0をカウントする

練習 - krystal: プログラミング超初心者(文系) - Rubyist via 0〜1000に含まれる0をカウントする - http://rubikitch.com/に移転しました30分プログラム、その414。0から1000までの0の個数を数えてみる。 せっかくのErlangなのでmapreduceで。mapreduceのコ…

Haskellでマーシャリング(showとread)

30分プログラム、その413。Haskellでマーシャリングにチャレンジしようとして、showとreadで十分なことに気がついた。 でも、せっかくなので途中の状態を保存して、中断可能な関数を書いてみた。たぶん、id:Gemmaさんあたりに継続使おうぜ、とか言われるんだ…

Monad in Scala

Programming in Scala, Third Editionを読んでいたら、 Scalaのforはコンパイル時にmapとかfliterとかの関数呼び出しに展開されるよ。最終的に型があっていれば、mapとかの型に制限はないんだけど、以下のような型が一般的だよ。 // CはコレクションのC clas…

Scalaって末尾再帰の最適化してるの?

30分プログラム、その412。id:athosがScalaが末尾再帰の最適化してるか気にしてたのでコードを書いて確かめてみた。 ちなみに、id:athosはjavapで逆コンパイルしてみてgotoになっていることを確認したらしい。 使い方 // 末尾再帰じゃないやつはスタックオー…

任意引数のmap

30分プログラム、その411。昨日のやつにインスパイアされて、任意引数を受けとれるmapを作ってみた。 gosh> (map* + '(1 2 3) '(2 3 4)) (3 5 7) 実際のところGaucheのmapは、任意個の引数を取れるから必要はないんだけど。 使い方 gosh> (map* (+ <> 1) (li…

unzipの一般化

30分プログラム、その410。http://d.hatena.ne.jp/hiloicoli/20081107/1226086092に影響を受けてunzip_nを書いてみる。要するに任意個の引数を取れるunzipといった感じらしい。もとは引数の数を制限できるようになっていたけど、大変そうなのでパス。 >>> un…

ifが返す値の型はそろえないとダメ

ABC

ABCプログラマのみなさん、こんにちは。ABCは文書化されていない仕様が多いことで有名ですけど、今日もひとつ新しい仕様を発見しました。 if式(?:演算子)が返す値の型は統一しないといけないみたいです。 ダメなやつ (if #t (f) 10) 自前の処理系であるHappy…

antでもmakeでも同じコマンドでビルドしたい

30分プログラム、その409。自動でビルドコマンドを選ぶスクリプトを書いてみた。 プロジェクトごとに使っているビルドコマンドが違うので、毎回makeを使うのか、antを使うのか、omakeを使うのか迷わないといけない。 これはあまりにも面倒なので、適切なビル…

HikiにWordPressのテーマを移植してみた

http://happyabc.org Scheme-abc用のドメインをとったので、Hikiを置いてみた。でも、やっぱりデフォルトのテーマのままだとほかのWikiと区別がつきにくて嫌。 でも、tDiaryのテーマで気に入ったやつが見つけれなかったので、WordPressのテーマのReduxを移植…

はてブのコメントを簡単表示

Operaのお気に入りに javascript:window.location='http://b.hatena.ne.jp/entry/'+escape(location.href); を登録して、cというニックネームをつけておく。あとは、好きなページでアドレスバーにcを入れるだけで、はてブコメントが表示できるよ。# いい加減…

各行ごとにコマンドを実行するスクリプト

30分プログラム、その408。ファイルの各行ごとに特定のコマンドを実行するスクリプトを作ってみた。例えば、 foo bar bazみたいなテキストファイルがあった場合、 $ each-line rm -rf < dir.txtとすると、全部消せる。(もっとも、この場合はxargsで十分だけ…

ErlangでWorker Threadパターン

30分プログラム、その407。Java言語で学ぶデザインパターン入門 マルチスレッド編のWorker ThreadパターンをErlangでやってみる。 Worker threadパターンは要するに、スレッドをいくつか作っておいて、それを使い回わすためのパターン。プロセス生成が軽いと…

Haskellでグラフ描画

30分プログラム、その406。Data.Graph.Inductive.Graphvizというおもしろそうなライブラリを見つけたので使ってみる。 要するにノードとエッジで構成された、いわゆるグラフ理論のほうのグラフを扱うためのライブラリらしい。ノードとエッジでグラフを作るの…

Python風の%をScalaで

30分プログラム、その405。Pythonの文字列の%をScalaでもやってみる。Pythonの%はこんな感じで、要するにsprintf。 >>> "Hi, %s" % "mzp" 'Hi, mzp' >>> "The %s is %d." % ("answer",42) 'The answer is 42.' implicit conversionを使って、Stringにメソッ…

Gaucheのオブジェクトシステムを試す

30分プログラム、その404。最近、Schemeのオブジェクトシステムに興味津々です。 というわけで、Gaucheのオブジェクトシステムを使ってリストを作ってみる。 使い方 ;; リストを作る gosh> (define xs (make <my-list> :head 1 :tail (make <my-list> :head 2))) ;; 表示 gosh></my-list></my-list>…

Scheme-abcのオブジェクトシステム

今、scheme-abcにはClojureに似たオブジェクトシステムが載っている。別にマネした訳じゃなくて、たまたま似ただけなんだけど。 ;; クラス定義 (define-class Foo Object ([f x] (print x))) ;; インスタンスの生成 (define foo (new Foo)) ;; メソッド呼び…

lim[n→∞]√2↑↑n=2

id:athos:20081028:p1 g:csnagoya-sicp:id:Gemma:20081029 g:csnagoya-sicp:id:Gemma:2008103030分プログラム、その403。なんとなくボクも参加しないといけない気がしたので、書いてみる。 げんまさんが無限ストリームで計算してたので、ボクはPythonのイテ…

曜日を判定するプログラム

30分プログラム、その402。日付を与えると曜日を返す関数を書いてみた。 本当はカレンダーを作るつもりだったけど、整形して表示する時間はなかった。 使い方 # 1970/1/1が基準 $ perl cal.pl 1970 1 1 Thu # 今日は水曜日 $ perl cal.pl 2008 10 29 Wed ソ…

Flexフレームワークの基礎(要約)

Programming Flex 3: The Comprehensive Guide to Creating Rich Internet Applications with Adobe Flexの"Framework Fundamentals"を読んだので適当にまとめてみる。 そうか、FlexとFlashの違いはライブラリだったのか。

SchemeからSwfの生成に成功したよ!

いままで色々がんばってきて、やっとSchemeからSwfに変換できるようになった。やった。 ;; swf.scm (define-class Hello flash.display.Sprite ((init) (let [(t (new flash.text.TextField))] (invoke t appendText "Hello,world!!") (invoke this addChild…

Erlangでfutureパターン

30分プログラム、その401。ErlangでJava言語で学ぶデザインパターン入門 マルチスレッド編に載ってるfutureパターンをやってみる。futureパターンはこんな感じで、別スレッドで値を計算させるやつ。 // 別スレッドで処理が走る Data data1 = host.request(10…

FunDepでCollectionクラス

30分プログラム、その400。この前のocaml-nagoyaでid:syd_sydさんがFunDepの話をしていた。細かい話はついていけなかった。でも、例としてでてきたCollクラスがなかなか便利そうだった。 class Coll a b where empty :: b insert :: a -> b -> b instance Co…