ブックマーク / tarao.hatenablog.com (8)

  • C++のテンプレートでラムダ計算と型推論 - 貳佰伍拾陸夜日記

    C++のテンプレートを, コンパイル時に走るプログラムを記述するための言語だと思うと, この言語はチューリング完全なので, 当然ラムダ計算のインタプリタを実装できるし, そのラムダ計算の項の型を推論することもできる. できるからと言って馬鹿みたいにやってしまったという話. ソースコードは末尾. テンプレートメタプログラミング テンプレートをプログラミング言語だと思うと, 構文はともかく, 副作用がなく関数(っぽいもの)を淡々と定義してパターンマッチして再帰呼出しして, という感じでとても関数型っぽい. 関数と返り値 テンプレートメタプログラミングではテンプレートクラスを関数だと思って使う. そして返り値はtypedefして返す. たとえば任意の型S, Tを受け取って前者を返す関数firstは template<typename S, typename T> struct first { t

    C++のテンプレートでラムダ計算と型推論 - 貳佰伍拾陸夜日記
  • 最小限のJavaで素数を列挙(Javaで無限リスト) - 貳佰伍拾陸夜日記

    以前書いた「ラムダ計算基礎文法最速マスター」では, ラムダ計算に自然数やデータ構造, 条件分岐, ループが用意されていないため, これらをラムダ項を使って模倣する方法を紹介しました. このようなことはどんなプログラミング言語でも起きうることで, たとえば, アセンブリ言語にforループが無いために, C言語で書かれたプログラムをアセンブリ言語にコンパイルするときには条件ジャンプ命令とラベルでforループを模倣する, というのも同じことです. 今回は, Javaを最小限の機能だけに制限した純粋オブジェクト指向言語で, 以下のものを実現してみます. 真偽値と条件分岐 自然数と四則演算 リスト 無限リスト さらに, これらすべてを用いて任意個の素数を列挙するプログラムを書いてみます. 完全なソースコードは一番最後にあります. 最小限のJava Javaはそれ自体純粋なオブジェクト指向言語ですが,

    最小限のJavaで素数を列挙(Javaで無限リスト) - 貳佰伍拾陸夜日記
    phirose
    phirose 2010/04/24
  • はてなグループ日記でプレゼンモード - 貳佰伍拾陸夜日記

    はてなグループのキーワードで使えるプレゼンモードはちょっとしたスライドを作るときにとてもべんり. でも, はてなグループを無料で使っているとキーワードはパブリックになってしまうので, あんまり馬鹿なスライドを作って公開してしまうわけにもいかない. はてなグループの日記は無料で使っていても閲覧可能範囲を設定できるので, 日記をそのままプレゼンモードに切り替えるブックマークレットを書いてみた. 使い方 まず最初に以下のアドレスを(ブラウザの)ブックマークに登録しておく. javascript:['PresentationOnDiary',false,'https://raw.githubusercontent.com/tarao/bookmarklet/master/js/PresentationOnDiary.js',function(d,i,e,z){ARG0=this.pop();ARG

    はてなグループ日記でプレゼンモード - 貳佰伍拾陸夜日記
  • JavaScriptで読む「ラムダ計算基礎文法最速マスター」 - 貳佰伍拾陸夜日記

    以前書いた「ラムダ計算基礎文法最速マスター」(以下「最速マスター」)は, 予想以上に多くの人に興味を持ってもらえたようですが, 同時に難しくてわからなかったという人も多かったようです. 反響から察するに, 構文を見慣れていない(と錯覚してしまう)ことが理解の妨げになっていたように思います. ラムダ計算の構文は, 実際には全く特殊なものではありません. このことがよくわかるように, 「最速マスター」のラムダ計算の簡約の例をすべてJavaScriptの構文で書いてみました. ......という内容になるはずでしたが, 気がついたらラムダ計算のインタプリタをJavaScriptで実装していました! 実際に動かせるものは下記URLにあります. https://tarao.github.io/LambdaJS/#js 動作確認と既知の問題 Firefox 3.6 Google Chrome 4.1

    JavaScriptで読む「ラムダ計算基礎文法最速マスター」 - 貳佰伍拾陸夜日記
  • ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記

    ラムダ計算は, 多くのプログラミング言語, とくに関数型言語の原形になっています. ラムダ計算について理解しておくことは, 多くのプログラミング言語の習得に役立つでしょう. ラムダ計算はチューリング完全で, 計算能力としてはふつうのプログラミング言語と同じです. ラムダ計算で計算を書く訓練をしておくことは, 任意の計算を関数のみを使って(他の制御構文を用いずに)書くときに役立ちます. ふつうに書いたら煩雑な処理を, 関数型言語のやり方で書くとすっきりすることが多々あり, コードを自由自在に書くためには必須の考え方と言えるでしょう. 項 ラムダ計算の式を項(term)と言います. 項は変数, 抽象, 適用のいずれかです. 変数 変数(variable)はふつう1文字で書きます. 変数には関数内の束縛変数(bound variable)か自由変数(free variable)かという区別があり

    ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記
  • location.hrefの挙動 - 貳佰伍拾陸夜日記

    Firefox 3.5.5で, location.hrefに値を代入したときの挙動が, 普通に実行した場合と動的に読み込まれたjsファイルで実行した場合で違う模様. 普通に実行した場合 location.hrefに代入したURIに移動する 移動前のページがhistoryに残る 動的に読み込まれたjsファイルで実行した場合 location.hrefに代入したURIに移動する 移動前のページがhistoryに残らない 検証用ページ: http://test.orezdnu.org/js/location/ さらに, about:blankにいる状態でロケーションバーにjavascript:を書くなどして, 動的にjsファイルを読み込んでlocation.hrefに代入すると, その後1回分のページ移動のhistoryがわれてしまう. 少し探したところこのバグ報告に似ている感じ: https

    location.hrefの挙動 - 貳佰伍拾陸夜日記
    phirose
    phirose 2009/11/26
    about:blankで動的の場合は自分が_blankターゲットになる / 戻れないとのコンボですごく困る
  • 好きなエディタでFirefoxに入力 - 貳佰伍拾陸夜日記

    やりたいこと ブラウザの入力エリアはとても貧弱で, とくに普段からEmacsのような高機能エディタを使っていたり, Emacsのような高機能エディタのviエミュレーションモードを使っていたりするような変態さんにとって, これは耐え難い苦痛. JavaScriptを頑張って書いて入力エリアそのものを強化することも考えられるけれど, コストが大きい. なにか簡単な方法で, 外部のエディタとブラウザの間でやりとりさせられるならその方が楽. それを実現してみた, というお話. 具体的には, ある決められたファイルに何か書き込むと, それがブラウザのアクティブな入力エリアに書き込まれる, ということを実現する. やり方 まずは雰囲気をつかむためにデモ動画を見てみよう. Windowsの人 動画の通りにするだけで使える. FirefoxとGreasemonkeyをインストール Windows用のインス

    好きなエディタでFirefoxに入力 - 貳佰伍拾陸夜日記
  • HatenaDiaryFS - 貳佰伍拾陸夜日記

    やたーはてなダイアリーファイルシステムできたよ\(^o^)/ - 2nd life (移転しました)を改造してみた. 変更点: 下書きに対応 タグが余計にエスケープされてしまう問題を解消(REXML::Textのバグっぽい) ファイル名をISO 8601に タイトルに*がつく 文とタイトルの間に行間を空ける

    HatenaDiaryFS - 貳佰伍拾陸夜日記
  • 1