Lisp

買った本

集合知プログラミング / Toby Segaran ISBN:9784873113647 実践Common Lisp / Peter Seibel ISBN:9784274067211 Smalltalkで学ぶオブジェクト指向プログラミングの本質 / 青木淳, 浅岡浩子, 澤本依里 ISBN:9784822283629 フリーランチの時代 / 小川一水 ISBN…

買った本

環と体の理論 / 酒井文雄 ISBN:9784320015609 スタイルシート・デザイン XHTML + CSSで実践するWeb標準デザイン講座 / 矢野りん, 益子貴寛, こもりまさあき ISBN:9784844359043 日本語組版の考え方 / 向井裕一 ISBN:9784416608265 考える道具としてのLisp入…

買った本

ダブルブリッド X / 中村恵里加 ISBN:9784048670654 狼と香辛料 VIII 対立の町 〈上〉/ 支倉凍砂 ISBN:9784048670685 冲方丁のライトノベルの書き方講座 / 冲方丁 ISBN:9784796663595 はこぶね白書 (6) / 藤野もやむ ISBN:9784861275012 ブレイブ・ストーリ…

買った本とCD

プログラミングGauche / Kahuaプロジェクト, 川合史朗 ISBN:9784873113487 BEST SOFTWARE WRITING / Joel Spolsky, 青木靖 ISBN:9784798115818 ハッカー宣言 / マッケンジー・ワーク, 金田智之 ISBN:9784309243481 輪環の魔導師 2 / 渡瀬草一郎 ISBN:9784840…

Pythonでmapcan

def mapcan(func, seq): import operator return reduce(operator.add, map(func, seq), [])

Pythonでremove-duplicates

def remove_duplicates(seq): return sorted(set(seq), key=seq.index) ref. http://ja.doukaku.org/comment/2819/

末尾再帰の最適化と一級継続を実現するためのJVMの機能拡張

http://www.ipa.go.jp/SPC/report/00fy-pro/projects/explorer/104/104.pdf あとで(ちゃんと)読む

Pythonは○○である/○○でない

PythonはPerlではない。PHPがHTMLでない程度には。 PythonはLispである。JavascriptがLispであるよりもずっと。

リストの内包表記とlambda

AOISAKURA - 日記(2007-02-08) リストの内包表記へのコメント。コメント先で例に挙がっている [x * 2 for x in range(3)] は、Lispで書けばこうかな? (map (lambda (x) (* x 2)) (range 3)) Lispに慣れた立場からは、リストの内包表記はlambdaは使ってない…

define-syntax遊び

潜伏中だけどちょっとだけ。g:nozom:id:nozom:20061024

買った本

入門Common Lisp―関数型4つの特徴とλ計算 / 新納浩幸 ISBN:4839920818 マリア様がみてる 大きな扉 小さな鍵 / 今野緒雪 ISBN:4086008238 リアリスの私写真 / 和泉なぎさ ISBN:4757517866 R&R NEWSMAKER 2006年 11月号 ASIN:B000IJ6U0M 入門Common Lispやっと…

font-lockで色付のソースコードをHTML化する

長いソースコードはキーワードが色分けされていないと読む気がしないので、ここのface2html.elをベースにHTMLで出力するプログラムを作った。 [];;[] [];; [][]face2html.el by TAMURA Kent <kent@xxx>[] [];; [][]$Id: face2html.el,v 1.2 2001/09/10 09:03:39 kent E</kent@xxx>…

人間コンパイラコンパイラとLispのマクロ

C++を使っていると、関数型言語の人には、「そこまで(Boost.Lambdaみたいなことまで)して関数型に近づける努力をするくらいならC++をやめて関数型言語使えばいいじゃん」 と言われることがありますが、それは全然違うよ、と思うのです。 まさに自分はそうい…

Perlで継続渡し

色々な言語で継続渡しを書いてみよう企画。今回はPerlで。 #! /usr/bin/perl use strict; sub fib_cps { my ($n, $k) = @_; if (($n == 1) || ($n == 2)) { $k->(1); } else { &fib_cps($n - 1, sub { my $v1 = shift @_; my $k = $k; &fib_cps($n - 2, sub …

Cで継続渡し

できた。試行錯誤している内に無駄に凝った作りになってしまった。ここまで来ると完全に手段が目的と化しているな。 fib.h: #ifndef __FIB_H__ #define __FIB_H__ typedef void (*destructor_t)(); typedef struct object { int ref_count; size_t size; des…

Javascriptで継続渡し

id:nozom:20060317#1142577630の続き。世界で最も誤解された言語とも呼ばれるJavascriptを使って継続渡しを書いてみた。なお、Javascriptの処理系としてRhino*1を使った。参考文献は『入門Javascript』(ISBN:4756138713)。 function fib(n) { if ((n == 1) |…

バッファ内のコメントを非表示にする

TeXで文章を書いているときにコメント部分を一括して非表示にしたくなった。似たような機能としてはoutline-modeやhide-ifdef-modeがあるが、そのものずばりの機能は見つからなかったので、これらを参考にしながらちょろっと書いてみた。(2006.3.6 11:21 ち…

はじめてのGaucheプログラミング

スパムフィルタにbogofilter + KAKASIを使っているのだが、最近誤判定が多くなった。原因はマルチパートのメールなので、適当なMIME展開のフィルタプログラムを書けばいいと思い、Perlのライブラリを調べたけどありすぎてよく分からなかった。そこで、最近Sc…

マクロでtarai回し 5回目

引数に0が含まれるときにも動くように修正した。 tarai-mac.scm #! /usr/bin/env gosh (define-syntax tarai (syntax-rules () ((_ (%x ...) (%y ...) (%z ...)) (tarai "loop" (%x ...) (%y ...) (%x ...) (%y ...) (%z ...))) ((_ "loop" (%x1 %x2 ...) (%…

マクロでtarai回し 4回目

さらに修正したら状態数がまた少し減った。あと地味にバグがあったのを直した。 (define-syntax tarai-r/o (syntax-rules () ((_ 0 %x %y %z %k ...) (tarai-r/o "force" %x (tarai-r/o 1 %y %z) %k ...)) ((_ 1 %y %z %x-value %k ...) (tarai-r/o "force" …

マクロでtarai回し 2回目

また今度と言ってから8時間しか経ってないけど、どうやらできたみたいなので公開。まず、普通の関数で引数の評価を遅らせることを考えてみる(r/oはregular order=正規順序の意味)。 (define (tarai-r/o x y z) (let ((x-value (force x)) (y-value (force y)…

マクロでtarai回し 3回目

zを評価するタイミングはもっと遅らせられることに気付いたので、元にする関数をちょっと修正した。 (define (tarai-r/o x y z) (let ((x-value (force x)) (y-value (force y))) (if (<= x-value y-value) y-value (tarai-r/o (delay (tarai-r/o (1- x-valu…

マクロでtarai回し

id:nozom:20060116#1137365062で載せたtarai関数版がそもそも間違っていた。 (define (tarai x y z) (if (< x y) y (tarai (tarai (1- x) y z) (tarai (1- y) z x) (tarai (1- z) x y))))不等号は<ではなくて<=が正しい。このせいで、(1 1 1) (2 2 2)…などが…

SParser-2.3

http://fhuman.esys.tsukuba.ac.jp/~nozom/SParser-2.3.zip主な変更点: Evaluatorを導入して、各オブジェクトの持っていたeval()をEvaluatorに集約した quasiquote(`)、unquote(,)、unquote-splicing(,@)を実装 let、lambdaで新しい変数束縛が作られない大バ…

SParser-2.2 released

大きな進展はないが、しばらくいじれないので修正版を公開しておく。 ファイルport、文字列portの実装(一部)と、defineの仕様を勘違いしていた*1ことの修正がメイン。インタプリタ方式で作り始めたけど、効率のためだけでなく文法の面からもコンパイルは必要…

継続渡しとコンパイル(2)〜末尾再帰の場合

前のエントリでループの度にヒープにクロージャを生成しているのが無駄だと思う人がいるかもしれないが、それは例に挙げた関数が末尾再帰になっていないからだ。継続渡しは末尾再帰の時に最も真価を発揮する。 というわけで階乗計算の末尾再帰版。 (define (…

継続渡しとコンパイル

実装はまだ先だが、継続渡しに変換してからコンパイルする方法がなんとなく分かった。 継続渡しへの変換 継続渡しへの変換は、簡単な例で示すと以下のようになる。 次の式を評価するためには、まず(g)を評価して、その戻り値を使って(f # x)を評価する。 (f …

日経ソフトウェア2005年10月号「Javaで作るオリジナル言語〜やさしいLispインタプリタの作り方」

特集「究極のプログラミング体験 プログラム言語を作る!」の中の一記事。今日立ち読みして知った。掲載されたプログラムはWebページからダウンロード可能。 日経ソフトウエア 2005年10月号目次

The Super Programming Technique

Lesson 1. ラムダ式をC++で実現する【前編】 Lesson 2. ラムダ式をC++で実現する【中編】 Lesson 3. ラムダ式をC++で実現する【後編】 C++のテンプレートを使ってlambda式を実現するという記事。やねうらおさんによる。

Jatha - LISP Library in Java

http://jatha.sourceforge.net/ Jatha is a Java library that implements a fairly large subset of Common LISP. おお〜。Common Lispだから継続はないのか。でもコンパイル機能は多分あるだろうな。