昨年10月頃, このブログに書いた個人用電卓は, 機能を拡張したヴァージョンが, シミュレータ上で快適に稼働している. 今回はそのプログラミング技法を紹介する. Schemeで書いたシミュレータは, スタックの代りにリストを使う. car側がスタックトップである. 電卓実機はスタックを突き破ってポップも出来るが, リストではそうはいかぬ. また実機は2の補数の64ビットであったが, シミュレータはbignumである. シミュレータには押しボタンはないから, それに相当する文字を決める. 0〜9は文字も0〜9. 十六進のA,B,...,Fは小文字でa,b,...,f. 算術演算+,-,*,/はそのまま. 基数変換Hex, Dec, OctはH,D,O. 数値を区切るEntはE. Pop, Dup, Exc, Chsはそれぞれ ^,",:,_. Sqt, Fct, Pow, JDはそれぞれS,
Experiments in Fun[ctional] Programming # hacking, January 20th 2008 WARNING: May Contain Trace Elements of Parody I mentioned the possibility to use <- instead of #L a while ago. Then I got to talking with Troels Henriksen of the Climacs (which is Emacs of tomorrow — like Arc is to Common Lisp, except that it actually exists!) and McCLIM fame about related matters. Like so many others, I've alway
例によってHigher-order Perlから 昨日までは、同じ処理を同じアルゴリズムで書いたらC/C++が一番早いに決まっているという信念があったのですが、この本を読んで考えが変わりました。2007年11月3日はそんな記念日。 相変わらずメモ化の話なんですが、 ・フィボナッチ書けたよ → 遅くね? ・メモ化したよ → 毎回メモ化の仕組み作るの面倒じゃね? ・closureがあるよ → 引数が一つの時しか使えなくね? ・joinでつなぐよ → f("x,", "y")と、f("x", ",y")でバグるよ ・正規表現でエスケープするよ → 遅くね? ・key generatorを引数で渡して、if文で切り替えたらどうよ → if文無駄じゃね? ・eval使うよ ← 今ここ という議論を経て、evalを使う話。上の議論は全部Perlのソース付きで説明されています。 で、問題のコードがこれ。
Higher-Order Perl、chap3から。 メモ化の話 少し前に流行った、fib関数をメモ化して速度を上げる話。 普通にいろんな実装方法を説明した後、どうやって一般化するかでMemoize.pmの紹介がある。 Perlだと メモ化を個人で実装する必要はなくて、 use Memoize; memoize 'fib'; で関数fibをメモ化できる。この本では、紹介だけでなくMemoize.pmの動きをちゃんと説明している。Memoize.pmはPerlの内部テーブルを書き換える話をした後に、closureが来る。 どうみても、Lispです。 Padというのは、ローカル変数のbindingを行うデータ構造で、StubはPerlのjargonではCV(code,value)と呼ばれる。carが手続き(code)をさして、cdrがpad(ローカル変数のbinding)を指すと説明が入る。P
はじめに P.Graham著『On Lisp』に示されているように、現代的なLispプログラミングでは静的スコープ(字句的スコープ)と末尾呼出し(末尾再帰を含む)の最適化のもとでのマクロが重要な意味をもちます。しかし、今まで処理系作成の初心者が内部に手を入れやすい手頃な大きさの実装が事実上ありませんでした。 ここでは、そういったモダンな特徴を備えた小さなLispインタープリタL2LispをRubyで作ってみます。L2Lisp(Little Lambda Lisp)は、Lispの理論的背景であるラムダ算法(lambda calculus)に対し、有力なLisp方言であるSchemeと同程度に忠実である一方、その他の点では広く普及しているEmacs Lispのサブセットとしたオリジナルの小型Lispです。 実行例としてtak関数を定義し、実行する様子を示します。Ruby以外に必要なのはL2Li
この原稿の最新版について この原稿に加筆した最新版が書籍「プログラミングGauche」に収録されています。 引用や紹介をされる方はなるべく書籍収録版を参照してください。 他の言語のプログラマがSchemeプログラムを書くとき、 どうしても発想が手続き的(procedural)になりがちです。 LispプログラマやSchemeプログラマの発想は手続き的な発想とはどうも違うらしい、 ということは分かるのですが、具体的に何が違うのでしょうか? ここではこの謎に迫ってみましょう。 実例 例えばこんな例題があります。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 どうしてプログラマに・・・プログラムが書けないのか? (原題: Why
Lisp 一夜漬け 「Lisp 一夜漬け」は、ソフトバンクの月刊誌『Oh!X』の 1995年10月号〜1995年12月号に掲載された Lisp 講座です。 ここでは、掲載当時の X68000 に特化した部分などは削除してあります。 (ということは、1995年12月号掲載ぶんは全削除です) Lispの書き方 (1997.09.26 21:55) Lisp の世界 関数という概念 書き方 変数 制御と述語 関数定義 リスト (1997.10.01 00:50) Lisp におけるデータ型 ドット対 ドット対からリストへ nil について リストの定義 リストを扱う関数 リストを扱うプログラムを作る
序文 これは誰のために書かれたものか Lisp の歴史 初心者の人へ 謝辞 訳者まえがき 1. List 処理 1.1 Lisp のリスト 1.1.1 Lisp のアトム 1.1.2 リストの中の空白 1.1.3 GNU Emacs によるリストのタイプの支援 1.2 プログラムの実行 1.3 エラーメッセージの出力 1.4 シンボルの名前と関数定義 1.5 Lisp インタプリタ 1.5.1 バイトコンパイル 1.6 評価 1.6.1 内部のリストの評価 1.7 変数 1.7.1 値のないシンボルに対するエラーメッセージ 1.8 引数 1.8.1 引数のデータ型 1.8.2 引数には変数の値やリストも使える 1.8.3 可変な数の引数 1.8.4 関数に間違った型の引数を与えると 1.8.5 関数 message 1.9 変数の値の設定 1.9.1 set の利用 1.9.2 setq
私の .emacs で設定している項目 Last Updated at $Date: 2005/12/04 03:36:05 $. このページの内容は,Emacs-21.3 で動作確認しています. version によっては変数名や関数名の変更などにより動作しないことが有り得ますので, ご注意下さい.バグレポートや感想などは tsuchiya@namazu.org までお願いします. 日本語環境の設定 改行キーでオートインデントさせる BS キーを有効にする マシン毎に設定を切り替える ファイルの拡張子によってメジャーモードを切り替える スクリプトを編集するメジャーモードの設定 スクリプトを保存する時,自動的に chmod +x を行なうようにする 強調表示付き動的略称展開 概略表示付き yank-pop shell-command のコマンド入力に補完が効くようにする shell-mod
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く