タグ

ブックマーク / lethevert.hatenadiary.org (23)

  • スコープの話 - lethevert is a programmer

    (let ((y 5)) (defun print_y (x) y) ; print_yを定義します (defun map2 (f lst) (let ((y 20)) (mapcar f lst))) ; print_yを評価します (let ((y 10)) (map2 #'print_y ; print_yを束縛します (list 1 2 3 4 5))))このコードの出力がどのようになるかを考えてみる。 レキシカルクロージャの場合 (5 5 5 5 5) ダイナミッククロージャの場合 (10 10 10 10 10) 開ラムダ式の場合 (20 20 20 20 20) という3種類の可能性があるわけだが、 上のコードは実はEmacs Lispなので、開ラムダ式として評価され、結果は(20 20 20 20 20)となる。 ところで、ダイナミッククロージャという言葉が当にあるのか心

    スコープの話 - lethevert is a programmer
    yugui
    yugui 2008/07/06
    lexical closureとdynamic closureとopen lambda
  • 結論:結局、Javaはクロージャを使えるの? - lethevert is a programmer

    【追記 2008/7/2】とても昔のClosureについて書いた記事が注目を集めてしまったみたいですが、ぜひ、もっと後で書いた次の記事とその関連スレッドの方も確認してみてください。このときよりも、もう少し事情が分かってから書いたものなので、より正確に状況を理解できると思います。それに、私自身、この言葉にはまだ混乱しています・・・ http://d.hatena.ne.jp/lethevert/20070524/p2 - という問いに対して、そろそろ私の結論を整理しておきます。 これは、将来の自分に対する参照の便のための整理です。 前提知識 前提知識として、こちらの内容を読んで理解しておきます。 Closure (computer programming) - Wikipedia [id:lethevert:20060119:p1] [id:lethevert:20060121:p2] また

    結論:結局、Javaはクロージャを使えるの? - lethevert is a programmer
    yugui
    yugui 2008/07/06
    クロージャーについての議論。
  • はてなアンテナがBloggerからウィルスあつかいされている件 - lethevert is a programmer

    こんな表示になっていて、更新が取得できなくなっている。ぉぃぉぃ。。。 Google Error We’re sorry... ... but your query looks similar to automated requests from a computer virus or spyware application. To protect our users, we can’t process your request right now. We’ll re

    はてなアンテナがBloggerからウィルスあつかいされている件 - lethevert is a programmer
  • Concurrent Clean : プログラミング言語をLinuxモデルで開発する - lethevert is a programmer

    すでにHaskellというスタンダードがあって、GHCという強力な実装があるのに、どうしてあえてCleanなの?と思うかもしれないですが、その理由はLLSpiritの発表でも一瞬触れたように、Haskellってちょっとリソースいすぎじゃない?と感じているわけです。 証拠 → http://www.lingr.com/room/gauche/archives/2007/07/26#msg-12539883 でも、圧倒的に実装や開発リソースで負けているCleanが、Haskellと勝負したって結果は決まってるんじゃない?とか思うかもしれませんが、そうでもないんじゃない?と思っています。というのは、CleanってLinuxモデルが適用できそうな気がするのです。 Linuxモデルというのは、勝手に命名したのですが、バザール方式のことではなくって、カーネルの開発とディストリビューションの開発が分か

    Concurrent Clean : プログラミング言語をLinuxモデルで開発する - lethevert is a programmer
  • クロージャ - lethevert is a programmer

    [id:m-hiyama:20070523:1179888512] はてなのキーワードにクロージャを登録した人です。(駄洒落は私の仕業ではありません) クロージャってバズワードですよね。なので、人によって使い方がまちまちなような気がするのですが、プログラミング言語の機能としての意味における伝統的な(と私が理解している)クロージャの意味についてという注釈付きですという前置きをおいて。 あと、クロージャといえば、今ではレキシカルクロージャのことがほとんどなので、そっちに限定します。 キーワードの説明を書いたり、当ブログで昔クロージャの意味に付いて盛り上がったりしたころから比べると、だいぶ知識が深くなったので、もう少しましな説明になることを祈りつつ・・・ - ラムダ式に含まれる自由変数をどのように扱うかという問題で、その自由変数を字句上での環境に束縛して取り扱うことや、そのルールの元に生成され

    クロージャ - lethevert is a programmer
    yugui
    yugui 2007/05/27
  • フォント設定 : フォント毎のアンチエイリアス設定 - lethevert is a programmer

    fonts.confはフォントごとにアンチエイリアスの設定ができるので、ブラウザで使うフォントはアンチエイリアスを有効にして、エディタやシェルで使うフォントはアンチエイリアスを無効にすることにした。 <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="antialias" mode="assign"><bool>true</bool></edit> <edit name="rgba" mode="assign"><const>rgb</const></edit> <edit name="autohint" mode="assign"><bool>true</bool></edit> </match> <match targe

    フォント設定 : フォント毎のアンチエイリアス設定 - lethevert is a programmer
    yugui
    yugui 2007/04/14
  • 「趣味プログラマが業界で生きて行くには」について - lethevert is a programmer

    [id:ytqwerty:20070228:p1] 全くそうなんですよね。今の会社でも、なんとかそういうタイプの人を採用できるようにならないかと、経営陣や人事の考えを変えるにはどうすればいいかと考えたりしているのですけど、なかなか難しいのですよね。

    「趣味プログラマが業界で生きて行くには」について - lethevert is a programmer
    yugui
    yugui 2007/03/02
    そういう趣味プログラマ、うちに来てほしい。
  • 練習問題 - lethevert is a programmer

    Linked Listに関するちょっと難しい問題に出会ったのでメモ。 struct node { Item item; node *next; }; typedef node *link; typedef link Node; 1. いくつかのNodeが存在して、その全てがnextにnull pointerを持っていない(つまり、全てのNodeが自分自身かその他のNodeを指している)場合、あるNodeからリンクをたどっていけば、必ず循環におちいることを証明せよ。 2. 1の条件のもと、あるNodeからリンクをたどっていった場合、いくつの異なるNodeをたどることができるかを計算するプログラムを書け。ただし、Nodeを変更してはならず、定数量以上の追加のメモリスペースを使ってはならない。 3. 2の条件のもと、2つのNodeからそれぞれリンクをたどっていった場合、2つが同じ循環におちいるか

    練習問題 - lethevert is a programmer
    yugui
    yugui 2007/01/08
    (半)群論、だけれども、なぜかポアンカレの再帰定理を思い出した。何故だ。
  • Singularity: A research OS written in C# - lethevert is a programmer

    http://channel9.msdn.com/Showpost.aspx?postid=68302 見た。 コメント欄より > This isn't the CLR. In our world, we compile entire MSIL for the kernel into x86 instructions at installation time. There is no libc at the bottom. However, we do have around some assembly code. Like a kernel written in C, our C# kernel needs assembly code to handle the lowest part of the interrupt dispatch on the x86. But once the

    Singularity: A research OS written in C# - lethevert is a programmer
    yugui
    yugui 2006/11/30
    "This isn't the CLR. In our world, we compile entire MSIL for the kernel into x86 instructions at installation time. There is no libc at the bottom." ほぅ。
  • 文字列検索アルゴリズム - lethevert is a programmer

    について探し物をしていたら、よくまとまった資料を見つけた。(PowerPoint資料) http://www-ikn.ist.hokudai.ac.jp/ikn-tokuron/LN_H16_IKNtokuron-pattern_matching.ppt - bit-parallelismという手法があることを知った。 非決定性有限オートマトンを状態を1bitで表して、1ワードの中に32状態(32bitマシンの場合)を同時に保持させ、ビット演算を用いて複数の状態を同時並行で計算するという手法だということ。 有名なアルゴリズムにShift-Orというアルゴリズムがある。http://www-igm.univ-mlv.fr/~lecroq/string/node6.html 今、興味を持っているのは、BNDMというアルゴリズムで、検索文字列を反転させてsuffix automatonを作り、そ

    文字列検索アルゴリズム - lethevert is a programmer
  • 正規表現 - lethevert is a programmer

    正規表現の処理効率は、オートマトンの作り方の部分に依存して、オートマトンのマッチ処理の方はあまりバリエーションはないのかなと思って、ちょっと調べていました。 とりあえず、探索を深さ優先にするか幅優先にするかという選択はあると思うのですが、マッチ結果が変わるような気がします。 citeseerで調べていたところ、次の論文を見かけました。 http://citeseer.ist.psu.edu/navarro99fast.html abstractを読んだ感じでは、既に読み込んでマッチに失敗した部分の文字列をスキップして検索をするという方法のようで、KMP法やBM法に似たアイデアなのかなと思いました。 後で読んでみます。

    正規表現 - lethevert is a programmer
  • Concurrent Clean : 文字列 - lethevert is a programmer

    せっかく副作用がないのだから、部分文字列の切り出しは、メモリコピーなしに実装してあるんだよね、ということを確認したくなった。 該当ソース。 empty_string: movl $zero_length_string,a0 ret section (sliceAC) sliceAC: mov 4(a0),a2 test d1,d1 jns slice_string_1 xorl d1,d1 slice_string_1: cmp a2,d1 jge empty_string cmp d1,d0 jl empty_string inc d0 cmp a2,d0 jle slice_string_2 mov a2,d0 slice_string_2: sub d1,d0 lea 8+3(d0),a2 shr $2,a2 lea -32(a4,a2,4),a1 cmpl end_heap,a1

    Concurrent Clean : 文字列 - lethevert is a programmer
  • Haskell : モナド - lethevert is a programmer

    こんなことを考えている暇があったら、書きかけのABCマシン命令のドキュメントを少しでも書き進めるべきだと思います。 先日、HaskellのSTMに関する論文を読んでいて、モナドの何かが少し理解が進んだような気がするので、そこら辺を書こうかなと。といって、変な袋小路に入っている可能性が多分にありますが・・・ モナドを使ったプログラムを見ていて、これは普通の副作用ありのプログラムと何が違うのだろうと思うことがあります。私の純粋関数型プログラミングのイメージは、遅延リストをコアにして記述していくイメージだったので、モナドが作り出すスタイルがどうもすんなりと入ってきません。(それは一意型についても同じなのですが。)で、そんなにまでして、遅延評価を導入して、何が嬉しかったのだろうというのは長くしこりとして残っているのでした。(もちろん、今でも) でもcut-seeさんのLazy Schemeの記事を

    Haskell : モナド - lethevert is a programmer
    yugui
    yugui 2006/10/07
    monad, haskellのIOとCleanのIOの違い
  • C言語でワンライナー - lethevert is a programmer

    http://alohakun.blog7.fc2.com/blog-entry-460.htmlを見て、これができるということはC言語でワンライナーができるということじゃないですか、と思ってやってみました。要cygwin $ echo "main(){printf(\"hello 1 liner.\");}" | gcc -xc -; ./a.exe hello 1 liner.このくらいでは面白くない気がしたので、標準入力を受け取って、出力するようなものを。 $ cat data.txt 1 22 333 4444 55555 end $ (echo "#include <stdio.h>"; echo "main(){int c;while((c=getchar())!=EOF)printf(\"%c\",c);}") | gcc -xc -; cat data.txt | ./a.

    C言語でワンライナー - lethevert is a programmer
    yugui
    yugui 2006/09/19
  • Concurrent Clean : FGRS vs. lambda calculus - lethevert is a programmer

    Cleanが意味論としてラムダ計算ではなくグラフ書き換えを使っているのはなぜかということなのですが、 Functional Programming and Parallel Graph Rewriting (International Computer Science Series) 作者: M. J. Plasmeijer,Marko Van Eekelen,Rinus Plasmeijer,M. C. J. D. Van Eekelen出版社/メーカー: Addison-Wesley発売日: 1993/07/01メディア: ハードカバー クリック: 1回この商品を含むブログ (6件) を見るを見てみると(Amazonからは入手できないですが、公式サイトからpsファイルがDLできます)、 Part 4に以下のような図があります。 Functional graph rewriting |

    Concurrent Clean : FGRS vs. lambda calculus - lethevert is a programmer
  • 純粋関数型言語とO/R mapper - lethevert is a programmer

    DBアクセスをサポートする現代的なプログラミング言語には、O/R mapperが欠かせないような気がするのだけれど、当にそうでしょうか? なんて書く以上は、そうではないことを考えているのですけれど。 そもそも、何故O/R mapperというものが存在するかといえば、SQLとオブジェクト指向言語の親和性があまりにも低くて、SQLの構造に依存したドライバの類がことごとく使いにくいために、言語の特性に近いインターフェースのライブラリで、その部分を上手く隠してやりたいという欲求から出たものではないかと思っているのですが。。。(もうちょっと考えると、オブジェクト指向言語の手続き型的な側面が、SQLとの親和性を低くしているので、言語のオブジェクト指向的なところを上手く使って宣言的な記述に近づけたライブラリが、O/R mapperの意味なのではないかという風な仮説を立ててみたりしているのですが) で、

    純粋関数型言語とO/R mapper - lethevert is a programmer
    yugui
    yugui 2006/08/30
    関数型言語では遅延リストが得られればORM不要。
  • Concurrent Clean : Concurrent? - lethevert is a programmer

    ブクマでコメントがついていたので追記しておきます。 私のPCはなぜかClean八分にあっていて、公式サイトにつながらないので、記憶を頼りに書いていますが、 Functional Programming and Parallel Graph Rewriting (International Computer Science Series) 作者: M. J. Plasmeijer,Marko Van Eekelen,Rinus Plasmeijer,M. C. J. D. Van Eekelen出版社/メーカー: Addison-Wesley発売日: 1993/07/01メディア: ハードカバー クリック: 1回この商品を含むブログ (6件) を見るhttp://www.cs.ru.nl/~clean/contents/Addison__Wesley_book/addison__wesley

    Concurrent Clean : Concurrent? - lethevert is a programmer
    yugui
    yugui 2006/08/29
    そうだったのか。
  • L.L.Ring - lethevert is a programmer

    に行きました。 さかいさんとid:soutaroさんに突撃で声をかけてみました。 あと、くさかべさん(id:kusakabeyouji?)とid:hyoshiokさんにも遭遇。 id:sumiiさんは、見かけたので突撃しようかと思ったのですが、他の方と話をしていたので、ひるんでいるうちに人が集まってしまって突撃しそびれました。 - Haskellな方は一段と変わった方が多いなぁとか、OCamlやHaskell(静的型チェック)な人とその他の言語(動的型チェック)な方はプログラミングをするときの思考回路が違うんじゃないかとか、Squeakはぶっ飛んでるなーとか、Plaggerって便利そうとか思いました。 - あ、あと、中村 正三郎さんがConcurrent Cleanを強く宣伝してくださってました。ありがたいことです。 ただ、Clean MLにもあったのですが、今のCleanはConcurr

    L.L.Ring - lethevert is a programmer
    yugui
    yugui 2006/08/29
    Concurrentじゃないのかー!!! > Clean
  • Information Retrieval - lethevert is a programmer

    いろいろ見て回って、次の2冊のどちらかがよさそう。 Modern Information Retrieval (Acm Press Series) 作者: Ricardo Baeza-Yates,Berthier Ribeiro-Neto出版社/メーカー: Addison Wesley発売日: 1999/05/15メディア: ペーパーバック購入: 2人 クリック: 11回この商品を含むブログ (13件) を見るManaging Gigabytes: Compressing and Indexing Documents and Images, Second Edition (The Morgan Kaufmann Series in Multimedia Information and Systems) 作者: Ian H. Witten,Alistair Moffat,Timothy C.

    Information Retrieval - lethevert is a programmer
  • Concurrent Clean : Yコンビネータ - lethevert is a programmer

    [id:desumasu:20060806:1154868741]を見て思い出した。 CleanでYコンビネータを書くとき、 y f = let g = f g in gとか書いちゃうのだが、これは来の意味から言っておかしい。 そこで、一般的なYコンビネータの定義 (define Y (lambda (f) ((lambda (proc) (f (lambda (arg) ((proc proc) arg)))) (lambda (proc) (f (lambda (arg) ((proc proc) arg)))))))を見習って、 y f = (\p = f (p p)) (\p = f (p p))とかと書くと、型エラーになってしまう。pに型を正しく付けられないのだ。 そこで、適当な型を用意してやって、 ::P a = P ((P a) -> a) y f = (\(P p) =

    Concurrent Clean : Yコンビネータ - lethevert is a programmer