id:nozom:20060317#1142577630の続き。世界で最も誤解された言語とも呼ばれるJavascriptを使って継続渡しを書いてみた。 なお、Javascriptの処理系としてRhino*1を使った。参考文献は『入門Javascript』(ISBN:4756138713)。 function fib(n) { if ((n == 1) || (n == 2)) return 1; else return fib(n - 1) + fib(n - 2); } function fib_cps(n, k) { if ((n == 1) || (n == 2)) return k(1); else return fib_cps(n - 1, function(v1) { return fib_cps(n - 2, function(v2) { return k(v1 + v2);
実装はまだ先だが、継続渡しに変換してからコンパイルする方法がなんとなく分かった。 継続渡しへの変換 継続渡しへの変換は、簡単な例で示すと以下のようになる。 次の式を評価するためには、まず(g)を評価して、その戻り値を使って(f # x)を評価する。 (f (g) x)つまり以下の式と等価。 ((lambda (v) (f v x)) (g))ここで関数gの引数を一つ増やして、1引数の関数kを取れるようにしたg_cpsを考える。この関数g_cpsは、本来のgの計算を行った後で、戻り値を返す代わりに渡された関数を呼び出す(呼ばれた関数から戻ってこないので、呼び出すというよりジャンプすると言った方が正しい)。 (g_cps (lambda (v) (f v x)))このときの増えた引数が継続。 (擬似)バイトコードへのコンパイル 具体例で考える。 (define (fact n) (if (>
前のエントリでループの度にヒープにクロージャを生成しているのが無駄だと思う人がいるかもしれないが、それは例に挙げた関数が末尾再帰になっていないからだ。継続渡しは末尾再帰の時に最も真価を発揮する。 というわけで階乗計算の末尾再帰版。 (define (fact_tailrec n) (define (fact-aux n r) (if (> n 1) (fact-aux (1- n) (* n r)) r)) (fact-aux n 1))これを継続渡しスタイルにしたものがこれ。 (define (fact_tailrec_cps n k) (define (fact-aux n r k) (if (> n 1) (fact-aux (1- n) (* n r) k) (k r))) (fact-aux n 1 k))さらにこれを前のエントリと同様の規則で変換すると、 fact_tailre
レキシカルスコープと継続ができたので、あとSchemeに必要なものとしては末尾再帰の最適化がある。せっかくだからこれも実装したい。 どうやって実装すればいいか。最初はインタプリタではなくコンパイラを作らないといけないと思ったが、ひょっとすると継続を使えば自然に実装できるかもしれない。今は継続をバカ正直に毎回生成しているが、等しい継続(同じクラスで参照しているオブジェクトも同じ)は、振る舞いも同じはずなので、既に同値の継続オブジェクトが存在していたらそれを使うようにすると、繰り返しだろうが再帰だろうが有限の継続だけで済んでしまうような気がする。 ただ、もしそうなるとちょっとした問題があって、オブジェクトが循環参照するようになるので、最早オブジェクトの寿命をガベージコレクタに任せきりにはできないかもしれないということ。Javaのガベージコレクタってそこまで賢くなかったよなあ。となると自分で何と
昨日の時点ではまだバグがあったが、そのバグも直った。たぶんこれで完成したと思う。最終的にはスタックですらなく、単に現在の継続を覚えておくだけで良くなった。これは継続自身に次に処理を渡すべき継続の参照を持たせることにしたためで、こうしないと継続を再利用した時に問題が出る。 昨日は結果しか書かなかったので、継続について少し解説を。 > (+ (call/cc (lambda (x) (x 1) 2)) 3) ==> 4この例では、xにcall/ccの外側への継続が束縛されているので、xを呼ぶと(call/cc ...)全体がその引数と置き換わり、全体としては(+ 1 3)を計算することになる。いわゆる大域脱出の例。 別の例: (define cont #f) ==> #f (+ (call/cc (lambda (x) (set! cont x) 1)) 2) ==> 3 (cont 5) =
なんかゴニョゴニョやってるうちに出来たみたい。 > (+ (call/cc (lambda (x) (x 1) 2)) 3) ==> 4 以下のページなども参考にしつつ、継続スタックを自前で管理することで実現した。継続に対応させるために、プリミティブ関数の実装がとても力業になってしまった。 Schemeを作ろう 第3回 http://www.jah.ne.jp/~naoyuki/Writings/VScheme3.html それと、レキシカルスコープは意外に簡単に実装できた。要するにオブジェクトの値を求める時に、評価するときの環境じゃなくて定義した時の環境を使えばいい。定義する場所と評価する場所が異なるのは関数オブジェクト(==lambda式)の中だけだから、結局は関数に定義した時の環境を持たせておくだけでよくて、わずか数行の書き換えで実現できてしまった。 継続に対応するコードの例 参考ま
理由は id:nozom:20090202 を見てください。 はてな市民制度について はてな市民とは によると はてなキーワードを編集するためにははてな市民でなければならない はてな市民になるためにははてなダイアリーかはてなグループ日記を30日以上利用しなければならない 最後の利用から30日以上利用がない場合一時的にはてな市民ではなくなる ということで、移転先のはてなグループの方はほぼ週1更新なのではてな市民になるまであと約6ヶ月もかかるが、さすがにそれは待っていられないのではてなダイアリーの方を更新してみるテスト。 たぶん今後も何回か同じことがあると思います。 ユーザーページへのGoogle Analyticsの設置についてのアンケートで反対したことがいつの間にか*1導入されていたため、本日をもってこの日記の使用を中止します。 他のサービスに移ることも考えたのですが、当面の間 g:noz
Windowsセキュリティオンサイトセミナー タイトル 第01回: カーネルデバッガ「WinDbg」入門(その1) 第02回: カーネルデバッガ「WinDbg」入門(その2) 第03回: カーネルデバッガ「WinDbg」入門(その3) 第04回: WinDbgのインストールと起動 第05回: WinDbg環境の確認 第06回: WinDbg環境の有効性を確認する 第07回: WinDbgコマンド体系 第08回: WinDbgコマンドスクリプティング入門 第09回: WinDbgコマンドスクリプティングの利点 第10回: WinDbgとはいったい何なのか? 第11回: WinDbgを使ったアプリケーション分析 第12回: システム管理とWinDbgカーネルデバッガーコマンド 豊田孝の「IT談話館」 ホーム
What's new - 更新履歴 直近20件の新しい記事です。 2024-07-28: Lenovo IdeaPad と ThinkBook の違い・比較 2024-02-28: ASUS ROG ノートパソコン FLOW・ZEPHYRUS・STRIX の違い、比較 2024-01-14: ASUS ノートパソコン製品シリーズの違い・比較 2023-12-10: ゲーム開発に最適なノートパソコンの選び方/おすすめ機種紹介 2023-11-18: 動画編集に最適なノートパソコンの選び方/おすすめ機種紹介 2023-11-03: プログラミングに最適なノートパソコンの選び方/おすすめ機種紹介 2023-09-09: 『ノートパソコン購入ガイド』を公開 2023-04-29: 推理小説『水車館の殺人』の感想 2023-03-26: Lenovo 公式サイトの「ThinkBookとThinkPa
午後2:00までのご注文(在庫のある電子部品)は当日発送となります。 ただし、土曜日・日曜日・祭日の発送はお休みとさせていただきます。 当店の営業時間は月曜日~金曜日の朝8:00~16:00までとなっております。 16:00以降のお電話は対応致しかねますのでご了承ください。 ■当店は店頭販売しておりません。通信販売のみとなります。 ご来店はご遠慮願います。
Hey there, this is a Custom Domain from BitlyThe link you clicked may not be workingPlease make sure the link you clicked on or typed contains letters or numbers after the forward-slash (“/”). This Custom Domain is currently associated with a Bitly account. Want to create your own custom branded links with Bitly? Visit here to learn more, or fill out the form to discover how a branded domain can h
先週、私はRootkitRevealer(RKR)の最新版をテストしていた。システムの1つをスキャンしてみて驚いた。Rootkitが入り込んでいる形跡があったからだ。Rootkit(ルートキット)とは、ファイル、レジストリ・キー、そのほかのシステム・オブジェクトを、診断ソフトやセキュリティ・ソフトウェアから隠ぺいする技術のことだ。これは通常、マルウェア(不正なソフトウェア)が自らの存在を隠そうとして使用する技術である(Rootkitについては、Windows IT Pro Magazine 6月号掲載の記事“Unearthing Root Kits”に詳しく書いた(訳注:該当記事は契約購読者のみ閲覧可能。Rootkitに関する日本語の記事としては関連記事も参照)。RKRの結果ウィンドウによると、隠しディレクトリが1つ、隠しデバイス・ドライバがいくつか、そして隠しアプリケーションが存在してい
Welcome to ProcessLibrary.com, winner of PCMAG’s Top 100 Classic Websites in the Tech: Download and DIY categories. ProcessLibrary is a free resource that provides information about processes and DLLs running or found on Windows PCs. It features an extensive and regularly updated database with over 195,000 entries and counting. To find more information about a computer process, you can use the Sea
macs-wiki の後継パッケージ、emacs-muse のインストールと設定を説明しています。html だけでなく、色々な形式に出力出来ます。私は、Tex の出力にも使っています。 まえがき インストール 設定 使いかた Links 関連するページはこちら、 AucTex —- emacs の、Tex 編集用パッケージ JapaneseTexPackage —- 日本語 pLatex を、インストールする方法を説明しています。 MacOSX & Cygwin on Windows のソフトの事 Windows & Mac で使っているソフト —- ソフトのインストールや設定に付いて少しずつ整理していこうと思っています。 CarbonEmacs と、NTEmacs のページは此方 Emacs-22.0.50 を、Mac と Windows で使う 1. まえがき Muse による ema
Jeff Atwood / 青木靖 訳 2006年8月24日 企業は開発者に給与として60-100kドル支払いながら、ひどい作業環境と汚い使い古しのハードウェアによって彼らを損なっている。信じられない話だ。そんなのはビジネス的に理屈に合わない。ところがそういうのをどこでも目にする。ソフトウェア開発者が成功するために不可欠なものを与えていな い企業がいかに多いかは驚くばかりだ。 そこでプログラマの権利宣言を採択し、成功に不可欠な基本的なことを否定する企業からプログラマの権利を守ることを提案する。 すべてのプログラマは2つのモニタを持つ権利を有する 下落する液晶ディスプレイの価格と、遍く存在するデュアル出力ビデオカードのことを考えるなら、開発者を1つのディスプレイに制限するのはばかげた話だ。ディスプレイを2つにすることによって得られる生産性の利益については、今では十分に説明されている。開発者の
● [Linux][Writing] 世界一単純な実行ファイルフォーマット binfmt_flat Computer Architecture Series 第二作のために、日々素材作りを進めているのですが、この作業の間に "binfmt_flat" というオタッキーなモジュールが誕生しました。今日は、このモジュールを使った "Hello golf" をご紹介しましょう(注: 昨年一世を風靡した ELF golf ではありませんので、あしからず)。 初学者の理解を阻む複雑な ELF 皆さんご存じの通り、PC-UNIX 上における標準のオブジェクトファイルフォーマットは ELF (Executable and Linking Format) ですが、このフォーマットは高機能を追求しているため、内部はかなり複雑な作りになっています。 実は、当初 Computer Architecture Se
始めに emacs-wiki の開発が port over 宣言されましたので, Muse Mode に移行します. できる事が増えて, さらに複雑になった感が否めませんが. list のネストが可能に emacs-wiki でも 以前当ててたパッチ でネストできる? 画像の inline 表示はできるのかな できるッポイ. けれど試していない. 書法が以前以上に Wiki っぽくなりました. HTML だけでなく, XML や TeX への変換も可能との事なんですが, はてさてどこまで使えるのでしょう. install Debian GNU/Linux 4.0(etch) でパッケージになっているのは muse-el_3.02.8 です. このバージョンを install してみたところ, 懸案の list の nesting が効きませんでした. そんな訳で latest を uupd
Emacs Muse は Emacs のための文書編集・出版環境です. Emacs Muse を利用すれば,文書を執筆したりいろいろなフォーマットで出版したりといったことが簡単にできます. Muse は大きく分けて2つの部分から成り立っています:文書を作成したり Muse プロジェクト内で編集の行き来をするための拡張テキストモードと, 様々なフォーマットでの出力を生成するための公開スタイルのセットです. この文書について この文書では Muse をすぐに使うためのマークアップや機能の例を紹介します. この文書がどういうふうに出力されるか知りたいときは make examples と入力してください.そうすれば,Info 形式と HTML 形式,PDF 形式(処理に必要なフォントとともに LaTeX がインストールされているならば)での出力が得られます. まずはじめに Muse を使うために
WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。 少し前に公開した Ruby 用 JSON クラスに数多くのバグを仕込んでしまい(たいへんご迷惑をおかけしました m(_ _)m)、テストの重要性を改めて痛感している今日この頃です。今後も開発を続けるにあたって、現在の行き当たりばったりなテスト方法ではとてもやっていけないと危機感を持ちまして、きちんとしたユニットテストの方法を調べてみました。 で、実際に試してみたと
5 Getting Started .emacs 上の設定 debian 的には、 load-path の設定は済んでいるので、必要なモジュールを ↓のように require すればいい (require 'muse-mode) ; load authoring mode (require 'muse-html) ; load publis hing styles I use (require 'muse-blosxom) bhl-mode 相当の使い方 muse-mode から C-c C-t で、カレントバッファをパブリッシュできる C-c C-t (muse-publish-this-file) カレントバッファをパブリッシュ これは (muse-modeであれば)任意のバッファをパブリッシュできる つまり bhl-mode 相当の使い方が出来る 6 Creating and Man
Vimの無数の機能と柔軟さはベテランのユーザにとっては大きな利点であるが、初心者にとっての敷居を高くしてしまっているというのも事実だ。あなたがもし、Vimを使いたいとずっと思っていながらも初めて試したときにうんざりしたきりそのままになっているなら、VimをGUIで使用する方法とVimのeasyモードについて知ることからVimを少しずつ始めてみよう。この記事は、今までにあまりVimを使ったことがないが、これからゆっくりと挑戦してみようと思っている人のための手引きだ。 VimもVim以外のvi系のエディタもまったく使った経験がない人がVimを始めるには、VimをGUI形式で利用(gVim)するのがおそらく最良の方法だ。gVimでは、すでにVimのキーバインドに慣れている操作に関してはキーボード経由で操作しつつ、キーバインドをまだ身に付けていない操作についてはマウスとメニューを使って手っ取り早く
ここでは、リレーショナル型データベースを操作するために必須となる世界標準言語 SQL について、基礎から応用まで詳しく説明しています。 また、SQL のみにとどまらず、リレーショナルデータベースマネージメントシステム (RDBMS) の持つ様々な機能について詳しく説明しています。 最後には、データベースの設計に関する非常に重要な考え方についても触れていますので、これらを全て学習すると、データベースの操作から設計まで幅広い知識を身につけることができるでしょう。 SQL INDEX 1. データベースの概要 1.1. データベースとは 1.2. データベースシステムの特徴 1.3. データベースとファイルの違い 1.4. 代表的なデータモデル 1.5. リレーショナル型データベース 1.6. まとめ 2. SQL 2.1. SQL の歴史 2.2. SQL とは 2.3. SQL の機能 2.
SQL 開発言語資料 SQL プログラミング言語資料 SQL 基礎編 SQL 基礎実地編 SQL チューニング編 Oracle PL/SQL 編 PostgreSQL 編、JAVA Servlet、JSP 編 MySQL 編 SQL その他応用編 VB プログラミング言語資料 VB RDO + SQL 応用編 VB ADO + SQL 応用編 VB oo4o + SQL 応用編 ASP VB Script プログラミング言語資料 ASP VB Script ADO + SQL 応用編 ASP VB Script oo4o + SQL 応用編 SQL 基礎編 2000.10.14 SQL 基礎編 (その一) テーブル操作 create table、alter table、drop table SQL 基礎編 - 【補足】複合キー alter table、primary key 2000.10
医者と、建築家と、コンピュータ科学者が、どの職業が最も古いかについて議論 していた。議論が進むうちに、彼らはエデンの園までさかのぼった。医者は言った 「医業が最も古いというのは明確だ。イブがアダムのあばら骨から作られたとする なら、これぞ外科の偉業というべきだろう。」 建築家は同意しなかった。「君はエデンの園というがね、はじめにあったのは混 沌と無であり、それから『園』と世界が作られたんだ。ならば、神は建築家であっ たにちがいないさ。」 コンピュータ科学者は、すべての意見をじっくり聞いてから言った。 「あぁ、でも、混沌はどこから来たと思ってるんだい?」
日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
20個近い Extension を装備し、周囲に無数のブックマークを配置した Firefox が重くないはずがないですね。 レスポンスは犠牲になってもこの拡張性は手放せない、そんな思いでFirefox を使い続けている方に耳寄りの話です。 以下の13の「about:config」の設定を変えるだけで、Gmail や Google Calendar を読み込むスピードが確かに 2〜3割は速くなりました。 起動速度を比較するために立ち上げているブログサイトが4つほどあるのですが、少なくとも3つに関しては効果ありました。 オリジナルは以下の記事です。 ⇒13 Tweaks To Further Accelerate Your Firefox 2.0 方法は簡単。まず、アドレス欄に「about:config」と打って、Firefox の config 設定画面を開きます。①〜③は既存の confi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く