[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

schemeに関するagxのブックマーク (26)

  • Gaucheでメタプログラミング - @IT

    プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20) C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13) C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る VBAにおけるFileDial

    agx
    agx 2009/02/22
  • Yコンビネータを読み解こう - ボクノス

    Y コンビネータって何? - IT戦記で話題になってるYコンビネータがイマイチわからない。 良記事発見したので、Y CombinatorのYコンビネータを読み解いて行きたいと思います。英語版も必見デス。 相当長いです。 Yコンビネータとはナニモノ!? そういや、再帰って、名前が無いと再帰出来ないのかなぁ・・・全ての式がλで書けるなら、再帰関数もλで書けるはずだ。名前イラナイ!!という時、困っちゃうのが再帰関数の定義。僕の少ない頭では定義出来ませんでした。 「再帰をλで書きたい」 と、思ったときに登場するのが「Yコンビネータ」らしい。追っていく。 階乗ってなんだっけ まずは復習。とりあえず階乗を書きます。 (define (fact n) (if (zero? n) 1 (* n (fact (- n 1))))) (fact 10) ; 3628800 式をを分解すると、 (* 10 (*

    Yコンビネータを読み解こう - ボクノス
    agx
    agx 2008/04/06
  • 不動点オペレータについて

    不動点オペレータY 階乗関数は、 (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))) のように、再帰的に定義できる。 再帰的定義を行なう場合はdefineやletrecを使うけど、 代わりにletを使うと再帰的定義はできない。 defineやletrecをどうしても使いたくないなら、多少工夫がいる。 例えば、factの引数を増やすという方法がある。 (let ((fact (lambda (self n) (if (= n 0) 1 (* n (self self (- n 1))))))) (fact fact 10)) ⇒ 3628800 (中略) 不動点オペレータYを使うと次のように書ける。 (let* ((Y (lambda (g) ((lambda (s) (g (lambda (x) ((s s) x))

    agx
    agx 2008/04/06
  • λ組 〜It's a Wonderful Lambda〜

    λ組とは λを愛しλによって結びつけられたメンバーが日々λ的な発想の元λを探求する集団。 烏御堂と共に『魔法言語 リリカル☆Lisp』を制作した。 命名の動機は「団体名が必要だったのでつけた。λ計算とは何の関係もない」とのこと。 作品 魔法言語 リリカル☆Lisp Lispインタプリタとアドベンチャーゲームの融合を図ったという奇妙なもの。 AVG作成用スクリプトエンジンであるNScripterの上で、 LispインタプリタNScLisperを動かしている。 地獄Scheme JavaScriptで実装されたSchemeっぽいインタプリタ。 メンバー (2008年時点) zick 講義をさぼりつつも、好奇心のままに邁進してゆく自由人。ついこの間まで未成年だったのに今ではすっかりいける口である。アクティブムードメーカー。 LISPに触れるまではゲーム開発などを楽しんでいる口だったが、興味を持ち

    agx
    agx 2008/03/26
  • Three Implementation Models for Scheme (リリカル☆Lisp 開発日記)

    とある方からの勧めで、「Three Implementation Models for Scheme」を読み始めました。 180ページもあって「うげー」という感じだったのですが、1ページあたりの文字の量が少なく、 また、内容もソースが多くて読みやすかったのでむしろ「ほへー」という感じでした。 --- 4章まで読み終わったので、適当なまとめを書いておきます。 Schemeは関数と継続がfirst class objectで末尾呼出、代入のサポートも必要 => 従来のコンパイラ/インタプリタの手法が使いにくい 全てをヒープにおくことによってコンパイラとVMを作ることができる => ただし、動作が遅い スタックを使えば速い(変数などもスタックに入れる) => first classの関数、継続、末尾呼出、代入はそのままではサポートできない スタックを継続オブジェクトに丸ごとコピーするこ

    agx
    agx 2008/02/29
  • まったく初めての人のためのScheme

    田無の権兵衛とk先生をお借りいたします、竹内郁雄先生。 田無の権兵衛:(突然、玄関先で大声) たのもーう。 K: なんだ、騒々しいな。やや、田無の権兵衛ではないか。達者であったか。ささ、上がりなさい。 久しぶりじゃのう。今まで何をなさってたのかな。 田無の権兵衛: 実は昭和の終わりごろ、Lispの修行をするためにインドに旅立ちました。 山奥に篭って修行すること25年。やっと少しはLisp道を極めたように思い、懐かしい日に帰ってまいりました。 K: おお、それは難儀であったな。久しぶりの再会じゃ、今夜はLisp話を酒の肴に語り明かそうではないか。 田無の権兵衛: それはかたじけない。そうそう、日に帰ってきて驚いたのです。日人はみんなスーパーコンピューターを 所有しているですか? K: いや、いくら日人が猛烈に働いて豊かになったとは言え、スーパーコンピューターを個人で所有している

    agx
    agx 2008/02/01
  • Gauche でテスト作成支援 gca.el - ひげぽん OSとか作っちゃうかMona-

    昨日、「test* に与えるテスト名の命名が面倒だ」と書いた所、naotoさんから gca.el という koguroさん作の Emacs Lisp を教えていただきました。 これは便利。 gca.el テストケース作成支援のためのツールを作りました(拙作のEmacs用のユーティリティに含めてあります gca-20060903.tar.gz)。 単体テストをきちんと書くのは面倒ですが、通常コードを書くときは、無意識のうちにgosh上で動作確認をしつつコードを書き進めているかと思います。この動作確認の結果を基に単体テストを作成してしまおうというのがこのツールです。 デモ 実際に動作しているデモムービーを見るとわかりやすいです。(GaucheFest:koguroにあります) デモムービー(mov形式) 4.8MB デモムービー(wmv形式) 2.4MB インストール gca.el の先頭に書

    Gauche でテスト作成支援 gca.el - ひげぽん OSとか作っちゃうかMona-
  • Karetta|第2回 Kahuaセミナー資料|Gaucheのインデント設定

    通常のScheme-modeでもプログラムをしやすくするために 調整してくれるが、特殊形式や構文についてはあまり多くは 対応していない。以下のような設定を .emacs に仕込んでおくと便利 (put 'and-let* 'scheme-indent-function 1) (put 'begin0 'scheme-indent-function 0) (put 'call-with-client-socket 'scheme-indent-function 1) (put 'call-with-input-conversion 'scheme-indent-function 1) (put 'call-with-input-file 'scheme-indent-function 1) (put 'call-with-input-process 'scheme-indent-functi

  • 継続の使用法

    「継続の書(Book of Continuation): 8面以降でもコンティニューできるようになる」 (「レインボーアイランド」) Schemeには継続を扱うための関数 call-with-current-continuation (別名 call/cc) がある。 でもここでは blockという(機能としては違いの無い)構文を定義して、 それを使って説明していく。 blockの定義は、 (define-syntax block (syntax-rules () ((_ name e1 e2 ...) (call-with-current-continuation (lambda (name) e1 e2 ...))))) とか、 (define-macro (block name . body) `(call-with-current-continuation (lambda (,n

    agx
    agx 2007/10/13
  • The Scheme Programming Language 2/e

    正誤表 2000年5月25日現在1件 目次 まえがき 訳者まえがき 1.はじめに 1.1.Schemeのシンタックス 1.2.Schemeの名前付け規約 2.Scheme入門 2.1.Scheme環境との対話 2.2.単純式 2.3.Schemeにおける式の評価 2.4.変数とlet式 2.5.lambda式 2.6.トップレベル定義 2.7.条件式 2.8.単純な再帰 2.9.代入 3.続Scheme 3.1.拡張シンタックス 3.2.さらに再帰 3.3.継続 3.4.継続引き渡しスタイル 3.5.内部定義 4.変数のバインド 4.1.変数参照 4.2.lambda 4.3.局所的なバインド 4.4.変数定義 4.5.代入 5.制御操作 5.1.制御操作 5.2.プロシージャの適用 5.3.逐次化 5.4.条件式 5.

    agx
    agx 2007/07/16
    Revised5 Report on Algorithmic Language Scheme(日本語版)
  • Algorithmic Language Scheme

    プログラミング言語Scheme 富山大学理学部数学科 木村 巌<iwao@sci.toyama-u.ac.jp> 最終更新日:2003年8月26日(更新箇所) Schemeとは Schemeは、Guy Lewis Steele Jr.とGerald Jay Sussmanによって創始された、静的なスコープを持ち、真に末尾再帰的なプログラミング言語であり、Lispの一方言でもあります.他に例を見ないほど明快かつ簡潔な意味論を持ち、また、表現の仕方がほぼ一意に定まります.広い範囲のプログラミング・パラダイム、例えば命令型、関数型そしてメッセージ交換型、は、Schemeにおいて簡便に表現できます.("Rivesed5 Report on the Algorithmic Language Scheme"序文より). このページの目的 このページの目的は、Schemeに関する情報を収拾し、それらを広

    agx
    agx 2007/07/13
    このページの目的は、Schemeに関する情報を収拾し、それらを広く公開することで、Schemeを愛好するみなさまのお役に立つことです.
  • ソフトウェア特論 講義資料 Scheme言語とインタプリタ

    Next: 1 Schemeインタプリタの実現 Up: Software IV Top ソフトウェア特論 講義資料 Scheme言語とインタプリタ 稲葉 雅幸 1 Schemeインタプリタの実現 1.1 シンボルとアトムの処理 1.2 スペシャルフォームの処理 1.3 通常の手続き(関数)の処理 1.4 特殊シンボルと組み込み手続き(関数)の初期化 2 インタプリタの実行例 2.1 関数の定義 2.2 再帰関数の定義 2.3 手続きを引数とする手続きの定義と実行例 3 マクロ機能の追加 3.1 マクロを取り扱うインタプリタの構造 3.2 マクロの展開 3.3 マクロの定義 3.4 マクロ定義用手続き 4 任意個数の引数指定機構の実現 5 Schemeインタプリタ 6 クロージャの実現 7 Tail-recursiveインタプリタ 8 Continuation(継続) 8.1 Call/CC

    agx
    agx 2007/06/20
  • はてなブログ | 無料ブログを作成しよう

    もういくつ寝ると 今年のはじめにやりたいことリストを作った。今見たら50項目あるリストのうち25個が達成済みだった。ちょうど半分やりたいことをやったということだ。私にしてはまあまあの結果だと思う。満足。 やりたいことリストにあるもののうち、「〜をべたい」系は概ねクリアし…

    はてなブログ | 無料ブログを作成しよう
    agx
    agx 2007/06/05
  • ホワット・ア・ワンダフル・ワールド Scheme のネイティブコンパイラ (Bigloo 編)

    Author:あろは (alohakun) WAKATSUKI toshihiro 連絡先 : alohakun ___at___ gmail.com mixi : http://mixi.jp/show_friend.pl?id=182927 twitter : http://twitter.com/alohakun abstract プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています. 具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています. もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています. キーワード : equivalent tra

    agx
    agx 2007/05/23
  • Racket

    #lang racket/gui (define my-language 'English) (define translations #hash([Chinese . "你好 世界"] [English . "Hello world"] [French . "Bonjour le monde"] [German . "Hallo Welt"] [Greek . "Γειά σου, κόσμε"] [Portuguese . "Olá mundo"] [Spanish . "Hola mundo"] [Thai . "สวัสดีชาวโลก"] [Turkish . "Merhaba Dünya"])) (define my-hello-world (hash-ref translations my-language "hello world")) (message-box "" my

    agx
    agx 2007/05/14
    Scheme 統合開発環境。ステップ実行などが出来る
  • xyzzy 偽scheme-mode - 駄目日記っぽぃ。

    今迄WindowsでSchemeプログラム書くときは、普段使ってるxyzzyでは前に拾ったscheme-mode*1やとインデントが上手くいかんのでDr.Schemeを使ってた。が、いい加減我慢できなくなってきたんで、なんとかならんもんかと思ってちょっと探ってみた。 何やらlisp-modeを改造して、任意のシンボルを他のシンボルと同様に扱うことができるようにしてくれた人がいるらしい。 http://www.shido.info/xyzzy/lispmode.html これを元に、似非Schemeモードをでっち上げることにする。 まず、アーカイブをダウンロードしてきてlispmode.lをscheme-mode.lにリネームする。 次に、変数の衝突を避けるためにファイルの中のlisp-をscheme-に全て置換。*indent-def-file*も*sindent-def-file*か何か

    xyzzy 偽scheme-mode - 駄目日記っぽぃ。
  • Schemeを作ろう 第1回

    Last update 1999/08/07 Scheme処理系の制作 第1回 (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 ゲームとスクリプト はい、また例によって行き当たりばったりな企画です。 といっても、相当長い間私の心の大きな部分を占めていた問題ではあります。 それは言語の処理系の必要性についての問題です。 ゲーム制作、特にRPG・アドベンチャーなどの「シナリオ」の重要性が高いものを作るのに必要不可欠なものに、「イベントスクリプトの処理系」というものがあります。ネットでもこうした「イベントスクリプトの処理系」について考える人が少なくないのも、こうした必要性の表われと言えるでしょう。 しかし、こうした処理系は、それぞれのプログラマが独自の文法でプロジェクトごとに作り直しているのが現状です。これが、コードの再利用、ひいては「気楽にゲームを作る」上での大きな障害に

    agx
    agx 2007/01/16
  • Practical Scheme

    このページでは、プログラミング言語Schemeの紹介、および 自作のSchemeのライブラリやアプリケーションの紹介をしてゆきます。 特に、ファイルをパーズしてテキストファイルを生成したりとか、 プロセスを監視したりとか、ちょっとしたGUIをでっちあげる と言った、職業プログラマとしてやってく上で避けて通れない雑用に便利な ライブラリが中心になる予定です。 SchemeはLisp系の言語で、見かけはLispに良く似ています。 Lispと聞いたら人工知能用言語だとか、もう古くさい言語だとか思われることも 多いんですが、CommonLispで書かれた実用的なアプリケーションはいろいろ ありますし、Schemeも拡張言語としてそれなりに使われています。 ただ、いかんせんマイナーな言語であることは間違いなく、メンテできる人が居ない とか他に分かる人が居ないという理由で採用が見送られることがあるのは

    Practical Scheme
    agx
    agx 2007/01/10
  • インクリメンタルサーチ対応 Gauche ユーザリファレンス

    フレームに対応したブラウザが必要です。

    agx
    agx 2007/01/02
    Scheme処理系、Gaucheのリファレンスマニュアル。インクリメンタルサーチも出来る。
  • Lisp:よくある誤解

    Lispについてのよくある誤解と、その中にあるちょっとした真実 はてなの質問: プログラミング言語で最強(スケーラブル)なのは、 Lispだと思われます。 http://jp.franz.com/index.html しかし、 世間ではマイナー言語のようです。 なぜでしょうか。 についた回答のいくつかには、「Lispを少しだけかじった人がしがちな誤解」が 含まれてるようなので、それをネタに少し解説してみます。 ただ、誤解が生じるのは、やっぱりそれなりの理由があって、従ってその 誤解の中にも(条件つきの)真実が含まれていることがあります。 そのへんまでをも含めて考えてみましょう。以降、引用は回答からです。 Lispはスクリプト言語? 一昔前まで、これらのスクリプト系の言語は「とてつもなく遅い」のが嫌われる最大の要因でしたが、最近のコンピューターの性能向上でようやくRuby,Python,Li

    Lisp:よくある誤解
    agx
    agx 2007/01/01
    よく言われているLispについての誤解(スクリプト言語、Cよりとても遅い)に一般的な事実と作者の知っている真実とを書いてくれている。