自堕落な技術者の日記

基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。テレビ好きで芸能通

Lisp

Lispの仏様

Lispの仏さま 竹内郁雄の目力 − @IT自分戦略研究所
第1回の天才プログラマは、いわずと知れたLispの大御所ハッカー、竹内郁雄氏。
竹内氏によると、Lispはすべての言語の原点なのだという。「いまRubyがブームだが、Rubyは要するにカッコのないLisp。XMLもぶ厚いカッコのあるLisp。いろいろなプログラミング技法を見ますが、『Lispにあった』ということが多いです」(竹内氏)


Lispの神様、仏様の竹内郁雄先生の記事を発見。ぐっはぁ、、、、写真がデカくてびっくり。NTT武蔵野通研には昼休みサッカーをやったりする風土があるってことをいろんな方面から聞きますが、何ともオープンで健康的でうらやましい。1970〜80年代は昼休みにOLさんと輪になってバレーボールやるなんていう風景がある会社もありましたけど、そういうのって今は無いですよね( ´∀`)つ

懐かしい高階プログラミング

注目ワード“高階プログラミング”って何だ?
オープンソースソリューションを扱う技術系企業 タイムインターメディア(以下TIM)が、「HOPプロジェクト」を開始した。HOPとは、Higher-Order Programming=高階プログラミングを略した言葉。HOPプロジェクトは、TIMの高階プログラミングにおける技術力を背景に、技術コンサルなどを行っていくプロジェクトだ。


高階プログラミングという言葉がとても懐かしく、今もこんなことをやっている人たちがいるんだなぁ、、、と感慨にふけりつつブログ書いてみます。

「高階プログラミング(またはメタプログラミングとも言う)」なんていうととても高級だったりアカデミックだったりに聞こえるかもしれませんが、ちっともそんなことありません。

高階プログラミングとは「あるプログラミング言語を、それ自身をベースにしてちょっと文法を書き換えることにより、(ある人にとっては使いやすい)新しい言語を作り出す」ってことです。新しい言語を一から作るのは面倒なので、ベースとなる言語をうまく活用しながら拡張をしてしまうというものです。

例えば、以下はCなどでは6+6をxに代入する文ですが、

x = 3 + 3;


これを拡張して3の倍数を代入しようとするときだけアホになり正しくない値を代入してしまうような言語処理系が作りたかったら、普通の計算処理はそのままに3の倍数の代入だけ特殊な処理を行うよう実装すればよいのです。

高階プログラミングの言語を作るには向き不向きがあって、以下の機能を持っていると比較的簡単に作れると言われています:
・eval 文 (与えられた文字列の文を評価して処理する)
・マクロ
#だからあの記事にあるマクロがあれば高階プログラミングができるというのは少し違うと思う

考え方によっては、昔のC++だってCのマクロだけで実装して、新しい文法を作ったのですから高階プログラミングといえると思います。他にもPerlのデバッガなんかもPerlで書かれている高階プログラミングの一つではないかと、、、、

evalのような機能はLisp、Prolog、Perl、Python、Ruby、JavaScript、Shellなどインタプリタ系、スクリプト系の言語は殆ど備えているのでこれらをベースに新しい言語を作り出すことが可能なわけです。

昔、自分もPrologをベースに数式の大小関係や等号の関係さえかけば、これを自動的に解いてしまうような高階プログラミング言語を作ったりしてレイアウト問題に応用したりしていました。

こんな本を参考に勉強していたのを思い出します。

制約論理プログラミング (知識情報処理シリーズ)


高階プログラミングで厄介なのはデバッグで、言語を抽象化してしまったためにエラーの原因を特定するのが面倒で、本来なら高階プログラミング言語専用のデバッガを準備しなければならないのに、どの高階プログラミング言語も不足していたように思います。(初期のマクロだったC++もC以上にデバックは難しかった記憶があります)

このような人工知能関係の昔話をいろいろ辿っているうちに渕一博先生が一昨年に無くなっていたことを知りました。(参考1)(参考2)渕先生はまさに日本のコンピュータのパイオニアでありスゴイと思った先生の一人です。先生が所長をされた第五世代コンピュータは批判も多かった国家プロジェクトですが、ユニークでワクワクするという意味では他には無いプロジェクトだったのではないかと思っています。(Σといい、どうして日本のIT系国家プロジェクトはうまくいかないんだろう、、、、)

遅くなってしまいましたが、渕先生のご冥福心よりお祈り致します。

Emacs Lisp

恐ろしく久しぶりにEmacs Lispを書いてみました。

というのもXAdES署名をスキーマ検証してエラーは「何行何カラム目」のように出てくるんですが、Emacsには行だけや先頭からの文字数を指定してカーソルを移動するものはあっても、行とカラムを指定してカーソル移動させるコマンドはありません。

そこで仕方なく作ってみたのがこれ(大したものではありません)

(defun goto-line-column (line-number column-number)
 "goto line with column"
 (interactive "nline: \nncolumn: ")
 (goto-line line-number)
 (let ((point-goto (+ (point) column-number)))
  (goto-char point-goto)))


すっかり作法なんかも忘れていたんですが、"C:\Mule\lisp\*.el" などのソースをちょっと眺めた後、関数interactiveの書式を忘れたので M-x info でEmacs Lispのオンラインマニュアル見て書きました。(すっかりinfo のナビゲーションも忘れていたし、、、、、)

人工知能はあまり役に立たなかったけど、強力なテキストエディタEmacsと、Javaが生まれてきたのと、綺麗な(これが大事)オブジェクト指向設計だけは役に立ったかなと、、、、

JavaやRubyなどオブジェクト指向の言語を使えるからといって、オブジェクト指向ぽくない実装をされる方はいるようで、C++、JavaやRubyなどコード見てると結構mainに数百行の長ぁ〜〜〜いコードを超手続き的に書いてみたり、ループの入れ子を何段も作っちゃったりとかありますよね(^^;
最新記事
Categories
Archives
Twitter
記事Google検索

本ブログ内をGoogle検索
Yahoo!アクセス解析
Travel Advisor
記事検索
QRコード
QRコード
  • ライブドアブログ