あどけない話

インターネットに関する技術的な話など

Lisp

Lisper のためのゲーデルの不完全性定理

注:この記事の内容には、問題があるようなので、勉強して書き直す予定です。ゲーデルの不完全性定理を読んでも理解できない Lisper のために、Lisp のコードで不完全性定理を説明してみる。昨日と同様に Emacs Lisp を使うが、Common Lisp や Scheme でもコ…

Lisper のためのチューリングマシンの停止性問題

停止性問題を読んでも、意味が分からなかった Lisper のために、Lisp のコードで停止性を解説してみる。使用する Lisp としては、Scheme、Common Lisp、Emacs Lisp を検討したが、Emacs Lisp が一番よいと分かったので、Emacs Lisp を使う。 名前を使った概…

祝 「Scheme 手習い」復刻

めでたい! 「Scheme 手習い」が復刻しました。正確に言うと、復刻ではなく、新しい版に基づいた新しい訳です。Scheme手習い作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一出版社/メーカー: オーム社発売日: 2010/10/22メディア: 単行本(…

Emacs補完候補の選択を便利に

今話題のauto-complete.elを使ってみましたが、以下の点が使いづらく、使うのを止めてしまいました。 候補が最大10個しか出ない 10個以上の候補がある場合、次に打つべき文字が分らない バッファの最下部でメニューが表示されると、勝手にスクロールされる …

Lispと○キブリの共通点

LL Future で話題に出されたのは、これかぁ。 Lispと○キブリの共通点

実践 Common Lisp

「セルの海 マクロの空」の懇親会で知り合いになったオーム社の方から、約束通り「実践 Common Lisp」を献本して頂きました。お礼も兼ねまして、感想を書いておきます。お世辞抜きに、僕はこんな Common Lisp の本が欲しかったのです。実践Common Lisp作者: …

Emacs Lisp の構造化

忌み嫌われているグローバル変数/関数をなるべく使用しないために、もう一つ小さな空間を用意している言語があります。僕のイメージでは、この空間はゆりかごです。ゆりかごの実現方法として、以下のようなものが挙げられるでしょう。 C++、Java ならクラス …

セルの海 マクロの空

質疑応答で触れたのは「Emacs Lisp を仕事で使ってみた」です。ちょっと時間がないので、これだけで失礼します。 補足 僕だったら、コマンドラインからバッチ処理するという方法は取らないでしょう。起動している Emacs に、この関数を実行しろと指示するで…

The Little Schemer

最近、Scheme がちょっとした流行になっているようです。Scheme を勉強しようと思っている人に、僕が声を大にして薦めたい本は、「The Little Schemer」です。The Little Schemer (The MIT Press)作者: Daniel P. Friedman,Matthias Felleisen出版社/メーカ…

load-path などの設定

ruby-modeの話で、append ではなく cons を使うべきだと書いたところ、使い方に悩んでいる人がいるようです。たとえば、cons で2 つパスを追加しようとすると、 (setq load-path (cons "foo" (cons "bar" load-path))) となって見にくいです。append なら、 …

Emacs Lisp のダメなところ

Emacs Lisp をこよなく愛する僕の目から、Emacs Lisp がダメだと思うところをまとめておきます。 文化的な問題 Emacs Lisper の多くは、Lisp が好きで使っているのではなく、Emacs が好きだからしかたなく使っているのでしょう。本当は C で書きたいのに、無…

my-defstruct

Emacs で (require 'cl) とすると defstruct が使えるようになります。ちょっと調べてみました。 大きなマクロで理解するのは困難 Common Lisp の defstruct なので、getter はあるが、setter がない という訳で、自分で実装してみました。 (defun my-keywor…

Arc のハッシュ

川合さんのエッセイ「Schemer's way」は面白く、とてもためになります。ただ一点、フェアな議論なのか気になるところがありました。 多くの言語では、新しいオペレータを追加するのは言語そのものを拡張しなければならないだろう。例えばJavaを拡張してPerl…

ruby-mode

Ruby には Emacs の ruby-mode.el が付随しています。README などに設定方法が書いてないので、ほとんどの人は、検索して設定例を探すでしょう。すると、こんな不効率な設定方法が見つかります。 (autoload 'ruby-mode "ruby-mode" "Mode for editing ruby s…

cdr の decrement

Lisp の car や cdr が、以下の略であることぐらい、Lisp をかじったことのある人なら知っているでしょう。 Contents of the Address part of Register number Contents of the Decrement part of Register number Lisp が最初に実装された IBM 704 の機械語…

Emacs Lisp でピュアな Lisp

「基本的な 7 つの関数を実装すれば、LISP は作れる」という話をよく聞きます。僕はこのことに疑問を持っていました。和田先生が、「"Lisp 1.5 Programmer's Manual" の EVAL の定義を読むとよく分る」とおっしゃったので、お借りして読みました。この本では…

Emacs Lisp で FizzBuzz

Emacs Lisp の習得を目指す誰かの参考になるかもしれないので、僕なりの解答を書いておきます。 アルゴリズムの実装 繰り返しと仕事は分離したいので、まず仕事の部分を定義します。 (defun fizzbuzz (num) (cond ((= (% num 15) 0) "FizzBuzz") ((= (% num …

偉大な習慣

「僕は、偉大なプログラマなんかじゃない。偉大な習慣を身につけたプログラマなんだ。」 --- Kent Beck 僕の信じた伝説 この一年間、あまりコードを書かずに、たくさんの本を読み、勉強ばかりしていました。そして、自分がかなり時代に取り残されたプログラ…

Emacs Lisp と総称関数

僕は Lisper ですが、「Lisp では、マクロを書けばなんでもできる」という主張には、かなり疑問を持っていました。たとえば、「Emacs Lisp で総称関数を導入することなんてできない」と思っていたのです。しかし、今日ひらめいて、試しにこんなコードを書き…

Emacs Lisp のパターン

デザイン(設計)パターンという程のことはない、Emacs Lisp のパターンを思いつくままに書きます。心は、 高階関数を書こう マクロを書こう です。 mapcar mapcar は、引数に関数をとる高階関数のよい例です。リストを取り、それぞれの値を加工して、新しいリ…

関数型プログラミングと代入

関数型プログラミングでは、よく「代入は使ってはならない」と言われます。関数型言語の一種である Emacs Lisp を生業とする僕は、この言葉に長年悩まされてきました。代入を使わないで実用的なプログラムを書くことは無理だからです。もちろん、問題の内容…

Lisp で多態性

On Lisp を理解するためのメモです。 オブジェクト指向Lisp オブジェクト指向Lispの章には以下のような記述があります。 CLOSの到来はLispがオブジェクト指向のパラダイムを取り込み始めた兆に見えるかも知れない.実際には,Lispはオブジェクト指向のパラダ…

On Lisp

以前から、Lisp でのデザインパターンとは何かについて考えていました。それに答えを与えてくれそうな 「On Lisp」 という本を読んでいます。On Lisp作者: ポールグレアム,野田開,Paul Graham出版社/メーカー: オーム社発売日: 2007/03/01メディア: 単行本購…