タグ

Schemeに関するyuuhi10のブックマーク (83)

  • GNU Make 4.0にGNU Guileが組み込まれた

    GNU Make 4.0 released GNU Make 4.0がリリースされた。 今回のリリースでは、GNU MakeはSchemeの実装であるGNU Guileを組み込んだ。これにより、Makefileの中でSchemeが書けるようになる。 その機能は、GNU Make ManualのGuile Functionの項目で説明されている。まだ、オンライン版のGNU Make Manualが2010年から更新されていないので、コミット時のドキュメントの差分のリンクする。 8.13 The `guile' Function 具体的な組み込み方法としては、make側にguileという関数が追加され、この引数に文字列を与えると、SchemeとしてGuileで処理されるようになる。おそらく、このように。 Hello.o : $(guile (string-append "hello" ".c"

  • Scheme/L.VMを作る/04.VM(C++)/zz6. A正規化(A-normalization)とCPS変換 - Mona OS developers Wiki

  • A正規形まとめ - Scheme VM を書く - higepon blog

    A正規形についてまとめました。日語の資料があまりに少ないのでまとめたのですが、正直理解できているか不安です。間違いを含んでいる可能性がある点にご注意ください。 間違いのご指摘やツッコミ大歓迎です。 あと念のため書いておきますが題材は、Schemeですが、A正規形自体はLispやSchemeに特化した話ではなく、もっと一般的な話です。 A正規形の論文 The Essence of Compiling with Continuations - Flanagan, Sabry, Duba, Felleisen (ResearchIndex)という論文で解説されています。 この論文を読んで自分なりに理解できたことをここに書いています。 理解の前提 Scheme の let 式が分かっていないと理解が難しいかもしれません。 A正規形は何の役にたちますか? コンパイラのコード生成時の中間表現として使

    A正規形まとめ - Scheme VM を書く - higepon blog
  • fam.cx

    This domain may be for sale!

  • Scheme初心者へのアドバイスを書いてみる - ヤドカリデンキ商会(ブログ版)

    id:tsuyoshikawaさんが初めてSchemeのコードを書いた(ここにあるコード)と聞いて「初めてでここまで書けるのはすげー」と思いました。ということで、このコードについて私ができる範囲でアドバイスしてみます。私自身はSchemeプログラマのレベル10でレベル3〜4程度のへっぽこSchemerなのですが。 閉じカッコの位置について コーディング・スタイルは典型的な「自転車置き場の議論」なのでそれほど気にする必要はないと思いますが、一応、触れておきます。 tsuyoshikawaさんは (define (size-of lis) (if (null? lis) 0 (+ 1 (size-of (cdr lis))) ) ) のように書いているのですが、実際には (define (size-of lis) (if (null? lis) 0 (+ 1 (size-of (cdr lis

    Scheme初心者へのアドバイスを書いてみる - ヤドカリデンキ商会(ブログ版)
  • Flatten a list - Rosetta Code

    Flatten a list You are encouraged to solve this task according to the task description, using any language you may know. Task Write a function to flatten the nesting in an arbitrary list of values. Your program should work on the equivalent of this list: [[1], 2, [[3, 4], 5], [[[]]], [[[6]]], 7, 8, []] Where the correct result would be the list: [1, 2, 3, 4, 5, 6, 7, 8] Related task Tree traversal

    Flatten a list - Rosetta Code
  • Scheme 入門 A-3. 継続についてもう少し

    Appendix 3. 継続についてもう少し 以下の文章は、以前継続について書いたものです。 皆様の継続の理解に役立てば幸いです。 1. はじめに Scheme の継続は大変強力だそうです。ただ、理解するのは大変難しく、実は紫藤もよくは理解していません。 ここでは備忘録を兼ねて継続について詳しく説明しようと思います。 Scheme は言語体系は小さいのですが、それによってほとんどのプログラミング技法が表現できるように 設計されています。他の言語に見られるような便利な機能は無いのですが、その分アルゴリズムを直接 記述できるので主に教育用言語として使われています。有名な 計算機プログラムの構造と解釈に記載されている プログラムは Scheme を用いて書かれています。なお、 実用的には全く用いられないということは無く、 Practical Scheme に事例があります。 継続を除いて、Sch

  • Scheme Requests for Implementation

    SRFIs extend the Scheme programming language. You can help. Start by joining the discussion on one of our mailing lists. Learn more. Thanks to Lassi Kortela for his srfi command, which currently has eighty subcommands for carrying out various SRFI operations, e.g. show the abstract of a SRFI, search for a SRFI, open a SRFI in a browser, or clone the Git repo for a SRFI. It can be found in the SRFI

  • 48時間でSchemeを書こう/構文解析 - Wikibooks

    では、非常に簡単なパーサを書いてみましょう。それにはGHCに付いてくるParsecライブラリ(Ubuntuではlibghc6-parsec-devパッケージをインストール)を使います。GHC以外のコンパイラを使っている場合は別にダウンロードする必要があるかもしれません。 まずは次の行をファイルの冒頭に加えてください。

  • 操作的意味論 vs 表示的意味論 - sumiiのブログ

    http://d.hatena.ne.jp/ranha/20090615 (via http://d.hatena.ne.jp/yad-EL/20090615/p2) 「諸君らの愛した表示的意味論(R5RS)は死んだ。なぜだ?」 う、これは私も(というか私ごときでは)迂闊に発言できないテーマです…。Scheme (R5RS → R6RS)に固有の事情は知らないので、(もしあれば)メーリングリストなどでの議論を検索したほうが詳しいかもしれません。追記:R5RSの操作的意味論と、その表示的意味論に対するメリットに関しては論文があるようです。 迂闊に発言すると、(一般論としては)「操作的意味論のほうが理論が簡単だから」だと思います。要するにプログラムの「意味」というより「動作」を状態遷移(式の書き換え)で表しているだけなので…。歴史的には、操作的意味論も(仮想機械やインタプリタによる定義から)項

    操作的意味論 vs 表示的意味論 - sumiiのブログ
  • コンパイラの作り方 (詳解)

  • まったく初めての人のためのScheme

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

  • Husk Scheme

    What is husk? husk is a practical implementation of the Scheme programming language for the Haskell Platform. A superset of the R5RS standard is provided, along with most of the R7RS standard. Advanced features include: First-class continuations of unlimited extent Hygienic macros based on syntax-rules Low-level explicit renaming macros Library syntax from the R7RS standard A foreign function inte

  • call/cc 入門 (Coroutine with call/cc) - MAYAH

    call/cc を使って簡単な Coroutine を作ります。call/cc 入門だと思ってもらえれば幸いです。 coroutine とは ここでは coroutine を「実行の途中でリターンでき、さらにそこ(実行の途中)から再開することが出来る何か」の意味で使用します。適当な疑似言語で書くと次の通り。関数の途中でのリターンを suspend(), 途中からの再開を resume() で表すことにします。 ここでは、これを scheme の call/cc を用いて表すことを目指します。 call/cc とは call/cc とは、call-with-current-continuation という scheme の関数で、「現在の継続(current continuation)を生成し、それを関数に渡してその関数を実行する」ものです。読者の殆どは「継続」についてよく知っているかもしれ

  • Gauche練習帳 format関数完全マスター - aike’s blog

    だいぶGaucheに慣れてきました。今回は文字列の出力方法をこまかく指定するためのformat関数について書式を調べてみました。もともとK&R脳なのでprintfとの比較もしてみます。 Scheme言語ではprintf/sprintfのような書式指定にformat関数を使います。SRFI-28として規定されているのは、~a ~s ~% ~~ の4種類のシンプルなパターンのみなので、実用的な処理系としては独自に拡張することが必要になります。 Gaucheの場合、Common Lispを参考にformat関数の書式指定が実装されているとのこと。また汎用の多機能ライブラリSLIBをインストールするとさらに多くの書式が使えます。 Gaucheのみの場合 Common Lispのformatの一部(+独自拡張?) パディングやカンマ挿入の機能が豊富 16進数の大文字小文字が指定できる 実数の書式指定

    Gauche練習帳 format関数完全マスター - aike’s blog
  • Karetta|Gaucheプログラミング(立読み版)|EmacsからGaucheを使う

    EmacsにはScheme-modeというSchemeプログラミングをサポートするための環境があります。ここではGaucheとEmacsを使ってプログラミングするための 簡単なEmacsの設定について説明します。 まずは、Emacsの設定ファイル(.emacsなど)を開いて下さい。 初めに日語などを扱えるようにするためにエンコーディングを決めます。 (setq process-coding-system-alist (cons '("gosh" utf-8 . utf-8) process-coding-system-alist)) GaucheのデフォルトのエンコーディングはUTF-8となっているのでここではutf-8と書きました。もしEUC-JPならeuc-jp、Shift-JISならshift-jisと書いてください。 後は以下を設定に加えてください。 (setq scheme-p

  • 最もタメになる「初心者用言語」は Unlambda! - 西尾泰和のはてなダイアリー

    最もタメになる「初心者用言語」は Python!なんて言っている人がいるみたいだけど、ありえないよね!ライブラリリファレンス印刷すると100ページとかあるよ!そんなの初心者が覚えられないよね! 初心者のみんな!覚えるべき言語はUnlambdaだよ! Unlambdaはすばらしいよ! Schemeみたいに括弧だらけじゃない! Pythonみたいにインデントを強制されたりしない! Javaみたいに「まずクラスを作れ」とか言われない 演算子もないよ!評価の順番で悩むことはない! 覚えることはちょっとでいいよ!覚えないといけない関数はたぶん8個か9個しかないよ! ifとかforとかbreakとかcontinueとかnextとかlastとかendとかbeginとかprognなんていういろんな構文を覚える必要はないよ!構文は「関数適用」の1個だけ! Perlみたいに変数に$がついたりしないよ!っていう

    最もタメになる「初心者用言語」は Unlambda! - 西尾泰和のはてなダイアリー
  • 継続渡し形式(CPS)変換とは何か? - 言語ゲーム

    継続とは何かが分かったので、継続渡し形式とは何かについて調べてみた。 http://karetta.jp/book-node/kahua-seminar2/000511 を読むと、CPS に call/cc は必要無い事が分かった。がっくり。と言う事で、このページの例を Haskell と Squeak に写経しながら勉強。 -- 階乗の Haskell 再帰版 fact 0 = 1 fact n = n * fact (n - 1) -- CPS 版で書くとこうなる。(fact_cps 10 id => 3628800) fact_cps 0 cont = cont 1 fact_cps n cont = fact_cps (n - 1) (\a -> cont (n * a)) Scheme より滅茶苦茶分かりやすいのはパターンマッチの威力か。ちなみに Squeak Smalltalk

    継続渡し形式(CPS)変換とは何か? - 言語ゲーム
  • 継続渡し形式(CPS)Javascriptプログラミング

    継続とはコンピュータがプログラムを実行しているときの次に何をするのかを表す概念です。詳しくは何でも継続のページを参照し欲しいのですが、継続はプログラムを実行する上で欠かせない存在となっています。ソースコードのある行を実行したら次の行を実行します。関数(サブルーチン)を終了したら、呼び出し元に戻ります。これらは全て継続です。あたりまえと言えばあたりまえのことです。しかし、このあたり前のことを明確に意識しようとすると途端に目の前に霞がかかったようになります。 プログラミングの世界の概念には、禅の公案のようなものがある。それを説明する文章はほんの一文なのに、最初に目にする時、その文は全く意味をなさない、暗号のように感じられる。だがひとたびその概念を理解すると、その概念の説明は確かにその一文で説明されているのがわかるのだ。 そんな、「分かれば分かる」という禅問答の中でも「継続」は最も謎めいたもの

  • 反復的プロセス、末尾再帰、継続渡しスタイル : torus solutions!

    はてなリングの SICPで学びましょう というのに参加したので、 SICP に関係しそうなことを書いてみます。 SICP の第 1 章で、 再帰的プロセスの手続きを反復的プロセスに書き換えるという問題が出て来ますが、 これは慣れると自然に出来るようになります。 そこで出てくるのが末尾再帰というテクニックです。 しかし、 場合によっては末尾再帰にするのがちょっと難しい場合があります。 こういう時のとっておきの方法として、 継続渡しスタイルというのを紹介します。 簡単な書き換え 数値からなるリストを受け取って、 その要素の和を返す sum という関数を考えます。 まず、 普通に再帰を使って書くとこんな風になると思います。 (define (sum l) (if (null? l) 0 (+ (car l) (sum (cdr l))))) これを反復的プロセスの関数 sum-iter に書き換