あ な た の 怨 み 、 晴 ら し ま す 。 ~ 継 続 は じ め ま し た ~
はじめに 現存するプログラミング言語の中で2番目に古いのがLispです。生まれは古くても、いまだに使われ続け、また、Rubyなどの新しい言語にも影響を与えています。そのLispの派生であり、シンプルさが売りなのがSchemeです。 ここではSchemeの簡単なインタプリタをJavaScriptで作ってみます。対象読者 本稿はLispやSchemeは少し触ったことはあるけど、インタプリタは書いたことがないという方を読者対象としています。また、JavaScriptの文法や、簡単なデータ構造についての知識を前提とし、説明は省きます。必要な環境 テキストエディタと、JavaScriptが動くWebブラウザがあれば十分です。他に特に用意するものはありません。概要作成するインタプリタについて インタプリタのコードはJavaScriptで書き、HTMLのフォームを使って、Schemeのプログラムの入力お
id:reinyannyan:20061127:p1 で取り上げた SICP の accumulate 関数は、まだ Lisp の肝であるリストが紹介されていない段階のものでした。 2章に入り、リストを用いた、より汎用的な実装が示されていますので、前回のアップデートも兼ねて見ておきたいと思います。 // 再帰版 function accumulate(op, initial, lst) { return nullp(lst) ? initial : op(car(lst), accumulate(op, initial, cdr(lst))); }// 反復版 function accumulate(op, initial, lst) { function iter(result, lst) { return nullp(lst) ? result : iter(op(car(lst),
SICP を読んでいます (まだ 1 章の高階関数のところです)。 練習問題で Smalltalk や Ruby (や prototype.js) の inject メソッドと同等のものが出てきましたので、ピックアップしてみたいと思います。 以下の様な、a から b までの範囲の数列の総和・総乗などの計算式を、高階関数を使って一般化する、という課題です。 function sum(a, b) { return a > b ? 0 : a + sum(a + 1, b); } sum(1, 10); // -> 55 function product(a, b) { return a > b ? 1 : a * product(a + 1, b); } product(1, 10); // -> 3628800上の 2 例を見比べると、形としては全く同じ式であることが分かります。ということで
Joel Spolsky / 青木靖 訳 2005年12月29日 木曜 私がペンシルベニア大で大学最初の年を迎える頃には、自分は非常に優れたプログラマだと思っていた。すべて独学で学び、Turbo Pascalで大きなシステムを2つ作っていた・・・1つは小さな工場のための完全な在庫システムで、もう1つはイスラエル最大のパン工場で生産ラインのスケジューリングに使われていた。 中間試験の時になって、私は自分で思っているほど頭が良くないことに気付いた。私はいくつかの問題が全然できなかった。私はまだポインタを理解しておらず、再帰も理解していなかったためだ。 根に持つのはやめて、その中間試験問題をお教えすることにしよう・・・大学一年のときの私よりうまくやれるか試してみるといい。 1a. (MIT-Scheme) 次の関数 (define (accumulate combiner null-value
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く