タグ

schemeに関するIMAKADOのブックマーク (32)

  • Scheme から Emacs のコマンドを実行 - (new Hatena).blog()

    私はよく Scheme のプログラムを Emacs 上で実行するんですが、elscreen で裏に回していたりして *scheme* バッファが見えない時に、何かユーザーの注意や介入が必要な事態が起こっていることがあります (入力を促す、等)。 そんな時、外部プログラムを起動するとか、ffi で CD トレイを開くとか、その旨を知らせる方法はいくらでも有るわけですが、せっかく Emacs がそこにあるんだから (beep) の一つも eval 出来ないでどうする、ということで考えてみました。 Scheme と Emacs の間には接続が張られているわけですから、そこにコマンドを流し込み、フック関数でモニターすれば良い、ということで、出来たのがこちら: (add-hook 'inferior-scheme-mode-hook (lambda () (add-hook 'comint-preo

    Scheme から Emacs のコマンドを実行 - (new Hatena).blog()
  • なぜ JavaScripter が Schemer になったか - (new Hatena).blog()

    以前は JavaScript のことばかり書いていたのが信じられないくらい、Scheme のことばかり書いていることについての説明文です。 ホップ 当ダイアリーのタイトルからもお分かりかもしれませんが、私は元々 JavaScript について書きたくなって、ブログというものを始めました (ついでに言うと、はてなのアカウントを取った時点ではそんなつもりは1ミリも有りませんでした)。 ちょうど世界的に JavaScript の真価が理解されるようになった時期でもあり、個人的には Ruby のクラス・システムを JavaScript で模倣するというテーマに興味を持って色々と実験をしたものです。 それから、LDR との出会いという大きな経験もありました。プログラムの世界に深く沈潜するようなリーディング体験をしたのは、この時が初めてだったかもしれません。それまで考えもしなかったような発想や技術に溢

    なぜ JavaScripter が Schemer になったか - (new Hatena).blog()
  • 継続

    継続、continuationと来ればやはりSchemeの話になるのだろうか。一般社会で schemeと言えば「すきーむ(n)計画。陰謀。」であるがソフトウェア業界で Schemeと言ったらLispの一種のことだ。Lispには変種が腐るほど存在するが、 Common Lispと並んで有名なのがSchemeである。Common Lispが標準化の課程でゴテ ゴテと装備して巨大化したのに対し、Schemeは遥かにコンパクトでクリアな仕 様を持つ。またSchemeとは言語の一般名であり、その実装にはGaucheとか scmとかguileとかMIT Schemeなどがある。 さてCall/CC、正式名称Call with Current Continuation、について 説明しよう。Call/CCはちょっと見はsetjmp/longjmpと同じように見えるのだが、 スタックが深くなる方向にもジャ

  • SICP 読書会 #1: Days on the Moon

    書くのが遅くなりましたが、先日開かれた snow-bell さん主催の SICP 勉強会 (計算機プログラムの構造と解釈の読書及び演習) に参加しました。SICP 勉強会は午後からだったのですが、同じ会場で午前中に Gauche 勉強会 (私は不参加) も開かれており、チャットログも合同となっています。他の参加者の記事はSICP勉強会のまとめと異業種交流会 - snow-bellの日記からどうぞ。 組み合わせと合成手続き Scheme の式 (expression) には組み合わせ (combination) と合成手続き (compound procedure) がある。式を評価したとき、組み合わせならば部分式 (リストの各項) が再帰的に評価されるが、合成手続きでは部分式が組合せとして評価されるとは限らない。 たとえば、手続き定義 (関数定義) (define (square x) (

  • クロージャの活用 - 設定ファイル関数、動的オブジェクト・ローダー - (new Hatena).blog()

    クロージャ (内部状態を保持する関数。SICP 2 章では残念な誤用とされております) を用いて、データに対する手続きを抽象化する例をいくつかお見せします。 オブジェクトの動的ローダー 重いオブジェクトを、必要に応じて読み込んだり開放したりするための関数を作ってみました。 (define dynload (opt-lambda (load (post-load void) (unload void)) (let ((o #f)) (values (lambda () (unless o (set! o (load)) (post-load o)) o) (lambda () (when o (unload o) (set! o #f)) #f))))) 利用例: (define search-db (receive (compile done) (dynload (lambda () (q

    クロージャの活用 - 設定ファイル関数、動的オブジェクト・ローダー - (new Hatena).blog()
  • Javascriptで継続渡し - ヒビノキロク

    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);

    Javascriptで継続渡し - ヒビノキロク
  • Gaucheでシェルスクリプト的な何かを書くための、キモいツール書いた - 日記を書く [・w・] はやみずさん

    Gaucheってそのままだとシェルスクリプト的なものををちょっと書いたりする用途にはあんまり向いてなくて、普通にシェルスクリプト書いたりruby使ったりしてたんだけど、そろそろgaucheでやりたいじゃん、という気分になってきた。用途からすると、似たようなライブラリを誰か書いていてもいい気がするけれど、調べるのも面倒なので自分で書いてみた。ついでにそのライブラリをデフォルトで利用できる状態にした上に、初期化ファイルを読みこんでgoshを起動するgoshellというコマンドをつくった。 まず、予め使いたいシェルのコマンドを $HOME/.goshellrc に登録する。とりあえず mkdir, ls, wget あたりを登録するときは、こんな感じ。 (define-commands mkdir ls wget) さて、例えば http://foo.com/[000-999].jpg という1

    Gaucheでシェルスクリプト的な何かを書くための、キモいツール書いた - 日記を書く [・w・] はやみずさん
  • The Little Schemer - あどけない話

    最近、Scheme がちょっとした流行になっているようです。 Scheme を勉強しようと思っている人に、僕が声を大にして薦めたいは、「The Little Schemer」です。 The Little Schemer (The MIT Press) 作者: Daniel P. Friedman,Matthias Felleisen出版社/メーカー: The MIT Press発売日: 1995/12/21メディア: ペーパーバック購入: 10人 クリック: 137回この商品を含むブログ (91件) を見る 1章から7章にかけて、たくさんの例題とともに「再帰」が説明されています。「再帰の再帰」も勉強できます。実際、「このを読んで人生が変わった」という感想を何回か聞いたことがあります。なぜなら、物事を再帰で考えられるようになるからです。再帰が分らない人は、ぜひ読んで下さい。 8章は、「ク

    The Little Schemer - あどけない話
    IMAKADO
    IMAKADO 2008/04/04
    little schemer, repl
  • Route 477(2008-03-21)

    ■ [arc][scheme] ArcとSchemeのI/Oを比べてみる ArcのI/O関数のまとめページがあったので,Schemeの関数名と比較してみた. Arc: I/O 全体的に,かなりゴルフされています(笑).Schemeは長くても明確な名前を選ぶので尚更. 昔はSchemeの関数名は長すぎると思ってたんですが,最近は上手に抽象化すれば気にならないのかなぁと思ったりしてます. Input ArcScheme(Gauche)

    Route 477(2008-03-21)
  • Route 477(2008-03-09)

    ■ [biwascheme][event] gauche.gongでLTしました やっぱりSchemeのイベントでデモすると反応が大きくていいなあ,という. スライド 右上の★ボタンを押すとREPLが開いたりするよ.(このためにevalとwrite-to-stringとhtml-escapeを実装するなどした) このプレゼンツール自体もBiwaSchemeで書かれています.(ソース) BiwaSchemeのダウンロードはこちらからどうぞ. ■ [event][scheme] 第2回gauche.nightログ おまけつき 注意 誤字は仕様です 全く見直ししていないため,内容には0個以上の誤りが含まれています.取り扱い注意 「fullでないcontinuation」ってどういうものなのか誰か教えてください 「プログラミングGauche」ができるまで (ログ取れず) 自己紹介 「リリカルLis

    Route 477(2008-03-09)
  • gauche.night 超楽しかった〜 (^◇^) - yuumi3のお仕事日記

    gauche.night 超楽しかったです! 内容は、たくさんの方がblogに書かれるいるので省略 ^^) 私は 第2部: デモ大会「gauche.gong」に参加しました、Lighting talk (LT)みたいなものです。 大抵のイベントでは LT 参加者というのは、メインの講演等は 観客として聞きLTの時だけステージに上がるというものですが、gauche.nightでは 出演者という扱いで 控え室が準備されていいて ドリンク・事 無料という VIP待遇で 驚きました。。。。ありがとうございました !! また、控え出では蒼々たるメンバーの話が聞けてとっても、お得でした ^^) 黒田先生の鋭い話は、控え室でも 炸裂していました(私の表現力でここに書くと誤解されてしまうので内容は割愛させて頂きます) 私の出し物 (gauche on Rails) 資料(PDF) → http://ww

    gauche.night 超楽しかった〜 (^◇^) - yuumi3のお仕事日記
  • Karetta|Gaucheプログラミング(立読み版)

    はじめに書の構成 (1)書の対象読者書の表記書の使い方執筆時点でのGaucheバージョン謝辞第1部: 思想LispとScheme (4)Gaucheの特徴 (1)すべて式であるすべてリストである (1)lambdaは空気のような存在である (2)プログラミングとは名前付け(bind)であるすべて再帰である (2) (2)Schemeのすごい点 (4)すべてオブジェクトである (もしそれがお望みなら)Gaucheの設計思想や誕生の背景Schemeの評価モデルとは? (3)「Lisp脳」の謎に迫る - Schemeプログラマの発想第2部: 実用Schemeスクリプトを書こうSchemeスクリプトを書く (1)コマンドライン引数の値を得るユニットテストを書く (1)CGIを書こうSchemeスクリプトをCGIとして実行するwww.cgiライブラリを利用する (1)手軽にHTMLを生成する

  • Gauche(Scheme) でデバッグをする4つの方法 - higepon blog

    Gauche でコードを書いているときにコードが意図どおりに動かないことがあります。そのような場合にデバッグする方法を4つ紹介します。 前提 まず Gauche はリリースされている最新版を使った方が良いでしょう。Linuxのディストリビューションによってはパッケージが古い場合あります。 またScheme は関数型言語なので、デバッグの単位は関数(手続き)ごとに行うことが多いです。一つ一つの手続きが意図どおり動いているのか?を調べながら進めるのが基になります。 方法1 print デバッグ Gauche には今のところデバッガがありませんから基的には print デバッグがメインとなります。単純な print デバッグから見ていきましょう。 以下のような sum という手続きで print デバッグしてみましょう。 (define (sum n) (if (= n 1) 1 (+ n

    Gauche(Scheme) でデバッグをする4つの方法 - higepon blog
  • Gauche:opt-lambda

    IMAKADO
    IMAKADO 2008/02/29
    opt-lambda
  • Gauche:define-struct

  • もうひとつの Scheme 入門

    勾配の緩やかな初心者向け Scheme 入門ページです。 コンピュータは使ったことがあるが、プログラミング経験があまりない人を想定しています。 Scheme の解説はすでに山ほど優れたものがありますが、あえて解説記事を書いてみました。 Scheme のような抽象的な話題は波長が合えばすんなりと理解できますが、あわないと全く理解できません。 他の解説を読んで今ひとつよく理解できなかった人は試しに読んでみてください。 この記事の目標はコンピュータ科学の教科書の決定版である SICP を読める程度の Scheme の知識を提供することです。 目次: 処理系のインストール Scheme を電卓代わりに使う リストを作ろう 関数を定義しよう 分岐 局所変数 繰り返し 高階関数 入出力 代入 文字、文字列 シンボル型 連想リスト、ハッシュ表 ベクトルと構造体 構文の定義 (マクロ) 継続 遅延評価 非

  • Lisp で多態性 - あどけない話

    On Lisp を理解するためのメモです。 オブジェクト指向Lisp オブジェクト指向Lispの章には以下のような記述があります。 CLOSの到来はLispがオブジェクト指向のパラダイムを取り込み始めた兆に見えるかも知れない.実際には,Lispはオブジェクト指向のパラダイムを今も変わらず含んでいると言う方が正確だ.しかしLispの底を流れる原則には名前が無く,オブジェクト指向プログラミングには名前があるので,現在,Lispがオブジェクト指向言語だと説く傾向がある.「Lispは拡張可能な言語で,その内部でオブジェクト指向プログラミングが容易に行える」と言う方が真実に近いだろう. そして、こうも書かれています。 実際,拡張性はオブジェクト指向スタイルの最大の利点の一つだ.プログラムは単一のモノリシックなコードの塊になるのではなく,小さい部品毎に書かれ,各々に目的に従ってラベルが付く.よって後日

    Lisp で多態性 - あどけない話
  • Scheme、Common Lisp、Emacs Lispの比較

    「王女アテー姫を含めてハザールの男女は、 この能力によって朝ごと変身を済ませ、 そのたびに、見たこともない斬新な顔で立ち現れる。 だから近親者同士でさえ見分けがつかないほどだ。 旅行者の見聞はこれとはまったく異なり、ハザールの顔つきはどれもそっくりで、 しかも歳を重ねても容貌が変わらない。それゆえ人違いの混乱や厄介が絶えない。 どちらにせよ、結果は同じことで、ハザール族の顔はまず覚えられないし、 覚えても無益となる。」 ミロラド・パヴィチ「ハザール事典」 Lispには数限りないほどの方言がある (例えば、 http://dreamsongs.com/NewFiles/Hopl2Slides.pdf とか参照)。 そのなかで普及している Lispというと、 Scheme、Common Lisp、Emacs Lispの3つだろう。 ユーザの多さでいうと、多い順に Emacs Lisp、Comm

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Scheme で livedoor Reader を - (new Hatena).blog()

    読めるようになりました。 http://json.org/ にリンクがありますが、MzScheme 用 JSON ライブラリを使っています。 使い方は簡単で、json-read という関数に JSON データの入力ポートを渡すだけです。抜粋: (define (api-post api post-data) (let ((in (post-pure-port (string->url (string-append "http://reader.livedoor.com" api)) (string->bytes/utf-8 (alist->form-urlencoded (cons (cons 'ApiKey (api-key)) (or (fix-data post-data) '())))) (list (cookie) "Content-Type: application/x-www

    Scheme で livedoor Reader を - (new Hatena).blog()
    IMAKADO
    IMAKADO 2008/01/29
    jsonライブラリ ポートを