タグ

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

  • CatyScriptで記述するCatyシェル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    CatyScript2.0を企画してますが、実際に使えるようになるのはだいぶ先かな。 プログラミング言語がある程度の表現能力を持っていることの基準として、「自分で自分を記述できる」ことがあります。CatyScript2.0は、Catyのメカニズムを記述できる能力を持たせるつもりです。とはいえ、アルゴリズムの詳細を書くような用途にはまったく不向きです。概略を説明する擬似コードのように使えるが、擬似じゃなくて実際に動く、というのが目標。 CatyScriptを使ってCaty自身を記述するとはどういうことか、Catyの対話的シェルを題材にして実際にやってみます。その過程で、CatyScript2.0の(予定されている)機能も紹介します。 タグと分岐 Catyの扱うデータ構造はJSONをわずかに拡張したもの(XJSON)です。拡張した点はタグが付けられることです。タグはアットマークで始まる名前で、

    CatyScriptで記述するCatyシェル - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Seven Trees:ちゃんと問題を述べると - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨晩某所で、id:bonotakeさんとid:ku-ma-meさんにお会いしたのですが、ku-ma-meさんがbonotakeさんのアドバイス(そそのかし)により、Seven Treesパズルを解かれたようです(http://d.hatena.ne.jp/ku-ma-me/20081023/p1 参照)。すごいなー。 「これは難しいパズルだ、取り急ぎ紹介」だけでは、問題が理解しにくいところがあるので、もう少し正確な記述をします(「取り急ぎ紹介」のコメント欄も全部読むと、けっこうハッキリしますがね)。ルールを正確に記述すると、必然的にヒントを与えることになりますが、そもそもノーヒントでは難しすぎる問題なので、順次ヒントを追加していく予定です。 解答例は、解けた人が(少なくともku-ma-meさんが)公表するだろうと思いますが、“他の人のお楽しみ”のため、1,2週間くらい期間を空けたらいいんじ

    Seven Trees:ちゃんと問題を述べると - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 檜山正幸のキマイラ飼育記 - プログラマのためのJavaScript (0)

    ジジイの手習いで、JavaScriptを勉強中でございます。その動機は「結局、ブラウザベースRIAかよ」のようなこと。非ブラウザベースのリッチクライアントへの期待を失ってしまったんですね。短期的・現実的な策としては、Ajax的な手法によるRIAなのかなぁ、という気分。ただし、「短期的」が“1年”と“5年”ではえらい違いです。今のところ僕には、「短期的」の実際の期間はわかりません。 僕のJavaScript調査の結果は、「初心者でも使えてプログラマでも困惑するJavaScript 」などに書きました。これらの続きとして、「プログラマのためのJavaScript (*)」というタイトルで書こうかと予定してます。あくまで予定、気まぐれでモノグサな僕のことだから、…… “プログラマのための”というのは、C, C++, Java, C#など“普通の”プログラミング言語にある程度慣れていることを前提に

    檜山正幸のキマイラ飼育記 - プログラマのためのJavaScript (0)
  • 恋、電車、よみがえる記憶 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日のテレビ番組「さんまのスーパーからくりTV」で、鉄道ファンのオニイサンが「恋は電車です」とか言っていた。「恋」「電車」のキーワードに脳のどこかが反応して、突如、ムカーシの記憶がよみがえった。 僕が若かったころ、先輩がつきあっていた女性と別れて落ち込んでいた。後輩=檜山: 先輩:「女と電車は次が来る、ってな。」 後輩:「でも、終電ってこともありますよね。」 先輩:「…」 後輩:「…」 先輩:「朝にはまた初電が来るだろが。」 後輩:「来世の話ですか。」 先輩:「……」 後輩:「……」

    恋、電車、よみがえる記憶 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
    容赦なさ過ぎるwwwww
  • なんで多重継承はそんなに嫌われるのか? ちょっくら分析してみるか - 檜山正幸のキマイラ飼育記 (はてなBlog)

    多重継承を嫌う人は多いですよね。「複雑だからダメだ」ってことらしい。でも、「複雑=ダメ」はちょっと乱暴。必然性/必要性がある複雑さなら、それは受け入れざるをえないのですから。それに、どの程度の複雑さなのか、その複雑さはどこから来るのかを知らないと「ダメ」かどうかの判断はできないと思います。 という次第で、多重継承の複雑さを調べてみます。ダメかどうかの判断は僕はしません。圏論の道具を使うのだけど、事前の知識は一切不要です(最後の節を除いて)。最後にまとめて圏論的な解釈をしますが、ここは省略可能。 内容: クラスとその例 多重継承は集約と単純継承の組み合わせ 嫌われる理由 1:名前のバッティング 嫌われる理由 2:ダイアモンド継承 ダイアモンド継承の対処 とりあえずのまとめ 圏論からのアプローチと整理 クラスとその例 多重継承の話をするので、もちろんクラス概念は仮定します。でも、複雑さの話を複

    なんで多重継承はそんなに嫌われるのか? ちょっくら分析してみるか - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

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

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • マスロフ式算数がやたらに面白いんですけど - 檜山正幸のキマイラ飼育記 (はてなBlog)

    インド式算数って、速算処方箋の寄せ集めでしょ。ロシア発のマスロフ式算数は、質的に新しい演算を扱う奧が深い算数ですよ。マスロフ式算数を学んでも速算の役には立たないけど、背後にある数理的構造/現象の神秘に触れられるかもよ。 内容: マスロフ式算数の由来 maxとminの算数 足し算的演算 足し算的演算の実例 マスロフ和 マスロフ和の極限 プランク定数と脱量子化 マスロフ式算数の由来 1980年代に、ロシアの物理学者マソロフ(Victor P. Maslov)により始められた脱量子化(Maslov Dequantization)という手法があり、現在では、数学、物理学、工学の広い範囲に影響を与えてます。マソロフ脱量子化の入り口は、変形した足し算を含む計算です。この計算は、普通の算数と同じ簡単な法則に従いますが、エキゾチックな世界を記述する道具になります。 このエキゾチックな算数の構造は、高校生

    マスロフ式算数がやたらに面白いんですけど - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • 檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算

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

    檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算
  • CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日、CPS(継続渡し方式)への変換を話題にしました。 最近CPSに凝っているらしいid:higeponさんが: 人間の皮が裏返る。外が内、内が外。みたいなイメージでしょうか。 と書いてます(CPSで思考する - higepon blog)。この裏返る感じを説明してみたいと思います。 プログラムが、3つの部分A, B, Cから構成されているとします。 A; B; C; A, B, Cは単一の文ではなくて大きなブロックでもかまいません。ブロックAの計算結果は変数aに代入され、ブロックBの計算結果は変数bに代入されるとしましょう。それぞれのブロックを関数化すると、次のようになります。 a = A(); b = B(a); c = C(b); 変数cの値がプログラム全体の結果となります。 中間変数a, bは不要なので除去すると: c = C(B(A())); 結局、プログラム全体の機能は、C(B

    CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • JavaScriptの構文チェッカーJSLintをEmacsから使う - 檜山正幸のキマイラ飼育記 (はてなBlog)

    先日、Emacsのgrepモードの説明をしました。これの応用として、JavaScriptの構文チェッカーであるJSLintEmacsから使ってみます。 Windows上のMeadow3での話ですが、Windows特有の部分は、他のOSでは問題にならないゴタゴタのところ(例:危険な^Z)だけです。 内容: Emacsのjavascriptモード JSLint Rhino とりあえず動かしてみる JSLintソースの修正 EmacsからJSLintを使う MakefileからJSLintを使う ●Emacsのjavascriptモード [追記] javascriptモードは推奨できません。「EmacsでJavaScriptソースを快適に読むために:js2-modeとエグズーベラントCtags」 をご覧ください。 [/追記] http://www.brgeight.se/ (2008-04時点

    JavaScriptの構文チェッカーJSLintをEmacsから使う - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • イプシロン計算ってなんですかぁ? こんなもんですよぉ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    ラムダ計算は、計算モデルとしてだけでなく、手計算の実際的手段としても役立ちます。しかし、通常使われる各種変換(アルファ、ベータ、イータ、デルタ)ではうまく計算が進まないときがあります。例えば、gがfの逆関数のとき、f(g(y)) は y に簡約されるのだけど、f(g(y)) ⇒ y って簡約規則は通常のラムダ計算ではうまく定式化できません(いや、できるかもしれませんが、僕にはうまい方法が思いつきません)。 そこで、ラムダ計算に加えてイプシロン計算も使うとよさそうです。でも、イプシロン計算は、ラムダ計算ほどにポピュラーではないですね。簡単な例でイプシロン計算を紹介しましょう。 内容: イプシロン記号とイプシロン項 イプシロン項の意味 イプシロン項が定義する関数 例題:gがfの断面(セクション)であること イプシロン記号とイプシロン項 負の数-1とか、無理数√2とかを導入するとき、次のような定

    イプシロン計算ってなんですかぁ? こんなもんですよぉ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • どこが面白いの?可逆計算 -- コンピューティングと北極グマ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「可逆計算が面白いから、JavaScriptで書いてみた」とか言ってみたわけですが、どこが面白いのでしょう。まー、面白いってのは個人的な感覚だから説明しにくいのですが、オシャベリとしてなにやら書いてみます。 僕は、環境問題やエネルギー問題の知識はろくにないし、「熱心なエコロジスト」なんてことはまったくありません。が、やっぱりリソース(資源)とかエネルギーは気になる、なんとなく。 僕がよく使う機械といえばコンピュータ。クーラーや冷蔵庫だけじゃなくて、コンピュータだって電気使って熱を吐き出します。なんか後ろめたい。現実のこの機械のことじゃなくて原理的なハナシでも、計算するとリソースとエネルギーを使うらしいです。計算つっても、結局は物理過程だから外部環境を汚してしまうんですよね。 ランダウアー(Landauer)の原理によると、情報を消去すると必然的に外部環境のエントロピーを上げてしまうそうです

    どこが面白いの?可逆計算 -- コンピューティングと北極グマ - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • なぜ引き算なしでも大丈夫なのか - 檜山正幸のキマイラ飼育記 (はてなBlog)

    引き算はなくてもだいたい大丈夫で提示した問題。MarriageTheoremさんやささはらさんに回答していただきました。 僕は、なんか持って回った証明しか思いつかなかったんですが、短くて簡略な方法で示せるのかも知れません。興味と時間がある方は考えてみてください。 と書いたように、僕が思いついた方法は直接的ではないので不満が残りますが、幾何学的に明確なイメージを持てることはメリットかもしれないので、書いておきます。 内容: 不定方程式の非負整数解とは 解が1つあるなら、もう1つ解がある 解が2つあるなら、無限に解がある 直線をズリズリとずらしてみる 一般化するには ●不定方程式の非負整数解とは a, b, cは整数だとして、方程式(整数の不定方程式)ax + by = c を考えます。ユークリッドの互除法とかイデアル論とかを使えば次の結果を示せます。 aとbの最大公約数をgとして、cがgの倍

    なぜ引き算なしでも大丈夫なのか - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • ホッピングボール:エキゾチック二進小数 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    ホッピングボール・マシンを記述したり解析したりするときに、エキゾチックな二進小数が役に立ちます。それで、エキゾチック二進小数の説明をします。とはいっても、今回はホッピングボール・マシン自体は全然出てこないので、完全に独立した話として読めます。 内容: エキゾチック二進小数とは何か エキゾチック二進小数の足し算 エキゾチックな循環小数 エキゾチック二進小数の掛け算 エキゾチック二進小数と0以上2以下の実数との違い エキゾチック二進小数の計算法則 言い残したこと 全体目次 ●エキゾチック二進小数とは何か エキゾチック二進小数とは、ほぼ、0以上2以下の実装を二進小数で表現したものです。「ほぼ」と言ったのは、厳密にはわずかに異なるからです。でも、気にするほどのことはありません。とりあえず、0≦ x ≦2 の実数がエキゾチック二進小数の実体だと思ってください。(「ほぼ」の正確な記述は最後にあります。

    ホッピングボール:エキゾチック二進小数 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • オブジェクトとクラス、とりあえずご質問に答えます - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ」には、いろいろとフィードバックがありまして、僕もそれらに触発されたところもあるので、お応えしたい気もするのですが、なかなかにねー、、、エネルギーが足りないや。 とりあえず、明白に質問(疑問文)の形をしたものに答えます。 higeponさんの: 今日お話に出ていたCommonLisp(?)のすごいコードのお話ってどの辺に書かれていますでしょうか? aufhebenさんの: レイフィケーションとパワータイプって同じような概念ととらえてよいのかな? 檜山さんのエントリで、is-created-by とレイフィケーションは、他の関係と矢印の向きが逆な気がするんですけど、何か意図があるのでしょうか? id:higeponさんの質問は、当該エントリーとは別な文脈でのものですが、一連の流れとしては関連するので。 もし、「いまさらながらだ

    オブジェクトとクラス、とりあえずご質問に答えます - 檜山正幸のキマイラ飼育記 (はてなBlog)
    youz
    youz 2008/10/01
  • プログラマのための「ゲーデルの不完全性定理」(1) - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「プログラマのためのJavaScript」の番外シリーズ -- いやっ、ホントに。 これはシリーズのハブエントリーです。番号を(0じゃなくて)1にしたのは、全体目次だけじゃなくて内容が含まれるから。 ※ 印刷時にはサイドバーは消えるはずです、お試しください。 シリーズ全体目次(予定) (この記事;総論) 速攻速習編 自己適用からゲーデル化へ 「展望」への緊急パッチ(オハナシだよ) Reflective JavaScript 停止問題の構造 不完全性定理の構造 今回の内容: ゲーデルの不完全性定理とプログラミング ゲーデルが示したこと 不完全性定理の兄弟 -- 停止問題 JavaScript使うんだもんね 関連する記事(参考) 次の記事 速攻速習編 ●ゲーデルの不完全性定理とプログラミング 「ゲーデル」(人名;Kurt Godel、'o'の上に点々が付いてる)や彼の「不完全性定理」とかって、

    プログラマのための「ゲーデルの不完全性定理」(1) - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 檜山正幸のキマイラ飼育記 - 圏論やモナドが、どうして文書処理やXMLと関係するのですか?

    …という類<たぐい>の質問に答えるのはちょっと面倒なんですけど、とりあえず1つだけ具体例を挙げておきましょう。テンプレート処理が、もろにモナドになっている、ってハナシ。今回はテキスト処理について説明。次回(いつになるかまったく不明)はXML処理の予定。 テキスト処理だけでも長ーい説明(最長記録かも)なのだけど、分割すると“勢い”がなくなるから一挙掲載。読むときはユックリ・ジックリ読んでくださいね。プログラミング課題も、実際にコーディングしないまでも、「こうやればいいな」という方針くらいは考えてください。 ※印刷のときはサイドバーが消えます。 内容: ネストしたテキスト テンプレート処理 ブロック、文字列、名前 フラット・テキストとテンプレート・テキスト 多段階のテンプレート処理 蛇足 素材を整理しよう モナドに向かって突っ走れ!! バッチリ、モナドだぜぇ 残りは脱兎のごとく 最後に言ってお

    檜山正幸のキマイラ飼育記 - 圏論やモナドが、どうして文書処理やXMLと関係するのですか?
  • JavaScript大域変数の存在確認 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    [追記]id:zorioさんのブックマークコメントの指摘により、抜けていた「.apply」を挿入しました。[/追記] JavaScriptで、大域変数(大域オブジェクトのプロパティ)fooが存在しないときに何かをしたいとしましょう。例えば、こんな書き方をしますよね。 if (!foo) { // 何か } でも、式 !foo は、fooがnullでもfalseでも0でもtrueに評価されます。 if (foo == undefined) { // 何か }としたほうがよさそうです。が、null == undefined もtrueとなるのであまり改善されてません。 if (foo === undefined) { // 何か }イコールが3つなら、厳密に「fooが未定義値であるとき」を表現します。ここで、undefinedはリテラルではなくて、仕様として事前に定義されている大域変数です。u

    JavaScript大域変数の存在確認 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • もう一度、ちゃんとJSON入門 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    僕自身も僕の周辺もJSONをよく使います。でも、細かい点でけっこうミスをやらかしています(苦笑)。このエントリーで、JSONを使う上で注意すべきこと/間違いやすい点をすべて列挙します。 内容 兼チェックリスト: 仕様原典さえ読めば完璧(のはずだが) 数値の前にゼロを付けてはいけない 16進数表記も禁止だよ 数値の前にプラスを付けてはいけない 小数点からはじまる数値はダメ 用語法が違うよ:プロパティとメンバー メンバー名には常に文字列を使う 空文字列""もメンバー名に使える 配列要素はキッチリと並べよう 文字列を囲むには二重引用符だけ 文字列内のエスケープが微妙に違う 仕様にないエスケープは構文エラー undefinedもNaNもありません ラッパーオブジェクトは使わないのが吉 型システムとtypeofに関する注意 最後に 仕様原典さえ読めば完璧(のはずだが) JSONは、小さくて簡単な仕様

    もう一度、ちゃんとJSON入門 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 可逆計算が面白いから、JavaScriptで書いてみた - 檜山正幸のキマイラ飼育記 (はてなBlog)

    グリーンとアルテンキルヒ(Alexander S. Green, Thorsten Altenkirch)の「可逆計算から不可逆計算へ(From reversible to irreversible computation)」という10ページの短い論文があります。タイトルのとおり、可逆計算から不可逆計算が出るよ、ってハナシがこの論文の眼目なんですが、可逆計算の部分(前半)が面白かったので紹介します。 何が面白いかというと、可逆計算だと古典計算も量子計算も差がないのですよ。同じ定式化を許します。古典計算において可逆計算に慣れておくことは量子計算へのよい準備になると思います。とか言っても、今回は難しい話は全部すっ飛ばして、JavaScriptの関数をいくつか書いてみるだけですがね。 このエントリーを書こうとしてJavaScriptでミスを犯した顛末は「JavaScriptでハマった件:さすがに

    可逆計算が面白いから、JavaScriptで書いてみた - 檜山正幸のキマイラ飼育記 (はてなBlog)