Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2006-08-28

CADRエミュレータ新バージョン

| 20:46 | CADRエミュレータ新バージョン - わだばLisperになる を含むブックマーク はてなブックマーク - CADRエミュレータ新バージョン - わだばLisperになる

なんてことだ、CADRのエミュレータがバージョンアップ

していた。

バージョンアップの頻度は年に一回とかだったので油断

してたが、色々と強化されてるし!

新しいバージョンはとりわけカーソルの動きとか目に見

えて違うかなという感じ。

結構今回は色々変ったなと。

どんどん強化されていって素敵なLisp Machineライフを

味わわせて下さい(:.;゜;Д;゜;.:)と願わずにはいられ

ない秋。

2006-08-23

Emacsから携帯にメールする

| 00:46 | Emacsから携帯にメールする - わだばLisperになる を含むブックマーク はてなブックマーク - Emacsから携帯にメールする - わだばLisperになる

最近は、ずーっと家にいるということもあり、ずっとPC

の前から世界を睨み続けているので、携帯に来たメール

も「なりすましメール」で応酬しています。なりすましっ

ていっても単純で、FromとReply-Toを携帯に向けてるだ

けなんですが、結構頻繁に使うので支援の小汚いelisp

とかも書いてみてました。

(setq mb-email-address "foo@jp.earth")

(defun narisumashi (email-address)
  "携帯からのメールをなりすましでPCから送る際のメール作成支援コマンド"
  (interactive "p")
  (save-excursion
    ;; auto-fillを無効にする
    (auto-fill-mode -1)
    ;; Reply-toを携帯へ
    (goto-char (point-min))
    (cond ((re-search-forward "^Reply-To:\\(.*\\)" nil t)
	   (replace-match (format "Reply-To: %s" mb-email-address)))
	  (t (insert (format "Reply-To: %s\n" mb-email-address))))

    (goto-char (point-min))
    (re-search-forward "^From: \\(.*\\)" nil t)
    (replace-match mb-email-address t t nil nil)

    (goto-char (point-min))))

でも、こういうことしなくても、というか寧ろこういう

ことはしないで、メーラーのフックをちゃんと利用すれ

ば、かなり快適な「なりすまし携帯メール」環境を実現

できるんじゃないかと思うわけです。

どういうことをしたいのかといえば、今のところ

  • 絵文字の使用
  • 携帯なので基本的にauto-fillしない。

という位しか思い付きませんが、絵文字については、送

り主のドメインをみて判断し、文章中のキーワードをキャ

リア依存の絵文字を適用して送信する、位のことはフッ

クを使うと実現できそうです。

とりあえず、実験としてAUの絵文字に変換するテストと

してフィルターを書く

(defun ezemoticonize-region (begin end)
  "リージョン中の`うんこ'をez-webの絵文字に変換"
  (interactive "r")
  (save-excursion
    (goto-char (min begin end))
    (while (re-search-forward "うんこ" nil t)
      (replace-match (format "%c" 64336)))))

という感じ。

そしてそれを、

(add-hook 'wl-draft-send-hook
           #'(lambda ()
               (ezemoticonize-region (point-min) (point-max))))

のように送信時のフィルターとして噛ませば、「うんこ」

がすべてうんこの絵文字となります。しかし、全キャリ

アの絵文字に対応するのはなかなか面倒そう。

しかし「うんこ」だけでも是非全キャリ対応させたいと

ころ。

2006-08-21

Generaのマニュアル

| 19:15 | Generaのマニュアル - わだばLisperになる を含むブックマーク はてなブックマーク - Generaのマニュアル - わだばLisperになる

SymbolicsのLisp MachineのOSである、Generaのマニュ

アルを公開しはじめたサイトをdel.icio.usで発見!

マニュアルを眺めていると、やっぱり素敵な環境だった

のではないかなと思えます。

Emacs上の開発環境であるslimeなどはこういう環境を復

活?させようとしてるっぽいですよね。

マニュアルを読んで、今のEmacsや、UNIXにない機能を

つまんで実装してみるのも非常に面白そう。

実力ないけどね'`,、('∀`) '`,、。妄想です。妄想。

サイトはこちら

2006-08-20

UNIXでのLisp生活

| 00:42 | UNIXでのLisp生活 - わだばLisperになる を含むブックマーク はてなブックマーク - UNIXでのLisp生活 - わだばLisperになる

UNIXでの生活で非常に身近なものというか概念がフィル

ター。基本的に道具は殆どフィルター。

ここを切り崩さないと、どうしても普段の生活でLispを

使うことにならない気がします。

それで、できればCommon Lispでフィルターをばしばし

書いて行きたいんですが、どうやれば良いのかしらと。

さっぱり分からない訳です。

cat foo.txt | my-cl-filter > bar.txt

このmy-cl-filterの部分が簡単に書けないと生活に密着

したLispライフは送れない、と睨んでいるのです。

それで、こういうのが実現できるものはないかと探して

いるのですが、ちょっと調べた感じでも、なかなか難し

い世界に突入してしまう感じです。

それなりにあるみたいなんですが、総じてドキュメント

が不足していて敷居がかなり高い感が強いです。

cl-launchとか結構良さげなのですが…。

ということで、順当なところで、Gaucheで行くことにし

ました。Common Lispは対処法が見付かったら挑戦しま

す。

スクリプトの引数の処理については、

Kahua HEADのEnjoy Gauche 6. スクリプトプログラム

参考になりました。

それで、catの様なフィルターとして機能するツールの

作成方法ですが、GaucheのマニュアルのSchemeスクリプ

トを書くのcatの例を眺めてみます。

#!/usr/bin/env gosh

(define (main args)   ;entry point
  (if (null? (cdr args))
      (copy-port (current-input-port) (current-output-port))
      (for-each (lambda (file)
                  (call-with-input-file file
                    (lambda (in)
                      (copy-port in (current-output-port)))))
                (cdr args)))
  0)

多分これがスタートラインですが、のっけから分かりま

せん。

地道にということで分解。

最後に0を返してますが、これはスクリプトの終了ステー

タスのようです。


(define (main args)
  128)

の様なスクリプトを実行すれば、

$ echo $?
128

みたいな。

本体を腑分けしてゆくと、ifで引数の有無を確認し、引

数がなければ、inputとoutputポートをそのまま接続し

終了、引数があれば、それをfor-eachでファイルごとに

処理みたいな感じです。

for-eachのところの処理が入り組んでいるので、

for-eachに渡されている無名関数に名前を付けて分解し

てみるとこんな感じかなと。

(define (main args)   ;entry point
  (if (null? (cdr args))
      (copy-port (current-input-port) (current-output-port))
      (for-each cat-a-file
		(cdr args)))
  0)

;; 補助関数
(define (cat-a-file file) 
  (call-with-input-file file
    (lambda(in)
      (copy-port in (current-output-port)))))

なるほど。

しかし、馴れないと難解な世界というか、とっかかりが

なかなか難しい。

2006-08-16

なんにしろLispを使ってなにかする試み

| 22:24 | なんにしろLispを使ってなにかする試み - わだばLisperになる を含むブックマーク はてなブックマーク - なんにしろLispを使ってなにかする試み - わだばLisperになる

Lisperになりたいというより意地でもLispで書いてみる

という試みの日々。

今日は.procmailrcをいじる機会があったので、レシピ

を生成するコードを書いてみる。ちゃんとやろうとする

とそれなりになんでも勉強になるんでしょうねー。

で、実際のところちゃんとやってません(´▽`*)

エラー処理とか考えるとなにするんでも大変なんだろう

なあと。

そういうのできるようになると良いなと。

(defun procmailrc-genrecipe(from to &key to-type)
  (let ((type
	 (if to-type
	     to-type
	   (prog1
	     (cond ((find #\@ to) 'email)
		   (t 'maildir))
	     (format t "# WARNING: DWIMed recipe~%")))))

    (format t ":0~%* [Ff]rom: .*~A.*~%~A~A" 

	    from
	    
	    (case type
	      (email (concatenate 'string "!" to))
	      (otherwise to))
	    
	    (case type
	      (mh "/.")
	      (maildir "/")
	      (otherwise ""))) ))


;; CL-USER> (procmailrc-genrecipe "from@foo.local" "dir")
;; # WARNING: DWIMed recipe
;; :0
;; * [Ff]rom: .*from@foo.local.*
;; dir/
;; NIL

2006-08-15

Lisp漬けの生活はどうしたら可能なのかー

| 22:11 | Lisp漬けの生活はどうしたら可能なのかー - わだばLisperになる を含むブックマーク はてなブックマーク - Lisp漬けの生活はどうしたら可能なのかー - わだばLisperになる

日々Lispを使いたいなあと思っていますが、プログラマ

でもないし趣味でプログラムを組むのが好きって訳でも

ないので、書くものといえば精々シェルスクリプト程度

のもので、全然「Lisperになりたい!」でもなんでもな

いじゃないの、とか思いました。いまさら。

ベジタリアンはどうやってベジタリアンになるのかとい

えば、野菜しか食べないことによってなる訳です。

だったらLispしか使わなければLisperになれるかなと。

善し悪しは別次元として。

しかしシェルスクリプトしか書かないような自分がLisp

に触って何かをするにはと考えると、あまり高いハード

ルだと迂回してしまいます。

それで気楽に考えたのが、シェルスクリプトを生成する

Lispプログラムを書けば良いじゃないかなと。

これがどういうことを意味していて、どういう結果にな

るのかは分かりませんが、日々接していくことが一番素

敵な気がするので、そうしてみようと。


(DEFUN ECHO (ARG &KEY NNL)		;NNL: No Newline
  (COND ((STRINGP ARG)
	 (CONCATENATE 'STRING "echo " 
		      (IF NNL "-n " "") 
		      ARG))
	(T (ERROR "ECHO: Arg must be string"))))

;; CL-USER> (echo "$FOO bar baz")
;; "echo $FOO bar baz"


とりあえずechoを生成するものを作ってみましたが、こ

れがなにを意味するのかは良く分からず。

さて、どういう風にして行けば良いのか。

2006-08-11

Lispマシンマニュアル第6版

| 11:05 | Lispマシンマニュアル第6版 - わだばLisperになる を含むブックマーク はてなブックマーク - Lispマシンマニュアル第6版 - わだばLisperになる

前回Lisp MachineのマニュアルをHTMLにしてみたりして

ましたが、Lispm-hackers mailing listにLisp Machine

マニュアル第6版をXMLに変換しますたYO!、というメー

ルが流れました。

マニュアルはこちら→Lisp Machine Manual Hypertext edition

おお素晴らしい。自分のやっつけな代物と違って非常に

ナイスなお仕事っぷり。

しかしレベルの差こそあれ世の中同じ時期に似たような

ことを志す人がいるもんだ。

世界は狭い('∀`*)

自分も一応、自分なりに完成はさせてみよう。

2006-08-07

LispマシンのマニュアルをHTML化してみる

| 11:29 | LispマシンのマニュアルをHTML化してみる - わだばLisperになる を含むブックマーク はてなブックマーク - LispマシンのマニュアルをHTML化してみる - わだばLisperになる

unlambda.comで配布しているLisp Machineのソースの中

(開発に使用されていたITSのアーカイブ)にはLisp

Machineのマニュアルのディレクトリがあったので、ふ

と思ってそれをHTMLに変換してみることにしました。

Perlとか使った方が良いと思ったけども、lexとyaccの

本読んでるのでlex(flex)でチャレンジ。やめといた方

が良かった感じ'`,、('∀`) '`,、

原版のソースには、ハイパーテキスト的なところが結構

あってなかなか興味深いです。

で、自分が変換してみたものですが、そういう所は活か

せておりませんで、大分融通の効かないものとなってお

ります。変なとこ沢山ありますし。

でも、なんか作ったし公開してみようかなと。

そのマニュアル

これからも適当に改善して行くつもりです(*'-')

ちなみにまともなマニュアルを求めている方はLisp Machine Manual, 4th editionLisp Machine Manual,4th editionをどうぞ(*'-')

2006-08-04

CLtL2購入の巻

| 12:13 | CLtL2購入の巻 - わだばLisperになる を含むブックマーク はてなブックマーク - CLtL2購入の巻 - わだばLisperになる

COMMON LISP: THE LANGUAGE(CLTL2)の日本語訳を買って

みました。ヤフオクで3500円位。

英語版は、ウェブでも公開されてますが、英語分かんな

いし紙に印刷されたの読みたいなとか思って買ってみま

したが、B4で、900ページのボリュームはなかなか参照

するのも大変そう。

Cltl2で興味深いのは、MacLispとか Lisp Machine Lisp

との互換性についての記載が沢山あるってところ。

まあ、今となってはあまり有用ではないでしょうが…。

Common Lispは、反論すべき良い理由もない限り、Lisp

Machine Lisp、MacLispInterlispの順に互換性を持た

せている。

っていう記載はなかなか興味深いです。なるほど。

前回のビデオでRG氏もCommon lisp策定の際に85%から

90%くらいの割合いでLisp Machine LispになったYO!。

みたいなことを言ってましたね。

ところで、Cltl2にもZetaLispとLisp Machine Lispと2

種類出てくるわけなのですが、これの違いが良く分から

ないので、調べてみました。

Wikipediaによれば、Lisp Machine用のLispは3つに分岐

していて、本家MITのLisp Machine Lisp、Symbolicsの

ZetaLisp、LMI 〜 TIのLisp Machine Lispってことです。

Lisp Machine Lispが2種あるってのがややこしい。

RG氏もビデオでは、Lisp Machine Lispと言っているの

は、LMIの人だったからってことなんでしょう。

それで、Cltl2ですが、ZetaLispの文献として、MITの

Lisp Machineのマニュアルを挙げてたりするので、

ZetaLispもLisp Machine Lispも特に区別はしてないん

じゃないかと思われます。