タグ

ブックマーク / m-hiyama.hatenablog.com (14)

  • この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)

    正規表現と構文図について解説します。オートマトンについても詳しく述べます。オートマトン・スゴロクで遊びましょう! 世間でよく知られている/使われている概念・方法にはこだわらず、僕(檜山)の感覚で一番わかりやすいと思われる筋書きと用語法/図式法を使って説明します。この記事に目を通して“感じ”が掴めたら、形式言語理論の教科書を読み始めることが出来るでしょう。 [追記]この記事の内容に対する具体例は、「正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装」にあります。[/追記] 内容: 正規表現 正規表現の例 構文図 基記号 連接 選択 省略可能 繰り返し ストレートワイヤーによるレイアウト調整 有限状態オートマトン 有限状態オートマトンの実行 バックトラックと先読み スゴロクとオートマトン コマをたくさん使うスゴロクと並列処理 非決定性オートマトンと決定性オートマトン 正

    この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2011/05/13
    今まで読んだ中で一番すばらしい正規表現入門。しっかり覚えたい人におすすめです。
  • サーバーサイドJavaScript - 檜山正幸のキマイラ飼育記 (はてなBlog)

    amachangの「IT戦記」からトラックバックをいただいていたので、「なんだろな?」と思ったら minidom.js のこと。一瞬「それなんだ?」と思ったが、僕の放置ウェアだった。 amachangの同記事に曰く: まあ、ともあれ JavaScript がサーバーサイドで動くってーのはめっちゃ楽しいですね! サーバーサイドでJavaScriptをやりたいなら、Helmaがありますよ*1。僕がやっている某社内勉強会で取り上げたことがあって、簡単な解説が次のページにあります。 http://symple.jp/85.html http://symple.jp/100.html 上記ページから引用すると: Helmaは「多年にわたり数多くのサイトで採用された、安定したソフトウェア」だそうです。それでも日ではいまいち普及していないらしい(Helmaの詳しい日語ページが見つからない、 Helm

    サーバーサイドJavaScript - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2010/02/09
    サーバーサイド JavaScript エンジン「Helma」メモメモ
  • それは誰? 2 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    前例。 長男:「俺のクラスの友達がさ、テスト中に変な歌うたいだしてさー」 父親:「で、君は先生になんて言われたの?」 長男:「えっ?」

    それは誰? 2 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2009/01/27
    親すげー
  • いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    オブジェクトとクラスの関係について、次のような説明を見かけました(文言の引用ではなくて、檜山による要約)。 オブジェクトとクラスは全体としてツリー構造をしていて、ツリーの末端をオブジェクト、末端以外のノードをクラスという。末端であるオブジェクトは、その親ノードであるクラスのインスタンスと呼び、クラスどおしの親子関係を継承関係と呼ぶ。 うーむ、この説明、ある意味「簡潔でわかりやすい」とも言えるのだけど、ちょっと単純化し過ぎでしょ。 オブジェクトやクラスの概念て、そんなに美しくもなきゃ、整合的でもありません。実用性やら実装上の都合やらでゴチャゴチャですがね。しかし、そのゴチャゴチャが悪いともいえません。ゴチャゴチャを無理に単純化することなく、必然性を持った(幾分は偶発的だけど(苦笑))複雑さとして理解すべきかと思います。 というわけで、メタクラスやレイフィケーション(reification)な

    いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2008/01/09
    やばい。すごいおもしろい><こうやってみるとクラスベースの世界とインスタンスベースの世界は文字通り「次元が違う」。メタタワー、レフィケーション、プレーン、CLASS Class Class.class
  • シェルのリダイレクトの補遺 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日書いた「シェルのリダイレクトを『こわいものなし』というくらい完全に理解しよう」に、随分とブックマークやトラックバックをいただきました。それらのフィードバックを拝見して、僕の説明にいたらない所があったと思いますので、ここで補足します。 コマンド実行単位≒simple command パイプ記号「|」や逐次実行の記号「;」を含んだ長いコマンドラインも、1つのコマンドとその引数、それとリダイレクト指定からなる“成分”に分解できます。こういった成分をなんと呼ぶか僕は知らないので、仮に「コマンド実行単位」とでも呼びましょう。 シェルの構文(grammar)的概念としてsimple commandというものがあります。ここで言ったコマンド実行単位は、ほぼsimple commandだと言っていいでしょう。「ほぼ」と付けたのは次の理由からです; 「コマンド実行単位」は、1つのプロセスを起動することを

    シェルのリダイレクトの補遺 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/12/26
    標準入出力は、プログラムから見た概念。標準入出力が実際どこに向かっているか知らなくていいことがメリット。
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/12/26
    シェルのリダイレクトについて、パイプ or /dev/tty が先に与えられてあとは代入で入れ替え入れ替え。こわいものなし!
  • 早わかり イベントモデル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「イベントモデルの概念と用語法が混乱しているので、イライライするんですが」が随分長くなったので、その要点を箇条書きにまとめておきます。 Javaイベントモデルにおけるイベントソースを、DOMイベントモデルではイベントターゲットと呼ぶ。 DOMツリー内をイベントが伝搬する運動過程をイベントフローと呼ぶ。 イベントフローのときに通過するノードの列をチェインと呼ぶ。チェインの両端は、ルートノードとイベントターゲット・ノードである。 イベントフローは、キャプチャリング・フェイズ、ターゲット・フェイズ、バブリング・フェイズの3つの部分に分けられる。 イベントフローのチェインに含まれるノードは、EventTargetインターフェースを実装する必要がある。 「イベントフローの折り返し点=チェインの端点」であるイベントターゲットと、EventTargetインターフェースおよびEventTargetを実装し

    早わかり イベントモデル - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/12/10
    イベントモデルの言葉の整理。何か人に伝えるときに思い出してみよう。
  • プログラミング言語Make 補遺:引数付きの関数 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Makefileの書き方:プログラミング言語Make」のコメント欄で、shiroさんから「引数付き関数もユーザー定義できるよ」とご指摘いただきました。 http://www.gnu.org/software/automake/manual/make/index.htmlを見てみたら、最近のGNU Makeでは引数を扱えることが判明。例えば、次のように使えます。 SUBDIRS := src include test files = $(wildcard $(1)/*.erl) $(wildcard $(1)/*.hrl) ALL_FILES := $(foreach dir,$(SUBDIRS),$(call files,$(dir))) filesが引数付き関数(Make用語ではパラメータを持つ再帰的変数)です(($(wildcard $(1)/*.erl) $(wildcard $(

    プログラミング言語Make 補遺:引数付きの関数 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/10/25
    プログラミング言語としての Make。$(1) $(2) で引数を参照する(名前は使えない)。スペースを使った文字列は foreach でリストとして扱われる。foreach 関数があるのでループはできる…が、再帰が使えない><例は必見。
  • Makefileの書き方:プログラミング言語Make - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Makefileの書き方、その勘どころ」にて: まだ、関数を使ってソースやターゲットを生成する方法とかパターン規則の説明をしてないので、続きを書くと思います。調べているうちに、GNU Makeの構文(の一部)はある種のプログラミング言語だという気がしてきました;そのことも書きたい気がしてます。 というわけで続きを書きます。 実は、関数呼び出しを使うときは、代入に「=」を使うより「:=」のほうが適切かつ効率的なときが多いのですが、その話は次の機会にします。 これの説明が中心になります。 内容: 前置き 変数の種類と変数定義 ソースコードの後のほうを参照すること Makeは上から下へと実行していくのだ MakeとLispは似ている 実例 ●前置き 以下、Make一般ではなくてGNU Makeの話です。GNU Makeより古いMakeにも備わっていた伝統的機能の説明はしません。 GNU Mak

    Makefileの書き方:プログラミング言語Make - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/10/25
    プログラミング言語としての Make。=は関数。:=は変数。参照(または呼出し)の仕方は同じで $(id) 。簡単にいうと = だと関数呼出しの結果が変数参照を含むような場合に順序を逆にできる。遅延評価。
  • Makefileの書き方、その勘どころ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「ほとんど忘れた、Makefile」 にて: Makefileなんてもう何年も書いたことがないぞ。ウーン、だめだ、忘れている。 「忘れている」ってよりは、僕の知識じゃ古すぎて、改めて勉強しないとダメでした*1。 なにしろ、makeだけじゃ機能が貧弱なんで、cpp(Cプリプロセッサ)やm4(マクロプロセッサ)と組み合わせて使っていた頃しか知らんからね(古すぎ!)。今じゃGNU Makeを(使おうと思えば)どこでも使えるから、GNU Makeを習えばそれでいいじゃないかな。僕は、Windows上のMSYS(MinGW - Minimal SYStem)でGNU Makeを動かしました。 というわけで、GNU Makeの手習いをしたからメモしておきます。以下、名前がMakefileじゃなくても、GNU Makeへの指示を書いたファイルは何でもMakefileと呼びます。 [追記]id:paell

    Makefileの書き方、その勘どころ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/10/25
    プログラミング言語としての Make。基本は余計な空白は入れない。基本空白はそのまま入るが、 if* 文の ,(カンマ) と代入文の =(イコール) の両サイドの空白は無視されるので、 $(EMPTY) を使って空白を挿入。
  • はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記

    全体目次: 第1歩:しりとりの圏 (このエントリー) 第2歩:行列の圏 第3歩:極端な圏達 第4歩:部分圏 第5歩:変換キューの圏 第6歩:有限変換キューと半圏 第7歩:アミダの圏 第8歩:順序集合の埋め込み表現 第9歩:基に戻って、圏論感覚を養うハナシとか 付録/番外など: 中間付録A:絵を描いてみた 番外:同期/非同期の結合 中間付録B:アミダとブレイド 番外:米田の補題に向けてのオシャベリ 一部のプログラミング言語の背景として、圏論(カテゴリー論)が使われたりするせいか、以前に比べれば多少は圏論に興味を持つ人が増えたような気がしなくもないような。でも、安直な入門的文書はあまり見かけないですね。もちろん、シッカリした教科書や論説はあるんですが、どうもシッカリし過ぎているような。例えば、圏の例として「コンパクト・ハウスドルフ空間と連続写像の圏」とか言われてもねぇ(この例はいい例なんです

    はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記
    amachang
    amachang 2007/03/15
    後で読む。3/16に読む
  • 圏、関手、モナドはどうしたら分かるの? - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「みずすましさんの「圏論メモ」への注釈集」にて もうひとつのエントリー「関数型言語Haskellとの関係」についても、できれば間をおかずに(後で)コメントしたいと思いますが…… という予定に従います。が、文言を追って注釈を加えるのではなくて、もっと一般的/雑駁<ざっぱく>なオシャベリをすることにします。うん、実に雑駁。 圏は、集合と写像からなるとは限らない もう一度強調しますが、「圏の対象=集合、圏の射=写像」という認識はやめたほうがいいですよ。確かに、対象が集合(+構造)であり、射が写像である実例は多いのですが、すべてがそういうわけではありません。僕の「はじめての圏論」シリーズを眺めてもらえれば、「対象が集合、射が写像」である例を避けているのがわかるでしょう。実際: しりとりの圏: 対象は文字、射は文字列 行列の圏: 対象は非負整数、射は行列 圏としてのモノイド: 対象は何でもいい(ひと

    圏、関手、モナドはどうしたら分かるの? - 檜山正幸のキマイラ飼育記 (はてなBlog)
    amachang
    amachang 2007/03/15
    むずかしい。けど、理解してみたい世界
  • 絵を描いて学ぶ・プログラマのためのラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    JavaScriptで学ぶ・プログラマのためのラムダ計算」は、1回では述べ切らなくて、一段落付いたところで区切りました。これはかえって良かったですね、ブックマークやトラックバックでフィードバックが得られたので。 そのフィードバックなどをかんがみて、「残り=次回の話題」として予告した内容とはい違ってしまうのだけど、今回は、文章では伝わりにくい(前回うまく伝わらなかったと思える)ラムダ計算の大事なツボを、なんとか表現してみようと思います。 [このエントリーの内容はだいぶ前にほぼ出来上がっていたのだけど、ココに書いてある事情で、“お絵描き”がなかなか出来なかったのです。] ※印刷のときはサイドバーが消えます。 内容: 知っていて損はない 計算は身体的に理解しよう ラムダ項のツリー表示:準備 ラムダ項のツリー表示:描く! β変換に対応するツリーの描き換え もっとβ変換をやってみよう 計算現象を

    絵を描いて学ぶ・プログラマのためのラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算

    JavaScriptによるテンプレート・モナド、すっげー簡単!」にて: 紙と鉛筆でラムダ計算を実行できることは必要だな、やっぱり。 なんて強調したので、ラムダ計算の入門、いってみよう。 [追記]練習問題集を追加しました。説明を読みながら、あるいは読んだ後で是非やってみてください。→「JavaScriptで学ぶ・プログラマのためのラムダ計算 問題集」[/追記] ※印刷のときはサイドバーが消えます。 内容: JavaScriptの関数リテラル ラムダ式ってなんだ ラムダ計算の体系と適用操作 ラムダ式の例をいくつか β変換 -- ラムダ計算のキモ! β変換を何度か実行してみる 中間まとめ、まだ続きがあるよ JavaScriptの関数リテラル 最初に、JavaScriptに関する知識を確認しておきましょう。なお、JavaScriptの対話的実行環境については「もっともお手軽な対話的JavaScr

    檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算
    amachang
    amachang 2007/02/08
    めっちゃおもろい!
  • 1