タグ

gaucheとsicpに関するhigeponのブックマーク (6)

  • クロージャとブロック (前編) - Teny's Log

    上のエントリでは、これまで考察してきたクロージャについての簡単なまとめを行ないました。そのエントリで最後に書いたブロックにも着目しながら、これまで考察してきたクロージャについて、コードを挙げて検証してみようと思います。 さて、上のエントリでは、クロージャの基盤となっている三つの仕様を挙げています。 しかし、これらのうちの幾つかが欠ける場合でも、Scheme で言うところのクロージャではないかもしれませんが、有効に利用可能な手続きを活用することは可能であると、私は考えています。 これは、上で挙げた三つの仕様が揃わない言語環境に於いて、クロージャの様な仕組みを活用することが可能か、という視点に置き換えることができます。例えば、Emacs Lisp や Java などでクロージャの様なコードを書けるか否か、ということですね。 ;; Java にもクロージャを導入可能に (?) といった動きもある

    クロージャとブロック (前編) - Teny's Log
    higepon
    higepon 2006/06/12
    読んだが完全には消化できなかった。あとで復習する。
  • クロージャについて: 一旦、簡単にまとめてみます。 - Teny's Log

    これまで考察してきたクロージャの件ですが、まだまだ頭の中では発散しているのですけど、一旦、簡単にまとめておきたいと思います。 ただ書き散らかしているだけでは意味ない (いや、意味はあると思ってるんですけど。自己矛盾だ。) ですからね。 Rui さん、shiro さんのコメントに助けられて、今では、 手続きをファーストクラスオブジェクトとして扱える。 静的スコープを持つ。 無限のエクステントが保証されている。 の三つの基盤が揃うことで、クロージャが実現されていると考えるに至りました。 Scheme 以外ではどうか判りませんが、こと Scheme に於いては、上の仕様に立脚する形でクロージャが実現されていると考えて差し支えないと思っています。 ただ、言語設計の推移としては、shiro さんから頂いたコメントで示唆されている様に、動的スコープに於ける環境問題 (FUNARG problem) が

    クロージャについて: 一旦、簡単にまとめてみます。 - Teny's Log
  • 関数型言語の勉強にSICPを読もう - (40) 3章 - 標準部品化力、オブジェクトおよび状態 (156-163ページ) - higepon blog

    待ちに待っていたデジタル回路のシミュレーション。 オラ、何だかワクワクしてきたぞ! 問題3.24-27 略。 問題3.28 and とほぼ同じ。 今の段階では add-action の実装が見えないので or-action-procedure が2回呼ばれておかしくなるんじゃないかと心配。 と思ったけどよく考えれば入力は同時に届くことはありえないのでこれで正しい。 (define (or-gate a1 a2 output) (define (or-action-procedure) (let ((new-value (logical-or (get-signal a1) (get-signal a2)))) (after-delay or-gate-delay (lambda () (set-signal! output new-value))))) (add-action! a1 or

    関数型言語の勉強にSICPを読もう - (40) 3章 - 標準部品化力、オブジェクトおよび状態 (156-163ページ) - higepon blog
  • 関数型言語の勉強にSICPを読もう - (39) 3章 - 小休止 ファイルI/Oと正規表現 - higepon blog

    実用っぽいコードを書かないと中々上達しないと思うので無理やり書いてみました。 引数で受け取ったファイルを開いて、ファイル内を置換する。 「sedとかPerlならすぐに書けるよ」とか「もっと汎用化したスクリプトを書いたほうが良い」というのは分かるのですがまずは練習ということで。 まだ完成していなくて、現在分かっている問題点は 入力と出力ファイルを同じにするとおかしくなる 結果文字列が""で囲まれてしまう 改行コードがなくなってしまう などなど。 気長に直していこう。 #!/usr/bin/env gosh (use file.util) (define (main args) (define (replace-text file) (let ((lines (file->string-list file)) (result "")) (for-each (lambda (line) (set

    関数型言語の勉強にSICPを読もう - (39) 3章 - 小休止 ファイルI/Oと正規表現 - higepon blog
  • 関数型言語の勉強にSICPを読もう - (36) 3章 - 小休止 port-foreach - higepon blog

    Ruiさんよりコメントを頂きました。 Schemeに慣れた人が書くとこんなにもきれいなのか。ありがとうございます。 このようにコードを見せていただくことはとても勉強になります。 sum は (apply + list) と書けますね。Gaucheだとport-for-eachという便利な高階手続きがあって、それをつかうと全体は次のようになります。(一時ファイルを使わないで済むよう、call-with-input-fileの代わりにcall-with-input-stringを使いました。) たしかに、sum は (apply + list)ですね。何で気づかなかったんだろう。 (port-for-each (lambda (list) (print (apply + list))) (call-with-input-string ”(1 2 3) (4 5 6)” (lambda (in)

    関数型言語の勉強にSICPを読もう - (36) 3章 - 小休止 port-foreach - higepon blog
  • 関数型言語の勉強にSICPを読もう - (34) 3章 - 標準部品化力、オブジェクトおよび状態 (156ページ) - higepon blog

    問題3.22 え?手続きで出来るの?と思って一瞬でも疑った自分を恥じます。 Scheme楽しいよ。楽しすぎるよ。 (define (make-queue) (let ((front-ptr '()) (rear-ptr '())) ;; public interface (define (empty-queue?) (null? front-ptr)) (define (front-queue) (if (empty-queue?) (error "empty queue") (car front-ptr))) (define (insert-queue! item) (let ((new-pair (cons item '()))) (cond ((empty-queue?) (set! front-ptr new-pair) (set! rear-ptr new-pair)) (els

    関数型言語の勉強にSICPを読もう - (34) 3章 - 標準部品化力、オブジェクトおよび状態 (156ページ) - higepon blog
  • 1