cut-sea:log2
過去ログ(2005/01/01-2005/12/31)
NetBSD 3.0
あ、出たらしい。 さて、どのタイミングで入れるかが問題だ。cut-sea:2005/12/25 03:01:08 PST
Scheme入門GET
九州の方で10年程寝かされたものを入手。cut-sea:2005/12/23 05:11:55 PST
Lispセミナーの竹内先生の資料
ようやく公開された。 「タライ回し関数の正体」
メモ取りそこなっててずっと気になってた。
t(x y z) = if x <= y then y if y <= z then z else x
ってことで、どんな引数だろうがxかyかzしか返ってこない。 確かにそうで、減算があるのは第一引数だけで、返りは常に第二引数なんだもんね。
これも併せてcut-seaの必見はスライド8スライド11スライド13。
car/cdrだけでなく、csr/cpr/cir/cwrなんてのがあった。 竹内先生がcar/cdrだけじゃなく4つのセルをもつLispを作ったってMcCarthyに言ったら 懐かしそうに、「初期Lispは5つのセルから構成してたんだ」って語ってくれたって話。cut-sea:2005/12/08 17:16:20 PST
コンビネータ
目から鱗
- こういう時にどう書けば?いつもlambda並べて書くんですけど。cut-sea
- lambdaを使うのはダセーんだnobsun
- えー?でもどうやって?cut-sea
- コンビネータを作ればいいんだよ。nobsun
- YとかSとかよく分かんないcut-sea
- 難しくないよ。例えばこうこうこうしたかったらこうすればいいだけ。nobsun
- (絶句)cut-sea
そうだったのか。コンビネータってコ難しい理屈のページばっかだから、 敬遠してたけど、なんのことねーじゃん。 すんげー悟りの瞬間だったよ。 いや、別に難しくないし、確かになんで今まで気づかなかったというか 意識しなかったんだか分からんが、これがコンビネータだったわけね。 頭の中でFFのレベルアップ音楽が流れた。cut-sea
- そう。今日改めて思った。 「あー、そういうことか。それなら知ってた。」ではなく、 意識して使えてるかどうかこそが重要なのよ。 その上で意識せずに使えている状態に至るならなおすばらしい。 いずれにせよ名前に概念が束縛される瞬間てちょっとしたレベルアップの感覚。cut-sea:2005/12/08 16:59:16 PST
SDOM
いつのまにこんなものが… cut-sea:2005/12/04 15:29:47 PST
Franzのセミナー
2日間みっちり行ってきました。 講演後、竹内先生にお願いして「はじめての人のためのLISP」2冊にサインを。 私をS式の世界にいざなった本です。 これで思い残すこと無し。cut-sea:2005/11/18 18:30:51 PST
Gauche-0.8.6
アップした。
pthreadsを使いたいのでびさんのパッチを落して来て
CVS HEADにパッチあてから格闘することしばし。
makeじゃダメでgmakeを使わにゃならんというのを知らず。。。orz
でもなんとか
cut-sea@nkisi> gosh -V Gauche scheme interpreter, version 0.8.6 [euc-jp,pthreads] cut-sea@nkisi> gauche-config --reconfigure ./configure '--with-slib=/usr/pkg/share/slib' '--with-local=/usr/pkg' '--with-prefix=/usr/local' '--enable-ipv6' '--with-rpath=/usr/local/lib:/usr/pkg/lib:/usr/lib' '--with-iconv=/usr/pkg' '--enable-multibyte=euc-jp' '--enable-threads=pthreads'
さらにshibataくんの書いたマルチスレッド版echoサーバも動いたよ〜。
びさんサンクス!!!cut-sea:2005/11/05 05:34:41 PST
- び(2005/11/05 16:22:37 PST): ども。gmakeじゃなきゃだめってことはないと思います。わたしはBSD makeでビルドしてますし(3.0BETA/2.1.0_STABLE)。
- あれ?じゃなんでだろ。でも、makeって色々引っかかることが多いっすよ?
以前Kahua周りでもmakeダメってことがあって、 gmakeとmakeばべつもんだー!!って言われたことがあったんすよね。
それで今回もしかしたらと思って試したらうまく逝ったという。。。
個人的にはgmakeのWarningの多さがあまり好きではなかったので、ずっとmakeだったんですが。 そういや2.1が出たんだ。どーしよっかなぁ。近々に3.0が出るんなら待つんだけど。 cut-sea:2005/11/05 18:27:11 PST - び(2005/11/05 20:52:16 PST): うん。GNU makeとBSD makeって別物。でも、GaucheのMakefileはそんなに複雑なことやってないし、BSD makeでひっかかった経験はないですね。具体的にはどんな引っかかり方しますか? なお、3.0は新しいタイムラインが示されていますが、開発チームは11月中には出したいと思っているようです。今までの実績からすると、年内って感じじゃないでしょうか。
- 確かに、Gaucheって私も今まで気づかなかった通り、BSD makeで普通にmakeできてました。
patch当てさせてもらって、pthreadsでmakeした場合にずらずらと。
具体的に何が出てたかは失念。。。すみませんorzcut-sea:2005/11/06 00:13:24 PST
- あうううう。再現確認取ろうと思って再度makeしてみたら今度は通った。 うーん。一体何だったっけ?libgaucheのmismatchは違うしなぁ。cut-sea:2005/11/06 04:49:49 PST
OnLispのCLOS入門
意外に基本的なところからやってくれてる?
分かりやすいのかもしれない。cut-sea:2005/11/01 07:38:35 PST
The Reasoned Schemer
来た。Olegさんも著者の一人らしい。
format
そうか。改めてformatって文字列のformatなんだと思う。
gosh> (format "~a : ~a -> ~a~%" 1 2 3) "1 : 2 -> 3\n" gosh> (format #t "~a : ~a -> ~a~%" 1 2 3) 1 : 2 -> 3 #<undef> gosh> (begin (format "~a : ~a -> ~a~%" 1 2 3) 123) 123 gosh> (begin (format #t "~a : ~a -> ~a~%" 1 2 3) 123) 1 : 2 -> 3 123
まさに文字列になっている。#t/#fでもって副作用目的になる感じか。cut-sea:2005/10/22 19:57:54 PDT
AMOP Chapter4読了
ふう。かなりてこずった上に正直言って分かりませんでした。
なんつーか読後の感想ってのが出て来ないくらいさっぱり。
でも一応これで2部構成の1部が終った。 で、第2部はどっちかってーとマニュアルっぽい感じみたいなので読まない。 読むなら再度Chapter1からだけど、まぁ他を巡回して知識蓄えてから再チャレンジ。(予定)
で、再認識した。
S式が多い内は大丈夫。比率が下がると理解がついて行かない。
ってことは原書を読んでいるんだけど、S式を読んでたわけだ。
確かに自覚はある。cut-sea:2005/10/13 07:06:44 PDT
いつものことだが
どうも設計力が無いというか構成力が無いというか見通しの甘さが悔しいくらい。
簡単な様でいて、いじっている内に劇的に変えたくなってくる。 どうもその時に、ちょっとした変更で済むように構成できてないことが多すぎる。cut-sea:2005/09/28 21:44:04 PDT
AMOP Chapter3読了
どうも想像してた程、「あっすっげー新鮮〜」て感触はなかった。
もともとChapter1,2でCLOSの小さな実装を解説してて、
どんな風にクラスやインスタンスが初期化されるか、どんな風にメソッドが適用されるのか
みたいなのを済ませているので、そういったいくつかのgeneric functionを
class specificなもので置き換えるってのは、単にちょっとしたHackっぽいものに見える。
Chapter3では、
- スロットに属性という記憶領域を持てるようにする
- 継承時のcpl計算を他言語ちっくにする
- スロットのアクセスログを実装する
- スロット定義に:allocationを導入する(元の小さな実装にはなかった)
などなど、具体的な事例が出てて、MOPを使う(この表現怪しいけど)って
「そんなに特別なことじゃない」んだねって感じ。
でも、やっぱり目的に対してMOPを必要とするかどうかの判断は未だ掴めない。orz
つまり、(本の表現を借用すると)どこまでがon stageでどこからがback stageなのかが
自分の中できちんと明確になってない。
だって、back stageまで全部書かれてるんだもん。(^^;;
あ、そうそう。他の言語のcpl計算をエミュするところで思った。
CLOSの継承の順序が一番意味分からん。orzcut-sea:2005/09/15 18:11:00 PDT
ヒモツキじゃない環境ってすばら〜すぃ
CG-WLCB54GLってデバイスを入手。(Coergaのカード)
ralなpatch(ral-current-netbsd-2.0.tar.gz)を当てないと
NetBSD2.0.2ではダメなんだとさ。
しかもそれ若干抜けがあるらしくカーネルの構築でへぼる。
http://damien.bergamini.free.fr/ral/forum/read.php?f=1&i=49&t=44
にしたがって、以下な修正をちまちま。
/* BUG: PCI_VENDOR_RALINK seems to be undefined. */ #ifndef PCI_VENDOR_RALINK #define PCI_VENDOR_RALINK 0x1814 /* Reasonable default. */ #endif
でもってnetbsd.ralなカーネルを作ってbootしてみる。
ral0 at cardbus0 dev 0 function 0 ral0: 802.11 address 00:0a:79:7c:08:4c ral0: MAC/BBP RT2560 (rev 0x04), RF RT2525 ral0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ral0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
ふう。早く3.0系出てくれorz.
# wiconfig ral0 ;; 確認 # ifconfig ral0 ;; 確認 # ifconfig ral0 ssid "TheSSID" nwkey "TheWEPKEY" up # wiconfig ral0 -oD ;; 確認 # dhclient
うーむ。 wiconfigって-Dのためにしか使わないのですな。 色々回り道したけど、ようやく無線な環境に堕ちついた。cut-sea:2005/09/08 19:27:32 PDT
- び (2005/09/08 19:55:22 PDT) サーバでしか使ってませんが、3.0BETAけっこう安定してて快適です。Boot CDこさえて仕事でも時々使ってます。
- Gauche界って意外とNetBSDを使ってる方が多いので心強い限りです。cut-sea:2005/09/08 20:28:37 PDT
- び (2005/09/09 01:09:19 PDT) SchemeとNetBSDってどことなく似てるような気がします。正しくシンプルであることを目指すが時としてちょっと潔癖で頑ななところとか(笑)。
pretty print
欲しいと思ってた。 マクロの展開形チェックだけじゃなく、最近はkahua?で書いたコードを (rev-nodes (exec () node))でSXMLにした時の形式も見る機会が増えて来たから。
とりあえずテキトーにpp.scmとかってググったら、存在してるし。一発引き当て(^^;
http://ftp.cs.indiana.edu/pub/scheme-repository/code/string/pp.scm
しかも全然手を加えなくても
gosh> (load "pp.scm") #t gosh>
しばらく使ってみて自分の美意識へとカスタマイズするくらいならなんとか。 こうしてますます他力本願に磨きがかかっていくと。
しかし、このFeeleyってどっかで聞いた名前だな〜と思ったら。
うわ。記念すべき 0 getterでしたか。
- http://www.iro.umontreal.ca/~feeley/
- http://library.readscheme.org/servlets/search.ss?pattern=Feeley+Marc
いや、よくわかんないけどスゴそうですね。 実際srfi-*って結構手を加えなくてもGaucheで動く。 標準を創っているってこういうことかと妙に感心したり。 cut-sea:2005/09/07 03:13:54 PDT
- Shiro(2005/09/09 02:16:06 PDT): 誘導→Gauche:PrettyPrint
Skype
周りがSkypeを使っているので自分の端末でも。
NetBSDの場合にはLinuxエミュを使う。
とりあえず、make;make installしてskype実行して叱られたら対策。
って言っても、LD_LIBRARY_PATHに/emul/linux/libとか/emul/linux/usr/libとか
/emul/linux/usr/X11R6/libとかをツッこんでやるくらい。
基本的にはホゲシンボルがないって言ってくるのでLinuxエミュなやつを参照させるようにした。
libm.so.0だけは無かったのでlnでlibm.so.6を指す。ってことで無事動作。
で、思った。もしかしてGaucheのmakeも全部そっち向かせてやった方が楽なのかしらん。cut-sea:2005/09/01 17:50:34 PDT
LLDNあとがき
だいぶトラックバックも落ち着いたようなので。
まぁ私のプレゼンに関しては賛否両方あるわけだけど、とりあえずほっとした。
まず悪印象の方。
私の目に入って来た範囲では「おもしろくない」といった意見になるんだけど、
GaucheやKahuaがおもしろくないと言われているわけではないようで、
私や私のプレゼンがツマンネーってけなされているだけだからノープロブレム。
ただ、「GaucheはSchemeの一実装だ」という紹介は、
まだあーいう集まりでは必要な模様。反省(でも、ちと悔しい)。
一方中立ないし好印象について。
ごくごく少数のおもしろかったと書いてくれている方と元から
GaucheやScheme寄りと思われる方々のおあいそは別として、
基本的にはGaucheってこの一年で色々変わって来ているのね、あるいは進化しているのね
的印象を与えられているようなので、まぁ方向としては間違ってないし安心した。
だが、そうはいってもプレゼンてのは面白い…というよりは飽きさせない、そして引き付ける
工夫というのが必要なのは間違い無い。
聞いてもらえなきゃプレゼン自体が意味をなさないもんね。
だから悪印象もそれはそれで意味があるわけで、全く言及されないのが一番マズイ。
その意味では言及の一切無いのが結構あったのがちょっと残念。
ともあれ好悪いずれの意見も今後の私の糧とさせていただきましょう。
で、純粋に観客として楽しんだ範囲で感想を。
最も印象に残ったのがNightの方で沢田さんが発表した
webにぺたぺたはっつける付箋(Webアノテーションツールalog)であった。
うまく言えないけど見た瞬間に大きな可能性を感じた。
例えば本や地図ってのは購入する時点では皆同じものを見るわけだけど、
自分だけのためにアンダーラインやマーキング、誤字訂正や英文の下に訳文つけたり、
ポンチ絵を追加したり、付箋をペタペタってのは実際にやるわけだし。
多分見せ方と、あとはUIをうまく導けば(これが一番難物だけど)ビジネスになりそうと思ったら
案の定観客の一人からその声が。
で、しかもあの先にもっと広がりがある様な気がしたからすごく印象に残っている。
あと、昼間に小飼さんの本を購入してサインを書いてもらっている時に、
「Perlにも継続が入るから!」と話を振られたので、自分なりに前から思ってた事があったから、
「でも、Schemeと違って、あれほど複雑な構文を持つ言語でユーザが正確に制御できますかぁ?」
ってつい口をついて出たんだけど、
あとで小飼さんがblog
に書いておられるのを見て、うーんって感じ。
CPSって今もPerlで書こうと思ったら書けるんだろう(知らないけど)から、
CPSと継続を区別はしているハズだとは思うんだけど、いっしょくたな気がしないでもない。
この文章からでは私にはイマイチ継続が使えるようになるって感じはしない。
ただ、一般のプログラマにあらわに使わせるって感じではないらしいのは分かったけど。
ま、私はSchemeを使ってるんだし、Perlについてはどーでもいっか〜、
…なーんて言いつつ今回くじ引きも含めて入手した本3冊全部Perl本だったのはナイショ。:-)
さて、LLDNから帰った翌日に夢を見ました。
なぜか去年のLLの会場(恐らくは客席からの視点で見ているからだろうけど)で
Shiroさんがプレゼンをしているのだが、
背中にらむ太くんをしょってて少し前かがみになって説明している。
らむ太君は首が座ってないためか真上を向いてしまっててShiroさんが動くたびに
ガクンガクンなってる。
でもって注目すべきことに右手に風車を持っている。
うーむ。この赤ちゃんの右手に風車ってのは
かなり強固な私の赤ちゃんに対するイメージの様で、昔からラクガキしてても、
なぜか付け足してしまうので目覚めてからしばらく笑いが止まらなかった。
そんなん今時見ない見ない。(^^;;cut-sea:2005/08/31 00:45:06 PDT
- あ、そうそう。ちょっと追記。
Perl6の後方互換性についてLLDNでも質問があったりweb上でも議論があるみたいだけど、 R6RSのStatus ReportではR5RSとの互換性が失われそうな項目があることについて、 こんな風に説明されていた、のを思い出した。Our first objective is to improve the Scheme language. Backward compatibility, while important, is a secondary objective.
この表明はちょっと気に入っている。cut-sea:2005/08/31 02:00:29 PDT
- Shiro(2005/08/31 05:08:40 PDT): RnRSは過去にも非互換な変更を行ったことがあります。 ()を偽値でなくしたりとか。それから、構文は第一級の継続を入れる際の障壁とは あまり関係ないと思いますよ。むしろスタックモデルに密着したセマンティクスの 方が継続を入れた時の扱いが面倒かと (C++でのauto変数とか。forth系も継続と 相性悪そうだな。あまり効率良い実装ができなさそう)。 んで、どんな言語でも内部でCPS変換かけちゃえば継続は取り出せますが、 ParrotがCPSで動くんならやりやすいでしょう。
- 扱いとおっしゃっているのは実装の話と思うのですが、
逆に実装の話は私には分かりかねるので…
で、使う立場からすると難易度がグッと上がると思うのですが、どうでしょう? call/ccにより継続を捕らえた時に、それ以前に評価済みのものと、 これから評価するものとで扱いが変わる(ように見える)と思うのです。 私の理解では継続を呼び出すことは、 単なるプログラムテキスト上のgotoジャンプとは違うと思ってます。 どの順序で評価されているか、継続(する計算)にその評価が含まれるのがどうかってのが 重要になる場合もあると。
Schemeはかなり簡単なので、まだよみやすいのではと思いますが。 様々な、そして複雑な構文を持つ程、それを把握するのは大変になると思ったわけです。 例えば普通にcall/ccを使う分には私はだいたい抵抗を感じなくなってきてますが、 マクロと組み合わせて使いこなせる自信はまだありません。 それは恐らく根本は同じなのではないかと思うんですよね。cut-sea:2005/08/31 06:18:26 PDT
AMOP Chapter2読了
ふむ。まだまだ読める。イキオイがついてきた。 ここ数日はなかなか心の余裕がなくてテレテレやってたけど、集中すればこんなもんだ。えっへん。 次はChapter3のExtending the Languageだよ。いよいよか?cut-sea:2005/08/28 18:43:40 PDT
LLDN
LLDNに参加してきた。
まぁ、Gaucheのコミュニティにはハワイ在住のShiroさんは別にしても、
他に大勢適任者はいるはずなんだが、そういう方々をさしおいてLanguage Updateの
プレゼンをやらせてもらった。
やってみなきゃ分からんこともあるものだなぁってことで、
こういう機会を与えて下さったえんどうさんに感謝。
他言語の方々はやっぱりプレゼンしなれているのかウマーって感じ。
でもそれはそれとして昼の柴田さん、夜のとおる。さんのプレゼンはおぉって思えるもので、
Gauche&Kahuaの存在感がアピールできた2005年LLDNだったんじゃなかろうか。cut-sea:2005/08/28 03:36:36 PDT
WiLiKi->tekiliだと?
ここってschemeの総本山でもある schemers.orgからimplementationの情報を見に行こうとしたらWiKiだったんだけど、 Powerd by Gauche 0.7.4.2でWiKiもWiLiKiの改造版tekiliというものらしい。 スバラスイcut-sea:2005/08/24 01:52:19 PDT
- Shiro: そこのSchemeコードハイライト、面白いですよ。例えば http://community.schemewiki.org/?memoization とかのページで、 コードの上にマウスカーソルを持ってゆくと…
- かっちょよすぎ。もちろんGaucheも。なんせ総本山御用達ですぜ。cut-sea:2005/08/24 03:18:36 PDT
Scheme:call/ccパズル
今ふと思い付いて試したら正しい動作をするようになっておる。
コレどのバージョンからだろ。
やっぱ0.8.4かな。
cut-sea:2005/08/21 08:34:02 PDT
- Shiro(2005/08/22 04:57:52 PDT): そうです。以前の実装が何故だめで、今の実装が 何故OKかという分析は継続についてけっこう興味深い話になると思うんですが、 書いてる時間がありません。(短く言うと「構築中のローカル変数フレームは 構築中の引数フレームと等価であり、それは継続間で共有されない」ってこと なんですが)。
- 話が噛み合っているか不安ですが、引数を評価する途中で継続を捕捉すると面白いですよね。
まさにその瞬間の継続をとらえるから、その処理系における評価順についても
知見が無いと完全に制御できないし、あーまさに今の瞬間をとらえてるって感じます。
(define cont #f) (list 1 2 (call/cc (lambda (k) (set! list max) (set! cont k) 3)))
で(1 2 3)が返って来るか3が返って来るか処理系依存ですし、 さらにlistが#<closure max>になっているにもかかわらず、 この後で(k 10)ってやっても前者の処理系では(1 2 3)が返って来る。:-)
単純にCPS変換で考えるときにはkは(lambda (x) (list 1 2 x))な継続って説明になるけど、 少しだけ厳密に考えると、(lambda (x) (#<list> 1 2 x))な処理系もあれば (lambda (x) (let ((list list)) (list 1 2 x)))な処理系もあるってことで。
結局継続を捕捉した瞬間の前(事前事象)なのか後(事後事象)なのかが、 再度その継続を呼び出したときの振舞を理解する上でシビアに効いて来る局面があるんですよね。
この振舞を理解したときにCPS変換とcall/ccで切り出される継続って UNIXにおけるプログラムとプロセスの関係にちょっと似てるかもって思いました。cut-sea:2005/08/22 18:48:00 PDT
AMOP
序文から読むからダメだったのね。
本文から読み出したら結構面白い。最初のセクション読み終わった。 文章で少々分からないところがあっても直後に(簡略化した)実装コードがあるから十分読める。 この手法っていかにもLisp的。SICPもそうだしね。
実に説明もうまいね。最初に何をやるかのポイントを書いてて、
時には具体的な例も明示してくれてる。
(もしcolor-rectangleに適用したら展開形はこんな感じになるよみたいな。)
さらに全体の中でどのステップまで進んでて、
あと何がインプリメントできればいいか、とか示してくれるので、
暗闇を進んでる感じじゃなくて、地図を見ながら突き進んでいける感じ。
やはり名著とされるだけあるか。ってかこの本しかないんだっけか。(^^;;;
もともと「必要に迫られてる?俺?」みたいな気がしてきて、 積んでたのを読み始めたんだけど、先が楽しみ。cut-sea:2005/08/18 20:09:29 PDT
入出力
どうも入出力っていっぱいあってしかも使い方がイマイチ理解できてない。
文字列から入力ポートをつくったり出力先を文字列にしたり、 仮想ポートなんてのもあってかなりイロイロできるようだ。
でもマニュアルには基本的なものは解説があるものの それ以外のものはそれを使った実装が示されているだけなので 使い方がすぐに分かるって感じじゃないのでなかなかすぐにコレってのが分かんない。
メモ的にでも使い方のページがほしいので作ってみる
こっちね -> Gauche:入出力ポートの使い方
カレンダー
カレンダーとかそういう時間軸の情報を扱うのって結構真面目にやると面倒だ。 もっと手軽に使える高水準のライブラリってあってもいいように思う。 というわけで雛型をさらしてみよう。
こっちへ追加ね -> Gauche:カレンダー計算
kahua
kahuaではタグを書くのに2種類の方法がドキュメントに記載されてて、 単純関数タグか高階関数タグかを使うことになっている。 もうひとつ、単純関数タグと一緒に使えて、最終的にはこれになるっていう形式もある。 自分としてはわかりやすさから、ついつい`(a/cont (@@ ... な感じの シンボル形式を使ってた。
これはHTMLに式を埋め込む感覚で難しさは一切ない。 が、どーも少し前からリファクタリングをしてて限界を感じ始めている。 (というかリファクタリングするまで感じなかった) 一方で高階版は正直難しいのだが、最終的には全体構造がきれいにまとまる気がする。 とにかくコードのいじくり甲斐という点で可能性を感じるわけよ。
やっぱり高階関数タグを駆使できるようになっておかないとと思って挙動を確認してる。
実装的にはStateモナドが使われてて、最初は真面目に読んでたんだが、 こいつを今追うのはほどほどでヤメにした。 自分の頭の悪さに泣けそうになるから。
使う分には掴めてきた感じなので無理してでもごっそり記述スタイルを変えてみよう。cut-sea:2005/06/27 18:30:06 PDT
ようやくバッチリ。 多分もう迷うことはないだろう。 高階タグについては(Stateモナドによる)実装の詳細は理解できてないが、 使う分にはもう万全。も少し色々試してみよう。cut-sea:2005/06/28 09:19:12 PDT
plugin for kahua
kahua-webがエラーを吐いて一切アクセス不可。
あれれ?どうしたんだろうとuninstallやらinstallやら繰り返す。
なんか他に設定あったっけ?とかしばし思いをめぐらす。
結局自分で突っ込んでみたpluginが悪いようだ。
入れるとダメになるみたい。
実験コードで触ってる分には使えてたんでまるで気付かなかった。
気分を変えてNotePCの環境構築に取り組む。
- なんとなく現象は特定できたくさいが、 こっからさらに深そう...cut-sea:2005/06/20 07:18:56 PDT
- SICP読書会で話をしたらあっさり休日中に直してもらえた。 近いうちplugin.scmをざっと見るなりして中身を把握しておきたいものだ。cut-sea:2005/06/27 18:30:06 PDT
NotePC(続)
ちゃくちゃくと環境改善(のつもり)。
- USBポートにHHKを突き刺し。
- USBポートにレーザーのホイールマウスを突き刺し。
- PCカードスロットに無線LANカードを突き刺し。(でもなんかダメくさ)
マウスキーボードは共に突き刺したら問題なく使える。 ホイールマウスはxorg.confに設定。
Option "ZAxisMapping" "4 5" Option "Buttons" "5"
これでXの再起動でOK。 ホイールマウスに慣れるともう元には戻れない体になる。
無線LANはっていうと、近々に必要になるのでとりあえず購入。 キーボードやらマウスやら色々買物してたからか すでに正常な判断能力を喪失してた。(判断はおかしいが行動は正しい)
とりあえず突き刺したら、
Atheros Communications, Inc., AR5001-0000-0000, Wireless LAN Reference Card, 00 (manufacturer 0x0, product 0x0) Atheros Communications, Inc. AR5212 Wireless LAN (ethernet network, revision 0x01) at cardbus0 dev 0 function 0 not configured
って感じだったんで、次の行をenableにしてカーネルの再構築。
ath* at cardbus? dev ? function ? # Atheros 5210/5211/5212 802.11
さてさて。
ath0 at cardbus0 dev 0 function 0ath0: waking up from power state D-973062144 ath0: unable to attach hardware; HAL status 13
こんな感じ。sys/dev/ic/ath.cの該当箇所見るとどうもjump先がダメそうな雰囲気。 googleで引っかけたら。。。
This means that the card isn"t supported
もう遅いんで(早いんで?)フテ寝。cut-sea:2005/06/18 11:46:25 PDT
ugen0 at uhub3 port 1 ugen0: Buffalo WLI-U2-KG54, rev 2.00/0.01, addr 2
で、軟弱に逃げた。cut-sea:2005/06/19 04:11:37 PDT
top level以外でのdefine
あー、これまで気にせず結構使ってたんだなぁ。
gosh> (begin (define x 1) (define y 2) (expt x y)) 1 gosh> (if #t (begin (define x 2) (define y 10) (expt x y))) 1024 gosh> (receive (p q) (values #f 10) (if (or p q) (begin (define x 2) (define y 10) (expt x y)))) *** ERROR: Compile Error: syntax-error: the form can appear only in the toplevel: (define x 2) "(stdin)":95:(receive (p q) (values #f 10) (if (o ... Stack Trace: _______________________________________
今後はletを使うことになるわけか。cut-sea:2005/06/15 06:24:42 PDT
- skimu R5RS の 5.2.2 を見てみてください。
NotePC
先月初めてSICP読書会に参加したが、NotePCを保有していなかった。 これでは本当につまらない。死ぬ程つまらない。 で、少し前から目を付けてたNotePCを購入。 10万程度でそれなりのスペックで メモリだけは512Mにしてもらった。
DOSPARAの製品は初めてだが、これは結構イケルんじゃないか?と思ったんだよね。 現物を店頭で見たときもデザインが変に華美じゃなくて気にいったし。
ところがだ。
あー、長いこと新マシンにOSインストールしてなかったから、
すっかり不注意になってたよ。
グラフィックスカードなどのH/Wの構成の詳細をちゃんと把握せずに買ってしまってた。
チップセット内蔵のVIAらしいんだが。型番調べたものの謎が残った。
苦労したけど、とりあえず今日ようやくXが、解像度も含めてうまく動いてくれた。 NetBSD+X.orgな環境です。
まずネットワークに繋いだら、
pkgsrcの最新をsup -s -vしてきて、X.orgをインストール。
Xorg -confugureからxorg.confを作っておいて、
スクリーンの解像度だけ合わせ込んでやったらキレイに表示してくれた。
一応最初に試してみたFedora Core3がすんなり動いてたので、 何とかなるだろうとタカをくくってたけど、いや本当に苦労しました。 まとめると、
- Fedora Core3はすんなりGNOME環境まで構築された。
- Vine Linux3.1はインストーラからしてダメ。真っ暗になっちゃう。
- FreeBSD5.4もX周りで噸座。
- Debian GNU/LinuxもX周りで噸座。
多分Vine以外はどれも頑張れば動かせるんだろうけど、 結局慣れたOS(NetBSD)の方がやりやすかった。 (Vineについては私の場合には見通しが立たなかっただけで 動かせないという情報ではないです。念のため)
インストールそのものに関してはFedora Core3が一番すんなり行けたけど、 OSの起動の際に固まるケースが頻発し(っちゅーか素直に起動する方が稀だっ) たんで嫌になった。 初めて知ったけどDebianって結構インストーラがストイックですな。
さて、これでようやく、GaucheやらKahuaやらの 開発環境構築に取り掛かれるよ。cut-sea:2005/06/11 01:51:21 PDT
- ねるWiki:ねる: (2005/06/15 13:33:14 PDT) お役に立つかどうかわかりませんが、NetBSDののらpkgsです。send-prのしかたはまだわかってないのですが(^^;; wipかwip-jpには入れてもらいたいなぁと思ってます。
- ついにpkgsrcにもgauche-*なパッケージが登場?cut-sea:2005/06/15 17:29:39 PDT
kahua
なるほど。 define-entryやらinitialize-main-procで定義する エントリポイントになる関数は最終的には
;; さらにnode-set不要論 ;; 最終的に外の仕組みが欲しいのはこれだけ ;; (define-entry (list) '((html (head (title "Hello")) (body (h1 "htmlでこんちわ世界") (h2 "ぼでー")))))
これだけで良いわけか。
特にnode-set:を書く必要もない。
dbaccess(6y3:tj42)> ((h1/ "hoge") ((h2/ "fuga") (h3/ "moo"))) ((h1 "hoge") (h2 "fuga") . #<closure (>>= >>=)>) dbaccess(6y3:tj42)> ((h1/ "hoge") (h2/ "fuga")) ((h1 "hoge") . #<closure (>>= >>=)>) dbaccess(6y3:tj42)> ((h1/ "hoge") '()) ((h1 "hoge")) dbaccess(6y3:tj42)> (html/ "hoge") #<closure (>>= >>=)> dbaccess(6y3:tj42)> (html/ (head/ (title/ "hoge")) (body/ (h1/ "fuga"))) #<closure (>>= >>=)> dbaccess(6y3:tj42)> ((html/ (head/ (title/ "hoge")) (body/ (h1/ "fuga"))) ()) ((html (body (h1 "fuga")) (head (title "hoge"))))
ふーむ。cut-sea:2005/06/05 01:48:50 PDT
ちなみに、(tag/ ...)によって生成されるものは基本は(cut cons 1 <>)だ。
gosh> (cut cons 1 <>) #<closure #f> gosh> ((cut cons 1 <>) (cut cons 2 <>)) (1 . #<closure #f>) gosh> ((cut cons 1 <>) ((cut cons 2 <>) (cut cons 3 <>))) (1 2 . #<closure #f>)
なんだが、正しい使い方は
(tag/ "text" (tag2/ ...) ...)
という感じ。 なんせtag/はHTMLタグに対応はするけど関数なんだ。 リストの先頭に鎮座してなくちゃだわな。
だから、((tag1/ ..) (tag2/ ..) ...)みたいに先頭にtag/が来れないケースでは (node-set (list (tag1/ ..) (tag2/ ..) ..))とすることで、 (dummy/ ...)に相当する何かにしてくれるんだね。 これを(概念として対応するかどうかは別においておいて)、 高階タグ関数における整形式と呼ぶとしようか。 つまりnode-setは関数ノードのリスト形式を整形式にしてくれる。
gosh> (exec () (html/ (html/ "1") (html/ "2") (html/ "3"))) ((html (html "3") (html "2") (html "1"))) ←逆順になってるのに注意 gosh> (rev-nodes (exec () (html/ (html/ "1") (html/ "2") (html/ "3")))) ((html (html "1") (html "2") (html "3"))) ←rev-nodesで正常に gosh> (html/ (node-set (list (html/ "1") (html/ "2") (html/ "3")))) #<closure (>>= >>=)> ←正しい関数ノードにできる。 gosh> (exec () (html/ (node-set (list (html/ "1") (html/ "2") (html/ "3"))))) ((html (html "3") (html "2") (html "1"))) gosh> (rev-nodes (exec () (html/ (node-set (list (html/ "1") (html/ "2") (html/ "3")))))) ((html (html "1") (html "2") (html "3"))) ← 三つ上と結果は同じだ。注目!
最後のは二つめのと同じ結果を生むね。
高階タグの整形式は(exec () 整形式)ないし、(rev-nodes (exec () 整形式))で ちゃんとした整形式のHTMLにマップされるはずのシンボルリストになる。 (もちろんwebアプリとして最終的に欲しいのはrev-nodesまでやったもの)
だから役割的にはnode-setは,@に相当するようだ。 ,@は`でくくったリストの内部でしか使えないがね。
gosh> ,@(map identity '(1 2 3)) *** ERROR: Compile Error: unquote-splicing appeared outside quasiquote: ,@(map identity '(1 2 3)) "(stdin)":28:,@(map identity '(1 2 3)) Stack Trace: _______________________________________
node-setはっていうと
gosh> (node-set (map identity '(1 2 3))) #<closure (>>= >>=)> gosh> (node-set (map identity '("1" "2" "3"))) #<closure (>>= >>=)> gosh> (exec () (node-set (map identity '("1" "2" "3")))) ("3" "2" "1") gosh> (rev-nodes (exec () (node-set (map identity '("1" "2" "3"))))) ("1" "2" "3")
,@はリストの中身を外にスプライシングしたいものの、 トップで呼ばれると包んでくれる外殻がないので困っちゃう。
一方、node-setは関数ノードにして取り出すからできちゃう。 (node-set (list (tag1/ ..) (tag2/ ..) ...))の返すものは、 ,@(list (tag1/ ..) (tag2/ ..) ...)の結果になるはずの(tag1/ ..) (tag2/ ..) .. という関数ノードのばらばらになる予定のものを、 一まとめにして持ち運べる様にしたものだ。
gosh> (exec (html/) (node-set (list (html/ "1") (html/ "2") (html/ "3")))) ((html "3") (html "2") (html "1") . #<closure (>>= >>=)>) gosh> (rev-nodes (exec (html/) (node-set (list (html/ "1") (html/ "2") (html/ "3"))))) ((html "1") (html "2") (html "3")) gosh> (rev-nodes (exec (td/) (node-set (list (html/ "1") (html/ "2") (html/ "3"))))) ((html "1") (html "2") (html "3")) gosh> (exec (html/) (tr/ (td/ "1") (td/ "2") (td/ "3"))) ((tr (td "3") (td "2") (td "1")) . #<closure (>>= >>=)>) gosh> (rev-nodes (exec (html/) (tr/ (td/ "1") (td/ "2") (td/ "3")))) ((tr (td "1") (td "2") (td "3"))) gosh> (exec (html/ "") (tr/ (td/ "1") (td/ "2") (td/ "3"))) ((tr (td "3") (td "2") (td "1")) . #<closure (>>= >>=)>) gosh> (rev-nodes (exec (html/ "") (tr/ (td/ "1") (td/ "2") (td/ "3")))) ((tr (td "1") (td "2") (td "3"))) gosh> (exec "" (tr/ (td/ "1") (td/ "2") (td/ "3"))) ((tr (td "3") (td "2") (td "1")) . "") gosh> (exec (tr/ (td/ "1") (td/ "2")) (html/ (ul/ (li/ "1") (li/ "2") (li/ "3")))) ((html (ul (li "3") (li "2") (li "1"))) . #<closure (>>= >>=)>)
ってなわけで、execの第一引数は微妙な扱い。 ドキュメントにはSXMLスタック云々と書いてある。 なんとなく方向性が掴めて来たような。cut-sea:2005/06/27 11:45:27 PDT
引越しの準備のために、一時的に black out な状態に。
今日引っ越ししました。
んで、二時間後、まずは ip reach な状態にしないと不安でいっぱいだったんで、
早速つないでみたら、これこの通り。ほっとした。
しかし何なんでしょうね、この不安感は一体。cut-sea:2005/04/29 01:31:18 PDT
ロングホーン
http://www.nikkei.co.jp/news/main/20050426STXKC007826042005.html
まーーった重くなりそうなことを…。
まぁでも、確かにこのファイルだっけ?あれ?こっちだっけって思うことは多い。
単に整理の仕方が悪いだけかと思ってたんだけどね。(^^;
問題はエクセルにせよワードにせよ結構起動が遅いと感じることでしょう?
そっちをもちっとなんとか出来ないのか?と思ったり。
srfi-62
Gaucheってsrfi-62のS-exp commentのサポートしてるんですね。
draft段階だから明記してないのかな。(あるいは私の見落とし?)
今まで知らなかったんだけど、今度からデバッグで使おう。欲しかったし。cut-sea:2005/04/24 20:33:15 PDT
- Shiro: Documentに書いてないのはunofficial, お試し段階だと 思ってください。予告なく仕様変更があるかもしれません。 srfi-62については、試しに実装して使い勝手を見てるところです。今のところ、 EmacsのScheme modeが認識してくれないとあまり使えないなあ、と感じてます。
- あれ?やっぱり、ある程度は評価可能なようですよ。
cut-sea@mokili> emacs --version GNU Emacs 21.3.1
なお、このemacsはNetBSD 2.0時点のpackagesに含まれるものを、 そのままmakeしたやつです。(define a #;1 #;2 3) (define b #;(+ 1 2 3) (* 1 2 3))
こんな感じで、C-xC-eだとか、M-C-b/fとかM-C-tとか、 ちゃんと#;S-exp部分を無視して処理してくれます。
#;■S-expや#;S-exp■といった位置にカーソルを持って行くと、 S-exp部分が有効な式としてjumpや評価するみたいですが、 (でも、これは自分的にはすごく自然な感じだし) なんか全然使えそうです。嬉しい。cut-sea:2005/04/26 07:21:24 PDT - Shiro: なんと。XEmacs 21.4.15ではだめでした。新しいの入れてみます。
- ytaki(2005/04/26 14:09:04 PDT): Gauche 0.8.3 + GNU Emacs 22.0.50.1 使って
るんですけど,たとえば
(define a #;1 #;2 3)◇ ■
の■のとこで C-x C-e すると READ-ERROR になるです(泣). どうも(Emacs LISP の) backward-sexp (C-M-b)の S 式認識が微妙で, ◇のところでは define 全体を S 式とするのに対し,■ではa #;1 #;2 3)
と認識してインタプリタに送ってるようで.(define a ;1 ;2 3) ■
でもa ;1 ;2 3)
と認識するところをみると,単純に従来の接頭辞文字+コメント記号 として処理しているだけかもしれません.しかしそうだとすると, backward-sexp とかのカスタマイズをしなければならないんだろうか…. - あー、ほんとだ。なんか微妙は微妙ですね。
でも、次の行とかでも
(define b #;(+ 1 2 3) (* 1 2 3)) ■
こいつの場合には、大丈夫みたいです。 全体的には思いのほか使えてるんで便利は便利ですよ、これ。cut-sea:2005/04/26 14:59:50 PDT - ytaki(2005/04/26 18:00:09 PDT): 1行にまとめるとまずいみたいですねえ. あんまし関係ないんですが,MIT Scheme の Edwin では,Emacs で うまくいかないパターンでも式全体を S 式として認識してくれました. でもまあ,偶然でしょうね(^^;).
笑えた
Matzにっきの
「あるハッカーの顛末」の超訳が笑えた。
コメントからたどれる
全訳。
まだ笑える。もうダメ。腹筋しびれてきた。cut-sea:2005/04/24 09:34:53 PDT
全然関係ないです。ごめんね。
ご存知だろうか? 将棋の羽生が現在四冠。
かつて七冠を達成して、次々タイトルを取られてしまい、
つい最近は無冠になっちゃうのかといった状態だったんだけど、
さくさくと奪取を繰り返して四冠になってしまってる。
さらに今回名人位への挑戦権も獲得して緒戦を白星で飾った。
何気なく四冠とか言ってるけど七大タイトルの過半数を取っちゃってるワケで、
これってもう感覚が麻痺しそうだけどマンガの世界だよ、ホント。
ここ最近のタイトル戦では当り前みたいに顔を出すし、 きっちり勝ちをとってくるなど、さらに強い感じがする。
今の羽生は七冠に拘る感じはまるで無いみたいだけど、 個人的には同い年ってことでメチャメチャ祈ってるよ。
七冠ともなれば、年中全国を飛び回って最高峰の連中相手に
タイトル戦を戦い続けるワケで、
棋士って線が細いように見えるけど相当にタフじゃなきゃつとまらない。
もし七冠を視野に入れた時、今回私が心配なのは体力的な面だけ。
二十代の時の様にいっちょやってくれ!って期待してる、一方的に。
curl
http://www.atmarkit.co.jp/fwcr/interview/005curl_01/005curl_01.html の記事。
昨年のLL Weekendでも
updateのセッションでデモがあったけど、
Windowsマシンで結構サクサク動くのに会場でも「おお〜っ」ってなった。
講演者の大谷さんて方は「結構高速なマシンを使ってデモしてる」とおっしゃってたが、
マシンスペックを聞いた時、私も周囲の方々も今ならそんなハイスペックでもないぞ
といった感想だった様に思う。
まぁ得手不得手なものがあるはずだけど、全部があの調子で動くならちょっと恐い。
Linuxサポート
も開始したみたいだし。
クマムシ
全然関係ないけど、このクマムシって奴 あまりにもカッコよすぎる。 いつか何かでプロジェクトクマムシとかtunプロジェクトとかって名称を使ってみてぇ。 あるいはサーバのhostnameにするとか。 ただそいだけ。cut-sea:2005/04/04 09:31:05 PDT
BSD Hacks
買った。あと、XML Hacksも。
XML関係も結構本がぎっしり出てるんだなぁ。
なんかどれも似たような内容で物色してたら足しびれた。
結局購入予定してなかったモノで食指をそそられるのは無かったんでパス。2005/03/26 02:31:31 PST
TinyCLOS
いかん。自分に負けそうだ。
こんな時は動け動け。
Scheme:TinyCLOS読みましょう。
gensym?
Gauche依存だけど gensym で生成したものと通常のシンボルとを識別できるらしい。 Scheme:OnLispのマッチング参照。 teranishiさんの指摘だが、これはちょっと面白い Tips じゃなかろうか。
アンカーパチンコ
出張の帰りに本屋でCマガジンを購入。
最初はグラフ理論入門の特集記事が目に入ったので購入したのだが、
新幹線の中で読んでたら、そっちより尻の方の記事に目がいった。
「Cマガ電能クラブ」っていう、要は出題がなされてCでそれを組んで投稿してもらい
回答を紹介するという企画があった。
11月の問題はカレンダーで比較的簡単
(休日を出したり、それ以外にも計算により求めることが要求されてたようだが?)
だったらしく、17人が回答を寄せたとか。(これは多いみたいだ)
今回の問題が結構面白そうだったのでSchemeで着手してみたが…。
(ちなみに実際にCで書いた場合の申し込み期限は18日らしいので、
すでに一ヶ月遅かったのですけど)
こっちね ->Scheme:アンカーパチンコ
Gaucheの評価順に関する疑問
gosh> ((begin (display 1) list) (begin (display 2) 2) (begin (display 3) 3)) 231(2 3)
これを見るとGaucheは引数を左から右へ評価して、 最後にオペレータを評価しているように見える。 (もちろん、オペレータ部がsyntaxかどうかの 確認がさらにその前というか一番最初なのは分かってますけど)
評価順はRnRS的には別に規定されてないからそれはオッケー。 さて、次の処理もわかる。
gosh> (define x 1) x gosh> (define y 2) y gosh> (list x (call/cc (lambda (c) (set! x c) y)) x) (1 2 #<subr continuation>)
これはオッケーだ。 list 式の引数が左から順なので、最初の x は 1 になり、 その後で継続が捕捉され、 y の 2 が返り、 続いて最後の x が #<subr continuaion> になり、これがリストになって返る。 うん、問題ないように思う。
私が分からないのがこれ。
gosh> (define x 1) x gosh> (define y 2) y gosh> (list x (call/cc (lambda (c) (set! list max) y))) (1 2)
私の事前予想は
- listがsubrなので引数の評価を開始。
- xが評価されて1
- call/cc で list に #<subr max> が代入
- call/cc 式自体はyの2が返る
- 最後にオペレータ部が評価されて、(list 1 2) => (#<subr max> 1 2) => 2が返る
というものだった。 最後にオペレータ部が評価される順序だと思ってたのに あたかも最初に評価されたかのような振るまいに思える。 なーぜー(?_?)cut-sea2005/02/08 19:34:19 PST
あら?上の処理1 の list が subr だと分かってる時点で #<subr list>だって 評価してるんだよねぇ。とすると最初の評価順の確認方法がおかしいのだろうか。
- teranishi: Gauche では、Schemeの基本関数をコンパイル時にインライン展開しているので、
後から list を上書きしても影響を受けません。
起動時のオプションでインライン展開を止めれば、cut-seaさんの意図どおりに動きます。
$ gosh -fno-inline gosh> (define x 1) x gosh> (define y 2) y gosh> (list x (call/cc (lambda (c) (set! list max) y))) 2
- なるほど。そういうことでしたか。 もやもやがスッキリしました。ありがとうございます。cut-sea:2005/02/08 19:57:39 PST
部分継続
call/cc に取っ掛かりができたあたりから、 ネット上の継続のドキュメントを読むのが楽しくなってきた。
思い起こせば1年前、部分継続なんて言葉が無防備な脳髄に直撃!!
kahua.partcont参照。 なるほど、やりたいことと、そのための制御とが今ようやくリンクした。 上記のkahua.partcontのドキュメントは分かりやすい。 難解な言葉を使うのではなくて、 注目点を明言して(注目を集めるようにリストにしたり)イメージしやすい言葉で書かれておる。 背景としてcall/ccの問題点の説明から入ったりと工夫の跡が見て取れる。うむ。
最初読んでピンと来なかった点といえば、 そうだなぁ、call/pcでprocに渡した部分継続 k を呼び出した時に call/pcの外部エンティティを評価していって、 reset/pcの第一の制御点に到達した時になんで k の呼び出しポイントに戻るのか ってところ位かな。 まぁ、これは継続の良くある例と同じくproc内でkを束縛しておいて、 外で単独でkを呼び出す場合とかをイメージすりゃ当たり前なんだが。
確かにreset/pcでマークしたポイントまでだけの有限な継続処理だけを捕捉できてるのが分かった時、なんで部分継続なんていうのかがようやく分かった。 (最初口をついて出たのは有限継続だったけど、これも誤解を生むんだよなぁ、 なんていうの?あーだこーだ(中略)もっとこう部分的な…って、 だから部分継続かぁって自己ツッコミしました) これ使えばcall/ccの問題回避できるのも。
帰宅したら早速いじってみたいぞ。うずうず。2005/02/01 19:39:50 PST
多値
少々 call/cc が見えてきたせいで今度は多値が気になってきた。 半年位前にScheme:多値から大きな話題になってて、 今ごろになってようやく話の流れが追える気がする。全部じゃないけど。
でも、今も納得より、なんだかすっきりしない気持ちの方が大きい。 私は多値を導入して全体の意味を統合(整理?)するなら lambda を替えないとダメなんじゃないかなって思った次第。
;; 多値に対応した lambda はどう書くか ;; ((lambda ??? ..) (values 1 2 ..) ...)
この lambda が素直に書けるように今の lambda からシームレスに(って表現がいいのかな) 拡張できればいいのかな、とか。 つまり、多値のない Scheme ってのは所詮上の特殊例なだけっていう観点。
;; 多値に対応した lambda では今の lambda は所詮これ ;; ただし、 (values 1) ... の後ろの部分はすべて (values hoge) みたいに 1値のみ返す ;; ((lambda (a) ...) (values 1)) == ((lambda (a) ...) 1) ((lambda (a . b) ...) (values 1) ...) == ((lambda (a . b) ...) 1 ...) ((lambda arg ...) ...) == ((lambda arg ...) ...) ;; == は構文的にも意味的にも同じものにシームレスにイコールにいきつくべき
決して
((lambda args ...) 1 2 3...)
とは違うんでしょうな。args じゃないんだ。 これとは区別できないといかんだろうと思う。根拠無いけど。
いや、もしかして別に表記をかえなくてもいいのかも。 単純にシンボルに多値が束縛できりゃいいのか?
gosh> (define a (values 1 2)) a gosh> a 1 2 gosh> ((lambda (a) a) (values 1 2)) 1 2
って感じかな。 そうすると、多値ってなんかリストやベクタみたく一種のデータ構造に思えて来るな。 #<multiple-values 0x8119de0> とかそんな風な存在。 そうすると他のプロシージャに適用した時には
gosh> (list (values 1 2) (values 3 4)) (#<multiple-values 0x8119de0> #<multiple-values 0x8119dc0>)
とかね。 …しかし、これって多値になってんのかどうだかよう分からんな。 単に scheme の基本機能で多値をエミュレートした実装をしたら、 こんな風になりそうって感じのもんだわ。
あ、guileがまさにこれやってる。しかも
guile> (values 1) 1 guile> (eq? (values 1) 1) #t guile> (list (values 1 2) (values 3 4)) (#<values (1 2)> #<values (3 4)>) guile> (list (values 1) (values 2)) (1 2) guile> (equal? (list (values 1) (values 2)) (list 1 2)) #t
なのでまさに私の思ってたシームレスな実装だわ。 まぁ同じようなことを考える人って必ずいるんだねぇということで。cut-sea:2005/02/09 20:05:16 PST
comp.lang.schemeから寄ったら…
R6RSの進捗かな?
(私が発見したのが遅いので 2004/10 頃のもの、別にニュースってワケではない)
色々議題として上がっているものがつらつら、ほにゃららの点で議論が分かれるもの
とかって感じで項目がいっぱい。
ところで deletions from R5RS の中に force/delay や multiple values
が見えるんだけど、こんな感じでいつも一応は議論になるとか?
いまいちこの辺のノリが分からないので過剰反応してますけど、
あんなものがなくなったりとかするんでしょうか。
- あーあとの方に結論ぽい文面もあるんだ。 言語coreとlibraryの切り分けを明確にして、 多値は残留、force/delay は core から除外か?
call/cc
うぉっ!!なんか第一次(?)継続悟りの瞬間!
もしかしてと思って考えたら call/cc パズル分かったよ。(^^;
っていうか、継続について少し切っ掛けが掴めた感があって、ふんふん、なるほど!
っていじってたら call/cc パズルのコア部分を作成してた。
動作確認の途中で、あーこれ、もしかして、とか思った時は感動したよ。
そうか。この部分を分かってなかったのか、なるほどね。
深夜一時半だけど祝杯あげよう!生搾り(^-^)cut-sea:2005/01/27 08:38:38 PST
scheme hacks
最近はやりの ほげほげ Hacks モノ。
BSD Hacks(仮) だと?
うーむ、とりあえず欲しいじゃないか。
ところで scheme Hacks とか出ないか?
いや、scheme(やLisp)はプログラムを組んでいること自体全てが scheme Hacks だね。:-p
SICP
先週くらいから再びSICP勉強熱。
今回の興味は 4-5 章にのみ注がれている。
自分で評価器のロジックを設計したいとなると難しい。
レジスタの使い方や制御の飛び方が分かったような分からないような。
まぁ理解出来てないのは自覚できてるが。2005/01/25 05:10:01 PST
Gauche:refj-gauche
マニュアルをブラウザ使って探すのが徐々に面倒になってきた。
というわけで作ってみました。 -> Gauche:refj-gauche
` & , & ,@ の展開について
やっぱり、誤解してたよ。
gosh> (define a 1) a gosh> (define b 2) b gosh> `(a b) (a b) gosh> `(,a ,b) (1 2) gosh> ``(,a ,b) `(,a ,b) <= これが `(1 2) になると思ってた gosh> ``(,,a ,,b) `(,1 ,2) gosh> ``(,,a ,b) `(,1 ,b) <= これも `(,1 2) になると思ってた gosh> (define x '(list 1 2 3)) x gosh> (define y '(list 9 8 7)) y gosh> ``(,@x ,@y) `(,@x ,@y) <= これも先に展開されると思ってた gosh> ``(,@,x ,@,y) `(,@(list 1 2 3) ,@(list 9 8 7)) gosh> ``(list ,@,x ,@,y) `(list ,@(list 1 2 3) ,@(list 9 8 7)) gosh> `(list ,@(list 1 2 3) ,@(list 9 8 7)) (list 1 2 3 9 8 7) gosh> ``(,,@x ,,@y) <= これも,@から取り合えず展開できると思ってた *** ERROR: unquote-splicing appeared in invalid context: ,@x Stack Trace: _______________________________________ gosh>
"," とか ",@" って常に内から内から展開されると思ってたけど、
"`"; との対応レベルがあったのか。
こりゃ、だいぶ以前から勘違いして、ずっとそのまま来てたぞ。(-_-;
apropos
なるほど、こんな感じか。cut-sea:2004/12/31 05:27:29 PST
(define (with-current-apropos proc) (use srfi-1) (append-map (lambda (m) (hash-table-map (module-table m) proc)) (all-modules))) (define (current-apropos) (with-current-apropos (lambda (k v) k))) (for-each (lambda (k) (format #t "~a~%" k)) (map string->symbol (sort (map symbol->string (with-current-apropos (lambda (k v) k))) string<?)))
ネットワーク関係
ネットワークプロラグミングがやってみたい。
というわけで、Kahuaのコードを読んで、
「UNIXネットワークプログラミング入門」(ISBN4-7741-1754-4)を片手にお勉強。
以前カッコつけてW.リチャード・スティーブンス著(篠田先生訳)の
「UNIXネットワークプログラミング」を購入したけど、やっぱり自分には
こういうやさしい本からの方がいいや。
コードを読むのもいいけど、やっぱり書いてみないとねぇ。
でも読まなきゃなかなか自分の知らないテクとか身に付かないし。
やっぱ読むのより書くのが好きな人間にはなかなか難しい選択だわ。
ってわけで書いてみた。 -> Gauche:NetWork:goban
- がぁん! ついていけなかった方とかってあからさまに書かないでよ。へこむわ。もちっとオブラートに包んでくり -> ISBN4-7741-1754-4