#:g1

gauche.nightでnlambda (3) 2次会篇 (1)

Posted 2008-03-09 10:33:00 GMT

イベントも終わりこの後どうするのかと動向を伺いつつ、とりあえず駅へ移動。
この間にbulbさんとxyzzy方面のことについてお話することができました、今後ともよろしくお願いします!
そんなこんなしているうちに新橋で2次会をするという流れになり移動開始。
黒田さんやsanoさん達は、新宿に集まるけど、どうかというお誘いがあり、うおー、黒田さんとお話してみたいと、非常に悩みましたが、先に新橋組と約束してしまったので、新橋の方へ行くことにしました。後で、theoriaさんにそのことを話したところ、ああ、じゃあ一緒に新宿すれば良かたねえ、ということに。
sanoさんの日記によれば、TLUGと合流されたようで、当初2次会はTLUGと合流するのはどうか、という案もあったので、確かに残念でした。
そんなこんなで、電車移動。移動中higeponさんと話す機会があり、自分が「話をしてみたい人リスト」に載っていた理由がいまいち分からなかったのできいてみたところ、Lispマシンことについて書いてるということが印象に残ったということでした。
確かにhigeponさんのSchemeシェル/MONA OSとLispマシンの方向性には非常に近いものがある、と自分も思っていたので納得!
Lispマシンのシェルの動作や、ファイルシステムについて何点か質問して頂きましたが、自分はつっこんだ内容については疎くて、お力になれず非常に申し訳ないです!
また、Lispマシンのファイルシステムの名前空間についてですが、この辺は、Common Lispにも受け継がれているので、この辺を参照して頂くとはっきりするかと思います。
名前空間が分かれているかどうかについては、非常に適当な説明をしてしまった気がしますが、もしかして分かれてはいないのかもしれません…。
ホスト、デバイス、パス等を指定できるのは確かで、様々なOSやネットワーク接続に対応できるような構造になっているのは確かなのですが…。
また、同じパス名は同一のオブジェクトになって、eqで判定できたり色々あるようです。
また、Schemeシェルでは、GUIでファイル操作をする予定とのことでしたが、そういえば、LispマシンにもGUIのインターフェースがあったな、と書いていて気付いたので、リンクを貼っておきます。
-[http://www.cliki.net/Lisp%20Machine%20Videos]
ここに置かれているビデオ Video 4、(ファイル名lispm3.mov)では、Lispマシンのシェル操作、Explorerのようなファイル操作インターフェースを解説しています。
また、 Video 3(ファイル名lispm2.mov)では、話に出て来た、グラフィック描画したオブジェクトをマウスで掴んで評価したり、という説明があります。
いづれにせよ、ここのビデオは、もれなくLispの開発環境製作者、Lispシェル製作者には参考になるんじゃないかと思うので、是非全部視聴されることをお勧めしたい!と個人的には思っています。

gauche.nightでnlambda (1) イベント前篇

Posted 2008-03-09 09:35:00 GMT

gauche.night観覧してきました!
イベント前にhayamiz氏主催のλデートという集会に流れゆくまま参加。
hayamizさん、higeponさん、gemmaさん、theoriaさん、lequeさん、hogelogさん、yharaさん、sanoさん等、はてな周辺に君臨する主の皆さんとお会いました。
皆さん緊張の為かそれ程つっこんだ話には進まず。
sanoさんはCommon Lispの方でXyzzyのWikiで知っていました。
CL周辺の方ということで、CLもGaucheみたいにコミュニティがどんどんが育って行くと良いですよねというような話に。
しかし、自分の基本的に人生に対して後ろ向きなところにガッカリされていたようです。
いやはや、CLコミュニティに貢献できないような不甲斐なさで申し訳ない(笑)
勿論、自分ができるところは、コミットさせて頂きたいのですが、今のところ自分ができることは、このブログでCLのことを書く位だと思っています。
この辺から徐々になにかをして行ければと思っています!
またsanoさんは、近所の方ということで、区内の図書館に絶版の「bit別冊 Common Lisp オブジェクトシステム -- CLOSとその周辺」があるんですよ、という話をしたところ、sanoさんも全く同じ本を区の図書館から借りてたとのことで、世界は狭いもんだと感心しました。
hayamizさん、higeponさん、gemmaさん、theoriaさん、hogelogさん、yharaさんとはあまり話せず。
lequeさんとは、lequeさんがはてなの日記を旧漢字旧仮名遣いで書いているので、自分も高校3年間、旧漢字旧仮名遣いでノートを取ってましたという、あんまりSchemeに関係ない話をしてました(笑)

今日はgauche.night

Posted 2008-03-08 01:54:00 GMT

自分は、黒いパーカーに右膝のところだけ破れたジーパンというみすぼらしい、175cm位のおっさん、という格好をしています。
良かったら声でも掛けてみて下さい!
声が掛けにくい場合、「東京テレポート駅は、どこですか?」
と訊いてもらえれば、
「すいません、地元の人間ではないもので…、地元の人間ではないもので、すいません」
と答えたら、私です。

QiでL-99 (P06 リストの中身が回文的かを調べる)

Posted 2008-03-08 01:33:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
これまた普通に。Qiの述語命名規則的には、Schemeのように最後に?を付けるようなので、そういう雰囲気で。
また、真偽値は、trueとfalseになっています。

(palindrome? [x a m a x])
\-> true
\

(define palindrome? X -> true where (= X (reverse X)))

明日はgauche.night

Posted 2008-03-07 07:54:00 GMT

明日はgauche.nightですが、参加されるCLerの皆さんは、gauche.night前後で会合などあったりするのでしょうか?
自分は、流れゆくままイベント前に猛者Schemerの方々の会合に畏れ多くも参加することになったのですが、CLer集会があるならば、途中参加かもしれませんが、是非参加したいです!
いずれにせよ、CADRグループでイベント参加の方々にご挨拶位はしたいなとは思っているんですが…。
どうやって探せば良いのかしら…。とりあえず、現場で叫ぶか(笑)

closでL-99 (P05 リストを逆転させる)

Posted 2008-03-07 05:56:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
Qiで解答を書いていて、これはclosの総称関数の書き方に近い気がするなあ、と思ったのでテスト投稿。
といっても、ifの代わりに型でディスパッチしてるだけですが…。
効率については良く分かりませんが、デバッグについては、面倒になってる気がします(笑)

(rev '(1 2 3 4 5 6 7 8))
;-> (8 7 6 5 4 3 2 1)

(defgeneric rev (lst) (:method ((lst null)) () ) (:method ((lst cons)) (append (rev (cdr lst)) (list (car lst)))))

;; もしくは (defmethod rev ((lst null)) () )

(defmethod rev ((lst cons)) (append (rev (cdr lst)) (list (car lst))))

QiでL-99 (P05 リストを逆転させる)

Posted 2008-03-07 05:39:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
これまた定番な感じで。
Qiには標準で、reverseがあります。

(rev [1 2 3 4])
\-> [4 3 2 1]
\

(define rev [ ] -> [ ] [H | T] -> (append (rev T) [H]))


ArcでL-99 (P28b 子リストの長さの頻度順で整列)

Posted 2008-03-07 03:35:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
P28も前半と後半に分かれているのを忘れていました!
リスト篇はP28までなのですが、一つの問題が前後半に分かれているものが2つあるので問題の総数としては、30問あるということになります。
今回は、子リストの長さの頻度順で整列させるというもの。以前に定義した、packと、lsortを使用してみました。
何回もソートしてるんですが、もっとすっきり書く方法があるんじゃないかと思います。

(lfsort '((a b c) (d e) (f g h) (d e) (i j k l) (m n) (o)))
;-> ((o) (i j k l) (a b c) (f g h) (d e) (d e) (m n))

(def lfsort (lst) (let freq len-freq.lst (sort (fn (x y) (< (pos len.x freq) (pos len.y freq))) lst)))

(def len-freq (lst) (map car (lsort:pack (map len lsort.lst))))

昔のLISPの関数名に記号が使われないのはなぜなのか

Posted 2008-03-06 03:17:00 GMT

昔のLISPの関数名(昔といっても、Lisp 1.5の話なのでかなり古いです)は(- 3 2)ではなく、(difference 3 2)と書きました。このように、やたら長いスペルの関数名はあるものの直感的に思い付くような-や+記号というのは、まったく見掛けません。
以前から何でなんだろうなあ、と思っていたのですが、昨日のifや、condのエントリで、M式を書いていて、もしかしたら!という理由を思い付きました。
それは、M式で書くと、

difference[3;2]
と書くのは、まあ普通に見て状況を把握できますが、
-[3;2]
だと、何が何だか良く分からない、ということなんじゃないかなと。
M式以外にも、Eval quoteという表記方法があるんですが、これはトップレベルは、M式のように書くというもの。Lisp 1.5や、INTERLISPで可能な表記形態だったのですが、これも同様に、
difference(3 2)
は良くても
-(3 2)
は何となく変。INTERLISPにも記号で書いた方が完結な長い関数名がずっと残っていましたが、この辺をずっと継承していたからなのではないか?!ということなのですね。
…しかし実際のところ、真相は知る由もございません。
以上、重箱の隅過ぎてトリビアにさえならないネタでした。

ちなみに改めて確認したところ、INTERLISPでは中間記法が使え、その場合は記号が使えました。
ということで、トップレベルでは、
3 - 2
と書くと、1となります。
お馴染のfibはINTERLISPだと
defineq((fib (n)
	     (if (lessp n 2)
	       then
		 n
	       else 
		 (fib n - 1) + (fib n - 2))))

fib(15) ;-> 610

と書けます。

ArcでL-99 (P28a リストを子リストの長さ順で整列)

Posted 2008-03-06 02:55:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
今回は、リストを子リストの要素数で昇順に整列させるというお題です。
Arcには備え付けでsortがあり、それを使った方が効率が良いとは思うのですが、sortを自作させるのが主旨なんだろうなということで再帰のqsortで書いてみました。
なお、Arcのsortは引数の順番がCommon Lispとは逆のようです。

(lsort '((a b c) (d e) (f g h) (d e) (i j k l) (m n) (o)))
;=> ((o) (d e) (d e) (m n) (a b c) (f g h) (i j k l))

(def lsort (lst) (if no.lst () (let piv (len car.lst) (+ (lsort:rem [<= piv len._] cdr.lst) (list car.lst) (lsort:rem [> piv len._] cdr.lst)))))

;; sort使用 (def lsort (lst) (sort (fn (x y) (< (len x) (len y))) lst))


Older entries (365 remaining)