g000001 2008-08-09T20:32:17+09:00
簡単なところでは、
kmrclには、
(kmrcl:date-string (get-universal-time))
"Sat 9 Aug 2008 19:06:35"
のような日付の文字列を取得するものがありますし
metatilitiesにも
(metatilities:date-string (get-universal-time))
"Saturday, August 9, 2008"
(metatilities:date-string-brief (get-universal-time))
"8-9-2008"
(metatilities:date-and-time-string (get-universal-time))
"Saturday, August 9, 2008 at 7:07 pm"
みたいなのがありました。
それと
PerlのDate-Calcを移植しようとした
date-calcというのがあるのですが、
大体Perlのに対応したものはあるようです
(date-calc:day-of-week  1899 12 31)
7
みたいな。
他には、
net-telent-date
というのがありました。
(date:monthname t 1 nil nil)
January
(date:universal-time-to-http-date (get-universal-time))
"Sat, 09 Aug 2008 10:17:24 GMT"
(date:universal-time-to-rfc2822-date (get-universal-time))
"Sat, 09 Aug 2008 19:17:36 +0900"
(date:universal-time-to-rfc-date (get-universal-time))
"Sat, 09 Aug 2008 10:17:57 GMT"
(date:parse-time
 (date:universal-time-to-rfc2822-date (get-universal-time)))
;=> 3427352295
等、賢くて色々便利そうです
他には、local-timeというのもありました。
(local-time:parse-timestring "1985-04-12T23:20:50.52Z")
@1985-04-12T23:20:50.520000Z

と言う感じで、
rfc3339形式らしいです
(local-time:local-time)
@2008-08-09T19:37:23.036995+09:00
と言う風に
秒より細かい単位で
時刻を取得するのにも便利そうです
といった感じなのですが、
みなさんが良く使う時刻関係のライブラリ等があったら
教えていただければなと
思います。
どんなのがありますでしょうかー。

1d3eqxV0wHq 2008-08-09T20:37:33+09:00
日付計算って言うとemacsにめちゃくちゃ賢いパッケージがあったような記憶があるんですけど誰か移植してないのかな?

g000001 2008-08-09T20:38:04+09:00
マヤ歴とかも計算できるやつですか?w
なんかマヤ歴ってのだけうっすらと覚えてるんですがw

1d3eqxV0wHq 2008-08-09T20:39:36+09:00
多分それ, ユリウス歴とかイスラム歴とかもいけてたような記憶が

名無しさん 2008-08-09T20:39:49+09:00
他の言語では普通にある時間を表現する型というのは、ないんでしょうか?紹介されたライブラリもuniversal timeで扱っているみたいですよね。

g000001 2008-08-09T20:41:25+09:00
なるほど、なるほど

名無しさん 2008-08-09T20:41:40+09:00
例えば、うるう年の判定とかは、自前でやるのが普通なんですかね?

g000001 2008-08-09T20:42:44+09:00
(DATE-CALC:LEAP-YEAR 2000)
(DATE-CALC:LEAP-YEAR-P 2000)
(METABANG.UTILITIES:LEAP-YEAR-P 2000)
手元では、
こんな感じだったんですが、
こういうのがあるくらいなので
自前なのかもしれませんねw

名無しさん 2008-08-09T20:43:38+09:00
そうなんですね。。

g000001 2008-08-09T20:44:57+09:00
他の処理系だと代表的な
処理方法としてはどういう感じなのでしょう
オブジェクトにお伺いする
みたいな感じなんでしょうか?

名無しさん 2008-08-09T20:45:43+09:00
Javaだと、java.util.Dateクラスとか、java.util.GregorianCalendarがありますよ。
私のブログですみません。
http://d.hatena.ne.jp/smeghead/20070609/leap
さようなら
閏年もboolean isLeapYear(int year) みたいな感じで。

g000001 2008-08-09T20:47:17+09:00
ありがとうございましたー >RHG
なるほど、なるほど
標準とか、
定番ってのは
なんとなく、存在してないような

1d3eqxV0wHq 2008-08-09T20:47:57+09:00
Cだと面倒くさいので4で割れれば閏年. 2000年は閏年. 2100年まで使うシステムはない

g000001 2008-08-09T20:48:02+09:00
感じなんですかね。
なるほどー。
utはBIGNUMなので、
1900年以降は
楽々ということみたいです。
1900年より前になると各国で色々歴史的な問題が
あるので、対応は難しそうですが(^^;
CLだとなんとなく探してきて使う、
か自作するというところなんですかね。
(date:parse-time "Mon, 04 Jun 2001 17:16:05")
;=> 3200631365
とかはかなり便利だとは思いました。
という感じで、
残念ながらANSIでleap-year-pみたいなのは、
決まっていないというところですね。

1d3eqxV0wHq 2008-08-09T20:53:54+09:00
wikipediaみてたら1900年以降に導入した国ありますね
グレゴリオ歴

g000001 2008-08-09T20:54:35+09:00
なるほど、なるほど。
太陰暦とか、太陽暦とか、色々
和暦とか、
夏休みの課題に相互変換のパッケージでも
作成してみるのも
良いかもしれませんw
どう書くにそういうお題が一回出たかな?
明治初期は太陰暦だってので
自分は躓いてしまいましたがw

1d3eqxV0wHq 2008-08-09T20:56:54+09:00
つか,emacsのやつポートしようって気になってますが

名無しさん 2008-08-09T20:57:04+09:00
おぉ~

g000001 2008-08-09T20:57:14+09:00
おお、それは凄そうw

1d3eqxV0wHq 2008-08-09T20:57:24+09:00
和暦は何度も変わってるんで, 結構難しいんですよね
ポートしたとしても和暦まで対応できるかな?

g000001 2008-08-09T20:59:04+09:00
元号から変換できたら
凄そうw

名無しさん 2008-08-09T20:59:27+09:00
AI Repository に単位変換のユーティリティがあったけど

1d3eqxV0wHq 2008-08-09T21:00:23+09:00
テーブル作るだけでとんでもない体力使いそうですね < 元号変換

名無しさん 2008-08-09T21:00:27+09:00
今だと http://ksl.stanford.edu/htw/dme/thermal-kb-tour/standard-units.html みたいな知識データを使って計算するユーティリティーを作るデモが面白いだろうか、と考えた事はありましたが
和暦とかマヤ暦はw
テーブルは、どこかからデータを探して変換するだけでいいよ。

g000001 2008-08-09T21:03:17+09:00
和暦は閏月とかあるんだなあw
面倒くさそうですねー
完成すれば、CLのキラーアプリになるかも
しれませんよww

1d3eqxV0wHq 2008-08-09T21:04:56+09:00
その時, 使ってた暦でルールが決まってるんで天体の位置さえ計算できれば閏月は何とかなるんですけど

g000001 2008-08-09T21:05:33+09:00
なるほどー、天体の動きとも
からんでくるんですね。

1d3eqxV0wHq 2008-08-09T21:05:46+09:00
元号の変化点はそうはいかないんで...

名無しさん 2008-08-09T21:06:20+09:00
ttp://www.sakai11.jp/rr_gengouitiran.htm こんなところにある。

g000001 2008-08-09T21:07:02+09:00
どの世界にも
マニアさんはいますね:)
さて、あと20分くらいあるのですが
落とし穴の続きを
するか、
なんとなく雑談にするかw
どうしましょうか

名無しさん 2008-08-09T21:08:47+09:00
えーとxyzzyのtimestmp.lがまんま使えるっぽい雰囲気です。
http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=format-date-string
こういう機能

g000001 2008-08-09T21:10:07+09:00
おー、
日本の日常生活では
これくらいで十二分そう

1d3eqxV0wHq 2008-08-09T21:10:35+09:00
おぉ,和暦トライしてみようかな

g000001 2008-08-09T21:11:43+09:00
Xyzzy上で実装したら、歴史物を書いてる人に
好評かもw

名無しさん 2008-08-09T21:12:25+09:00
ほんとだ LISP で実装されてる。すごい、これは便利だ。

1d3eqxV0wHq 2008-08-09T21:13:13+09:00
Unix上で生活してるのでXyzzyは無理です

g000001 2008-08-09T21:14:35+09:00
なるほどー

名無しさん 2008-08-09T21:14:47+09:00
Common Lisp で実装していただければ誰かが xzzy に移植してくれますよ。

g000001 2008-08-09T21:14:57+09:00
自分はwineでxyzzyを動かしてみたりしてますw

名無しさん 2008-08-09T21:16:36+09:00
さがせば、中国、挑戦、ベトナムの元号一覧もある。笑

1d3eqxV0wHq 2008-08-09T21:16:44+09:00
それじゃ頑張ってみるって事で, 結果は期待せずにお待ちください
もしかして,あおられてるのかな?

haiju 2008-08-09T21:17:31+09:00
楽しみですねぇ♪

g000001 2008-08-09T21:18:48+09:00
(format-date-string "%Y-%m-%d" (get-universal-time))
;=> "2008-08-09"
くらいはすぐ動きますねー

名無しさん 2008-08-09T21:20:02+09:00
ttp://archive.mag2.com/0000183170/20061105020000000.html やっかいなもんだいもあるねぇ。

g000001 2008-08-09T21:20:16+09:00
(format-date-string "%g%E年" (get-universal-time))
;=> "平成20年"

名無しさん 2008-08-09T21:20:24+09:00
 日本の南北朝時代、中国の三国志時代には、同時に異なる複数の元号が存
在していました。

g000001 2008-08-09T21:20:43+09:00
そういう時代もありますねw
さすが日本生まれのエディタ。

名無しさん 2008-08-09T21:22:04+09:00
(let ((*三国志といえば* '蜀)) (format-date-string ...)) とかするんですか…

1d3eqxV0wHq 2008-08-09T21:23:32+09:00
中国の分裂期何て下手すると国単位で持ってた時期あるし
どうまとめるといいんだろ

名無しさん 2008-08-09T21:24:58+09:00
ttp://www.pot.co.jp/gotogi/2-14.html 宝だ 笑 いっそのことsqlにしてくれてたらもっといいのにと思った。笑

g000001 2008-08-09T21:25:43+09:00
2chじゃないのでh落とさなくても大丈夫ですよw >yasさん

名無しさん 2008-08-09T21:25:44+09:00
そーゆうのまで真面目に考えると、多値で返すとかいうレベルでは追いつかない気がしますねー。
リファラを残すのを躊躇した^^;
http://gaowei.cocolog-nifty.com/nengo/cat3288069/index.html 元号マニアは意外と多いみたいだなぁ。と思った。

g000001 2008-08-09T21:27:57+09:00
いや、やましい話もしてないですし、大丈夫ではw >リファラ
凄いですねー。
モンゴルかw

1d3eqxV0wHq 2008-08-09T21:28:38+09:00
飲み会の誘いが...
進捗報告はこちらでOK?

g000001 2008-08-09T21:29:51+09:00
そうですね、
平日は、過疎ってますけど、
置き手紙的な感じでw
あと、ircとか

1d3eqxV0wHq 2008-08-09T21:30:38+09:00
了解です. それじゃまた...

g000001 2008-08-09T21:30:38+09:00
wassrとか色々反応がありそうな
媒体はありますw
という感じで時間になりましたー
落とし穴の続きをしようと思ったんですが、
割と暦の話が盛り上がりましたねw
自分もxyzzyのtimestamp.lをclに移植して
CodeReposとかにうpしてみようかな。
ライセンス的にどうなのかというのは
ありますが(^^;

名無しさん 2008-08-09T21:32:51+09:00
MITライセンスのはずです。

g000001 2008-08-09T21:33:14+09:00
なるほど、じゃおkなんですかね。
ほんのちょっと直すだけっぽいですけど

名無しさん 2008-08-09T21:34:38+09:00
そうですね。parse-date-stringをどうするかというぐらいっぽいですね。

g000001 2008-08-09T21:35:27+09:00
ですね、正規表現どうするかと
いう位でしょうか。
SBCLでは、svrefをarefにするくらいで普通に
うごいてますね。
xyzzyのライブラリを探るってのも
なかなか面白いかもしれないですね

名無しさん 2008-08-09T21:38:05+09:00
calendar.lは使えそうかなとは思ってます。

g000001 2008-08-09T21:41:09+09:00
なるほど、これもまた
日本特有な感じで
便利でしょうねー。
という感じで雑談タイムに突入かと
思うのですが、
とりあえず、次週の予告をばさせていただくと
また、CLの落とし穴の続きで
パッケージ編と、CLOS編です。
ちょっと難しいかもと
難しいというか、
まあ、自分が意味がとれないところが何か所がありました。
なんとなくつらつら挙げてみますと
     - There are a number of restrictions on how "conforming programs"
       can use symbols in the COMMON-LISP package.  See CLtL pages 259-261
       or section 11.1.2.1.2, pages 11-5 and 11-6 of the ANSI standard.
とか
あ、これくらいだなw
次回は1時間位で終わるかもしれないので、
そうなったらcl-cookbookの続きで
今度はハッシュをやろうかなと
思います。
ハッシュ編をメインにして落とし穴をサブにするかもしれません。

名無しさん 2008-08-09T21:49:08+09:00
ハッシュドビーフを食べながら?(寒い
むむ、ページ指定か。こないだおしえてもらった CLtL のPDFが役にたつかな。

g000001 2008-08-09T21:49:39+09:00
そうですね、
yasさんの
yasさんに教えてもらったPDFde
が便利でした。

haiju 2008-08-09T21:50:03+09:00
来週は外出するので途中からでもついて行けるように、予習をたっぷりしておきますね

g000001 2008-08-09T21:50:09+09:00
が、500ページ越え位から
落とし穴のページと食い違いがでてきてます
よろしくお願いしますー(^^ > haijuさん
ハッシュドビーフを食べながらはチャット的に
困難ですねww
あとは、
"Put in seven extremely random user interface commands"
が今も有効なのかとか
有効というか、今ならどうなるのか
ってところとか
位で速攻終わるかもしれないですね。
requireとかprovideが中途半端なので
もう意味がないのかも…。
全然関係ないのですが、

名無しさん 2008-08-09T21:57:28+09:00
今でも一応処理系付属の機能は require 使いますよね…

g000001 2008-08-09T21:57:42+09:00
ですね、sbclとか
adsfとからめて
結構うまい風に使ってるような
でも、おかげでrequireってそういうものだと
いう誤解も生んでるようなw

名無しさん 2008-08-09T21:58:50+09:00
sbclのrequireは使いやすいよね。

g000001 2008-08-09T21:59:16+09:00
requireとadsfの連携は便利かなと
思いますねー。
でも他は他の流儀でやってるので
なんともw

名無しさん 2008-08-09T22:01:20+09:00
(require モジュール) はどこも同じような。単にモジュールの名前がバラバラで互換性がないだけでw

g000001 2008-08-09T22:02:37+09:00
命名規則も
色々ですね(^^;
全然関係ない流れなのですが、
ブログでCLのライブラリ等の紹介があると
思うのですが
それが散逸してるのはもったいないということで
どっかにまとめられればと思うんですが、
どこか良い場所はないでしょうか。
とりあえずは、2chのwikiにまとめてみたんですが、
http://wiki.fdiary.net/lisp/?common-lisp-library
みたいな感じで
あと、インストール記事も
処理系とOSでテーブルみたいな感じで
分かれて一覧になってると
便利かなーとか
おもったりはしてるんですが、
編集がどうも面倒くさくてw

haiju 2008-08-09T22:10:45+09:00
私はWinXPへのインストール記事は、2chのWikiに書いてみようかな。と思いました。
他に情報共有できて、人目に当たるような場所が分からないので

名無しさん 2008-08-09T22:12:33+09:00
こんばんわ

g000001 2008-08-09T22:12:44+09:00
こんばんはー

名無しさん 2008-08-09T22:13:03+09:00
こんばんはー
RHGでした。

g000001 2008-08-09T22:13:48+09:00
さっきRHGさんがw

名無しさん 2008-08-09T22:14:14+09:00
自分で記事を書いてエントリ追加しようかな。繁盛しているような自作自演!

g000001 2008-08-09T22:14:15+09:00
今日はなんの会ですか?

haiju 2008-08-09T22:14:32+09:00
自作自演の会?

g000001 2008-08-09T22:14:42+09:00
いや、便利だったら良いのでそれでおkではww
とりあえず、自分がのっけたのって自分の記事ばっかりですけどw あとquekさん
no
の記事を勝手にw

名無しさん 2008-08-09T22:15:08+09:00
PCLでした。
次回loopからです
Rubyといえばyasさんがテキスト置換なマクロを作っていて皆同じような望みを持つんだなーと思いました

g000001 2008-08-09T22:15:36+09:00
おおー、PCLですか。

名無しさん 2008-08-09T22:16:31+09:00
私は自作ではなく汎用を狙ってGNU m4とか覚えたけどやっぱテキスト置換なマクロでは満足できなかった
黒帯LOOPですか?
次回は最終週だと思います
関東近辺にお立ち寄りの際は是非
GNU m4なインチキマクロ!酷い
define([DEFMACRO], [define([$1],_ARGS(REVERSE$2)$3_ARGS_CLEANUP(REVERSE$2))])dnl
rhgさんは飯食っているときの隣でしたよ
あ、本当にRHGの人だったのですか
何もかけないですよ
打ち上げ最中ですし
m4わかんないっすね…
クォート周りが人外魔境っす。やっぱriS式
基本は define(置換前, 置換後) なんですけどね
しまった標準のクォートは[...]じゃなくて`...'か。うろ覚えはだめだな。

g000001 2008-08-09T22:34:00+09:00
マクロの手法も
色々俯瞰してみると面白そうですねー
言語ごとに。

名無しさん 2008-08-09T22:37:37+09:00
まぁ圧倒的にメジャーなcppがありますからね。
マクロでプログラムを書き換える、と聞いたらあーゆうのを想像するんじゃないかなぁ。

g000001 2008-08-09T22:41:20+09:00
なるほどー。

名無しさん 2008-08-09T22:42:28+09:00
lispのマクロと同等の威力を普通な構文で実現されてたら羨ましいという以前になんか心が折れそうな気がしてならない。

g000001 2008-08-09T22:43:52+09:00
中置記法でlispみたいなマクロを実現してるのって
Dylanの他にどういうのがあるんでしょう?

名無しさん 2008-08-09T22:46:41+09:00
エー中置記法かぁ
(風呂から戻ってきました。)
どっちかというと、Haskellみたいに遅延評価でマクロの必要性を減らす、という方向なんじゃないかなぁ。
構文木を変形しようとおもったら、内部表現は別にしてデータの操作はS式風になりそう。

g000001 2008-08-09T22:52:36+09:00
なるほど、なるほど

名無しさん 2008-08-09T22:55:57+09:00
clと同等のマクロを作ろうと思ったらわけ分からん^^;
infoからGNU m4によるreverseの定義。
reverse(a,b,c) が c,b,aになります。
define(`reverse',`ifelse(`$#',`0',,`$#',`1',``$1'',`reverse(shift($@)),`$1'')')
昔はすごい!これは使える!…と思ったんだけど、今みるとあんまりそーゆう感じはしない…

g000001 2008-08-09T22:59:54+09:00
これは再帰してるわけですか?w

名無しさん 2008-08-09T23:01:19+09:00
そうです。
ifelse の中身は引数の数 $#==0 -> 空, $#==1 -> 第一引数, それ以外は reverse(引数のcdr),第一引数

g000001 2008-08-09T23:02:06+09:00
なるほど、LISPでのreverseの定番な定義という感じではありますが、
読みにくいのがどうもw
でも、がんばれば凄いのできそうw

名無しさん 2008-08-09T23:03:58+09:00
周辺のlist処理が簡単かどうかでがんばる必要がだいぶ変わりそうですね

g000001 2008-08-09T23:07:20+09:00
そういえば、最近C++で
clの関数を実装したライブラリが
沢山ブックマークされてましたね、deliciousで

名無しさん 2008-08-09T23:08:19+09:00
もうひとつ可能性を感じさせる機能が…
pushdef(`x',`100') -> x は 100 に展開される -> pushdef(`x',`10') -> x は 10 に展開される -> popdef(`x') -> xは100にもどる
あぁ、なんかすごく再帰して処理できそう、みたいな。
へぇ。どんな感じなんでしょ > C++でCL

g000001 2008-08-09T23:09:29+09:00
なんか関数名がまんまだったんですが、
ブックマークしてなかったんで
探してますw

名無しさん 2008-08-09T23:11:54+09:00
しらべたら http://www.interhack.net/projects/lpp/ か?
出てきた

g000001 2008-08-09T23:13:43+09:00
あー、これですね
lpp
     void printListColumn(list1) {
       dolist(e, list1) cout << e << endl;}
とか頑張ってるなと思いましたw

名無しさん 2008-08-09T23:16:54+09:00
「マクロがないようだが…」「マクロなんて飾りです(ry」

g000001 2008-08-09T23:17:58+09:00
これだけのものを作ってるなら
なんかしら試してそうですけどねw >マクロ
この人はlispが好きなのかc++が好きなのか、両方好きなのかw

名無しさん 2008-08-09T23:19:18+09:00
C++のテンプレで変態マクロの実現?
あっちはあっちで強烈な魔術だからなぁ。 一応チューリング完全なんですかね?なんでもできるのかぁ
わからないっす。
http://www.radiumsoftware.com/0603.html ここに言及した記述がありました。
すごいですねC++は…言語も凄いけど利用者も凄い…。
こんばんは。
こんばんわ
こんばんわー
東京近辺でLisp初学者向けの勉強会ってございますか?
RHGとかは玄人集団なイメージがありますねぇ。
そうなのか…
複数人いれば、学生で有能なLisperを先生として勉強会が出来たらなーと思ってるんですが
SICPの勉強会に参加したことがあるのですがついていけませんでした。。。
む…
4章からってのもあったのですが。

g000001 2008-08-09T23:41:44+09:00
とりあえず、やることにしてしまって
告知すれば、集まるんじゃないですかねw
割と需要はあるんじゃないかと
実践CLも発売された後ですし…。

名無しさん 2008-08-09T23:43:05+09:00
大学に一人は居るといわれているLISP好きを探し出すとか
なるほど。
先生もおいおい決めるってことでやってみますか。
東京と京都ならlispの人員確保できそうだよな。<学生先生
場所が決まったら告知してみます。
どっちかというと
登る山を決めることも大事かなー
と思います
初学者向けといっても
はい
RHGはcommon lispだけを切れば初学者集団に近いんですけど
言語を知らない人はまったくいないので
使う用語でつっかかることも概念でつっかかることも
まったくない感じですすめますし、
初学者っていうのも自分の想定することと人が想定することがだいぶ違うと思います
ま、種本決めてとりあえず読むぜ
っていうんだったらあんまり人を想定せずに
やったほうがよいような気もしますが
怖いですかね
やっぱり登る山を決めた方がいいですか。各自自習で一定時間後質問タイムとかにしようかと思ってましたが。
本を読む?
本を読みきるとか
なになにができるようになる
とか
Tsukuba Rの人と話を聞いてるとskype勉強会も効果的らしいよ。人が集まらなかったら、それでも何とかなるかもね。>hoppy
skypeよさそうですね
本を読みながら演習というのを想定してました。各自の目標に従って。

g000001 2008-08-09T23:53:18+09:00
そうですね、自分もskypeつかってみたいなと
思ってました。
でも実際に集まるんだから、

名無しさん 2008-08-09T23:53:41+09:00
ノートパソコンでコードを書く(演習)

g000001 2008-08-09T23:53:49+09:00
なんとなく集合するメリット活かした方が良いような
気もしますねー。

名無しさん 2008-08-09T23:55:28+09:00
skypeだとハマったときに原因特定が難しそうですが。(コードを送ればいいか)
共有ホワイトボードは入ると思いますが
ここみたいなチャットがあれば…skypeのチャットでも?

g000001 2008-08-09T23:56:46+09:00
skypeとlingr組み合わせてるとこも
あった気がしますね。
ホワイトボードの代わりにlingr使ってるとこも
多いような。
でも、ネット接続前提ですよね(^^;

名無しさん 2008-08-09T23:58:07+09:00
ホワイトボードがあると cons セルが書きやすそう

g000001 2008-08-09T23:59:16+09:00
そうだ、初学者向けってことであれば、
ここも初学者向けなんですけどねw
誰も質問してくれないだけでw
まあ、なんとなく質問しにくいってのは
分かりますけど(^^;
どなたでも、割って入ってくれればなとは
思ってるんですけどね。
初学者の区別は、
snmstsさんも言及されてたように
バックグラウンドでわけないと
取り残される人が出てきそうですねー
CLが初めての言語って人も
ターゲットだったりするんでしょうか?

名無しさん 2008-08-10T00:02:35+09:00
ところでLingr専用ブラウザってありますか?
過去ログ読むのが結構つらくて(^^;

g000001 2008-08-10T00:03:09+09:00
専用ってのはなかったんじゃないかなと
思いますねー。
確かに過去ログ読むのは面倒ですよね(^^;

名無しさん 2008-08-10T00:03:46+09:00
sicpは取り残されるというよりはモチベーションが維持できなくて来なくなる…
になっている気がします
敷居を低くはしたいと思っています。キーボードをさくさく打てる、くらいの条件はあったほうがいいかもしれません。

g000001 2008-08-10T00:05:50+09:00
そうなると、多分、開発環境構築が
一番役に立つような気もしないでもありませんね
まず、みんな、そこで躓いてるようなのでw

名無しさん 2008-08-10T00:07:43+09:00
そうですね。.emacsが~とか。AllegroCLの使い方とか

g000001 2008-08-10T00:08:00+09:00
多分最初の一回分くらいの
量にはなるんじゃないかなと
思ったりしますねー。

名無しさん 2008-08-10T00:08:34+09:00
リスト遊び+Emacs とか、xyzzyとかでも入門ならいけないかな
ただ、環境設定のスキルって個人によって差があるし、それ以降の進度も差があると思うので「自習」という形にしたいと思ってます。
一回分になるなぁ。<インストール twitter/wassrあたりでインストールサポートをしてもいいけど。

g000001 2008-08-10T00:12:41+09:00
ですね、wassrのチャンネルとかも良いかも。
でも、意外なんですが、オンラインだと、質問が汲み上げられないんですよねー。
やっぱり質問がさらされるのが苦なんですかね。
自分はオフラインは参加したことがないので、

名無しさん 2008-08-10T00:13:47+09:00
失敗の見せ方や質問の上手い人は稀有です

g000001 2008-08-10T00:13:51+09:00
どんな感じに議論が進むのかいまいちわかってないですが、

名無しさん 2008-08-10T00:14:07+09:00
印象としては質問に答えられる人よりもはるかに少ないです
なので質問まってまーすってのがうまくいかないのは
当然かなと思ってます
上手に状況を聞き出して、想像力を働かして問題点を見つけないといい回答は出来ないからね。

g000001 2008-08-10T00:15:32+09:00
その辺りになると、コミュニケーションの速さで
オフラインが有利なのかなー

名無しさん 2008-08-10T00:16:12+09:00
オフラインでやっても結局何が疑問だったのかは答えている側でまとめないと
まともな質疑の形にはできなさそうな気がします

g000001 2008-08-10T00:17:07+09:00
ま、でもオフラインだと
集まってわいわいやるってのが主眼な気もするので

名無しさん 2008-08-10T00:17:28+09:00
http://www.ginza-renoir.co.jp/miyama/

g000001 2008-08-10T00:17:29+09:00
内容云々は2の次でも良いようなw

名無しさん 2008-08-10T00:17:48+09:00
場所はこんなところかな。

g000001 2008-08-10T00:17:54+09:00
あ、貸し会議室はいいですね

名無しさん 2008-08-10T00:18:43+09:00
書記を決めるか各自でブログかwikiに質問事項まとめるとかしてみたいですね。
回答事項だw
インストールで一番知りたい情報が、使ってるOSとバージョン。導入しようとしているエディタやcommon lisp処理系のバージョンを含んだ情報かな。
それで答えられるかどうかが決まってくる。
踏まえておきます。
hoppyさんが出たsicpというのは
素人くさい?
です
なるほど
ちょっきんですかね
4章からだと…ゲッ


g000001 2008-08-10T00:32:21+09:00
ま、無責任ですけど、
とりあえず10人位あつまるなら
集まって適当な勉強会を開催してしまって
様子見というのはww
言い出しっぺより
うまい運用する参加者が現れるかもしれませんし、
成り行きな感じもありなんじゃないかと
もちろんhoppyさんが仕切りたいというなら
話は別ですけど(^^

名無しさん 2008-08-10T00:34:00+09:00
どうしたんですか?

g000001 2008-08-10T00:34:01+09:00
頑張っても失敗するときは失敗するでしょうし

名無しさん 2008-08-10T00:34:05+09:00
眠いし寝ますわ。

g000001 2008-08-10T00:34:21+09:00
はいー。お休みなさい

名無しさん 2008-08-10T00:35:06+09:00
ラグってました。おやすみなさい。

g000001 2008-08-10T00:35:15+09:00
確かに、4章からだと途中参加は厳しそうですね(^^;
貸し会議室だと6、7人集まらないと
金銭的にちょっと厳しかったような気がしますねー。
短い時間なら問題ないと思いますけれど…。
なかなか会場探しも苦労しますね。

名無しさん 2008-08-10T00:40:43+09:00
初心者の頃.xyzzyファイルが作れなくてすっごい悩んだナァ…
もしかしてonjoさんsicpでお会いしたことがあるとかですか?

1d3eqxV0wHq 2008-08-10T00:44:51+09:00
たまたま、呑んでた相手が天文屋だったもんで………

1. emacs のカレンダーライブラリはすでに組み込まれていて結構、(地球内)各地方の
   暦にも対応しているらしい。 今見たら知らない暦もあったw
2. イスラム暦のような純粋太陰暦は無問題(数式でとける)
3. グレオリゴ暦系は、イベント日付をきめれば充分な近似式があれば何とかなる
   ユリウス日と月齢の関係とか
4. 太陰太陽暦の使用されてた暦のルールがわかれば何とかなる

ここまでは想像の範囲だったんですが、*大問題がこれでした*

*各国の太陰太陽暦のルール変更をどうやって集めるか???*

知恵、借してください

結構酔っぱらってるんで話半分に聞いてほしい中間報告でした

名無しさん 2008-08-10T00:46:00+09:00
や、私は地方在住なので参加したことないです>SICP
そうですか。
sugoi

g000001 2008-08-10T00:48:14+09:00
*各国の太陰太陽暦のルール変更をどうやって集めるか???*は大変そうですねw

名無しさん 2008-08-10T00:48:54+09:00
素人考えですが

g000001 2008-08-10T00:49:09+09:00
という感じで、私も落ちます〜。勉強会是非開催してください!

名無しさん 2008-08-10T00:49:26+09:00
不安定だ…
1、各国のメンテナを集める
2、いないところは大使館に手紙
おやすみなさい。
集めるだけじゃなくてルールは未来にはかわるかもしれないですもんね。とりあえず日本の現在まで限定とか

1d3eqxV0wHq 2008-08-10T00:51:33+09:00
いあ,問題は各国の過去の歴史も考えなきゃいけない部分でorz
つか,もうだめ,落ちます

名無しさん 2008-08-10T00:52:02+09:00
おやすみなさい~
ハングル少し、セルビア語カタコト、なので翻訳を少し手伝えるかもしれません。
それでは、おやすみなさい。
2chnohoppyさんが何を学びたいかすらわからない状態で参加者としても講師としても手を挙げるのは怖い印象を持ちました。
2chno ->2chの告知をみたのですが
人います?
いないんですかね?
いないですよね。
サーセン
ノシ

g000001 2008-08-12T15:37:14+09:00
割と普段は閑散としてて呼んでも反応ないかもしれません、適当に置き手紙を残しておいて貰えれば誰かが答えるかもしれません(^^; >Nicknameさん
勉強会っていえば、「8時だよ」の進行役は常に
募集中ですので、どなたでもお気軽に自分の勉強したいテーマで進行役をやってみてくださいw
hoppyさんも進行役どうでしょうー。
自分の感覚では、400行程度のテキストを準備できれば、90分位は持つようです。
なので逆に原稿を用意できれば、失敗することは少ないんじゃないかなというのが今までLingrでやってみた
私の感覚です('-'*)

1d3eqxV0wHq 2008-08-16T07:21:05+09:00
emacs のカレンダーの件を取りあえずまとめておく
1. 表示とかフォーマット系が emacs に食い込みすぎ -> 要作り直し
2. 計算自体のポートは簡単だが Calendrical Calculations まんま、なので
   太陰太陽暦の扱いが取っても問題。過去の日付とか閏年の計算とか
3. 日本の暦:
     暦法の変更ではなく縁起が良くないので1日ずらすとかの理由での
     改暦多すぎ
     奈良/平安から応仁の乱あたりまでは年/月の table 作るしかなさそう
4. 中国の暦:
     使用していた暦法が不明の国が結構あるらしい
     http://www.sinica.edu.tw/~tdbproj/sinocal/luso.html
     こことか、何やってるんだろう?
5. 取りあえず, 土日で emacs カレンダーをまとめてしまって, 和暦等の
   太陰太陽暦については, 別途フレームワークから考え直した方がよさげ

g000001 2008-08-16T13:26:42+09:00
おおー、素晴らしいですね! emacsのカレンダー移植だけでも有用そうですね。> komさん
こんばんはー
お盆真っ最中ですが、本日も勉強会
開催させていただきます!
今回はCLの落とし穴の続きで、パッケージの項目からになります。
http://www.aiai.ed.ac.uk/~jeff/lisp/cl-pitfalls
よろしくお願いしますー
今日はさすがに少ないと予想しますが、どうなることやら!
今回人も少ないような気もするので、
今更ですが、いままで実施してみたことがなかった自己紹介でも取り入れてみようかなと思います。
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
みたいな感じで書ける方は、よろしくおねがいします〜。
自分は、
|g000001|
ハンドル: g000001
活動場所: http://cadr.g.hatena.ne.jp/g000001
自分内CL/Scheme割合: 9/1位?
みたいな感じです。

名無しさん 2008-08-16T19:47:25+09:00
ばんわ。

g000001 2008-08-16T19:48:00+09:00
こんばんはー

名無しさん 2008-08-16T19:50:57+09:00
ハンドル:snmsts
活動場所:http://xyzzy.s53.xrea.com/wiki/
自分内CL/Scheme割合: ほぼCL 
こんな感じですかね
今もxyzzy lispがホームですね。

g000001 2008-08-16T19:51:20+09:00
ありがとうございます!

名無しさん 2008-08-16T19:52:27+09:00
アピールしたいことが書けるテンプレにしたほうがよいかと
といいつつ私はないげ…

g000001 2008-08-16T19:54:06+09:00
そうですね、アピール項目
つけた方が良いかもしれませんね。
なんとなく控えめなテンプレでしたw
次回のはもう少しアピール度が高いテンプレをw

名無しさん 2008-08-16T19:55:18+09:00
ところで花火聞こえます?

g000001 2008-08-16T19:55:30+09:00
あ、雷じゃないんですねw
花火だったか

名無しさん 2008-08-16T19:55:51+09:00
激しくて結構つらいです

g000001 2008-08-16T19:56:06+09:00
どこの大会ですか?
調布とか?

名無しさん 2008-08-16T19:56:49+09:00
近そう何ですけど方角を確認してません
http://www.tamagawa-hanabi.com/
これっぽいな

g000001 2008-08-16T19:57:53+09:00
世田谷区たまがわ花火大会
2008年8月16日(土)19:00〜20:00
負けたw

名無しさん 2008-08-16T19:59:54+09:00
見てきた
我が家からは結構見える
お邪魔しますー

g000001 2008-08-16T20:00:16+09:00
こんばんはー

名無しさん 2008-08-16T20:00:33+09:00
ばんわ

g000001 2008-08-16T20:00:43+09:00
ではでは20時になりましたので、開始させて頂きます!

名無しさん 2008-08-16T20:00:45+09:00
ハンドル: kosh
活動場所: なし
自分内CL/Scheme割合: CLのみ

g000001 2008-08-16T20:00:53+09:00
ありがとうございますー 

今回で12目
今日はお盆直撃なので
少なそうですが(^^;
今回のお題は、CLの落し穴の続きで、パッケージの項目からです。
http://www.aiai.ed.ac.uk/~jeff/lisp/cl-pitfalls
落し穴は、長々と続いてしまいましたが、恐らく、今回で、落し穴は終りにできるかなと思います。
予定より早めに終ってしまったらCLクックブックよりパターンマッチングについて
http://cl-cookbook.sourceforge.net/pattern_matching.html
を議論してみたいかなと思います。
といっても、クックブックも中身が完成してないのですが…(^^;
自己紹介のテンプレは気にせずいつでも投下してみてください〜
では、パッケージのセクションから再開します。
Packages

名無しさん 2008-08-16T20:03:34+09:00
こんばんわ、では貼らせてもらいます。
 ハンドル:smeghead
 活動場所: http://d.hatena.ne.jp/smeghead/ http://starbug1.sourceforge.jp/
 自分内CL/Scheme割合: 10/0 CLは、ちょっと遊んでみた程度です。

g000001 2008-08-16T20:03:47+09:00
ありがとうございますー
では、最初ですが、
  * During the standardization of Common Lisp, the language was changed
    in a number of ways that affect package operations.  Many existing
    programs will break, if the new rules are strictly applied.  However,
    some implementations have not fully adopted the new rules, and some
    implementations still support old-style programs in one way or another.
    This item briefly describes some of the changes.
     - IN-PACKAGE no longer creates the package if it does not already
       exist.  Moreover, IN-PACKAGE is now a macro rather than a function.
という感じですが、
この落とし穴がちょっと古いので
仕様変更についてもちょくちょくでてきます
in-packageは、パッケージを作成する機能がなくなった。
ということで、
前は、in-packageすると
それ以前にパッケージが存在しない場合は、
作ってくれてたみたいなんですが、
それがなくなった。ということみたいです。
ということで、次に移りますと
     - In general, only macros and special forms have compile-time effects.
       That's one reason why IN-PACKAGE is now a macro.  However, other
       package operations such as IMPORT, EXPORT, and USE-PACKAGE are
       still functions.  To get the desired effects at compile time,
       use EVAL-WHEN or put the function calls in a file that you
       tell the compiler to load.  Use DEFPACKAGE when you can.
基本的にマクロとスペシャルフォームだけが、コンパイル時に作用する。と
in-packageがマクロになった理由もそこにある。
しかし、import、export、use-packageは依然として関数なので、コンパイル時に
動作を期待する場合は、eval-whenで囲う必要あり。
使えるなら、defpackageを使おう。
みたいな感じなのでしょうか。
in-packageは前は関数だったみたいですね
と言う感じで、
パッケージ定義まわりでeval-whenが頻出するのも
この辺りが関係しているんでしょうね。
ということで次ですが、
     - Instead of the LISP and USER packages, there are packages called
       COMMON-LISP and COMMON-LISP-USER.
ということで、昔は、lispパッケージと
userパッケージだったんですね。
これも歴史的な変更点ですね。
互換性確保のために今でもlispとか、userで動く処理系もありますねー
clispとか
昔は、lispだったけれど、common-lisp(ニックネームcl)、user→common-lisp-user(cl-user)に変更
という感じです。
それで次ですが
ちょっと疑問なところがあるのですが、

名無しさん 2008-08-16T20:11:01+09:00
xyzzyは昔仕様ですねー

g000001 2008-08-16T20:11:15+09:00
ですね、lispですよね。
基本的にcltl1な感じなのでしょうか? > xyzzy

名無しさん 2008-08-16T20:12:41+09:00
1と2とansiの違いがよくわかってないのですが
多分1みながら実装された部分が多いと思います

g000001 2008-08-16T20:13:22+09:00
なるほど、なるほど。
次なのですが、
     - There are a number of restrictions on how "conforming programs"
       can use symbols in the COMMON-LISP package.  See CLtL pages 259-261
       or section 11.1.2.1.2, pages 11-5 and 11-6 of the ANSI standard.
clパッケージでのシンボル名には色々な制約がある。詳しくは、CLtL2 10.2参照
みたいな感じでしょうか。
いまいち分からないのですが、
シンボルで使える名前には制約がありますよ、
位のものでしょうか?
若干なぞですが、
とりあえず、これでも良さそうなので、次に行きますと
* (EXPORT NIL) does not export NIL. You have to use (EXPORT '(NIL)).
これ細かいんですが、
(export nil)でnilはexportされない。
(EXPORT '(NIL))
としないといけないということなんですね。
foo:nilとかエクスポートしたいこととか
あるのかとか思いますが、
落とし穴っぽくはありますねw
で、次は問題を含んでいるのですが、
  * If you have a package named P that exports a symbol named P, you
    won't (in another package) be able to say (USE-PACKAGE 'P).  Instead
    of 'P you'll have to write "P" or maybe #:P.  ["Why?" is left as
    an exercise for the reader.]
Pという名前でパッケージを作成し、Pというシンボルをexportしたとする。
この場合、別パッケージで、(use-package 'p)をすると問題が発生する。

この場合、(use-package #:p)や、(use-package "P")とする
ことで問題を回避できるのですが、
これはslimeでコードを書いてると
対話的にコードを書いてると割と遭遇する気がしますね
これの理由なのですが、
答えたい方はいらっしゃいますか?w
上でいう問題というのは、
シンボル名の競合です
ここまで言うと回答みたいな感じなので、
書いてしまいますと
(use-package 'p)とした時点で、pがインターンされてしまうので、競合する。
という理由です
(use-package (intern "P"))のような状態を
想像するとわかりやすいような
そうでもないようなw
で、次なのですが、

名無しさん 2008-08-16T20:22:38+09:00
理由は、今知りましたが、昔嵌った記憶があります。その時、佐野さんに:p するのがいいと教えていただきましたw

g000001 2008-08-16T20:23:01+09:00
なるほどw
対話的に書いてると
割とハマりますよね
で、次なのですが、
ちょっと歴史的なところというか
今じゃ通用しない語呂合わせがありまして、
  * The best order for package operations is _not_ that of the "Put in
    seven extremely random user interface commands" mnemonic [CLtL p 280].
    Instead, it's the order used by DEFPACKAGE [p 271].  The change is to
    put EXPORT last.  Of course, it's often better to just use DEFPACKAGE.
defpackageとか、requireとかの記載の順序を
語呂合わせにして覚えると
"Put in seven extremely random user interface commands"
という語呂合わせがあったんですが、
それが、cltl2になって無効になってしまったらしいんですね
de,
provide
in-package
shadow
export
require
use-package
import
contents/中身
この順番の頭文字を
語呂合わせにしたのが
"Put in seven extremely random user interface commands"

で、これが無効だったとして
今じゃどうなのかなあと
思うのですが、
とりあえず、上では、exportを最後に書くべき
みたいな感じですね、
今だとdefpackageで書くことが多いので、
shadow export use-package importはdefpackageに含まれているとして
in-packageは
defpackageの後というのはほぼ自明な感じなので
後は
requireとprovideがどこにくるのか?
という感じですが、requireもprovideも
立ち位置が微妙になってしまっている気がするので
どうなんでしょうねー。
という感じで、これは宿題にしようかとw
(defpackage :foo
  (:use :user)
  (:export :extremely)
  (:shadow :seven)
  (:import-from :bar :in))
defpackageでフォローできる範囲は
こんな感じですね。

名無しさん 2008-08-16T20:32:15+09:00
いつのまにか浦島太郎。

g000001 2008-08-16T20:32:30+09:00
おかえりなさいw

名無しさん 2008-08-16T20:33:07+09:00
clパッケージの話はcltl2では11.6の話だと思いました
10.2で納得がいかなかったので…

g000001 2008-08-16T20:34:50+09:00
あ、ページ割り出し
間違ってましたかね。
ですね、11.6みたいですね

名無しさん 2008-08-16T20:36:09+09:00
- There are a number of restrictions on how "conforming programs"
can use symbols in the COMMON-LISP package. See CLtL pages 259-261
or section 11.1.2.1.2, pages 11-5 and 11-6 of the ANSI standard.

正しいプログラムがclパッケージのシンボルをどう使えるかには制約がいぱいある
くらいの意味ですかね

g000001 2008-08-16T20:38:28+09:00
なるほど、パッケージ名限定という感じでしょうか

名無しさん 2008-08-16T20:40:14+09:00
共立版ではp226-228です
一言で言えないくらい長いです。
基本はシステムが使ってるものを荒らすな。以上に見えますが、
丁寧ですね。

g000001 2008-08-16T20:40:53+09:00
なるほど、なるほど
かなり細かいですね
オンラインのcltlが落ちてる
11.6. Built-in Packages
に詳しく記載されてますね
なるほど、なるほど

名無しさん 2008-08-16T20:44:57+09:00
あーそうか
そこを参照してもらえばいいのか…
手元で日本語版を引いてからどうしようか困ります…

g000001 2008-08-16T20:46:12+09:00
いや、cltl2もってない方もいらっしゃるかと
言う感じで補足です(^^
という感じで
パッケージは終わりまして
次はCLOSです
CLOS
* Shared (i.e., class-allocated) slots of standard classes are not
    per-(sub)class.  That is, if a class C has a slot S with :ALLOCATION
    :CLASS, that one slot is used by all instances of C or of subclasses
    of C, except for subclasses where the slot has been "shadowed"
    [See CLtL p 779].  To get a per-class slot, you have to explicitly
    define it for each class.
なんというか、
:allocation :classを指定すると、subclassまで、共有される。
クラスごとにしたい場合は、明示的にクラスごとに指定すること、を
いっているのでしょうか
適当にコードを書いてみると
(defclass c ()
  ((share 
    :accessor val
    :allocation :class
    :initform 42)))
というのを書いて
shareというクラスで共有する変数を定義して
(defclass k1 (c)
  ((share :allocation :instance)))
このcクラスを継承したk1を作成して
(defclass k2 (c)
  ())
同じくk2を作成して
(let ((inst1 (make-instance 'c))
      (inst1.5 (make-instance 'c))
      (inst2 (make-instance 'k1))
      (inst2.5 (make-instance 'k2)))
  (setf (val inst1) 48)
  (values (val inst1)
          (val inst1.5)
          (val inst2)
          (val inst2.5)))
とかすると
;==> 48,48,42,48
となるんですが、
k1のように明示的にインスタンスごとの変数ですよと
宣言しないと
共有されてるので、一緒に変更されてしまうよと
いうことなのかなと思いました。
なんとなくこれもハマるときはハマりそうですね
という感じで次なのですが、
  * Don't forget, with :AROUND methods, that other :AROUND methods
    might execute around them.  (E.g., an :AROUND method that
    recorded run time might not be the outermost one.)  A similar
    point applies to :BEFORE and :AFTER methods.
:aroundメソッドはさらに他の:aroundメソッドが実行される可能性があることを忘れてはいけない。
位のところでしょうか
:aroundとか:before、afterはそれぞれ
入れ子になるので、
複雑になると
どういう順番で実行されるのか
把握するのが難しくなりそうですね、
それぞれ、特定できるものから
実行されて行くんですが、
あ、afterは逆になりますね
組み合わせで注意すると、
注意して扱う必要があるよと
いう感じでしょうか。
図を用意すれば、良かったですねー

名無しさん 2008-08-16T20:58:34+09:00
中途半端に説明するのも危険ですよね…

g000001 2008-08-16T20:59:04+09:00
ですねw
適用の順番も変更できますし
基本は
around
 around
  ...
  before
   before
   ...
    基本
   after
  after
 ...
 ...
 around
around
これくらいの感じなんでしょうか
詳しくは、CLOSの本を参照していただくと

名無しさん 2008-08-16T21:00:14+09:00
んで前後のaroundが組…
closの本…

g000001 2008-08-16T21:00:36+09:00
ですね、挟み込むような感じで対になりますね
実践CLとか参照していただければと
思います。
http://gigamonkeys.com/book/object-reorientation-generic-functions.html
とか、これ以降の章とかですねー
クラスはこれの一つ前の消化な
章かな
いや、ここから始まりでしたw

名無しさん 2008-08-16T21:03:36+09:00
総称からクラス定義ですよ

g000001 2008-08-16T21:03:36+09:00
で、次に行きますと

名無しさん 2008-08-16T21:03:43+09:00

はい

g000001 2008-08-16T21:04:06+09:00
いえいえ、すいませんw
で、次なんですが、
ちょっと分からない感じでして
  * Don't forget that a method specialized to class C can be called
    on instances of subclasses of C, or that such a subclass may have
    ancestors that have no other relation to C.
とのことなんですが、
クラスCで特定化するメソッドを書いたつもりでも、Cのサブクラスのインスタンスでも反応して
しまうことに注意ということなんでしょうか?
コードで書きますと
(defclass c ()
  ())
を定義して
(defclass cc (c)
  ())
というcを継承したクラスを定義して
(defclass no-other-relation-to-C (cc)
  ())
名前はあれですが、ccを継承したcの孫を定義して
(defmethod c ((x c))
  (print 'hello))
というメソッドを定義したとしますが
(c (make-instance 'c))
;=> HELLO
まあ、これは、おkですよね
で、子供と孫ですが、
(c (make-instance 'cc))
;=> HELLO
(c (make-instance 'no-other-relation-to-C))
;=> HELLO
ということで、
このような事態を指してるんでしょうか?
割と意図してないことが多いような動作な
んでしょうか?
自分は経験が浅いので何ともいえないのですが、
cで特定化したつもりのものが
反応してしまうというのは
動きとして把握しづらいかも、とは思います
他の言語はどういう感じなのでしょう?
逆に上の場合で
Cだけに反応するようにしたいばあいは、
メソッドに追加で記述する必要があったり
するのかなと、いう疑問もあったりするのですが、
これも難しいので
宿題にしようかなと思いますww
上の場合、
追加で
(defmethod c ((x cc)))
(defmethod c ((x no-other-relation-to-C)))
みたいに継承されてるクラスに
メソッドをつけてあげれば
どうにかなるような気もしますが、
あまりうまくない気もしますね。
と言う感じで、宿題は
ありますが、

名無しさん 2008-08-16T21:17:57+09:00
難しいですね。他の関係ないクラスが、継承ツリーに入ってくることに違和感があるのは、私が多重継承がない言語に慣れすぎてるからですかね。

g000001 2008-08-16T21:17:57+09:00
落とし穴はこれで
多重継承だとこの辺は

名無しさん 2008-08-16T21:18:55+09:00
総称関数も利いている気がしますね

g000001 2008-08-16T21:19:21+09:00
総称関数は
特定的なクラスから作って行く
って感じなんでしょうか?

名無しさん 2008-08-16T21:19:39+09:00
確かに総称関数にも慣れてないです。

g000001 2008-08-16T21:19:51+09:00
特定できそうなところから作って行く
割とやりようによっては
カオスな感じなんですねw

名無しさん 2008-08-16T21:21:10+09:00
そうですね。CLOSと総称関数は、私の宿題にします^^;

g000001 2008-08-16T21:21:45+09:00
総称関数系の言語って
CLOS以外には、
あ、wikipediaみればいいのかw
項目がなかったw
なんとなく、ほとんどCLOS系の言語な
気はしますね、
SchemeのTinyCLOSとか
Dylanとか
GOOとか
という感じで宿題は
あるものの
落とし穴はこれでとりあえず終了と
宿題は後でまとめて
みたいと思います。
結構あったきがしますがw

名無しさん 2008-08-16T21:27:04+09:00
いっつもぼんやりと参加しているので
総称関数と総称型は違うのですか?
何があったかまったく覚えていないです…

g000001 2008-08-16T21:27:58+09:00
今回は
http://www.lingr.com/room/common-lisp-jp/archives/2008/08/16#msg-44973923
http://www.lingr.com/room/common-lisp-jp/archives/2008/08/16#msg-44976462
no
の2つですね。
provideとrequireの置き場所は
置くとしたらどこがいいか

名無しさん 2008-08-16T21:28:51+09:00
総称型って強い型の言語でのアレですか?総

g000001 2008-08-16T21:29:03+09:00
と直近の継承と反応してしまうメソッドですね。

名無しさん 2008-08-16T21:29:50+09:00
何が似ているのか知りたい>a-san
すいません。「総称関数」って始めて聞いたので反応してしまいましたw。
とりあえず名前はかなり似ている。

g000001 2008-08-16T21:30:57+09:00
http://ja.wikipedia.org/wiki/%E7%B7%8F%E7%A7%B0%E5%9E%8B
C++とかが
メジャーなんでしょうか

名無しさん 2008-08-16T21:31:29+09:00
だけど、総称「型」と総称「関数」は型と関数という大きな違いがあります
勉強します.

g000001 2008-08-16T21:32:47+09:00
自分は総称関数しか知らないので、
総称型の方がどういう仕組みで
選択されて行くのか
というw

名無しさん 2008-08-16T21:33:37+09:00
こう、型を一部分だけ可変にしてイロイロしたい => 総称型
総称関数は、引数の型によってメソッドが特定される。
任意の型のリストをListとし、文字列のリストをListと定義する、みたいな。
っていうとC++と同じに聞こえるけど、メソッドの特定に使われるのは全部の引数なんすよ。スロットで役が揃うような感じで

g000001 2008-08-16T21:36:15+09:00
割と
ディスパッチとか
オーバーロードとか

名無しさん 2008-08-16T21:36:30+09:00
任意の型をTとして、下のように決めるっと。
(総称関数 T T T)  => 0
(総称関数 STRING STRING T) => 50
(総称関数 STRING STRING STRING) => 100
(総称関数 1 1 1) => 0
(総称関数 "a" "b" "c") => 100
みたいに、呼び出したときの引数の型によってメソッドが決まる。

g000001 2008-08-16T21:40:34+09:00
オーバーロードっていうのは、
総称型 で
の動きを表現するさいに使われる言葉なんでしょうか?

名無しさん 2008-08-16T21:41:10+09:00
引数で型のマッチングしてくれるの?
単に同じ関数とか演算子に複数の定義があることをオーバーロードと読んでいたような…
うん、Javaにもありますね。型で判断するヤツ。
CLOS用語だと特定化というのかな>
型でマッチング

g000001 2008-08-16T21:45:45+09:00
なるほど、なるほど

名無しさん 2008-08-16T21:49:16+09:00
複数の同名の関数が似た引数の定義で、コンパイル時に解決できないとエラーになります。
lispの総称関数がコンパイル時に解決…
あんま無さそう…
一応メソッド定義の時点で存在してないクラス名だと文句言われるんじゃないかな。
http://ja.wikipedia.org/wiki/Common_Lisp の総称関数に短い説明があります
ふむ。「総称関数はメソッドの集合である。」

1d3eqxV0wHq 2008-08-16T21:58:38+09:00
MOPがPCLベースの奴だとメソッド定義の時には文句言わないような気が...

g000001 2008-08-16T21:59:53+09:00
SBCLってPCLベースのようですが、
SBCLだと文句は言われるようですね、手元の
手元で確認する限りではですが…。

名無しさん 2008-08-16T22:01:42+09:00
こんばんは。Onlispに総称関数(Generic Function)が索引にあります。引用してみましょうか?

1d3eqxV0wHq 2008-08-16T22:01:44+09:00
おわ,ほんとだ. 何勘違いしてたんだろ?

g000001 2008-08-16T22:02:10+09:00
こんばんはー

1d3eqxV0wHq 2008-08-16T22:02:28+09:00
親戚と宴会中で酔っ払ってるんで発言は控えた方がよさそうですw

g000001 2008-08-16T22:02:47+09:00
いえいえw
お盆って感じですねw

名無しさん 2008-08-16T22:03:43+09:00
世間のお盆ぽさに触れてお盆だなーと思います。

g000001 2008-08-16T22:04:20+09:00
自分はテレビもないので完全にそんな感じですw

名無しさん 2008-08-16T22:04:52+09:00
テレビはオリンピックと高校野球で8割くらいじゃないですかね

g000001 2008-08-16T22:05:11+09:00
オリンピックもTVがないとこんなにも

名無しさん 2008-08-16T22:05:15+09:00
私もかなり適当に発言しているので。今HyperSpec引いてます。

g000001 2008-08-16T22:05:22+09:00
どうでも良いものかとびっくりしていますw

名無しさん 2008-08-16T22:08:27+09:00
メソッドの下にはディスパッチという概念があり、それは複数の引数に対して行うことができ、それが基づくのは引数のクラスだけに留まらないという理解の下でCLOSは作られた。メソッドがこの一般的な概念の上に構築されると、それは個々のクラスから独立したものとなる。メソッドは概念的にクラスに密着するのでなく、同じ名前のほかのメソッドに密着するようになる。CLOSではそのようなメソッドの集まりをジェネリック関数(generic function)と呼ぶ。(引用注:索引に総称関数とジェネリック関数参照との記述有)
パラメータ特定子(スペシャライザー) 1. 引数 2. クラス 3. (eql object)
On Lispですか?
はい。OnLispのp.378~です
もう少し前後も必要でしょうか?必要なら引用します。
a-san には「総称関数はメソッドの集合」で通じたんじゃないかなw
Javaとの関連で言えばそれでOKです。
マルチメソッドディスパッチは便利だけど、生かすには設計方針をそれに合わせないといけないからなー
メソッドって、クラスには属していない???
そういえば、Gaucheもそうだったような。

g000001 2008-08-16T22:17:00+09:00
GaucheはCLOS系なので

名無しさん 2008-08-16T22:17:44+09:00
Java/C++系のオブジェクト指向とCLOS系はずいぶん違うからね。

g000001 2008-08-16T22:17:47+09:00
大体感覚は同じですよね('-'*)
自分は特定のクラスに属してないOOPしか知らないというw

名無しさん 2008-08-16T22:18:16+09:00
個人的にはC++から入ったので、CLOSを最初にさわったときは
(defmethod foo (a) ...)
(defmethod foo (a b) ...)
で処理系がブーブーいってきたのですごく印象悪かった。
(ちなみにR言語のオブジェクト指向もCLOS系です。)

g000001 2008-08-16T22:20:42+09:00
オブジェクト指向言語は
色々あるのが
難解というか、それぞれ違う名前に
したらいいのにとか思いますね(^^;

名無しさん 2008-08-16T22:22:07+09:00
たとえば???w
Rはよさそうですよね。LispStatの人もRにいっちゃったしなぁ
そうなんだよね。。。
g000001 2008-08-16T22:24:07+09:00
メッセージパッシング〜とか、クラス〜とかダメですかねw > たとえば

名無しさん 2008-08-16T22:28:26+09:00
もしかして、話を横道にずらしてしまいましたか?

g000001 2008-08-16T22:28:52+09:00
いや、そんなことはないと思います(^^
なんとなく、まったり進行なんだとw

名無しさん 2008-08-16T22:31:17+09:00
脱線するけどsqueakのオブジェクト指向もどくとくなの?
Smalltalk自体が独特だたような

1d3eqxV0wHq 2008-08-16T22:35:08+09:00
ハード設計やってる人間からみると, メッセージパッシングってのは馴染みやすいんですけどね...

名無しさん 2008-08-16T22:35:12+09:00
1 + 2 * 3 が 9 の世界なのにあまり文句を言われないのは羨ましい

g000001 2008-08-16T22:35:35+09:00
squeakだとsmalltalkの他に
Squeak eToysってのが
あってこっちはプロトタイプベースらしいですね
良く分かってないですけどw
flavorsもメッセージパッシング
でしたね。

名無しさん 2008-08-16T22:40:25+09:00

Flavorsとか使ったことないす。入門したときにはすでにANSI CLだったし。
http://www.cliki.net/KR これなら学生時代にいじったことはある。でもCLOSでいいやと思ってそれきり。
ログみてびっくり
> 暦法の変更ではなく縁起が良くないので1日ずらす
暦ってすごいんですね…

g000001 2008-08-16T22:51:37+09:00
おおー、プロトタイプベースもあったりするんですねー >KR
縁起でずらす、ってのも凄いですよねw

名無しさん 2008-08-16T22:58:16+09:00
ところで進行役って何を課題にしてるんでしょう?

g000001 2008-08-16T22:59:15+09:00
私ですか?w
21:30までは、
一応課題がありまして
今回は、CLの落とし穴の続きに取り組んでみました
それで、21:30を過ぎたら
フリートークというような
流れになんとなーくなっておりますw

名無しさん 2008-08-16T23:00:40+09:00
進行役を募集してますよって振りがありましたのでそれででした。

g000001 2008-08-16T23:01:08+09:00
なるほど、
なにかお題にしたいものがあったら
お好きなものを題材に
土曜の20:00-21:30を使っていただければなとは
思っていますので
良かったら是非(^^

名無しさん 2008-08-16T23:02:19+09:00
はい。ありがとうございます。

g000001 2008-08-16T23:02:23+09:00
自分はもう12回やりましたのでw
新しい風をですね
吹き込んでいただければなと
思ってはいるんですけども。
大体は、水曜日くらいをリミットに
お題を告知して
参加者の方を募集すると
いう流れでいままでやってまいりました
それで、今までの経験で、
元原稿を用意して
コピペして行くのが割とベターかなと
いうのが何となくの感じですね。
お題は、ANSI CL本を読む、でも、
なんでも良いのではないかなと思っています
ちなみに、私も勉強会について
詳しく知っているわけではないので、
まったくもって至らぬ感じでやっておりますw

名無しさん 2008-08-16T23:08:56+09:00
課題本の場合、読む場所はここが難しそうだからピックアップします、みたいな感じでいいんでしょうか?
他の部分は質疑で~として。

g000001 2008-08-16T23:09:26+09:00
どうなんでしょうねー
自分も手探りなので
良く分かっていないのですが
自分の場合は、
全部通しでやってますねー今までは

名無しさん 2008-08-16T23:11:08+09:00
そうですか。ANSI CL本だと最初の方は初歩的なのでくどくなってしまいそうです。

g000001 2008-08-16T23:11:56+09:00
いや、どうなんでしょうね
Lingrでやる場合は、
とにかく突っ走るしかないのかなとか思っていて
くどくてもいいのではないでしょうか

名無しさん 2008-08-16T23:13:38+09:00
g000001さんが選ぶ教材は
初歩な雰囲気があんまりないですから、逆に
初歩的でもよいんじゃないでしょうか

g000001 2008-08-16T23:14:52+09:00
そうですね、なんというか、
若干マニアックというか、
自分が知りたいものに偏っていましたので、
ここで新しい風をですね、吹き込んでいただければとw

名無しさん 2008-08-16T23:15:50+09:00
大体の仕様が頭に入ってなくての参加が難しいですよね。

g000001 2008-08-16T23:15:58+09:00
一応、cookbookとか万人受けしそうなものに
振ってみてはいるんですがw
自分は予習なしを前提としているんですが、
予習必須ってパターンも良いかもしれません。

名無しさん 2008-08-16T23:17:47+09:00
個人的には歓迎です<初歩的なもの
自分はCL
といっても xyzzy-lisp ばかりですが

g000001 2008-08-16T23:20:09+09:00
自分の場合は、とりあえず、何も考えないで

名無しさん 2008-08-16T23:20:16+09:00
を弄っているので、今回のCLOSは正直難しかったので

g000001 2008-08-16T23:20:16+09:00
初めてしまえ!だったので、
対象者も特に限定してなかったんですよね
身近で使ってないところはなかなか難しいですよね(^^;
落とし穴も、ハマってから気づくパターンなので、
ある程度経験がないと、ただの丸暗記になるでしょうね(^^;
色々募集の方法はあると思いますが、
例えば、予習必須で、ACL本、何々ページまでを
読んで分からなかったことを議論とか
そういうのも良いかもしれないですね。

名無しさん 2008-08-16T23:23:55+09:00
そうですね。隔週で20ページくらいならいけるかな。考えて見ます、

g000001 2008-08-16T23:28:34+09:00
とりあえず、
火曜か水曜くらいまでに結論がでるようなら
来週からでもOKですw

名無しさん 2008-08-16T23:30:26+09:00
では、また来週、楽しみにしてます。よろしくお願いします。

g000001 2008-08-16T23:31:01+09:00
はい〜、ありがとうございます!

名無しさん 2008-08-16T23:31:22+09:00
了解しました。来週はさすがに無理です。私もそろそろ退散します。ありがとうございました。

g000001 2008-08-16T23:31:58+09:00
はい、ありがとうございますー
よろしくご検討くださいませ!
なんとなく漫然と情報交換できる場が
確立できると良いのですが、
Lingrも自分が常駐してないしなあw

名無しさん 2008-08-16T23:34:28+09:00
もっと発言してクレクレな感じですかね

g000001 2008-08-16T23:35:04+09:00
いや、やっぱり
そんなに毎日ネタはない、ということに
尽きる気もしないでもありませんw

名無しさん 2008-08-16T23:35:23+09:00
自己紹介は今のほうが適切だったかなーと読書の合間に発言してみる。
gaucheの部屋くらい漫然と雑談できたらいいっすねー

g000001 2008-08-16T23:36:07+09:00
終わってから自己紹介も
ありかもしれないですね、
というか人が一番多いときがいいのかw
今回始まりに
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
みたいな簡単な自己紹介テンプレを
用意して、なんとなくの方向性を
探ってみましたw

名無しさん 2008-08-16T23:37:40+09:00
活動場所はてな。 自分ないCL/Scheme割合100:0^^;

g000001 2008-08-16T23:38:11+09:00
yasさんschemeやってないって意外ですよね。

名無しさん 2008-08-16T23:38:47+09:00
意外かもw
除算エラー…

g000001 2008-08-16T23:39:42+09:00
常駐してる人がいないとなかなか漫然とした雑談もという…。
見つけたネタは貼り付けるようにしてたんですが、
最近こっちに貼ってないなあw

名無しさん 2008-08-16T23:41:12+09:00
gaucheんところって核のメンバーがあつまってて
本だしてる人たちだからなぁ。
濃いかもしれない。

g000001 2008-08-16T23:42:26+09:00
ま、気軽に書き込めるかといえば、

名無しさん 2008-08-16T23:42:43+09:00
あの周辺とruby周辺ってハッカー的な人が集まってるなぁ。と言う印象がある。

g000001 2008-08-16T23:42:44+09:00
なかなか難しいですねw
ここは気軽に書き込める筈ですよw
もっと、どうでも良いような質問が投下されると
良いなあと思うんですが、
あんまり質問も投下されないんですよね。

haiju 2008-08-16T23:43:44+09:00
でも、
どうでもいいような質問の方が恥ずかしくて難しいような気が

g000001 2008-08-16T23:44:31+09:00
なんというか、バランスというか、

名無しさん 2008-08-16T23:44:35+09:00
うん。誰もこんなことも知らんのか〜見たいな事はいわないから気楽にとおもう。

g000001 2008-08-16T23:44:47+09:00
2chみたいにボロクソ言われるか、
ここで気軽に質問するか、みたいなw

名無しさん 2008-08-16T23:44:56+09:00
私は気がつかずに言ってそうです…
いかんw
lispもしらんことのほうがおおいから、勉強になるんだよね。<質問をみる。
LISP関係の話題なら
というのが微妙にハードル高いような
初歩の初歩のつもりで質問答えられなくてcltlを引いていると楽しいですね
質問を見ると
だいたい知らないことのような気がします
己れの無知をしらん人ほどと人にボロクソ言いやすいから。

g000001 2008-08-16T23:48:54+09:00
他の言語だとどういう感じなんですかねー
まず、CLの立ち位置を分かってもらうところから
始めるべきなんですかねえ
なんというか、今のCLが簡単にできるところというか
いいところというかw
Windowsでブラウザ作りたい、とか
エディタ作りたいってのが多いですよねw

haiju 2008-08-16T23:51:00+09:00
わたしの周りの
C++やJavaに慣れた人に言わせると
何でCLである必要があるの?
とか
CLやるくらいならC++やJavaを覚えろ
で終了してしまいます

名無しさん 2008-08-16T23:52:49+09:00
どういうコンテキストで言っているのかわかりませんが、
仕事文脈では間違いなく正しいことのように聞こえます…

haiju 2008-08-16T23:53:50+09:00
そうですね。
それぞれの言語に
ふさわしい分野がありますから。
一般的な開発系の仕事では
間違いないのかもしれません

名無しさん 2008-08-16T23:55:54+09:00
C++も自由度は高いけど、自由度を高くするためにすごく複雑な文法になってる。本格的に使いこなそうと思えばlisp以上に大変と言う印象がある。

g000001 2008-08-16T23:56:30+09:00
複雑でもC++ってのは、やっぱり普及した言語の
強みなんですかね(^^;

名無しさん 2008-08-16T23:56:41+09:00
複雑になりすぎて扱いきれる人は少ないという印象。
better Cとして使う程度なら敷居は余り高くないけど。
C++のテンプレートのおかげで自由度柔軟性が高くなってるけど、common lispのマクロには追いつけないと言う印象がある。

g000001 2008-08-16T23:58:24+09:00
C++ほど普及してるのにマスターできる気がしないって言われてる言語もあまり聞かないですね
LISPのまだまだ未熟です、ってのとは
何か質的に違ってますよね。

名無しさん 2008-08-16T23:59:39+09:00
C++できるって?じゃぁboostくらいは書けるよね?
こうですか?
lispの柔軟性はもともと形無しから形を作るけどC++は型があってそこから柔軟性を作って拡張だからね。もともと型がある上の柔軟性というのは穴を開けるために複雑になるのは当然なのかなぁ。と言う印象がある。
マスターはそのレベルだと思ってる<boost
clに挫折感を与えられるライブラリを用意すれば
きっと同じような表現に!

g000001 2008-08-17T00:03:08+09:00
CLは多分問題をどこまでも迂回できるんじゃないですかねw

名無しさん 2008-08-17T00:03:45+09:00
clで挫折感?loopマクロを自分で書けとか?
かけないよ。^^;
Javaはすべてがオブジェクトで記述だっけ?
PAIPのサンプルにでてきますよw
うわっ

g000001 2008-08-17T00:15:06+09:00
なにかこう、ぱっとしたたまり場は
作り出せないものかw
日がな一日CLの話ができるようなw

名無しさん 2008-08-17T00:17:24+09:00
全面的に公開されている場で難しい問題が一つあってね。それは、ここを監視して、別のところで誹謗中傷を繰り返すようなものが出来る危険性かな。非公開が人を集められるか?ときかれるとそれも違うし良いアイデアはないんだよね。
mixiとかどうなのかしらないけど。

g000001 2008-08-17T00:18:20+09:00
とりあえず、mixiのCLコミュは割と
過疎ってますねw
誹謗中傷については、そういうのはでてくる

名無しさん 2008-08-17T00:19:20+09:00
あるんだ。うーむ、あちこちに小規模なコミュニティがあるとのぞくのも一苦労ですね。

g000001 2008-08-17T00:19:26+09:00
可能性はありますよねー。
http://mixi.jp/view_community.pl?id=3160086
ですね。
最近の動きとしては、ここの勉強会の告知ですねw

名無しさん 2008-08-17T00:21:04+09:00
mixiは昔止めて以来入ってないからなぁ。よかったら招待してください :-)

g000001 2008-08-17T00:21:15+09:00
そういえば、割と小規模なコミュニティを濫造してますね、私はww
一応、いろんなところに糸を垂らして、
どれか釣れないかな〜くらいの感じでいたら
作りまくってましたw
mixiは招待しますよ〜 >yasさん
でも、昔より動きがなくてつまらないかもしれません > mixi

名無しさん 2008-08-17T00:23:09+09:00
台湾でもcl案内作った?w
さんきゅ
高確率で同じ魚が釣れる釣堀状態w

g000001 2008-08-17T00:23:21+09:00
台湾ではつくってないですw
ですね、かなり面子は同じかもしれませんw

名無しさん 2008-08-17T00:25:12+09:00
g000001さん的には、入門者が気軽に、入ってこれる場があるといいな、という感じでしょうか?

g000001 2008-08-17T00:25:36+09:00
ですねー
もう、初心者の方でも誰でも
人口が増えればいいなーと漠然と思ってますw

名無しさん 2008-08-17T00:26:04+09:00
「朝まで生Lingr プログラミング言語編」これで他言語をけちょんけちょんにして・・・w 人気をとる・・・
1年半前に入門した時のことを考えると、最初結構苦労した覚えがあります。

g000001 2008-08-17T00:27:40+09:00
いや、それかなり難しいというかw>disり

名無しさん 2008-08-17T00:28:46+09:00
今、具体的に何に苦労したのか思い出せないのが、難しいところなんですが。。。
Boostを極めたC++の達人とかがきたらけちょんけちょんにされてしまいそうw >朝まで生Lingr
俺もANSI Common Lisp/PGだけがたよりだった。
何がモチベーションになったかというと、ポールグレアムの書いてることが理解したかったという、かなり不順な動機だった気がします。
まずは再帰に悩みました。他言語もまともに軽い文法しか覚えてなかったので
だれか日本のグレアムと呼ばれるようになってくれ 笑
私もグレアムさんの「プログラムを書くプログラム」というのが気になりました。
何が言いたいかわからないですが、入門しようとしてみた人というのは、結構居るのではないかと。
私の最近の動機は、Lispの仕事の種をまきたいと思っています。
相当頭が切れるだろうな<Boostマスター
> 日本のグレアム
Allegro Serveを覚えたいのはそのためです。
あー、最初は、無理矢理loopを使わずに、再帰の練習したことあります。
いいアイデアw
あれ?さっきの最後2行は勝手に書かれた。無視してください。
あと他言語とは違う独特の用語。
束縛とか
また日本語の訳と海外の用語の対応とかネットで調べるときに時間がかかります。

g000001 2008-08-17T00:44:57+09:00
てすてす
なんか急につながらなくなって、onjoさんとIRCで緊急連絡しあってましたw

名無しさん 2008-08-17T00:45:35+09:00
Allegro Serveって、http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/aserve.html ですか?
知らなかったけど、面白そうですね。
用語あまりしらないから感覚で使ってる 汗
愛の連絡?謎

g000001 2008-08-17T00:45:51+09:00
haijuさんとはwassrでw

名無しさん 2008-08-17T00:47:22+09:00
てすてす なぜかlingrから蹴り出されしまっていました

g000001 2008-08-17T00:47:34+09:00
いや、やっぱり調子おかしいw

名無しさん 2008-08-17T00:49:44+09:00
mixiさんくす紹介文も書いといた>g000001さん
smegheadさん、そうれです。確かオープンソースだったはずです。
http://jp.franz.com/base/product_serve.html
そうれです>それです。
Allegro Serveは、継続ベースではないっぽいですね。パっと見なので違うかもですが。時間みつけて見てみよう。
継続ベースじゃないですよ。普通のWebサーバーです。
たとえば AllegroServe は HTTP サーバーを Lisp で書き直しただけであり、 Web プログラミングに新たなスタイルを導入したわけではありません。
そうなんですね。>普通のWebサーバー
hoppyさんが、上げてくれた点(再帰、用語、調べ方)は、言われてみれば私も最初に嵌った覚えがありますねw
http://209.85.175.104/search?q=cache:ZoZoKUdTprYJ:www.javaopen.org/~yasuyuki/hns/%3F200407b+Allegroserve%E3%80%80continuation&hl=ja&ct=clnk&cd=5&gl=jp&lr=lang_ja&client=firefox-a
かぶった
・・・目標変えたほうがいいかな。

g000001 2008-08-17T01:04:36+09:00
てすてす
復活?

名無しさん 2008-08-17T01:04:47+09:00
聞こえてますよ~

g000001 2008-08-17T01:05:25+09:00
どういうわけか
つながらなくなり
復帰w

名無しさん 2008-08-17T01:06:01+09:00
なるほど。アプリケーションサーバと聞いて、Kahuaの方を連想したので、継続ベースなかなと思ってしまいました。>Allegro Serve

g000001 2008-08-17T01:08:10+09:00
お、今度は復活できたっぽい
いや、やはり変なのかも、どうしたことだ〜

名無しさん 2008-08-17T01:08:42+09:00
私もよく調べずに商用だから豪華な機能があるんだと勝手に思ってました。。。

g000001 2008-08-17T01:10:29+09:00
4人名ほどさまよっておりますが、

haiju 2008-08-17T01:10:58+09:00
すみません。部屋は出れたのですがログアウトできませんでした

g000001 2008-08-17T01:11:06+09:00
どうもLingrが不調のようなので、
自分は落ちます(;_;

名無しさん 2008-08-17T01:11:47+09:00
おつかれさまでしたー

g000001 2008-08-17T01:11:57+09:00
平日でもお気軽に書き込んでくださいまし〜

haiju 2008-08-17T01:12:17+09:00
私も入り直したところですが、また出ます。
中途半端ですが、お疲れ様でした

名無しさん 2008-08-17T01:14:03+09:00
私も寝むくなったので、消えます。
おやすみなさい。といいつつ私も落ちます。
ようやくつながったと思ったら、こんな時間ですか…
自分も寝ます。お疲れ様でした。
帰省から戻ってきました。
実践CLで変な感じで「x」が紛れ込んでいるところがありました。
p.285 「この場合にはincrement-countの2番目のx引数として渡された〜」
p.311 「どの型をread-valueに渡xすか〜」
p.325 「ここでのミソは、それらの数値をxどうやって〜」
それとp.146 (caar (list 1 2 3)) はエラーになるはずですが、矢印の右側がなんにも書いてありません。
http://common-lisp.net/project/ucw/
よく調べてないですが上記は継続ベースっぽいです。
今週末は用事があるので参加できないです~。それではおやすみなさい。

1d3eqxV0wHq 2008-08-20T07:05:04+09:00
emacs カレンダー, 重度の二日酔いで, 週末作業できなかったw
で, お知恵拝借. せめて, 日本語表記の"2008年8月20日"とか読みたい
読み飛ばせば大丈夫って話もあるんですが, unicodeまわりの実装が
どうなってるか知りたい部分もあるわけです.
俗に言う, "全角スペース"とか"全角カンマ"とかも一応スペースとか
区切り文字として扱いたいので.
後, 将来的に中国暦までサポートしたi
いので, サロゲートの扱いがどうなってるかとか...
で, CL系のこの辺の事情をサマライズした資料へのポインタって
誰かご存知内でしょうか?

g000001 2008-08-20T13:14:32+09:00
自分はまったく詳しくないのでなんともいえないのですが、
最近edi weitz氏が発表した
http://www.weitz.de/cl-unicode/
がポータブルなunicodeのライブラリを目指しているようです。

名無しさん 2008-08-20T16:20:19+09:00
実践Common Lispの付録が資料としては良いかもしれません。サロゲートペアが内部に見える実装は知らんですね

g000001 2008-08-20T16:21:23+09:00
先々週にNANRIさんから教えてもらった、xyzzyのtimestamp.lをCLに移植してみました。
timestampでパッケージ作っても良かったんですが、xyzzy-compatという名前にしてみました。
何かあったらガシガシ直してみて下さい〜。
http://coderepos.org/share/browser/lang/commonlisp/xyzzy-compat

名無しさん 2008-08-21T05:17:09+09:00
NANRIさんのlingrでの指摘は原稿に取り込みました。ありがとうございます。(_ _)
前のunicodeの話ですが、http://common-lisp.net/project/babelも役に立つかもしらない
slime2008-08-18,clips 2.46 on xubuntu 8.04 amd64うごかない。 Changelogを見る限りonjoさんのパッチはあたってるみたいなんだけど、うーん

g000001 2008-08-21T16:02:03+09:00
自分も真似してslime最新に上げてみましたー
確かにclisp 2.46との相性が悪くなったような気も…。でも自分とこは、ちょっと前からerror起きるとswankから切断されてたので、元々おかしいのかもw
ChangeLogみてると随分活発になってますね
こんばんはー、CL勉強会。本日も開催させて頂きます。
お題は、cl-cookbookより、ハッシュ篇です。
http://cl-cookbook.sourceforge.net/hashes.html
今回も軽く自己紹介テンプレ用意してみました!
良かったら、記入してみて投稿してみてくださいー。
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:
今日の参加者その1
|g000001|
ハンドル:g000001
活動場所: 
cadr.g.hatena.ne.jp/g000001

自分内CL/Scheme割合: 
9:1くらい

勉強会でお題になったら良いなと思うネタ: 
CLOS、MOP、Lispとデザインパターン。

なんとなく質問してみたいこと:
なんとなくCLOS勉強会やりませんか!?

haiju 2008-08-23T19:04:26+09:00
こんばんわ
私も参加者テンプレを作ってみました
ハンドル:haiju
活動場所:
主に、http://cadr.g.hatena.ne.jp/haiju
自分内CL/Scheme割合:
9:1くらい
勉強会でお題になったら良いなと思うネタ:
基礎的及び実践的なCLOSプログラミング
なんとなく質問してみたいこと:
LinuxでのCL開発環境構築(Windowsとのデュアル
ブート環境とか仮想環境利用とか)、CLOSの実践的
な勉強方法とか

g000001 2008-08-23T19:09:47+09:00
ありがとうございますー

名無しさん 2008-08-23T19:39:02+09:00
ハンドル: NANRI
活動場所: http://raido.sakura.ne.jp/southly/rn/
自分内CL/Scheme割合: 10/0
勉強会でお題になったら良いなと思うネタ:
  Lispを実装するとか (Lisp in Lispが無難かな)
なんとなく質問してみたいこと:
  今のところなし
ということで。
Linuxはディストリビューションによる差が大きいのでどれについて聞きたいのかもあった方がよいかと。

g000001 2008-08-23T19:44:28+09:00
ありがとうございますー

名無しさん 2008-08-23T19:59:24+09:00
某マリーナ行きが天候のためお流れになりました。
ハンドル:hoppy
活動場所:多摩地区
自分内CL/Scheme割合:1/1
勉強会でお題になったら良いなと思うネタ:
勉強会の場所ですが多摩地区になりますが確保できました。
5人くらいまでは、対応可能です。
なんとなく質問してみたいこと:
簡単なウェブサイトを個人で請け負うことになりそうです。
Lispで実装しちゃったりできないかなーと思っております。
アドバイスがあったら宜しくお願いします。
ハンドル: kosh
活動場所: なし
自分内CL/Scheme割合: 10/0 (だいぶxyzzylisp依存)
勉強会でお題になったら良いなと思うネタ: 各処理系の違いとか?
なんとなく質問:
まともなLisp本を持っていないのでお勧めのものがあれば

今回も勉強に来ました。よろしくお願いします。

g000001 2008-08-23T20:00:14+09:00
ありがとうございます!
こんばんはー
では20時になりましたので、開始したいとおもいますー

名無しさん 2008-08-23T20:01:14+09:00
こんばんは

g000001 2008-08-23T20:01:18+09:00
第13回

こんばんはー
お題は、cl-cookbookより、ハッシュ篇です。
http://cl-cookbook.sourceforge.net/hashes.html
予定より早めに終ってしまったら、これの後のパターンマッチングについて適当に議論でもしようかなと思います。
ちなみに、cookbookのパターンマッチング内容は空なんですけどねw
割と皆さんScheme度合いは低いんですねー
自分的には結構意外ですw
圧倒的にSchemeを先に学習する方が多いと思っていたもので…。
それはさておき、自己紹介テンプレの投下は
いつでも歓迎ですので、適宜投下してみてくださいー
雑談開始時にも改めて自己紹介タイムでも

名無しさん 2008-08-23T20:04:49+09:00
自分もSchemeをちゃんと知ったらSchemeに流れそうだと思っていたんですが、なぜかCLのままですね〜

g000001 2008-08-23T20:04:55+09:00
今回は設けようかなと思っていますー
相性みたいなものがあるんですかねw >CLのまま
ということでハッシュですが
Introductionから
一応本文を張り付けてから
超適当な気持ちの訳をつけて行くことにしますー
Hash Tables are a powerful data structure, associating keys with values in a very efficient way. Hash Tables are often preferred over association lists whenever performance is an issue, but they introduce a little overhead that makes assoc lists better if there are only a few key-value pairs to maintain.
連想リストよりパフォーマンスが良い。ただし、要素が少ないときには、オーバヘッドの関係で連想リストの方が良かったりもする、くらいのものでしょうか
まあ、そんな感じですよと、
あと連想リストの場合は、順番を保持していますね。
棲み分け的にはそんなもんでしょうか。

名無しさん 2008-08-23T20:08:33+09:00
valueから逆に引けたりとか

g000001 2008-08-23T20:08:55+09:00
あ、そうですね、逆に引けますね。rassocとかで
その辺りも便利といえば、便利ですね>alist
ということで、次に進みますが

名無しさん 2008-08-23T20:09:40+09:00
あとはそのままダンプできるとか

g000001 2008-08-23T20:09:59+09:00
なるほど、
色々便利な気がしてきましたねw >alist
alist形式でファイルにデータとして保存して
ハッシュに変換するとか
結構良く見るパターンな気もしますね。

名無しさん 2008-08-23T20:11:30+09:00
ですね。

g000001 2008-08-23T20:11:32+09:00
で、次ですが、
Creating a Hash Table
Hash Tables are created using the function MAKE-HASH-TABLE. It has no required argument. Its most used optional keyword argument is :TEST, specifying the function used to test the equality of keys.

ハッシュテーブルを作りましょう。と
ハッシュテーブルは、make-hash-tableで作る。補助引数を取らなくても良いが、良く使われる引数は、:testで要素の比較の比較関数を指定する。
めちゃめちゃ適当ですが、
こんな感じかなと
(make-hash-table :test #'equal)
とかみたいな感じでテーブル作成時に
指定するんですね。
で、今度は逆で
Getting a value from a Hash Table
ですが、
The function GETHASH takes two required arguments: a key and a hash table. It returns two values: the value corresponding to the key in the hash table (or NIL if not found), and a boolean indicating whether the key was found in the table. That second value is necessary since NIL is a valid value in a key-value pair, so getting NIL as first value from GETHASH does not necessarily mean that the key was not found in the table.

ハッシュテーブルから値を取得しましょう。と
それには、gethashを使いますよと
これは、キーと、ハッシュテーブルの2つの引数を取る。
それで、
ハッシュテーブルにキーが見付かったら、nilか値を返すが、これだとnil値だった場合に区別が付かないので、2つ目の値で判定できるようになっている。くらいの
ところでしょうか
割とハマりどころといえば、
ハマりどころなのかもしれません。
ということで、今度は、
*Adding an Element to a Hash Table
ということで
ハッシュテーブルに要素を登録しましょう。と
If you want to add an element to a hash table, you can use GETHASH, the function to retrieve elements from the hash table, in conjunction with SETF.

これには、
gethashとsetfを組み合わせてハッシュテーブルに登録することが可能で
これは割と便利かなと
* (defparameter *my-hash* (make-hash-table))
*MY-HASH*
* (setf (gethash 'one-entry *my-hash*) "one")
"one"
* (setf (gethash 'another-entry *my-hash*) 2/4)
1/2
* (gethash 'one-entry *my-hash*)
"one"
T
* (gethash 'another-entry *my-hash*)
1/2
T
見たいな感じで例が乗っています。
のっています
例のごとくgethashが読み出してきたところに値をセットするということですね。
ということで次ですが、
*Testing for the Presence of a Key in a Hash Table
ということで、
if等の述語と組み合わせた場合の色々
The first value returned by GETHASH is the object in the hash table that's associated with the key you provided as an argument to GETHASH or NIL if no value exists for this key. This value can act as a generalized boolean if you want to test for the presence of keys.

上述のように
失敗してNILが返ってきているのか
それともNILという値が登録されているのかは
第1値目をみても分からないので、
その辺りを考慮する必要がありますよと、
いうような例がのっています
* (defparameter *my-hash* (make-hash-table))
*MY-HASH*
* (setf (gethash 'one-entry *my-hash*) "one")
"one"
* (if (gethash 'one-entry *my-hash*)
    "Key exists"
    "Key does not exist")
"Key exists"
* (if (gethash 'another-entry *my-hash*)
    "Key exists"
    "Key does not exist")
"Key does not exist"
まずこの例では、第1値目をみているんですが、
これでは判定できていないので

名無しさん 2008-08-23T20:19:59+09:00
(nth-value知らなかった...)

g000001 2008-08-23T20:20:47+09:00
それは意外ですねw
* (if (nth-value 1 (gethash 'another-entry *my-hash*))
    "Key exists"
    "Key does not exist")
"Key exists"
* (if (nth-value 1 (gethash 'no-entry *my-hash*))
    "Key exists"
    "Key does not exist")
"Key does not exist"

quek 2008-08-23T20:20:56+09:00
私も nth-value 知りませんでした。1つかしこくなった。

g000001 2008-08-23T20:21:44+09:00
みなさんmultiple-value-bind使って
るってことなんでしょうか?('-'*)
自分は結構nth-value使ったりするんですが、
割と使い勝手は良くない気もしますw

quek 2008-08-23T20:22:27+09:00
multiple-value-bind ばかり使ってました。

g000001 2008-08-23T20:22:57+09:00
cl-ppcreとかで良く自分は使います。scan-to-stringの返り値とか2値目に
欲しい値がくるので
なるほど、なるほど>mvbind
でも、scan-to-stringの場合、mvbindを使うのが正しい気もしますね(^^;
上の例もそうですが、
なんとなくmvbindで値をまず受けて
それをif で判定した方が
良いような気もしますね

名無しさん 2008-08-23T20:24:40+09:00
hoppy

g000001 2008-08-23T20:25:20+09:00
特に根拠はないですがw
ということで、
今度は要素の削除ですが、
*Deleting from a Hash Table
ハッシュから要素を削除しましょう。と
Use REMHASH to delete a hash entry. Both the key and its associated value will be removed from the hash table. REMHASH returns T if there was such an entry, NIL otherwise.

remhashを使うということになります
で、これは、削除に成功した場合は、Tを返す関数です。
で、その例がのっています
* (defparameter *my-hash* (make-hash-table))
*MY-HASH*
* (setf (gethash 'first-key *my-hash*) 'one)
ONE
* (gethash 'first-key *my-hash*)
ONE
T
* (remhash 'first-key *my-hash*)
T
* (gethash 'first-key *my-hash*)
NIL
NIL
* (gethash 'no-entry *my-hash*)
NIL
NIL
* (remhash 'no-entry *my-hash*)
NIL
* (gethash 'no-entry *my-hash*)
NIL
NIL
と言う感じで次ですが、
*Traversing a Hash Table
ということで
ハッシュテーブルのトラバースで
ハッシュテーブルの各要素を総嘗めでなにかしたい場合。
If you want to perform an action on each entry (i.e., each key-value pair) in a hash table, you have several options:

You can use MAPHASH which iterates over all entries in the hash table. Its first argument must be a function which accepts two arguments, the key and the value of each entry. Note that due to the nature of hash tables you can't control the order in which the entries are provided by MAPHASH (or other traversing constructs). MAPHASH always returns NIL. 
これにはmaphashが使えますよと、
それで、
ハッシュテーブルの常として要素の順番はコントロールできず。
加えてMAPHASHの返り値は常にNIL。
と、言う感じみたいです。
で、例がつらつらとのっています
* (defparameter *my-hash* (make-hash-table))
*MY-HASH*
* (setf (gethash 'first-key *my-hash*) 'one)
ONE
* (setf (gethash 'second-key *my-hash*) 'two)
TWO
* (setf (gethash 'third-key *my-hash*) nil)
NIL
* (setf (gethash nil *my-hash*) 'nil-value)
NIL-VALUE
* (defun print-hash-entry (key value)
    (format t "The value associated with the key ~S is ~S~%" key value))
PRINT-HASH-ENTRY
* (maphash #'print-hash-entry *my-hash*)
The value associated with the key FIRST-KEY is ONE
The value associated with the key SECOND-KEY is TWO
The value associated with the key THIRD-KEY is NIL
The value associated with the key NIL is NIL-VALUE
*my-hash*の中身を全部プリントしていると
いうかんじです。
で、これの他にもいくつか方法があって
WITH-HASH-TABLE-ITERATOR
を使う方法もありますよという
* (with-hash-table-iterator (my-iterator *my-hash*)
    (loop
      (multiple-value-bind (entry-p key value)
          (my-iterator)
        (if entry-p
            (print-hash-entry key value)
            (return)))))
The value associated with the key FIRST-KEY is ONE
The value associated with the key SECOND-KEY is TWO
The value associated with the key THIRD-KEY is NIL
The value associated with the key NIL is NIL-VALUE
NIL
という例がのっています。
with-hash-table-iteratorは
どっちかって言うと、
maphashのようなものを作るための
土台なんでしょうか。
これは、最初の引数の名前でイテレーターがつくられ、ボディ内部で利用可能。アクセスする度に3つの値を返し、1)エントリの存在、2)キー、3)値となる。要素がない場合は、NILを返すのみ。
というような感じです。
おまけで、
Note the following caveat from the HyperSpec: "It is unspecified what happens if any of the implicit interior state of an iteration is returned outside the dynamic extent of the WITH-HASH-TABLE-ITERATOR form such as by returning some closure over the invocation form."
みたいなことも書いてあります。
内部で作ったイテレータをスコープの外に投げた場合の挙動は
保証されない、くらいのものでしょうか?
スコープっていうと変ですかね(^^;
ボディの外に投げて利用する際の挙動は保証されない、みたいな。
ということで、
とりあえず、先に進みますと
loopでもハッシュを扱えまして
;;; same hash-table as above
* (loop for key being the hash-keys of *my-hash*
        do (print key))
FIRST-KEY 
SECOND-KEY 
THIRD-KEY 
NIL 
NIL
とか
* (loop for key being the hash-keys of *my-hash*
        using (hash-value value)
        do (format t "The value associated with the key ~S is ~S~%" key value))
The value associated with the key FIRST-KEY is ONE
The value associated with the key SECOND-KEY is TWO
The value associated with the key THIRD-KEY is NIL
The value associated with the key NIL is NIL-VALUE
NIL

* (loop for value being the hash-values of *my-hash*
        do (print value))
ONE 
TWO 
NIL 
NIL-VALUE 
NIL
とか
* (loop for value being the hash-values of *my-hash*
        using (hash-key key)
        do (format t "~&~A -> ~A" key value))
FIRST-KEY -> ONE
SECOND-KEY -> TWO
THIRD-KEY -> NIL
NIL -> NIL-VALUE
NIL
みたいに、各種
操作が行えます。
ただちょっとキーワードが
覚えづらい気もw

quek 2008-08-23T20:37:49+09:00
この loop だけは憶えられません。being とか hash-values とかw

g000001 2008-08-23T20:38:19+09:00
ですよねー。
書いてて分からなくなることが多くて
maphashとか使っちゃいますね、自分はw

quek 2008-08-23T20:39:09+09:00
同じくです。

名無しさん 2008-08-23T20:39:13+09:00
実践CLにあったなぁと思います>hashのLOOP

g000001 2008-08-23T20:40:17+09:00
なるほど、なるほど
ちなみに、seriesは凄く綺麗にかけて
(collect-hash key val :test #'equal)
とかで作成
(iterate (((k v) (scan-hash *my-hash*))) ~)
とかでトラバースが可能なので
是非seriesを
seriesが普及しないかなとw

quek 2008-08-23T20:42:13+09:00
series いいですよねー
loop も
(loop for (key value) in *my-hash*
      do (format t "~&~A -> ~A" key value))
みたいに書ければいいですけどね。

g000001 2008-08-23T20:42:44+09:00
そうですね、そう書ければ
最高ですよねー。
ということで、
トラバースにも標準を含めて色々方法があると
いうことで、次ですが、
*Counting the Entries in a Hash Table
ということで、
ハッシュテーブルの要素数を取得するには、と
これには
hash-table-countが使えます。
ということで、例がのっています
* (defparameter *my-hash* (make-hash-table))
*MY-HASH*
* (hash-table-count *my-hash*)
0
* (setf (gethash 'first *my-hash*) 1)
1
* (setf (gethash 'second *my-hash*) 2)
2
* (setf (gethash 'third *my-hash*) 3)
3
* (hash-table-count *my-hash*)
3
* (setf (gethash 'second *my-hash*) 'two)
TWO
* (hash-table-count *my-hash*)
3
;; 説明なしに、clrhash登場。
* (clrhash *my-hash*)
#
* (hash-table-count *my-hash*)
0
途中急にclrhashが出てくるんですが、
ハッシュテーブルをクリアするものです
要素数を取得する専用の関数があったなんて
自分は知りませんでしたw
ということで、
基礎編はこの辺りで終了でして
次は実地的な
パフォーマンスの考察が続きます
*Performance Issues: The Size of your Hash Table
パフォーマンスについて: ハッシュテーブルのサイズ
ここでは、cmuclで
計測していて、
特に理論的にどうこうというよりは
実測して考察してみてるだけ
みたいなことが書いてあります。
で、流れとしては、
ハッシュテーブルが
初期のサイズを越えた場合に伸長することに
なるんですが、
それのコストを考察しています
まず、デフォルトのサイズについて
* (defparameter *my-hash* (make-hash-table))
で処理系毎に
違いはありますが、取得できます。
cmuclは65だそうですが、
sbclは16でした。
あ、間違えました
*MY-HASH*
上はハッシュテーブル作ってるだけですねw
* (hash-table-size *my-hash*)
65
これでサイズの取得です。
サイズは処理系依存で、

で、拡張する際にどの程度拡張するかも
分かりまして
* (hash-table-rehash-size *my-hash*)
1.5
のようになります
cmuclの場合、もとに比べて50%増えると
いうことですね
SBCLも1.5でした。
ということで、
要素を100000登録してパフォーマンスを考察するのですが、
* (time (dotimes (n 100000) (setf (gethash n *my-hash*) n)))
Compiling LAMBDA NIL: 
Compiling Top-Level Form: 

Evaluation took:
  0.27 seconds of real time
  0.25 seconds of user run time
  0.02 seconds of system run time
  0 page faults and
  8754768 bytes consed.
NIL
* (time (dotimes (n 100000) (setf (gethash n *my-hash*) n)))
Compiling LAMBDA NIL: 
Compiling Top-Level Form: 

Evaluation took:
  0.05 seconds of real time
  0.05 seconds of user run time
  0.0 seconds of system run time
  0 page faults and
  0 bytes consed.
NIL
のようにして計測しています。
で、100000なので、
何回拡張するかを計算してみると
(log (/ 100000 16) 1.5)
18.099062
でcmuclの場合訳19回くらいじゃないかと
で、上では
ちょっと分かりにくいですが、
2回目の方が速度が速くなっています
0.27 seconds of real timeと
0.05 seconds of real timeで
違ってますね。
で、これの理由なのですが、
2回目の実行が速い理由は、ハッシュテーブルを拡張する手間が省けるからという
ことです
だったら最初から指定したいということで
指定の方法が説明されています
ハッシュテーブルを作成する際に:sizeでサイズも指定して
* (defparameter *my-hash* (make-hash-table :size 100000))
*MY-HASH*
* (hash-table-size *my-hash*)
100000
* (time (dotimes (n 100000) (setf (gethash n *my-hash*) n)))
Compiling LAMBDA NIL: 
Compiling Top-Level Form: 

Evaluation took:
  0.04 seconds of real time
  0.04 seconds of user run time
  0.0 seconds of system run time
  0 page faults and
  0 bytes consed.
NIL
みたいな感じで計測していますが
これは最初から速いですね
で、
実行時にコンシングが発生していない

これは、実行時にリサイズをしていないことが理由。
ですよと、いう感じです。
で、もう一つの方法としては、
リサイズする量を多くすれば、良いのではないかということで
:rehash-sizeを指定してみます
* (defparameter *my-hash* (make-hash-table :rehash-size 100000))
*MY-HASH*
* (hash-table-size *my-hash*)
65
* (hash-table-rehash-size *my-hash*)
100000
* (time (dotimes (n 100000) (setf (gethash n *my-hash*) n)))
Compiling LAMBDA NIL: 
Compiling Top-Level Form: 

Evaluation took:
  0.07 seconds of real time
  0.05 seconds of user run time
  0.01 seconds of system run time
  0 page faults and
  2001360 bytes consed.
NIL
みたいになっていますが、
こちらも速度的には速いと
しかし、
consingは結構していると
これは当たり前といえば、当たり前ですが、
実行時にconsingしているからですよと
他に指定できるものとして
REHASH-THRESHOLD
がありまして、
どの位一杯になったら拡張するかの閾値。0~1の実数で指定する。
ということで、
例えば90%になったら拡張、というようなことを
指定するんでしょうか。
で、注意点なのですが、
rehash-sizeは、rehash-threshold処理系によっては無視しても構わないことになっている…。
とのことです。
という感じで、一通り
ハッシュ篇は終了です!
何かハッシュ的な意味で

名無しさん 2008-08-23T21:01:41+09:00
hashはサイズが素数の方が効率が良かったりするので、だと思います。

g000001 2008-08-23T21:01:43+09:00
質問はありますでしょうか?
おおー、そうなんですか
これは、rehash-thresholdについてですか?

名無しさん 2008-08-23T21:03:23+09:00
どっちもでしょうか。xyzzyの場合になりますけどハッシュサイズが取りうる値がある程度決めうちされているんですよ。

g000001 2008-08-23T21:03:54+09:00
なるほど、なるほど

名無しさん 2008-08-23T21:04:53+09:00
http://raido.sakura.ne.jp/southly/xyzzy/src/S/113.html#L225
というあたりで

g000001 2008-08-23T21:05:27+09:00
おー、なるほど
なんか「ハッカーのたのしみ」的な
感じですねw
色々な技法があるんですねー
ハッシュはCLは他の言語に比べて

名無しさん 2008-08-23T21:06:56+09:00
ハッシュの実装によっていろいろ戦略があると思います。

g000001 2008-08-23T21:07:02+09:00
使いにくかったりするんでしょうか?
Perlとかだと、なんだか
構文の所為もあるのか
身近な印象があるのですが、
LISPだとalistとかもあるので、
なんとなく面倒くさい
インターフェイスのような
気もしないでもないのですが、
そうでもないのでしょうかw

名無しさん 2008-08-23T21:08:53+09:00
あんまり困ったおぼえがありませんが、 :test で指定できるのが eq, eql, equal, equalp だけというのは、困る場合があるかもですね。
あまり、高度な使い方をしてませんが、hyperspecを見て問題なく使えた気がします。

quek 2008-08-23T21:09:28+09:00
リテラル表記がないのがちょっとつらいです。

g000001 2008-08-23T21:09:38+09:00
なるほど、なるほど

quek 2008-08-23T21:09:48+09:00
#H((key1 value1) (key2 value2)) とかけたらいいのかなぁ、と

g000001 2008-08-23T21:10:05+09:00
なるほど、
gethashに展開されるみたいな

quek 2008-08-23T21:10:34+09:00
そうです

名無しさん 2008-08-23T21:10:59+09:00
reader macroで、実装することは簡単かもしれませんね。

g000001 2008-08-23T21:12:06+09:00
リーダーマクロを色々書いてみるのも
面白いかもしれませんね('-'*)
Let over lambdaとか
のってそうですが、
載ってないんですかねw
そうだ、あと15分なのですが、

quek 2008-08-23T21:13:29+09:00
どっかで見たような気がするのですが、思いだせませんw

g000001 2008-08-23T21:13:35+09:00
パターンマッチを議論するか
どうかという
微妙なあまり具合です(^^;
パターンマッチって盛り上がりますかね?
盛り上がるようなら
別枠にしたいんですが、
cl-ppcreがあればいいんじゃないか
位のところなのかなと思ったり

名無しさん 2008-08-23T21:16:32+09:00
PrologとかOnLispくらいでしか見たことがないですね<パターンマッチ

g000001 2008-08-23T21:16:42+09:00
なるほど、
パターンマッチっていうと
そっち方面もありますが、
http://cl-cookbook.sourceforge.net/pattern_matching.html
クックブックだと
正規表現の方面なのかなと

quek 2008-08-23T21:17:55+09:00
なるほど、確かに cl-ppcre をチェック! ですね。

g000001 2008-08-23T21:18:06+09:00
ほとんど
今やデファクトな気もしますねー
他にも色々あるんですが、

名無しさん 2008-08-23T21:18:31+09:00
cl-ppcreは日本語も大丈夫でしたよね。

g000001 2008-08-23T21:18:41+09:00
ですね、大丈夫ですね
clikiのページ参照ということになってるんですが、
http://www.cliki.net/Regular%20Expression
に上がってるのを
適当に試してみたんですが、
pregexp
はGauche
っぽいような、そうでもないような
感じで
http://www.ccs.neu.edu/home/dorai/pregexp/pregexp.html
なんですが、
(pregexp-split ":" "foo:bar:baz")

(pregexp:pregexp-replace* "です" "今日の降水確率は10%です。東京地方は曇です" "である")

(pregexp-replace* "です" "今日の降水確率は10%です。東京地方は曇です" "である")

(pregexp-match-positions "foo" "foo  foo   foo")
みたいなことができました。
(pregexp-replace* "です" "今日の降水確率は10%です。東京地方は曇です" "である")
のパターンがあるのがいいなと
あ、結果が書いてないなw
他に
:TERSE-PPCRE
というのは、
cl-ppcreと組み合わせて使えて
正規表現の部分を
lisp的に書けるということみたいです、
(scan "\\d*" "dddd")

(scan (re * d) "dddd")
みたいな。
感じで書くことができると
なんというか美学的な気もしますがw
他にregexとかあるんですが、
clispってregex使ってることが
多かったりするんでしょうか?
とりあえずは、cl-ppcreが
Perl風の記述に慣れた方にもやさしいということもあっって
一番普及しているかなと、
言う感じでしょうか。
cl-ppcre登場前は、どういう状況だったのか
は知らないのですが…。
あ、あと
emacs系もありますね、xyzzyとか
正規表現/パターンマッチは
これくらいかなと。
パターンマッチといえば、
koshさんのおっしゃるようなものも
ありますよね。
Gaucheみたいにwright氏のmatchが

名無しさん 2008-08-23T21:28:18+09:00
CLISP>(apropos "regex") とやってもregexpしか見つからないんですが…

g000001 2008-08-23T21:28:53+09:00
あ、すいません、regexpかもしれません

名無しさん 2008-08-23T21:29:36+09:00
http://clisp.cons.org/impnotes/regexp-mod.html

g000001 2008-08-23T21:29:44+09:00
(regexp:regexp-split ":" "foo:bar:baz")
;=> ("foo" "bar" "baz")
とか定番な感じで便利ですね
CLISPは標準で色々もってるんですねー
CLISPも勉強せねばw

名無しさん 2008-08-23T21:31:19+09:00
http://clisp.cons.org/impnotes/pcre.html
こっちもか

g000001 2008-08-23T21:32:13+09:00
色々ありますねー。cmuclも
pcreもってるみたいですが、
それなりに処理系がもってるんですね
sbclになれてるんで
どうもcl-ppcre派になってしまいましたw
ということで、
大体時間となりましたー
今回は特に宿題的なところは
ありませんでしたね。
個人的には、WITH-HASH-TABLE-ITERATORno
のマクロの中身がどうしてこういう構成になっているのか
詳しく考えてみようかなと
思いました。
macrolet経由で実現されてるんですけども。
ということで、パターンマッチは
cookbookがちゃんとできてから再度やってみるとして
次はcookbookの関数のところ
位になると思います。
月曜位までには方針を立てて
告知させていただきたいと思っています!
ということでなにか
ご質問あれば、
どうぞー
という感じです('-'*)
特にないようなので、

名無しさん 2008-08-23T21:37:53+09:00
お疲れ様でした。

g000001 2008-08-23T21:37:57+09:00
ここで雑談タイムに切り替えようかなとw
お疲れ様ですー
雑談タイムでも
自己紹介でもどうかなと
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:
思いますので
テンプレを貼ってみます

quek 2008-08-23T21:39:28+09:00
ハンドル:
quek
活動場所:
http://read-eval-print.blogspot.com/
自分内CL/Scheme割合:
10:0
直近は Common Music をいじろうとしてます。

g000001 2008-08-23T21:39:32+09:00
http://www.lingr.com/room/common-lisp-jp/archives/2008/08/23#msg-45487081
くらいで前半にも貼ってありますので
ご覧くださいー
ありがとうございますー 

名無しさん 2008-08-23T21:40:44+09:00
正規表現リテラルが無いから、非常に多用する文字である \ のquoteが必要なのが辛いというか、正規表現が読みにくくなってしまいますね。
そういう場合はhttp://weitz.de/cl-interpol/
以前、ちょっとでも読み易く正規表現を書けるように、工夫してみたんですが、だめでした。
cl-interpolですか。ちょっと調べてみます。ありがとうございます。
すばらしいです。正にこれが欲しかったものです。

g000001 2008-08-23T21:43:38+09:00
Gaucheの文字列補間みたいな

名無しさん 2008-08-23T21:43:45+09:00
ただ、こういうリーダーマクロ系はエディタが対応できるかどうかが心配です(^^;

g000001 2008-08-23T21:43:51+09:00
感じでも書けて便利ですよね
といいつつ自分まだ使ったことがないんですよね >cl-interpol

quek 2008-08-23T21:44:43+09:00
よく Slime の C-c C-c ができなくなったりしますw > cl-interpol

名無しさん 2008-08-23T21:45:13+09:00
やっぱり(笑)
vim派なので問題無かったりしますw

g000001 2008-08-23T21:48:15+09:00
インストールしてみたんですが、
便利そうですよね。
しかし、パッケージを沢山インストールすると
いつの間にかどっかのパッケージが
リードテーブルを変更していて
ちゃんと動かなくなったりする
このごろなのですが、
そういうことは皆さんありませんか?w
copy-readtableで初期化すれば
こういう場合は、良いんでしょうか。
最近気づいたのは、
(progn
  :])
を評価するとエラーになるという
どのパッケージが変更してるんだか
探し出せないのですがw

quek 2008-08-23T21:52:59+09:00
リーダマクロはそこが痛いところですよね。

g000001 2008-08-23T21:54:10+09:00
ですねー。
なので自分は、コアを作成する際に
asdfでロードする度に
*readtable*をデフォルトに戻す
式を入れましたw

quek 2008-08-23T21:55:51+09:00
なるほど。

g000001 2008-08-23T21:56:20+09:00
なんか無理やりな感じですがw
それと全然関係ないですが、
日本語で会話できる
コミュニティ的なものの一覧を
作って見ました。
コミュニティ

どれも活動状況的には不活発

2ch:
本スレ
http://pc11.2ch.net/test/read.cgi/tech/1215875388/

CLスレ
http://pc11.2ch.net/test/read.cgi/tech/1215834213/
--
紫藤さんの掲示板:
http://www.shido.info/gb/index.php

紫藤さんのWiki(LISP系の情報もあり)
http://sites.google.com/site/shidoinfo/
--
はてな:
リング:
http://lisp.ring.hatena.ne.jp/
グループ:
http://lisp.g.hatena.ne.jp/
http://cadr.g.hatena.ne.jp/
--
Wassr:
http://wassr.jp/channel/lisp
--
IRC:
irc.freenode.net
#Lisp_Scheme
UTF-8
--
Lingr:
http://www.lingr.com/room/common-lisp-jp
--
どう書くorg CL部:
http://ja.doukaku.org/lang/commonlisp/
--
Wiki:
http://wiki.fdiary.net/lisp/
http://wiki.livedoor.jp/g000001/
--
mixi:
Common Lispコミュニティ
http://mixi.jp/view_community.pl?id=3160086
--
ML:
http://groups.google.co.jp/group/caddr
--
CodeRepos:
http://coderepos.org/share/browser/lang/commonlisp
あれ、「どれも活動状況的には不活発」っていうのは、
削除してから投下する予定でしたww
すいませんw
maa,
まあ、活発ではないですよね
割と色々あるんだなと
言う感じですね
紫藤さんのところが結構活発なのかなと
思いました。

名無しさん 2008-08-23T22:00:48+09:00
こうなるとポータルサイトが欲しくなってきますね。

g000001 2008-08-23T22:01:09+09:00
紫藤さんのWiki(LISP系の情報もあり)
とか
http://wiki.fdiary.net/lisp/

それ系をめざしてるのかなと
いう気もしますね。

名無しさん 2008-08-23T22:05:06+09:00
初歩的なことなのですが、wikiってプログラム可能なんですか?
更新は人力でしか出来ないと思ってたのですが。
更新があったら、スレッドを探す、スレッドがあったら追加みたいなことができたら管理してる方が楽かなーと思ったのですが

g000001 2008-08-23T22:07:35+09:00
http://wiki.fdiary.net/lisp/
no

wikiとかはrssがとりこめるので、
少しはそういうところもありますね
でも、基本は人力じゃないかなと
いうのが
ぱっとみたところですねー

名無しさん 2008-08-23T22:10:56+09:00
Wikiの実装によるという感じですね。こういうのもあったりしますし。http://vwta.kir.jp/Clockworks/Manual.cgi?word=S%BC%B0%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3

g000001 2008-08-23T22:12:28+09:00
おお、s式で拡張ですか

名無しさん 2008-08-23T22:13:09+09:00
関係してないですが、rssと言えば、ここをチェックしている人って結構多いですよね。 http://practical-scheme.net/wiliki/rssmix.cgi
なるほど。皆さん色々と教えてくださりありがとうございます。

g000001 2008-08-23T22:13:51+09:00
これ便利ですよね。http://practical-scheme.net/wiliki/rssmix.cgi
ちなみにはてなグループに参加すると
もれなく収集対象から
外れるんですよねw

名無しさん 2008-08-23T22:14:38+09:00
そうなんですか?w

g000001 2008-08-23T22:14:42+09:00
参加というか、普通はグループの日記をメインsにしている人もいないから
そういうのは私だけですねw
グループは収集されてないみたいですよね。
普通のはてなの日記の時は参加させて
もらってました(^^
というか、収集していただいてました

名無しさん 2008-08-23T22:16:55+09:00
はてなダイアリーとはてなグループの日記は、結構仕様がばらばらというか、統合されてませんからね。それぞれ行き当たりばったりに拡張されまくってるというかw

g000001 2008-08-23T22:17:25+09:00
最近いろいろある外部のサービスとかも
普通の日記が対象で、グループ日記は対象外なんですよねw
グループの日記の仕様は世代がちょっと古いらしいってのもどっかで読みました。

名無しさん 2008-08-23T22:19:34+09:00
残念な状況ですね。

g000001 2008-08-23T22:29:08+09:00
ですねー。あと、グループにwikiが統合されてると便利なんですけども

名無しさん 2008-08-23T22:29:15+09:00
話を変えてしまいますが、今日勉強会を開く場所を確保してきました。立川より南武線沿線ですので興味がある方は私にどうぞ。
ありがたいことに無料でした。

g000001 2008-08-23T22:31:33+09:00
おお、それは素晴らしい!
最寄り駅はどの辺りになるんでしょう?

名無しさん 2008-08-23T22:32:51+09:00
谷保駅になります。
立川から3番目ですね
谷保好きだ
懐かしいし
NPO支援室というのがあってそこが借りられるそうです。

g000001 2008-08-23T22:36:26+09:00
なるほど、なるほど

名無しさん 2008-08-23T22:37:31+09:00
駄菓子屋併設なんで、お子様に教えることにもなったりして^^;
団地のほうかー
いったことなかったな

g000001 2008-08-23T22:39:08+09:00
PC移動するのでちょっと落ちますー

名無しさん 2008-08-23T22:39:32+09:00
snmstsさん、そうですね。むっさ21の並びです。
確保というのはいつかの日程を確保したということですか?
いえ、そこまではしてません。
登録してきただけです。責任者登録をしただけですね。
そもそも現状私一人だけなので(笑)
利用料  	会員  	1時間 250円
非会員 	1時間 500円
無料ではないみたいでした。。。
うわー。「使えます」って言ったら無料だと思うじゃん。

g000001 2008-08-23T22:53:36+09:00
でも大分安めではありますよね ('-'*)

名無しさん 2008-08-23T22:54:50+09:00
そうですね。そう思いましょう。
あとは何をやるか決めるところですね。
ANSI Common Lisp にしようかと思ってます。

g000001 2008-08-23T22:58:54+09:00
なるほど、なるほど。
とりあえず、場所を決めて
告知してみるってのも

名無しさん 2008-08-23T22:59:49+09:00
内容的に古いとかありますか?

g000001 2008-08-23T22:59:55+09:00
ありですよね。
いや、ACL本は全然古くないんじゃ
ないでしょうか。

名無しさん 2008-08-23T23:00:22+09:00
英語だと敷居が高くなって応募がないような気がして

g000001 2008-08-23T23:00:25+09:00
ASDFとかの話題はないですけども
まあ、無くても良いかなと

名無しさん 2008-08-23T23:00:39+09:00
まずは日本語の書籍でオーソドックスなのをというのが理由です。

g000001 2008-08-23T23:00:40+09:00
思ったり。

名無しさん 2008-08-23T23:00:56+09:00
妥当だと思います

g000001 2008-08-23T23:01:08+09:00
ANSIの範疇外ですし。

名無しさん 2008-08-23T23:02:55+09:00
告知はどこがいいでしょう?
とりあえず住民からも集めるようにしたいのでそちらには出しますが。
うーん

g000001 2008-08-23T23:04:55+09:00
ここは勿論おkですよー。>告知

名無しさん 2008-08-23T23:05:13+09:00
来てほしい人が多い所ですよね
誰に来て欲しいんすかね
初心者向けでいきたいと思ってるんですが
誰という人は思いつきません。
初心者の集まる場所、ということになりますね。

j9LnYVwfTM2 2008-08-23T23:11:16+09:00
楽しみですね、

名無しさん 2008-08-23T23:12:16+09:00
先ほどのwikiにイベントという項目がありましたね。あそこに出しましょうか。
某巨大掲示板は嫌いではないんですけど、公共物使うときに苦情が来ないかとかいろいろと気にしてしまいます。

j9LnYVwfTM2 2008-08-23T23:14:07+09:00
それが良さそうですね。一応CL初心者スレのwikiの様ですし

名無しさん 2008-08-23T23:15:50+09:00
勉強会も継続渡し(謎)すれば、なんとかなりますねw
というわけで予定を立てていきたいと思います。
助言、ありがとうございました。

g000001 2008-08-23T23:20:54+09:00
初心者向けということを
注釈入れておけば、
目につくところの方が
良いような気もするんですが、
どうでしょう。
scheme-users.jpさんに
お願いするとかどうでしょう
あのwikiはなんとなく
ですが、それほど目立ってない
印象が…。

名無しさん 2008-08-23T23:24:10+09:00
wikiっておそらくSEO的に弱いんでしょうね。

g000001 2008-08-23T23:24:20+09:00
cl初心者スレの人は知ってるとは思いますけれど…。

名無しさん 2008-08-23T23:24:48+09:00
私のブログに掲載してCL初心者スレにリンクとかならいいかなー。

g000001 2008-08-23T23:25:29+09:00
なんとなくの私の勘なのですが、
初心者という枠を無くしたとしても
多分、集まる人数は他の言語に比べれば

名無しさん 2008-08-23T23:26:37+09:00
はい

g000001 2008-08-23T23:27:25+09:00
少ないような気がするので
派手な宣伝くらいで丁度良いような気も
するのですが、
実際やってみないとわからないので
なんとも、ですがw

名無しさん 2008-08-23T23:28:55+09:00
同内容のものをいろんな場所で見ると不快に思う人もいます。

g000001 2008-08-23T23:29:18+09:00
なるほどー。
確かに。
自分は全然そういう発想がなかったですw

名無しさん 2008-08-23T23:29:50+09:00
許せても1メディア一つかな。
勉強会の日にちをずらして、いろんな場所に、がいいかもしれませんね。助言ありがとうございます。
結構な時間なのでそろそろ失礼致します。お疲れ様でした。

g000001 2008-08-23T23:34:41+09:00
いえいえ、おつかれさまですー。

j9LnYVwfTM2 2008-08-23T23:36:18+09:00
一応わたしもLisp系のサイトを持っているのですが
宣伝はやめておきます
ではありがとうございました。

g000001 2008-08-23T23:36:52+09:00
そうなんですかw
別に宣伝しても良いとは思うんですが…。

j9LnYVwfTM2 2008-08-23T23:37:33+09:00
誤解を招いたかもしれません
宣伝は勉強会の方の宣伝です。

g000001 2008-08-23T23:38:03+09:00
そもそもマイナーなジャンルだと思うので、
あ、なるほど
そっちですね。

j9LnYVwfTM2 2008-08-23T23:38:21+09:00
では本当に失礼します。ありがとうございました

g000001 2008-08-23T23:38:38+09:00
はいー、ありがとうございますー
また、よろしくお願いします

名無しさん 2008-08-24T00:09:06+09:00
こんばんは
こんばんはー
出遅れてきてなんですが、久しぶりに CLISP ごった煮版を更新しようかなーと暇な人で Win32 の環境のある方は ttp://lispuser.net/files/clisp-2.46-full.zip を展開して
自己解凍形式のexeを解凍して、中身の GUI-REPL.bat で ABLE ベースの環境が動くか試してみてくれませんか
いま使用中なのがMacなので後ほど試してみます
いきなりSLIMEは敷居が高いという話なのでLTKベースのREPLというのはどうかと思いまして。
試してみました<CLISP
うごきます?たまにDLLが足りないとか報告を受けたり
こういう開発環境は初めてですが、問題なく動いていると思います。
ちなみにxpです。
普段xyzzy漬けなのでちょっと新鮮かも
'['wo
REPL から始まるんですよねー。ABLEにはエディタ機能があるので Ctrl-n でファイルを作って、編集して F6 でロード、という流れが基本になるのかな。
’[’を入力すると'()'
になってしまいました・・・
ありゃ、本当だ。Ctrl-[ で [ が入るな。
本当だ。
バグなのか機能なのかw
どうやら便利機能のようですが…。OFFにしちゃおうかな。
emacsキーバインドに慣れるとCtrl-nとかを平気で使ってしまうから困るw
Emacs 使う人は SLIME から!!
すいません、その通りです。。
いや、私もCtrl-n とか連打してますけどw
これ、文字コードどうなっているんでしょうか?
UTF-8N(CRLF)の文字をコピペして保存したものを
エディタで開いたら文字化けしてました。
s/UTF-8N/UTF-8
あっ、そうか。ファイル保存のことをすっかり忘れていた!
むぅ、保存したのを開きなおすと日本語が壊れてるな…。
さすがにもう寝ることにします。lispの知識はまだ浅いですが、こういったテストならいつでもやりますよ。
またお願いします~おやすみなさい
おやすみなさいーz
clispごった煮版の件です。
環境変数HOMEが設定してある環境でGUI-REPLの起動に失敗したので
@set HOME=%CD%
を足しました。
cygwinのclispがいれてある環境なので、その初期化ファイルを読みにいってしまったんだと思います。
*debug-io*がコマンドプロンプトにつながっているようですが、これはこういうものでしょうか?
*debug-io*もREPLにくるようであれば、WSHで起動するようにして、コマンドプロンプトを表示しないようにできるかなと思ったのでした。
// repl.js
var shell = WScript.CreateObject("WScript.Shell");
var env = shell.Environment("Process");
var fs = WScript.CreateObject("Scripting.FileSystemObject");

env("Path") += ";" + fs.GetParentFolderName(WScript.ScriptFullName);
env("HOME") = fs.GetParentFolderName(WScript.ScriptFullName);

shell.Run("clisp.exe -q -ansi -K full -x \"(able::start-able)\"", 0, false);
こんな感じで。
あわせてWSHをEXE化する方法もhttp://www.vector.co.jp/soft/winnt/prog/se389017.html
koshさん、NANRIさんの意見を反映して
ファイルのsave/load時のエンコーディングを utf-8 に、
*terminal-io*, *debug-io* を ABLE に繋いでみました。
あとREPL起動をバッチじゃなくて EXE にしてみました。
http://raido.sakura.ne.jp/southly/lisp/slime-refcard.pdf
slime-refcard.pdfをてきとーに邦訳しました。
l what starts with
のところが何なのかがよく分かりませんでした。
一体何を指しているのでしょう?
誤訳とかありましたら教えてください。

g000001 2008-08-28T00:45:54+09:00
おお、素晴らしい!
what stars with ってなんなんでしょうねー。
(provide 'news)
http://l1sp.org/ LISP関係のリダイレクトサービスだそうです。
シンボル名を、HyperSpecやSBCLのマニュアルから引くのに便利かも。

名無しさん 2008-08-28T22:25:57+09:00
お邪魔します。
onjoさんへ、CLISPごった煮版の件です。
* ヌル文字(#x00)を含むファイルを開くと落ちる。
* ヌル文字を表示できない。例えばREPLで
  (string #\null)
  を評価すると固まる。

本家ABLEでも同じようにバグになりました。
使ったの: ttp://phil.nullable.eu/downloads/able-0.14-win32.zip
なので本家(もしくはLTK?)のバグっぽいですが一応報告します。
うー今回はここでコメントしましたが、こういう話題は直接メールのほうが良いんでしょうか?

g000001 2008-08-29T19:15:50+09:00
てすとてすと

最近Lingrの調子があまり良くないようですねー。明日は大丈夫だろうか…。
ここの部屋も殆ど動きがないのですが、不意に流れてしまうことがあるので、報告は後で確認しやすいメール等の方が良いかもしれませんね(*'-') ちなみに、閑散としたMLもありますので、この機会にご利用いかがでしょうか、ということで宣伝してみます(笑) http://groups.google.co.jp/group/caddr > koshさん (MLにはonjoさんも参加されてます)

名無しさん 2008-08-29T20:13:03+09:00
g000001さんありがとうございます。
「何事にも挑戦」と考えてMLに参加しようと思います。
確かに、こっちだと明日の勉強会が始まったら発言流れちゃいますねw

g000001 2008-08-29T20:23:57+09:00
ありがとうございます! 勉強会の告知にしか使われていないので是非活用してみて下さい(*'-') > koshさん

名無しさん 2008-08-29T20:27:52+09:00
発言はあまりできませんが活用させてもらいます。取りあえず、上のABLEのバグの件を今日明日にでもMLに流すことにします。

g000001 2008-08-29T20:35:50+09:00
割と閑散としているので、発言しにくいところもあるかもしれませんが、お気軽に投稿して頂ければと思っていますー(*'-')
(provide 'ネタ)
iPhoneでHyperSpec
http://lispm.dyndns.org/news?ID=NEWS-2008-08-29-1
こんばんはー、CL勉強会。本日も開催させて頂きます。
お題は、cl-cookbookより、関数篇です。早目に終ったらI/O篇につづきます。
http://cl-cookbook.sourceforge.net/functions.html
今回も軽く自己紹介テンプレ用意してみました! 良かったら、記入してみて投稿してみてくださいー。

|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:
あれ、ずれた…
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:
よろしくおねがいしますー(*'-')
LLとかぶってるし、今日は少ないかなー(;´Д`)
こんばんはー
では20時になりましたので、開始したいと思いますー(*'-')
今日自分は、IRCプロキシ経由で書き込みなので、

名無しさん 2008-08-30T20:00:49+09:00
こんばんは

g000001 2008-08-30T20:00:56+09:00
こんばんはー(*'-')
ちょっと書き込みがおかしいときには、つっこんでくださいー(*'-')
一応自分で確認はしてはいますが…。
今日は、クックブックから、関数篇です。
その前にちょっとゆるく自己紹介タイムみたいな。
良かったら、上のテンプレートに適当に記入して貼ってみて下さいましー。
毎回書いて頂いてる方は毎度ですいません(^^;
とりあえず、自分の分をば、
|g000001|
ハンドル:g000001
活動場所:
cadr.g.hatena.ne.jp/g000001

自分内CL/Scheme割合:
9:1くらい

勉強会でお題になったら良いなと思うネタ:
CLOS、MOP、Lispとデザインパターン。

なんとなく質問してみたいこと:
なんとなくCLOS勉強会やりませんか!?
先週と同じですが(笑)
自己紹介コピペは適当に
投下して頂いて大丈夫です。
第14回

お題は、cl-cookbookより、関数篇です。早目に終ったらI/O篇につづきます。
http://cl-cookbook.sourceforge.net/functions.html
2つにセクションが分かれてまして
The Common Lisp Cookbook - Functions
Contents

* Functions that return functions
* Currying functions
という感じです。
では、最初の方で
*Functions that return functions
ですが、
*** "How do I write a function that returns a function?" is a typical question asked by people who have learned Scheme before they started with Common Lisp. In Scheme, they were accustomed to be able to do things like this:
関数を返す関数はどういう風に書けるかというのは典型的なSchemeをCL以前に学習した人の質問だろうと、
いうくらいのものでしょうか。
で、
schemeでは、
==> (define (adder n) (lambda (x) (+ x n)))
 adder
 
 ==> ((adder 3) 5)
 8
 
 ==> (define (doubler f) (lambda (x) (f x x)))
 doubler
 
 ==> ((doubler +) 4)
 8
みたいに書けると
もちろんCLでもこれらは可能ですが、
しかし文法と意味論がちょっと違ってきますよと
それで、まず、第1段階として、関数を返す関数を作成してゆくと
見た感じでは、ちょっとした変更にみえます
* (defun adder (n)
(lambda (x) (+ x n)))
ADDER
*** Here we have defined the function ADDER which returns an object of type FUNCTION. To create such an object you'll have to use the special operator FUNCTION and apply it to a lambda expression. (FUNCTION form) may be abbreviated as #'form. In our example above we used a shorthand notation provided by the macro LAMBDA. Without this little bit of syntactical sugar we would have to write it as
ここでは、adderというfunction型のオブジェクトを返す関数を定義しています
それで、関数型のオブジェクトを返すには、
特殊オペレータのfunctionを用いてlambda式に適用しますよと。
#'のような簡略表記も使えます。
ここでは、lambda*マクロ*が提供する簡略表記を利用するらしいです
これは、
らしいというか使います(笑)
 * (defun adder (n)
     #'(lambda (x) (+ x n)))
 ADDER
 
 or
 
 * (defun adder (n)
     (function (lambda (x) (+ x n))))
 ADDER
みたいに書けると
で、
つぎですが、
*** No matter how we write it, ADDER will now return a function whenever we call it. But we can't use it in the same way we would use it in Scheme:
ADDERは、呼んだら関数を返すのは、いうまでもないんですが、
しかし、Schemeと同じようには呼び出せません。
こんな感じですね
 ;;; continued from above
 * (adder 3)
 #
 
 * ((adder 3) 5)
 In: (ADDER 3) 5
   ((ADDER 3) 5)
 Error: Illegal function call.
みたいには呼び出せないと
*** Here is why: CL has different namespaces for functions and variables, i.e. the same name can refer to different things depending on it's position in a form that's evaluated:
理由としては、CLは変数と関数とで別の名前空間を持っているためですよと
CLの場合、同じ名前でも、フォームの場所に応じて別のものを呼び出すことになります
 * (boundp 'foo)
 NIL
 * (fboundp 'foo)
 NIL
 * (defparameter foo 42)
 FOO
 * foo
 42
 * (boundp 'foo)
 T
 * (fboundp 'foo)
 NIL
 * (defun foo (x) (* x x))
 FOO
 * (fboundp 'foo)
 T
 * foo            ;;; ***
 42
 * (foo 3)        ;;; +++
 9
 * (foo foo)
 1764
 * (function foo)
 #
 * #'foo
 #
 * (let ((+ 3))
     (+ + +))
 6
みたいな例がのっています。
フォームの先頭にくるかどうかで、別の動きをしていますよと
*** To simplify a bit, you can think of each symbol in CL having (at least) two "cells" in which information is stored. One cell - sometimes referred to as its value cell - can hold a value that is bound to this symbol, and you can use BOUNDP to test whether the symbol is bound to a value (in the global environment). You can access the value cell of a symbol with SYMBOL-VALUE.
それで、単純に考えると
単純というか、簡略して考えると
乱暴ですが、CLは一つのシンボルにつき2つのセルを持っていて、
一つは、変数の値を保持し、これは、boundpでテストできて、値は、symbol-valueで取り出せる。
*** The other cell - sometimes referred to as its function cell - can hold the definition of the symbol's (global) function binding. In this case, the symbol is said to be fbound to this definition. You can use FBOUNDP to test whether a symbol is fbound. You can access the function cell of a symbol (in the global environment) with SYMBOL-FUNCTION.
それで、もう一つのセルは、関数のグローバルな定義を保持しています
これをfboundという?
とりあえず、FBOUNDPでシンボルに関数がfbountされているかを確認できます
それで、SYMBOL-FUNCTIONで値にアクセスできます
*** Now, if a symbol is evaluated, it is treated as a variable in that it's value cell is returned - see the line marked with *** above. If a compound form, i.e. a cons, is evaluated and its car is a symbol, then the function cell of this symbol is used - see the line marked +++ above.
それで、シンボルが評価されたときには、value セルの値が返ります
また、コンスの場合、そのcarに当るシンボルは、function cellの中身が使われることに
*** In Common Lisp, as opposed to Scheme, it is not possible that the car of the compound form to be evaluated is an arbitrary form. If it is not a symbol, it must be a lambda expression, which looks like
それで、
CLでは、Schemeと違って、
複合した式をcarの部分に置いて
評価ゆくというのはできないと、
シンボルか、そうでない場合は、lambda式である必要がありますよと
lambda式は、
(lambda lambda-list form*)
みたいな書式ですと
*** This explains the error message we got above - (ADDER 3) is neither a symbol nor a lambda expression. But, you might ask, how do we use the function object that is returned by ADDER? The answer is: Use FUNCALL or APPLY:
それで
以下に例をあげますが、
(ADDER 3)がシンボルでもlambda式でもないのでエラーになっているところを示しています
 ;;; continued from above
 * (funcall (adder 3) 5)
 8
 * (apply (adder 3) '(5))
 8
 * (defparameter *my-fun* (adder 3))
 *MY-FUN*
 * *my-fun*
 #
 * (funcall *my-fun* 5)
 8
 * (*my-fun* 5)
 Warning: This function is undefined:
   *MY-FUN*
では、どうやって、adderを呼ぶのか。
あ、前後した(笑)
FUNCALLや、APPLYを使うというのがその答え、なわけですね。
で、ここで、zickさんの予習エントリで
funcallの書式というか、
http://blog.bugyo.tk/lyrical/2008/08/14_cl.html
で、
>> そうなると「(funcall (lambda (x) x) 3)」のような式はCLtL2的にはエラーとなるんでしょうか。
という疑問があるんですが、
疑問なんですが、
変更点としては、
(funcall '(lambda (x) x) 3)
がOKだったところが
駄目になったということなんじゃないかと
思いました。
(lambda (x) x)じゃなくて、'(lambda (x) x)
という。
場合じゃないかと
ちなみに、GCLとか古めというか、
CLtL1的な処理系では、
(funcall '(lambda (x) x) 3)
でもOKでした。MacLISPでもOKでした。
MacLISPはCLじゃないですけど(笑)
昔の処理系は、'(lambda (x) x)と書いてる例が沢山あるんで
そういうことなんじゃないかなと
ということで、次ですが、
ちょっと前の例を確認してもらうことになりますが、
*** Note that in the last example the function object returned by (ADDER 3) is stored in the value cell of *MY-FUN* - thus the error message. If we want to be able to use the symbol *MY-FUN* in the car of a compound form, we have to explicitely store something in its function cell (which is normally done for us by the macro DEFUN):
最後の例では、(ADDER 3)の内容が*MY-FUN*のvalue cellに格納されています
ということで、エラーになっていると
複合した式のcarで適切に評価されるためには、functionセルに値を格納しなくてはならないですよと
 ;;; continued from above
 * (fboundp '*my-fun*)
 NIL
 * (setf (symbol-function '*my-fun*) (adder 3))
 #
 * (fboundp '*my-fun*)
 T
 * (*my-fun* 5)
 8
みたいにする必要があるということですね
ということで、うえのScheme版のDOUBLERを定義する準備が整いましたよとなります
 * (defun doubler (f)
     (lambda (x) (funcall f x x)))
 DOUBLER
 * (doubler #'+)
 #
 * (doubler '+)
 #
 * (funcall (doubler #'+) 4)
 8
 * (funcall (doubler '+) 4)
 8
 * (defparameter *my-plus* '+)
 *MY-PLUS*
 * (funcall (doubler *my-plus*) 4)
 8
 * (defparameter *my-fun* (doubler '+))
 *MY-FUN*
 * (funcall *my-fun* 4)
 8
あれ、大幅に時間が
あまる予感が(笑)
で、注意書きですが
*** Note that the argument to FUNCALL (and APPLY) can either be the function itself, i.e. #'+, or a symbol which has the function in its function cell (is fbound to the function), i.e. '+.
FUNCALLは、関数オブジェクト自体も引数としてとれますよと、i.e. #'+。
また、'+だと、シンボルの関数セルの中の関数が使われます。
割とこの辺は、SchemeとCLの違いというか
何度も話題になりますね(*'-')

*** All of the above is extremely simplified - we haven't even mentioned macros, special forms, symbol macros, self-evaluating objects, and lexical environments. Read the CLHS section about Form Evaluation for the real deal.
ということで、上記の説明はかなり大雑把で、
マクロや、スペシャルフォーム、シンボルマクロ、自己評価オブジェクト等については触れていませんよ、ということでした
ということで、次のセクションで
カリー化ですが
*Currying functions
*** A related concept is that of currying which you might be familiar with if you're coming from a functional language. After we've read the last section that's rather easy to implement:
これは、ANSI Common Lispでも、Dylan由来として色々関連の関数が取り上げられてますね。
 * (declaim (ftype (function (function &rest t) function) curry)
            (inline curry))
 NIL
 * (defun curry (function &rest args)
     (lambda (&rest more-args)
       (apply function (append args more-args))))
 CURRY
 * (funcall (curry #'+ 3) 5)
 8
 * (funcall (curry #'+ 3) 6)
 9
 * (setf (symbol-function 'power-of-ten) (curry #'expt 10))
 #
 * (power-of-ten 3)
 1000
みたいなことが
できますよと
注意書きとして
*** Note that the DECLAIM statement above is just a hint for the compiler so it can produce more efficient code if it so wishes. Leaving it out won't change the semantics of the function.
あれ書き込めてない
DECLAIMはコンパイラが効率の良いコードを生成するためのヒントとして記述されているようです
で、このカリー化ですが、
他のLISP系の言語にも
結構ありますよね
Qiとかだと
((+ 3) 6)
;=> 9
そのまんまで
Gauche
だと
((pa$ + 3) 6)
;=> 9
とか
cutとかだと
Schemeのsrfiのcutですね(^^;
((cut + <> 3) 6)
とか、
似た感じのだと、Arcで、
([+ _ 3] 6)
とか
でしょうか。
関数型言語って感じのスタイルの方は
多用するんじゃないかなと
いうところでしょうか。
で、zickさんのツッコミですが
>> 引数を複数取れるけど、これってcurry化っていえるんでしょうか...
ということですが、
ここでの名前は、イメージってことなんでしょうか(笑)
厳密にいうと、固定引数じゃないといけないんでしたっけ?

名無しさん 2008-08-30T20:39:34+09:00
引数は一つだけですね

g000001 2008-08-30T20:39:33+09:00
自分はあまり詳しくないので、コメントできないのですが(笑)
なるほど、なるほど
ということで、関数篇は終了なのですが、
なにか、ざっくりとご質問等ありましたら、
ガンガン頂ければなと
というか、こんなに早く終るとは予想していなかったという(笑)
割と基本のことなので、ツッコミもないですかねー

名無しさん 2008-08-30T20:42:45+09:00
順序を入れ替えたり、カリー化したりを複数回やった略記だと思えばいいのではw
(lambda~ と #'(lambda をどう使い分ければいいんでしょうか?

g000001 2008-08-30T20:43:17+09:00
なるほど > 略記
あ、そういえば、#'(lambda)と(lambda...)の関係について
解説してなかったんですが、
ANSI CLでは、
(lambda ())は、#'(lambda ())に展開されるので
というか、
展開するマクロになっているので
どっちでも大丈夫という

名無しさん 2008-08-30T20:45:10+09:00
(coerce '(lambda (x) (+ x y)) 'function)

g000001 2008-08-30T20:45:10+09:00
こだわる方は、#'を
付けてるみたいですね

名無しさん 2008-08-30T20:45:31+09:00
carがlambdaなリストは関数型に変換できたんですね

g000001 2008-08-30T20:45:41+09:00
http://www.lispworks.com/documentation/HyperSpec/Body/m_lambda.htm

名無しさん 2008-08-30T20:45:49+09:00
自分は#'があれば関数なんだよと明示するくらいかなと考えています

g000001 2008-08-30T20:46:05+09:00
ですね、変換できますね(*'-')
自分は、emacs lispとschemeとCLで統一させる意味で
#'はつけない派ですね(*'-')

名無しさん 2008-08-30T20:47:44+09:00
私個人としては#'をつけないと違和感を感じます

g000001 2008-08-30T20:48:25+09:00
zickさんは、割と
王道というか、歴史的に順に
CLに到達しているようなので、
そういうのも分かるような(*'-')

名無しさん 2008-08-30T20:49:23+09:00
(function ...)で囲まれてるといかにもfunarg問題が解決できてるっぽくて気に入ってるんですwww

g000001 2008-08-30T20:49:25+09:00
Lispマシンとか、MacLISPの時代は、付けないと駄目だったんですが、
でも、'(lambda ())もOKだったりしたので、
この辺は、ANSI CLと前のLISP処理系との違いなんですかねー
#'より、むしろ(function ...)という(笑)
ANSI Common Lispには、Open Lispとの互換性のため
lambdaマクロが導入された
とか書いてたと思うんですが、
どうなんですかね。
自分がみつけた中では、80年代のLISP処理系のNILってのに、

名無しさん 2008-08-30T20:51:39+09:00
PCLじゃなかったっけ? >OpenLispとの互換性

g000001 2008-08-30T20:51:52+09:00
既にlambdaマクロが同じ定義であったりしました。
あ、PCLでしたっけ。そうだったかもしれません(^^;
なんかに書いてあったのは記憶していたのですが(^^;
Open Lispとの互換性ってのも、なんか
ピンとこないんですね(笑)
ということで、時間は40分程ありますので、
次のI/O篇に進もうかと
思います。

名無しさん 2008-08-30T20:54:21+09:00
ANSI Common Lispには
「lambdaマクロというものがあり(中略)その効果は一見すっきり見えるという程度である」
ってかいてました。

g000001 2008-08-30T20:54:20+09:00
ちょっとI/O篇は私の詰めが甘いので、

名無しさん 2008-08-30T20:54:23+09:00
日本語版のp.62ですね。

g000001 2008-08-30T20:54:45+09:00
なるほど、なるほど

名無しさん 2008-08-30T20:54:55+09:00
ISLISP が規格だった。Open Lisp って実装の名前ですねw

g000001 2008-08-30T20:55:06+09:00
「タイプ数がすべて」というポール・グレアムにしては、
寛容な表現ですね(笑)
あ、自分も、すいません、Open lispじゃなくて、ISLISPですね(笑)
ISOのLispなんですよね。
ということで、入出力篇ですが、
http://cl-cookbook.sourceforge.net/io.html
です
3つに分かれてまして
Contents

* Redirecting the Standard Output of your Program
* Faithful Output with Character Streams
* Fast Bulk I/O
という感じです
*Redirecting the Standard Output of your Program
プログラムから標準出力を利用する方法ですが、
まず、順を追って説明している感じです
(let ((*standard-output* ))
...)
という感じに書けるよと
*STANDARD-OUTPUT*はダイナミック変数なので
LET中のすべての*standard-output*の参照は新たに作成したストリームに向けられると
このletの中で、printとか書くと、そっちに流れるわけですね
で、letから抜けると元の状況に復元されると
こういう感じなのですが、標準で
マクロが準備されていて
*** If the output of the program should go to a file, you can do the following:
(with-open-file (*standard-output* "somefile.dat" :direction :output
:if-exists :supersede)
...)
with-open-fileが使えます
*** WITH-OPEN-FILE opens the file - creating it if necessary - binds *STANDARD-OUTPUT*, executes its body, closes the file, and restores *STANDARD-OUTPUT* to its former value. It doesn't get more comfortable than this!
上記の動作としては、with-open-fileはファイルをオープン(必要であれば作成)して
*standard-output*に束縛して
あとは、ボディ部を
実行すると
いう感じですね
そして、ファイルを閉じ*standard-output*を元に戻してくれると
あまり詳しく書かれていないので、
概要って感じの説明ですね(*'-')
で、次は、文字コード関係の話なのですが、
*Faithful Output with Character Streams
*** By faithful output I mean that characters with codes between 0 and 255 will be written out as is. It means, that I can (PRINC (CODE-CHAR 0..255) s) to a stream and expect 8-bit bytes to be written out, which is not obvious in the times of Unicode and 16 or 32 bit character representations. It does not require that the characters ä, ß, or þ must have their CHAR-CODE in the range 0..255 - the implementation is free to use any
code. But it does require that no #\Newline to CRLF translation takes place, among others.
ここでいう信頼できる出力?とは、文字コードが、0から255の間のものをいうらしいです、
(PRINC (CODE-CHAR 0..255) s)で処理できるとも
いえると
äやßの様に0..255に収まらない文字については、
処理系依存で、
ありますよと
#\NewlineのCRLF変換については
これも規定していないんですかね、
で、
*** Common Lisp has a long tradition of distinguishing character from byte (binary) I/O, e.g. READ-BYTE and READ-CHAR are in the standard. Some implementations let both functions be called interchangeably. Others allow either one or the other. (The simple stream proposal defines the notion of a bivalent stream where both are possible.)
read-byte、read-charで、
文字やバイトをそれぞれ読み込むと
処理系によっては、相互に交換できるみたいな
ことが書いてありますが、
それは、さておき
Simple Streamの提案は、この2つのストリームを
扱いやすくすることを
目的にしているようですねと
このあたり非常に怪しいので、
是非ツッコんで下さい(笑)
こっから、かなり処理系依存な記述が続くので
すが
:external-formatの使い方とか
の説明ですね
実践Common Lispの巻末とか、

名無しさん 2008-08-30T21:12:36+09:00
CLでは伝統的に文字ベースのストリームとバイナリのI/Oを分けて考えてきたんだけれど、

g000001 2008-08-30T21:12:36+09:00
onjoさんの http://lispuser.net/commonlisp/japanese.html

名無しさん 2008-08-30T21:12:42+09:00
テキストとバイナリを混ぜて扱いたいとか、可変長のマルチバイト(日本語とかw)を扱う際に不便になってきたんで新しいストリームのプロトコルが提案されたと

g000001 2008-08-30T21:13:19+09:00
なるほど、なるほど
良かったら、
この機会にSimple Streamの概要とか
なにか良いドキュメントのポインタとか

名無しさん 2008-08-30T21:14:15+09:00
まともな実装がまだ Franz の ACL しかないので… >Simple-Streams

g000001 2008-08-30T21:14:30+09:00
教えていただければとー(*'-')
なるほど
SBCLとかは、まだまだん
まだまだ、なんでしょうか。

名無しさん 2008-08-30T21:15:02+09:00
本家のドキュメントと ILC でのプレゼン資料くらいですかね
翻訳していいか聞いてみようかな?

g000001 2008-08-30T21:15:27+09:00
割と話題にはなってるわりには、
ドキュメントが少ない気がするので、
翻訳があると良さそうですよね(*'-')
自分もあまり触っていないので、
全然分からないという(笑)
自分はSBCLメインで使ってるんですが、
SBCLにもあることはあるんですよね。

名無しさん 2008-08-30T21:17:01+09:00
http://www.franz.com/support/documentation/current/doc/streams.htm#simple-stream-intro-1
むースライドのほうが分かりやすい感じだったけど

g000001 2008-08-30T21:17:39+09:00
Gray Stream -> Simple Streamって感じの流れに
なってくるんでしょうか

名無しさん 2008-08-30T21:18:03+09:00
ftp://ftp.franz.com/pub/duane/Simp-stms.ppt パワーポイントがあれば。このマシンパワーポイントがないw

g000001 2008-08-30T21:18:43+09:00
Google Documentで変換できたりは
しますね。といっても、GDocsユーザならば、ですが(^^;
あ、ftpは直接は無理でした(^^;

名無しさん 2008-08-30T21:21:52+09:00
Gray-Streams は CLOS ベースのストリームですが、必要以上に抽象度が高くて最適化が難しいとかありまして

g000001 2008-08-30T21:22:31+09:00
なるほど

名無しさん 2008-08-30T21:23:19+09:00
それoppen officeでもみられるみたい。

g000001 2008-08-30T21:25:06+09:00
とりあえず、この資料を熟読と
割と文字コードとか、日本語処理については、
自分は壁にあたりまくりなんで、
統一された良い方法が、提示されてくれると
いいなーという感じですねー。
ちょっとこれは置いといて
最後の
*Fast Bulk I/O
を片付けてしまいますが、
*** If you need to copy a lot of data and the source and destination are both streams (of the same element type), it's very fast to use READ-SEQUENCE and WRITE-SEQUENCE:
大量のデータをコピーしなくてはならず、ソース元と出力先が双方ストリームなら、read-sequenceとwrite-sequenceを使うと非常に高速に処理できる。みたいな
感じなんでしょうか
 (let ((buf (make-array 4096 :element-type (stream-element-type input-stream)))
   (loop for pos = (read-sequence input-stream)
         while (plusp pos)
         do (write-sequence buf output-stream :end pos))))
似たところ(あまり似たところでもないかも)としては、
http://www.emmett.ca/~sabetts/slurp.html
みたいな話題もみつけました。
onjoさんのところの
http://lispuser.net/memo/lisp/2007-12-14-00-54.html
のCVSの話題とかも、割とちかいかもと
slurpの話題は、色んな読み込み方法を試して、速度を比較、という感じですね。
という感じで、時間となりましたが、
今回は、ネタがこんなに早く尽きることを予測していなかったので、
I/O篇のところが薄くなってしまいました(^^;
今回とは別に、いつか日本語処理篇を
勉強会で開催したいですねー。

名無しさん 2008-08-30T21:32:20+09:00
ストリームのバッファリングがどうなっているかっていうのはあんまり気にしてませんでしたが、処理系でそれなりにやっているんですよね

g000001 2008-08-30T21:33:21+09:00
この辺も処理系ごとに計測してみないと、という感じでしょうか
実測して集計してみるのも面白そうですね(*'-')

名無しさん 2008-08-30T21:34:41+09:00
read-sequence, write-sequenceが速いというのは関数呼び出しのコストの差ということなんでしょうね

g000001 2008-08-30T21:35:51+09:00
なるほど、なるほど
日本語周りをテーマに勉強会やりたいんですが、
どうですかねー(漠然とした質問(笑))
割とみなさん困ってないんでしょうか。
自分は、UTF-8に決め打ちにして、
あまり問題を考えないようにしています(笑)
この辺は、LLに比べて敷居が高いんでしょうか?
実際に処理するコードが沢山読めれば、自分はそれでOKという感じでは
あるのですが…。

名無しさん 2008-08-30T21:40:26+09:00
まず文字とバイトが別ってのが珍しいかもしれませんね…

g000001 2008-08-30T21:41:21+09:00
なるほど、なるほど。

名無しさん 2008-08-30T21:41:22+09:00
LLだと、どっちも文字列でフラグで判断とか文字列に「ユニコード文字列」と「8bitな文字列」があったりとか、
文字列にエンコーディング情報がついてるとか

g000001 2008-08-30T21:42:38+09:00
なるほどー
実際にというか、
仮にRuby並にCLの人気が出たとして
初心者が壁にあたりそうなところってどんなところなんでしょうね

名無しさん 2008-08-30T21:44:39+09:00
処理系毎に設定方法が違うのはまずいでしょうね

g000001 2008-08-30T21:45:14+09:00
そうですよね(^^;

名無しさん 2008-08-30T21:45:23+09:00
CLISP では -Efile utf-8 ってすればいいよ!
私の ECL では動きません!

g000001 2008-08-30T21:45:48+09:00
その辺が混沌としてますよねー
LLは、処理系=仕様 的なところが
逆に統一というところでは、

名無しさん 2008-08-30T21:46:55+09:00
便利でしょうね。やり方が一つ、だから。

g000001 2008-08-30T21:47:00+09:00
上手くいっちゃってるんでしょうね。

名無しさん 2008-08-30T21:47:37+09:00
あ、kosh さんの指摘されていた (string #\null) で死ぬ問題ですが、
CLISP <--> Tcl/Tk 間のエンコーディングを指定してなかったのを UTF-8 に設定したら一応通るようになりました。
あ、見てくれましたか。ありがとうございます。
[ キーで () がはいっちゃうのも止めようかな~。入門者向け設定を目指しているので、"[" が入力できなくて困るのは嫌ですよね。
[->() は自分のタイプミスかと思いました
よく見たらABLE本家のChangeLogに書いてありましたね
でもlispで'['を使うときってあまりないと思うんですが

g000001 2008-08-30T21:56:18+09:00
CLではあんまりないですよね(*'-')

名無しさん 2008-08-30T21:56:43+09:00
(format nil "~:[off~;on~]" nil) ; => "off"

g000001 2008-08-30T21:56:47+09:00
formatでたまに使うくらい
あ、かぶった(笑)

名無しさん 2008-08-30T21:57:07+09:00
これと #\[ くらいしか知りません><
アーカイブを展開してすぐ使える。ベテランはGUIはスルーして SLIME から使う。というのは便利かなーとか。
正規表現もあった>[

g000001 2008-08-30T21:58:14+09:00
なるほど、それベストですよね

名無しさん 2008-08-30T21:58:27+09:00
Tcl/Tk もいちいち入れるの面倒ですからね。
tclkitに日本語エンコーディングを足したものを同梱

g000001 2008-08-30T22:00:32+09:00
自分もWindows環境で試してみなくては!

名無しさん 2008-08-30T22:01:50+09:00
後は入出力がないと寂しいのでgnuplot でカンタンなプロットできるおうにしようかなーとか考えてますが

g000001 2008-08-30T22:02:37+09:00
その辺まであるとCL使いたいと思うような人には
完璧って感じですね(*'-')
CLを学びたいような人ってなんかグラフ書いてそうなイメージはあります(笑)
単に、Lispstatからの連想かも(笑)

名無しさん 2008-08-30T22:05:25+09:00
MaximaとかRとかJとか値をカンタンに図示できるとスクリーンショットが見栄えするかなとか

g000001 2008-08-30T22:05:47+09:00
なるほど、なるほど。
スクリーンショットは意外に重要だと自分も思いますねー(*'-')

名無しさん 2008-08-30T22:06:43+09:00
でも複雑なのは嫌だよなーというところで悩む。
(plot:plot '(1 2 3 4 5))
これはいいとして
複数の系列を出すのはどっちが自然かなーとか。
(plot:plot '((1 2 3 4 5) (10 11 10 11 9))
か
(wiht-hogehoge (plot ...) (plot ...))
がいいか、
両方使えるようにしておいたら?

g000001 2008-08-30T22:13:13+09:00
思ったんですが、
雑談タイムって、チャットだけに複数同時進行で、
ネタが進み難いですよね、
ABLEネタも進めて下さい(笑)
別に > ABLE とか書いとけば良いのかな?

名無しさん 2008-08-30T22:17:21+09:00
両方かなぁ。

g000001 2008-08-30T22:17:53+09:00
上の2つはどういうものが描画されるんですか? > ABLE
なんとなく自分は、with-系が好きですねー。
with-系の命名規則も憶えられる、みたいな(笑)

名無しさん 2008-08-30T22:18:36+09:00
まだどっちも実装してません。二次元プロットどうしようとかあってw
(plot:plot '(1 2 3 4)) みたいに数字をプロットしたら、
Windows の空白パスネームと ext:run-program にやられた
問題点は
1. XPでデスクトップに展開するとパスに空白が入る
2. ext:run-program :nowait は cmd.exe /C "hogehoge" になる

g000001 2008-08-30T22:22:17+09:00
そういえば、自分もよくはまるので、c:/slimeとか、c:/sbclとかのディレクトリにインストールすることが多いですね(*'-')

名無しさん 2008-08-30T22:22:50+09:00
空白パスが入った文字列を二つ以上 cmd.exe /C に指定できないので、とりあえずWin32 API でショートパスネームに変換して実行するという強引なやり方をやってるんですが、
いいのかなぁ?CreateProcessを使えば解決するけど、FFIの定義が面倒なので動くならこっちでもいいかとw
こんばんは。

g000001 2008-08-30T22:24:38+09:00
こんばんはー(*'-')

名無しさん 2008-08-30T22:24:56+09:00
入門向けでは c:/Documents and Settings/ は外せないw
何のソフトのテストですか?

g000001 2008-08-30T22:25:22+09:00
なるほど、自分も"空白パスが入った文字列を二つ以上 cmd.exe /C に指定できない"ってのにハマっていたのかも。コアとか指定することが多かったので。
onjoさんのwin版CLISPごった煮版について
の話題が、現在メインな感じですー(*'-')
"c:/Documents and Settings/"は外せないでしょうね(*'-')

名無しさん 2008-08-30T22:28:58+09:00
よかったらごった煮版のある場所教えていただけますか? 過去ログ探しましたが見つけれなくて。VISTAで試してみようと思います。
http://lispuser.net/files/clisp-2.46-full.zip どうぞー
ありがとうございます。
あと Emacs も空白パスが嫌いだった気がします。
windowsのパスの問題は凄く頭が痛いね。僕はどうしてたかなぁ。…
c:/Docume~1/ って書いたり
cygwinのホームに.slimeを作っておいてたような気がする。

g000001 2008-08-30T22:32:05+09:00
自分は、sambaでLinuxサーバ上のディレクトリを共有してるんですが、
cygwinと、lispと、emacsとで、パス問題が
混乱しまくってて、実質こういう使い方は無理なのかなと

名無しさん 2008-08-30T22:32:40+09:00
空白が入るときは""でくくるんでしたっけ?

g000001 2008-08-30T22:32:45+09:00
思ったりしています(笑)
そこで、CLの論理パスで解決できるのかなと、色々調べたりしてみたんですけど、
ちょっと無理でした(笑)

名無しさん 2008-08-30T22:33:40+09:00
http://d.hatena.ne.jp/ytakenaka/20071021/p3 を見る限り c:/Users/(loginネーム)/.slimeを作っていたみたい。
くくるんですが、Emacs の場合 run-shell-command とかで駄目だったりするんじゃなかったかな。
古い知識なので実は解決してるのかな?
.emacsでの実行ファイルのパスは\\を多用していた。
一筋縄でいかなかったことは覚えてるわ。これがウインドウズのガンだって思った。^^;

g000001 2008-08-30T22:38:17+09:00
Meadowだと大丈夫だったりしたのかな? 自分もなんにしろyasさんと同じような結論に達した憶えが。
できるだけ、UNIX文化と混ぜないような感じで(*'-')

名無しさん 2008-08-30T22:39:09+09:00
皆さん苦労してるんですね
UNIX文化に染まった後にもどってくると辛い
ABLEですが、文字コード決め打ちでよければ日本語も使えます。
COMMON-LISP-USER> (define (adder n) (lambda (x) (+ x n)))
EVAL: undefined function DEFINE
The following restarts are available:
[0]: return to the toplevel
[1]: perform a clean shutdown of ABLE
restart: 0
試しに今回のお題のソースを入れてみました。
Scheme だ。
あ、そうだったんですね。
失礼しました。
defun のほうを入れてください。エンターキーでトップレベルに戻れますんでその後で。
COMMON-LISP-USER> * (defun adder (n)
    (lambda (x) (+ x n)))
NIL
COMMON-LISP-USER> 
@デスクトップ上です。
*がいらなかったんですね。失礼しました。
そうそう
COMMON-LISP-USER> (defun adder (n)
    (function (lambda (x) (+ x n))))
ADDER
ADDER
COMMON-LISP-USER> (adder 3)
#
COMMON-LISP-USER> ((adder 3) 5)
EVAL: (ADDER 3) is not a function name; try using a symbol instead
The following restarts are available:
[0]: return to the toplevel
[1]: perform a clean shutdown of ABLE
restart: 0
また初歩的な間違いかもしれません。
正しい動作です。(funcall (adder 3) 5) ってするとOK
失礼しました。そう書いてありますね。
また後で試してみます。
ABLEですが、日本語を使うには Tcl/Tk との接続してるストリームのエンコーディングを Lisp と Tcl/Tk でそろえる必要があります。

g000001 2008-08-30T22:55:58+09:00
ABLEネタと並行して聞いて頂ければと思うんですが、
今回まで、オフラインを含めて、14回の勉強会を開催してきたのですが、
毎週というのは、ちょっと多過ぎますでしょうか?(*'-')
毎週集うということがメインテーマならば、それはそれで良いのですが(笑)
「毎週集うこと」を主軸に開催の仕方を練り直した方がいいのかな、とか思ったり思わなかったりです(*'-')

名無しさん 2008-08-30T22:58:37+09:00
私は毎週やってもらえた方が嬉しいです
オフラインでLisp仲間がいないのでw
オフラインで集まれたら一番いいんでしょうけど...

g000001 2008-08-30T22:59:14+09:00
いや、自分もオフラインでLISP仲間はいませんが(笑)
もうちょっとお題を持ち寄れるような、雰囲気づくりが
必要なのかなと思ったり、
いや、別に集うことがメインなので、お題は、割となんでも良い
とか、その辺をもう少し検討した方がいいのかなあ、と

名無しさん 2008-08-30T23:01:05+09:00
毎週来れなくても過去ログが見れますからいいのではないでしょうか?

g000001 2008-08-30T23:01:35+09:00
自分の勉強会開催の目的としては、
Common Lispの情報を1ビットでも多くウェブに▼垂れ流す
というのが、メインなのでどういう形態でも大丈夫ではあります(笑)
あ、▼はSKKの文字で、特に強調してる訳ではありません(笑)
過去ログについては、Lingrを選んだ理由は、まさに、そういう理由ですねー > hoppyさん
とりあえず、決まった時間にとりあえず集合できるというのは、
人口が少なめなだけに、割と重要な要素だったりするような、
しないような気もします。

名無しさん 2008-08-30T23:07:52+09:00
質問してもいいですか?

g000001 2008-08-30T23:08:27+09:00
はい、全然OKですー

名無しさん 2008-08-30T23:09:08+09:00
Lispの用語集ってどこかにありますか? 英語対日本語の訳対応とかもあればいいなと思って。

g000001 2008-08-30T23:10:24+09:00
なるほど、なるほど
実践Common Lispの巻末とか
CLtL2の巻末に付録でちょっとは
ありますね。
定番なサイトってあったりするんでしょうか。
CDRダウンとか書いてるところ(笑)
ANSI Common Lispとかに書いてある以外のところ
で分からない用語って感じになるのでしょうか?

名無しさん 2008-08-30T23:15:24+09:00
Web上にないならあったらなあと思ってです。
擬似CLならxyzzyリファレンスをすすめるんですがね
http://xyzzy.s53.xrea.com/reference/

g000001 2008-08-30T23:17:06+09:00
おおー、こういうの良いですねー

名無しさん 2008-08-30T23:17:23+09:00
パッケージ->lispをたどれば幸せかも
CLとは違うということを理解して使ってください(苦笑)>xyzzyリファレンス
調べものにはCLHSが便利だと昨日初めて気づきましたw
http://www.lispworks.com/documentation/HyperSpec/Front/X_Master.htm
微妙に違うということで逆にはまるかもしれません
そのうち速度を求めてローカルに置くようになるw
自分がそうでした、CLと違ってよくはまります>NANRIさん

g000001 2008-08-30T23:20:33+09:00
そういえば、完全に忘却してましたが、
そもそもそういう用語集が作れたら良いなと思って、

名無しさん 2008-08-30T23:20:50+09:00
なるほど。CLは仕様があるからそっちを見ちゃうということでしょうか。

g000001 2008-08-30T23:20:53+09:00
自分は、hatenaにグループ作ったんでした(笑)
http://cadr.g.hatena.ne.jp/keywordlist
こっちの場合、仕様というよりスラング的なものを集めようとしてましたが、
面倒になって放置してる感じですね(;´Д`)

名無しさん 2008-08-30T23:22:02+09:00
自分はhttp://lispdoc.com/をよく使います

g000001 2008-08-30T23:22:17+09:00
まあ、用語がマニアックな方向に偏りすぎってのも良くないかも >自分のグループ
lispdoc便利ですねー
 用語集とかWikiとか充実してくると良いのですが…

名無しさん 2008-08-30T23:24:35+09:00
私も作りたいと思ってるのですが、作るのならLispで書かなければならないような気がして、まだそのレベルに達していないので躊躇しています。

g000001 2008-08-30T23:25:33+09:00
 いや、LISPである必要はないんじゃないかと(*'-') 自分とか便利ならなんでもOKな感じですね(笑)
(ごった煮) このごった煮版CLISPは、基本的にXPで動かすという感じなんでしょうか?

名無しさん 2008-08-30T23:27:18+09:00
現実問題としてCLだけでは生きていけないので、~でなければという人は少なそう。

g000001 2008-08-30T23:27:57+09:00
 (ごった煮) 今win2kで動かしたんですが、MSVCP60.dllが足りないということで、
インストールしてみました。

名無しさん 2008-08-30T23:28:15+09:00
私の環境がXPですからねー

g000001 2008-08-30T23:28:39+09:00
 (ごった煮) なるほど、なるほど(*'-')

名無しさん 2008-08-30T23:28:56+09:00
げ、そうなんだ。元はCLISPの配布物をつかってるんですが、

g000001 2008-08-30T23:29:14+09:00
 (ごった煮) win2kな人もいまどきいないかな(*'-')

名無しさん 2008-08-30T23:29:32+09:00
そこから問題があるような感じですね。私のはsaveinitmemしただけなので。

g000001 2008-08-30T23:31:11+09:00
 (ごった煮) ABLEも白い画面が出るのみで固まってますね。clisp単体は動きます。
 (ごった煮) でも、自分で使ってていうのもなんですが、win2kな人は切り捨てても良いような(笑)

名無しさん 2008-08-30T23:31:58+09:00
lib/ にある tclkit は動きます?

g000001 2008-08-30T23:32:39+09:00
 (ごった煮) tclkitはダブルクリックすると起動してます。

名無しさん 2008-08-30T23:33:53+09:00
ふーむ。パイプで通信してテキスト流すだけなんだけど
白い画面がるってことは tclkit プロセスは起動してるんかなー。パイプがうまく動かないのだろうか。

g000001 2008-08-30T23:36:02+09:00
 (ごった煮) 割と何もインストールされてない環境ではありますが、環境依存な可能性もあるので、
追試して下さる方がいればと(*'-')

名無しさん 2008-08-30T23:37:59+09:00
gnuplotは家だとデフォルトでフォントが見にくいですが本家もそうでした。(どこかネットにフォントの変え方が書いてあったはずです)

g000001 2008-08-30T23:38:04+09:00
 (ごった煮) あ、cmdからだと動きましたので、
 (ごった煮) 家の環境変数の問題かも(^^;

名無しさん 2008-08-30T23:39:29+09:00
vistaはそう言えばdesktopに空白がないですね。
C:\Users\hoppy\Desktop
環境変数かー。何か使ってるのかな。
Vista のほうが良さそうですね。

g000001 2008-08-30T23:41:47+09:00
 (ごった煮) cmdから実行でも、絶対パスだと同じ現象で、ディレクトリにCDしてからreplで実行だと起動するようです。
 (ごった煮) なんとなく我が家の環境依存な気も(^^;

名無しさん 2008-08-30T23:44:13+09:00
右クリック->"Choose Font"でフォントを変更できますね >gnuplot
何だろう。ショートカットとかも駄目ですかね?
C:\Users\hoppy>C:\Users\hoppy\Desktop\clisp-2.46-full\clisp-2.46-full\repl.exe
起動しませんでした。
カレントディレクトリに影響されてるのかな?

g000001 2008-08-30T23:49:53+09:00
 (ごった煮) win2kの方は、なんとなくそういう感じですねー

名無しさん 2008-08-30T23:52:28+09:00
とりあえずABLEに容疑をかけておこうw config.lisp を *default-pathname-defaults* から読むから

g000001 2008-08-30T23:55:54+09:00
 (ごった煮) 我が家は環境変数が割とめちゃめちゃなので、話半分に流して下さいまし(笑)

名無しさん 2008-08-30T23:55:55+09:00
今更ですが忘れていた自己紹介です
ハンドル: kosh
活動場所: なし
自分内CL/Scheme割合: 10/0 (xyzzylisp依存CL)
勉強ネタ: L-99みたいな問題を解きまくるとか

g000001 2008-08-30T23:56:23+09:00
ありがとうございますー(*'-')
そういえば、L-99みたいなネタといえば、

名無しさん 2008-08-30T23:56:34+09:00
では私も
前と大して変わってないですがw
ハンドル:zick
活動場所:
http://lyrical.bugyo.tk/
自分内CL/Scheme割合:7:3
勉強会でお題になったら良いなと思うネタ:
ASDF, CLOS, SLIME
なんとなく質問してみたいこと: 
CLHSって紙媒体(もしくはpdf)でどこかにないんでしょうか

g000001 2008-08-30T23:56:55+09:00
Project EulerがLOOPマクロとかの練習になるんじゃないかと
思ってるんですが、ちょっとしか試してません(^^;
ありがとうございますー(*'-') > zickさん
紙媒体ってあるんですかねー > clhs
全文印刷すると、どんなことになるんだろう(笑)

名無しさん 2008-08-30T23:58:25+09:00
LOOPマクロはさっぱりなので勉強する必要がありますね。。。

g000001 2008-08-30T23:58:52+09:00
minimizeとか、maximizeとかが活躍するような、
自分は単純に力技しか思い付かないから多用するのか(笑)
 (LOOPマクロ)あんまり、sumとか、minimizeとか使ったことないので、良い練習かなーとか思いました。

名無しさん 2008-08-31T00:01:35+09:00
あとご意見頂戴なのですが、お勧めなLisp本はなにかありますか?
ANSIで売り物であるんじゃないですかね>pdf or 紙媒体
自分も欲しいですけど

g000001 2008-08-31T00:02:29+09:00
(pdf or 紙媒体) なんとなく話に聞いたことがあるような。でも、$500とか、そんな感じだったオチの記憶があります(笑)

名無しさん 2008-08-31T00:02:55+09:00
今手元にあるのが「CommonLisp入門/湯浅太一」くらいしかなくて、いい加減何か買おうと思うんですが。
あとOnLisp翻訳の印刷したのかな

g000001 2008-08-31T00:03:31+09:00
やはり、実践Common Lispなのでは!(笑)
(おすすめ本) 自分は、実践Common Lispと、ANSI Common Lispがあれば、それで安泰な気も。

名無しさん 2008-08-31T00:05:09+09:00
今のところPCL>ANSI-CLかなあ
実践Common Lisp!

g000001 2008-08-31T00:05:27+09:00
(おすすめ本) 「CommonLisp入門/湯浅太一」は、CLtL1なのが、瑾に瑕ですよねー
(おすすめ本) ANSI Common Lispと、実践Common Lisp どっちを先に買うかとなると、私個人としては、実践Common Lisp → ANSI Common Lispの順番かなと思ったりします
(おすすめ本) ANSI Common Lispは本当に入門書なのかな、と思うことが割と多いようなw

名無しさん 2008-08-31T00:08:21+09:00
あれは入門書じゃないでしょう
CLtL1だったんですか!?知らなかった>CommonLisp入門
KCLがCLtL1なので > Common Lisp入門

g000001 2008-08-31T00:09:42+09:00
 (おすすめ本) ですよねw >ANSI Common Lisp

名無しさん 2008-08-31T00:10:06+09:00
と、いうことはKCLを基にしたGCLもCLtL1?
GCLやECLはANSI CLに向けて進んでます。

g000001 2008-08-31T00:10:44+09:00
昔はそうだったと思いますが、現状はどうだったでしょう > GCL

名無しさん 2008-08-31T00:10:48+09:00
CLtL1版とANSI版の両方があった気がします >GCL
なるほど。勘違いしててはずかしい

g000001 2008-08-31T00:12:02+09:00
ECLがあれば、とりあえずOKかなーなんて感じですね、自分はw

名無しさん 2008-08-31T00:12:46+09:00
ちなみにANSI Common Lisp は、ACLを購入すると同梱されているらしいです(英語版)
Maxima動くようになったし、むしろGCLの先行きがちょっと不安
むー。実践CLも欲しくなってきた
あ、Maxima on ECL ね

g000001 2008-08-31T00:15:05+09:00
 (おすすめ本) 一冊にしぼるなら、自分は、実践Common Lispですね、とかいってみるw

名無しさん 2008-08-31T00:16:00+09:00
それになりそうですw>実践Common Lisp

g000001 2008-08-31T00:17:56+09:00
 (おすすめ本) 割と網羅的なので良いのではないかと > 実践Common Lisp

名無しさん 2008-08-31T00:18:37+09:00
ちなみに井出先生のCOMMON LISP 第2版は持っている人はいますか?
http://www.amazon.co.jp/COMMON-LISP-Guy-Jr-Steele/dp/4320025881

g000001 2008-08-31T00:19:09+09:00
ノ 自分持ってますー

名無しさん 2008-08-31T00:19:12+09:00
それでも、多少プログラミングの経験がないと完全な入門には難しいかもしれません
持ってます
大学の部として持っていて私が専有していますw

g000001 2008-08-31T00:19:49+09:00
 (おすすめ本) CLtL2は、割と読物としても面白いんですよ!

名無しさん 2008-08-31T00:20:17+09:00
本屋で見かけたんですが、図書館にもあったんでちまちま呼んでいます
呼んでいますw
s/呼んでいます/読んでいます もういいや。。。
リスト遊びとか emacs-lisp-intro で Emacs に慣れるというのも前準備としてはおススメかなぁ。でもEmacs-Lisp-Introは経験者にはくどいかもしれないなぁ。

g000001 2008-08-31T00:21:17+09:00


名無しさん 2008-08-31T00:23:55+09:00
「COMMON LISP 第2版」もLisperなら買い、かな
詠んでます。だとLispっぽかったり(謎)

g000001 2008-08-31T00:25:20+09:00
(詠んでます) lispプログラムをプリントアウトして眺めると水墨畫のようとは、竹内郁雄先生がどっかで書いてましたw 
 (おすすめ本) CLtL2は、自分はヤフオクで張って購入しました。高いので(^^;
3000円位だったかな。

名無しさん 2008-08-31T00:26:39+09:00
安!
うらやましいです
倍風館のLispも良い本ですよ~。これは図書館とかで探すと
いいかもしれません。私が大学の図書館で借りてた奴は大量に書き込まれていたw

g000001 2008-08-31T00:27:55+09:00
 (おすすめ本) いや、CLtL2はヤフオクだとこれ位の値段じゃないかなと思います。観察しているところではですが(笑)
 (おすすめ本) 培風館のやつはヤフオクだと8000を越えるという(^^;

名無しさん 2008-08-31T00:29:17+09:00
え、絶版なんですか?

g000001 2008-08-31T00:30:29+09:00
 (おすすめ本) なんとなく前から品切れモードみたいですね。
http://iiyu.asablo.jp/blog/2007/05/11/1501516
とか。

名無しさん 2008-08-31T00:34:05+09:00
Amazonも中古のみですねー
http://www.fukkan.com/fk/VoteSearch?mask=9&search=lisp&image2.x=0&image2.y=0
復刊.comにはまだないですね

g000001 2008-08-31T00:36:03+09:00
 (おすすめ本) キーン氏のCLOSの本も復刊して欲しいですねー
 (ANSI CL仕様書) http://naggum.no/files.html ここからダウンロードできるのって、なんとなく印刷向きっぽいですね。

名無しさん 2008-08-31T00:40:19+09:00
17章の効率の話とかMark and Sweepさせてみるとか楽しい内容なのになぁ。絶版とは…

g000001 2008-08-31T00:42:32+09:00
 (おすすめ本) 名著らしいですねー。 自分も図書館から借りて最初の方をちょっと読んだだけで良く分かってないのですが (^^; >培風館のLISP

名無しさん 2008-08-31T00:43:07+09:00
話が変わってすみません。xrea借りれるんで用語集サイト作ろうかと思ってるんですが、使えるコードがEUC-JP,ShiftJIS,Unicode。UnicodeってUTF-8と思っていいんでしょうか?

g000001 2008-08-31T00:44:08+09:00
(XREA) xreaでLispの処理系を動かすんですか?
(XREA) yasさんが、その辺は詳しいですね(*'-') 落ちちゃいましたが…
(XREA) xreaで色んな処理系試してたブログエントリがあったような

名無しさん 2008-08-31T00:45:51+09:00
いえ、他の言語で書こうと思ってます。
う、動かせるんですか?参考にします。
xrea はシェルが使えないので面倒かと>Lisp処理系

g000001 2008-08-31T00:48:01+09:00
そうだ、NANRIさんもCLISPでサイト作ってますね(*'-')

名無しさん 2008-08-31T00:48:33+09:00
丸ごと借りないと無理だと思ってました<Lisp@レンタルサーバー
作っているというほどでもないです。http://raido.sakura.ne.jp/southly/lisp/ni/view.lispが動いているだけなので

g000001 2008-08-31T00:51:18+09:00
佐野さんもCLISPで日記サイト作ってますね。

名無しさん 2008-08-31T00:51:42+09:00
処理系はどうやってレンタルサーバにインストールするんでしょう?
私は Emacs だなぁ。org-mode が便利なんで。
HTML -> Emacs-Wiki -> 自作Wiki -> pythonのdocutil -> Emacs と順調に退化しているw
sakuraはシェルが使えるのでふつーにビルドしました。
なるほど。

g000001 2008-08-31T00:53:12+09:00
yasさんの記事は
http://cadr.g.hatena.ne.jp/ytakenaka/?word=xrea&.submit=%E6%A4%9C%E7%B4%A2
で、
http://cadr.g.hatena.ne.jp/ytakenaka/20080520/1211257040
みたいなエントリもありました。

名無しさん 2008-08-31T00:54:33+09:00
http://raido.sakura.ne.jp/southly/rn/index.rb?1201925717.txt

g000001 2008-08-31T00:54:34+09:00
自分は、今日一日ご飯を食べていないのでw、ちょっと離席しますね。

名無しさん 2008-08-31T00:54:45+09:00
ビルドの記録です。
むー。最近は sigsegv だけじゃなくて ffcall も外部に追い出されてしまいましたからね。野良ビルド派には手間が増えて悲しい
あぁ、こんな時間か。そろそろ寝ます。おやすみなさい~
おやすみなさい
おやすみなさい。
NANRIさん、ありがとうございます。databaseとの繋ぎ方が分からないのですが、そこらへんは実践CLを見ると分かりますか?
おやすみなさいー
RDBですよね。実践CLにもありませんね。たぶんCLSQLとか使うんだと思うんですが、よく分かりません。
Examples include database interfaces or widget libraries.
http://209.85.175.104/search?q=cache:dFvDhATBY3EJ:packages.ubuntu.com/ja/intrepid/clisp-dev+clisp%E3%80%80database&hl=ja&ct=clnk&cd=1&gl=jp&client=firefox-a
大丈夫そうですね。ありがとうございます。
clispのExtensionにあったんですね。ここかhttp://clisp.cons.org/impnotes/berkeley-db.html
この辺りはビルド時に指定しないと使えなかったような気がします
ありがとうございます。調べてみます。
http://lispuser.net/memo/lisp/2006-01-28-20-28.html
ここに書いてありますね。
私もそろそろお暇します。おやすみなさい。
おやすみなさい。
おやすみなさいー。では自分も
LL行ってきました。
皆様お休みですね
おつかれさまです。
どうでしたか? 面白い発表はありました?

g000001 2008-08-31T01:46:58+09:00
戻ってみましたがー、さすがにこの時間はお休みですね(笑)
LLですかー、当日券あったなら、前半だけでも自分も行けば良かったかなと。
ニコ動とかに早速うpされたりしてないんだろうか。
てっきりNANRIさんもLL帰りかと思ってました(*'-')

名無しさん 2008-08-31T01:50:31+09:00
あの時間に起きました(笑い)
土曜は一日寝てたんですよね

g000001 2008-08-31T01:51:26+09:00
そうだったんですか(笑) > 寝てた
飲み会とか盛り上がってるんでしょうねー

名無しさん 2008-08-31T01:54:38+09:00
Lisperにとってはアウェイでしょうからどうなんでしょう?

g000001 2008-08-31T01:55:42+09:00
どういう棲み分けになるんでしょうね(笑)
でも、わりとLISPって議論のネタになりがちなんで、
人気者にはなれそうじゃないですか(笑) > Lisper
そういえば、自分は、オフラインの勉強会は準備が大変なんでやろうとは思わないのですが、

名無しさん 2008-08-31T01:59:36+09:00
議論のネタといっても誤解されたままだったりするからなぁ

g000001 2008-08-31T01:59:42+09:00
ただのオフ会ならなんとなく参加したいですw
そうですね、アウェイだと、いじめられてる気分にさえなるかもw > 誤解
全然関係ない話なんですが、
今日、IRCプロキシ通してLingrに続接して通しでやってみたんですが、
割と良い感じでした(*'-')
是非IRC常用の方は、この部屋にも常駐して頂ければなと(笑)
まあ、Lingr Raderとかありますけど…
ちなみに、自分は、lig.rb + tiarraです。
これCommon Lispで書けたらなあと、思いますが、ちょっと実力的に足りない(^^;

名無しさん 2008-08-31T14:33:55+09:00
あんまりネタにならない感じでしたかねー。
shinhさんにformat の~(が使えないってのと
takesakoさんにlisp(族)はごきぶり説が引用されたのくらいしか記憶にありません
こんばんは。
http://ancient.s6.xrea.com/lisp/aserve.html
ここを見て試してるんですがうまくいかないです。どなたかアドバイスをお願いします。
UncommonSQL が CLSQLにマージされたとのことでそれが原因かもしれませんが、
(mk:compile-system :aserve) をCMUCL で実行すると、
Loaded subsystems:
    Python 1.1, target Intel x86
    CLOS based on Gerd's PCL 2004/04/14 03:32:47
* (mk:compile-system :aserve)

Reader error on #, Output = #>:
package "MK" not found
   [Condition of type LISP::READER-PACKAGE-ERROR]

Restarts:
  0: [ABORT] Return to Top-Level.
と言われてしまいます。
package "MK" not found
とあるのでMKパッケージが無いためでしょう。
MKパッケージはhttp://www.cliki.net/mk-defsystemのことだと思うのですが、今だったら代わりにasdfを使うようになっているんじゃないでしょうか。
aserveは使ったことが無いのでよく分かりませんけど。
http://www.cons.org/cmucl/install.html
Loading subsystemsのところに
The DEFSYSTEM facility is not included with CMUCL, but can be obtained from CLOCC.
DEFSYSTEMはCMUCLに含まれない
とありますね。
ありがとうございます。

quek 2008-08-31T21:36:46+09:00
Debian をお使いでしたら cl-defsystem3 をインストールすればいけるかもしれません > package "MK" not found

名無しさん 2008-09-01T20:14:22+09:00
>スペシャル関数の件
関数定義が基本トップレベルだからかなぁ
変数は引数がローカルだけれど、関数はfletとかlabelsとかでしか作れないし。
setqに相当するものも無いから、ころころ変えるのもむずかしいしなぁ
elispにはfsetっていうのがあるんでしたっけ。
ローカルの関数定義も変えられるのかな?
Lispで書かれたLispを考えると、万が一名前がかぶった時が怖くてスペシャル関数は使えそうにないなぁ
というあたりがスペシャル関数がない理由かなぁと
つらつらと思いました(まる)
diff -r abcbb2139048 slime-refcard.tex
--- a/slime-refcard.tex	Sat Aug 30 14:04:34 2008 +0900
+++ b/slime-refcard.tex	Sat Aug 30 14:06:34 2008 +0900
@@ -33,7 +33,7 @@
 \subgroup{Closure}
 
 \key{C-c C-q}{close parens at point}
-\key{C-]}{cl}{close all sexp}
+\key{C-]}{close all sexp}
 
 \subgroup{Indentation}
 
@@ -74,7 +74,7 @@
 \subgroup{Macro expansion commands}
 
 \key{C-c C-m or C-c RET}{macroexpand-1}
-\key{C-c C-m}{macroexpand-all}
+\key{C-c M-m}{macroexpand-all}
 \key{C-c C-t}{toggle tracing of the function at point}
 
 \subgroup{Disassembly}
これってtypoだよなぁ
メーるかなぁ

g000001 2008-09-01T22:39:21+09:00
ほんとだ、C-c M-mですよね。

名無しさん 2008-09-01T23:51:07+09:00
ちなみに邦訳したやつは直してあります。

g000001 2008-09-02T00:23:19+09:00
スペシャル関数については、スペシャル変数に関数を閉じ込めて呼び出せば似たことができますなー、みたいな感じで昨日IRCとzickさんと話してました(*'-')
s/IRCと/IRCで/
ブログのエントリの最後の方のスペシャル変数で代用できる云々はこのことを指してるとのことです。
こっちにも告知失礼します
はてなハイク上でANSI Common Lisp読書会を展開してみることにしました。
基本的にノープランですが、ご興味のある、はてな村の方は是非のぞいてみて貰えればと思いますー。
http://h.hatena.ne.jp/keyword/ANSI%20Common%20Lisp%E8%AA%AD%E6%9B%B8%E4%BC%9A%40%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%8F%E3%82%A4%E3%82%AF
本当になにも考えてませんw
いつの間にやらSBCL 1.0.20が出てました。大体毎月月末なんでそろそろとは思ってたんですが、リリースのアナウンスってどこが大元になるんですかねー。

名無しさん 2008-09-03T12:44:04+09:00
もうすぐ出るよっていうのはsbcl-develに流れていましたけど、出たよっていうのも流して欲しいですよね。
http://groups.google.com/group/sbcl-devel/browse_thread/thread/d464b0f68851a0a1#

g000001 2008-09-03T22:33:34+09:00
ですねー > SBCLリリース
それなりに、リリース見張ってるつもりなんですが、どうも漏れるw
というか、「リリースしました」って案内が必要であって、「〜位にリリースできると思う」って案内はいらない気がw

名無しさん 2008-09-03T22:45:50+09:00
もうすぐリリースだからテストしてねってアナウンスだと。

g000001 2008-09-03T22:46:27+09:00
あ、なるほど、そういえば、開発者向けですもんねw

名無しさん 2008-09-03T22:46:57+09:00
そういえばclispももうすぐっぽい雰囲気だったような

g000001 2008-09-03T22:47:50+09:00
CLISPもなんかリリースサイクル短かくなってきた気がしますけど、前からこんな感じでしたでしょうか(*'-')

名無しさん 2008-09-03T23:00:40+09:00
サイクルは短くなっているような気がします。
clispはFreeBSDのportsの方がバージョンアップするのを待っているんですけど、なかなか上がりませんね。
2.45の変更が大きいという判断なのかなぁ

g000001 2008-09-03T23:03:30+09:00
2.44から眺めてみると、3ヶ月周期位な感じですねー。

名無しさん 2008-09-03T23:16:46+09:00
先日話題に上がっていたANSI-CLのfinal draftを全部プリントしたら700ページ弱に

g000001 2008-09-03T23:17:08+09:00
うはwww
あれ、1ページというか、見開きな感じでしたよね?

名無しさん 2008-09-03T23:17:49+09:00
はい。

g000001 2008-09-03T23:17:55+09:00
ということは、1400ページ位ってことですか?

名無しさん 2008-09-03T23:18:18+09:00
実質は1300ページを確実に越えてます

g000001 2008-09-03T23:18:41+09:00
じゃ、製本したら、10cm位の厚さですねw

名無しさん 2008-09-03T23:18:58+09:00
ですねー

g000001 2008-09-03T23:19:01+09:00
両面印刷なら、5cm位かな?(*'-')
コピー用紙500枚で、5cm位ですもんね。

名無しさん 2008-09-03T23:19:43+09:00
だいたいそんな感じです。

g000001 2008-09-03T23:20:02+09:00
家のプリンタで印刷ですか?

名無しさん 2008-09-03T23:21:42+09:00
キンコーズにいって製本までやってもらいました。

g000001 2008-09-03T23:23:39+09:00
おー、凄い、じゃ全然ちゃんとした本になってるってことですか


名無しさん 2008-09-03T23:25:09+09:00
残念ながらそんなでもないですね

g000001 2008-09-03T23:28:28+09:00
自作よりは、良い、位ですか?
どれくらいの費用でできるものなのでしょう(*'-')

名無しさん 2008-09-03T23:30:22+09:00
ですね。一ページに見開きで印刷してあるので横長なのがちょっと微妙な感じです。
印刷代だけで7000円とかです(笑)
他にも諸々かかりますけど、これが一番きつい

g000001 2008-09-03T23:31:35+09:00
7000円!
でも、1300ページなら、単純計算でも
コンビニでコピーでも、6000円位するでしょうから
妥当なところな気も。
しかし思い切りましたね(*'-')

名無しさん 2008-09-03T23:33:31+09:00
ANSIで買ったら3万とかすると思えば、まぁいいかなと、思っておきます。

g000001 2008-09-03T23:34:16+09:00
そういえば、ANSIの販売価格をあれから探してるんですが、
分かりましたか?

名無しさん 2008-09-03T23:35:42+09:00
http://www.techstreet.com/cgi-bin/detail?product_id=56214
多分これですよね。
http://www.lispworks.com/documentation/common-lisp.html

g000001 2008-09-03T23:36:33+09:00
おおー、$350ですか。

名無しさん 2008-09-03T23:36:54+09:00
available on paper here.
のリンク先ですから印刷物だろうなぁと

g000001 2008-09-03T23:38:04+09:00
なるほど、なるほど。
自分も1つのPDFくらいにはして眺めてみようかなあ
ANSI X3.226-1994のコード例もHyperSpecと同じだったりするんですねー。
David MargoliesのThe ANSI Common Lisp Reference Bookも▽x3.226
このANSI X3.226-1994を印刷した感じに、註釈が付いた感じなんでしょうか。
どうも出版されそうにない気配ですがw

名無しさん 2008-09-04T00:05:20+09:00
え、出版されてませんでしたっけ?
http://www.amazon.co.jp/gp/product/1590592204

g000001 2008-09-04T00:12:51+09:00
そうなんですよね、これamazonとかにはのってるんですが、
http://apress.com/book/search?searchterm=ANSI+Common+Lisp&act=search&submit=Search
出てないっぽいという。
http://apress.com/book/search?searchterm=978-1590592205&act=search&submit=Search
ISBNコードで検索した方が良いのかな?
どちらにせよ、みつからないという謎w

名無しさん 2008-09-04T00:15:05+09:00
あらー

g000001 2008-09-04T00:15:55+09:00
それとも、速攻売り切れ?

名無しさん 2008-09-04T00:16:16+09:00
え、そんなー

g000001 2008-09-04T00:16:40+09:00
それは、なさそうですよねw

名無しさん 2008-09-04T00:17:41+09:00
売れてたら刷ってそうですけど、謎ですね。

g000001 2008-09-04T00:19:46+09:00
http://xach.livejournal.com/156584.html
これ読んでたんで、出版されてないんだろなと、自分は思ってたわけなのですが▼…
割と皆様のお怒りの声がw

名無しさん 2008-09-04T00:25:09+09:00
なるほど、まだ出てないってことみたいですね。いつになることやら

g000001 2008-09-04T00:29:11+09:00
2chでも、HyperSpec翻訳しようとか、盛り上がってるなー。
自分は、アク禁で書き込めないw
とりあえず、HyperSpecは色々難しいだろうから、こないだ出た、CLリファレンス訳して欲しいなとか思いますね(*'-')

名無しさん 2008-09-04T00:32:40+09:00
こないだ出たってのはどれのことですか?

g000001 2008-09-04T00:33:44+09:00
 あ、http://clqr.berlios.de/ですね。
 クイックリファレンスでした(^^;

名無しさん 2008-09-04T00:35:09+09:00
あ、なるほど
これならGPLですしはっきりしてますね

g000001 2008-09-04T00:36:10+09:00
 そうそう、ライセンス的にもHyperSpecみたいなこともないだろうし、量的にもHyperSpecは尋常じゃないと思うので、最初はこれ位が良いのではないかなと(*'-')
 って2chに書きこみたかったんですけどねw

名無しさん 2008-09-04T00:39:42+09:00
HyperSpecは実装者向けの情報も入っているはずなんで、よけい大変そうです。

g000001 2008-09-04T00:42:50+09:00
 ですねー。
 ライセンス、量、英語、CLへの見識の深さ の4つの壁w

名無しさん 2008-09-04T00:45:29+09:00
Lispworksに日本法人でもあれば全然違ったでしょうけど

g000001 2008-09-04T00:46:23+09:00
 あー、なるほど。そういうところもあるのかもしれませんねー。Franzが作ってれば、もう少し違ったりしたのかな。

名無しさん 2008-09-04T00:53:26+09:00
現状でも意外と日本Franzに聞けば分かったりするかも。日本Lispユーザ会だし。

g000001 2008-09-04T00:55:24+09:00
 なるほど、なるほど。
日本Lispユーザ会としても日本語のリファレンスってのはそれなりに重要な事項だったり、
じゃなかったりw

名無しさん 2008-09-04T00:56:40+09:00
小俣さんに聞いてみたら?
あれば便利でしょうけど、どの程度コストを割けるかは謎(苦笑)
JLUGのページメンテしてくれる人探してたし(去年の秋だけどmo
も)
スマン、変なトコで改行した orz

g000001 2008-09-04T00:58:30+09:00
 なるほど、なるほど。jlugに伺ってみると
  「日本Lispユーザ会JLUG (Japan Lisp User Group)は、 Lisp の研究者、処理系および応用の開発者、日常の利用者、学生を対象に、Lisp の最新の実装技術、 理論、応用事例についての日本国内における情報交換を行なう場として設立されました。」ってことなので、そんなに構えなくても気軽に質問してみたりしても良いのかな?
 とりあえず、JLUGってどういう風に活動して行く予定なのかとか、伺ってみようかしら(*'-')

名無しさん 2008-09-04T01:02:19+09:00
CL-FAQとか日本語訳欲しそうなページになっているし、相談には乗ってくれそうな感じですね。
ほとんど休眠状態のハズだよ。

g000001 2008-09-04T01:03:37+09:00
 なるほどー。もったいないですよね。

名無しさん 2008-09-04T01:03:42+09:00
メンバーのラインナップが豪華過ぎて気後れするんじゃないすか?っていうのは指摘しておいた。

g000001 2008-09-04T01:03:57+09:00
 それはあり過ぎますねww

名無しさん 2008-09-04T01:04:28+09:00
んでもっと気軽にアクセスしてもらえるようなサイトにしたいんですけど、誰かサイト運営やっていただけませんか?ってのが小俣さんの希望だったと記憶している。

g000001 2008-09-04T01:05:29+09:00
 なるほど、なるほど。自分は無理ですが、運営できそうな人は沢山知ってますw
 まず、問い合わせしてどんな感じかを確認してみて、声を掛けてみる位なら自分でもできるかなと。
 ちょっと前にブームだった**-lisp-users.jpの中身募集、位の感じだったら、みんな気軽に応じるとは思うんですけどねー。

名無しさん 2008-09-04T01:09:45+09:00
あー、それはいいかも

g000001 2008-09-04T01:10:40+09:00
 JLUGだと、LISP全般になるのかな?
 盲点だったなー。users.jpブームの時に気付いてれば良かった(*'-')
 あー、でも、会員とかになると、やっぱりアカデミックにちゃんとしてないと駄目な感じなのかな?
 とりあえず、考えていても進まないので、今日中位に突撃メールしてみたいと思いますw

名無しさん 2008-09-04T01:15:43+09:00
アカデミックなことは偉い人が存分にやっているのでべつにいいのでは?

g000001 2008-09-04T01:17:16+09:00
 そうですねー。まずJLUGがどういう立ち位置なのかを確認してみようかなと。
とりあえず、JLUG事務局:小俣さん宛にメールしてみますた!

名無しさん 2008-09-04T12:17:14+09:00
GJ!

g000001 2008-09-05T01:17:36+09:00
ありがとうございます! > snmstsさん
でも、なんか勢いでメールとかしてしまって、本当に良かったのだろうか、とか思い始めましたw

名無しさん 2008-09-05T01:52:20+09:00
あんま考えても仕方ないんじゃないっすかね

g000001 2008-09-05T01:54:56+09:00
 こんばんはー(*'-') ですね。とりあえず、お返事待ちです。
 2chでHyperSpec翻訳話で盛り上がってますが、CLクイックリファレンス以外にも、勉強会のネタにしてるcl-cookbookとかも良いネタなんじゃないかなと思ったり。
 既にcl-internさんが取り組んではいらっしゃるのですが、まだ全部ではないので(*'-')
 と思って久々に眺めていて、勉強会でもやった文字列のところとかが翻訳されてたことに今更気づきました(;´Д`)
 あと、cl-cookbookのIDE/Emacsのところは、okshiraiさんが訳してますね。
http://blog.so-net.ne.jp/okshirai/2007-05-20
あ、まちがった、
http://www010.upp.so-net.ne.jp/okshirai/emacs-ide-j/emacs-ide-j.html
こっちだった。

名無しさん 2008-09-05T12:48:56+09:00
slimeの最新版ではclispの対応が治ってますよ。

g000001 2008-09-06T00:16:49+09:00
おお、早速試してみようかなと > slime

 今、higeponさんが、Shibuya.pm的なLISP/Schemeコミュニティを立ち上げようと考えていて、higeponさん以外にもうひとり発起人を募集してるんですが、snmstsさんとか、NANRIさんとかどうですか?(*'-')

higepon 2008-09-06T00:21:02+09:00
もしご興味がありましたらご一報下さいー

名無しさん 2008-09-06T02:29:25+09:00
lisp50周年は何か日本で祝いたいですねー。とは思ってますけど、どんなもんでしょうかね。

g000001 2008-09-06T02:45:23+09:00
お、それ良いですね。っていうか、自分もsnmstsさんのログは読んでたんですがw
様子見でしたw

名無しさん 2008-09-06T02:48:48+09:00
いや、基本スルーでかまわないんですよ。

g000001 2008-09-06T02:49:37+09:00
50周年記念ってことになると、なんとなく
大きいというか、和田先生とかレベルなのかしらとかw
なんというか、まさにJLUG的イベントな気はしますが…

名無しさん 2008-09-06T03:01:33+09:00
何やったらよいんでしょうね。

g000001 2008-09-06T03:02:33+09:00
Shibuya.pmみたいなのがお手本みたいなので
そういう感じなんでしょうか。
 自分は、Shibuya.pmがどういう感じなのか良く分かってなかったりしますがw
> 学生・社会人が「俺はScheme/Lisp でこんな面白いことやっている」
> 「Scheme/Lisp が好きだ」みたいに言える場所があると良いんですよね。
みたいなところを目指しているような。
lisp50周年とからめるのも、良いのかも。

Shibuya.pm
About Us
Shibuya Perl Mongers は東京地区とくに渋谷周辺のインターネット関連企業に勤務している Perl ユーザのコミュニティ形成を目指す非営利の団体です。主な活動内容はプログラミング言語 Perl に関係するメンバー主催の勉強会やインターネット上での啓蒙活動や情報交換です。Shibuya Perl Mongers は Perl を利用し、スキル向上を望む方であればどなたでも無料で参加できます。

かー。
Lispvanとか、lispNYC みたいな感じなのかな。
lispNYCは、毎月第2火曜日にミーティングしてるのかー。

名無しさん 2008-09-06T03:25:58+09:00
それくらいの頻度でも、でとにかく人に会える機会を作るだけでも勝利のような気がします…
寝よ…

g000001 2008-09-06T03:26:11+09:00
それはありますね(*'-')
はいー、おやすみなさいー。

Lisp/Scheme版 Shibuya.pmの立ち上げが決まったようです(*'-')
今日は、勉強会で人も集っていて丁度タイミングが良いので、勉強会が終ったら
IRCにも合流してみたらどうかという話になっています(*'-')
議論の内容は、「名前と発足」についてになります。
IRCのクライアントですが、ウェブ上から利用できるものとして、
http://www.mibbit.com/
があります。
こんばんはー、CL勉強会。本日も開催させて頂きます。
お題は、cl-cookbookより、ファイル〜パッケージ〜マクロとバッククオート篇です。
http://cl-cookbook.sourceforge.net/files.html

また、本日、Lisp/Scheme版のShibuya.pmの立ち上げの話し合いが、
21:30頃から行なわれます。
興味のある方は、合流されてみてはいかがでしょうか!

今回も軽く自己紹介テンプレ用意してみました! 良かったら、記入してみて投稿してみてくださいー。

|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:


名無しさん 2008-09-06T19:16:24+09:00
お邪魔します
まだお題の範囲をを眺めている途中なんですが
パッケージ篇のPDF
"The Complete Idiot's Guide to Common Lisp Packages"
コレも今回の範囲なんでしょうか?

g000001 2008-09-06T19:20:48+09:00
こんばんはー(*'-')
ちょっと迷ってるんですが、
それは参照位かなーと思ったりしてます。
でも、それないと、パッケージの内容がスカスカなんですよね(´▽`*)

名無しさん 2008-09-06T19:22:19+09:00
了解です>参照くらい
まあ、コレも含めると結構な時間になるんじゃあないかと

g000001 2008-09-06T19:23:52+09:00
これをざっと眺めるとすると、ファイル篇とパッケージ篇で丁度良いのかもしれませんね。

名無しさん 2008-09-06T19:25:50+09:00
パッケージ間の名前の衝突は今自分がはまっているところなので勉強してます

g000001 2008-09-06T19:28:36+09:00
なるほど、タイムリーですね(*'-')

quek 2008-09-06T19:39:36+09:00
こんばんは。
ハンドル: quek
活動場所: http://read-eval-print.blogspot.com/
自分内CL/Scheme割合: 10/0
なんとなく質問してみたいこと:
好きな関数/マクロ。
with-open-file が好きです。
よろしくお願いします。

名無しさん 2008-09-06T19:41:35+09:00
こんばんわー、紹介忘れてたw
こんばんは

g000001 2008-09-06T19:52:55+09:00
こんばんはー(*'-')
毎度コピペですが、自分も(*'-')
|g000001|
ハンドル:g000001
活動場所:
cadr.g.hatena.ne.jp/g000001

自分内CL/Scheme割合:
9:1くらい

勉強会でお題になったら良いなと思うネタ:
CLOS、MOP、Lispとデザインパターン。

なんとなく質問してみたいこと:
なんとなくCLOS勉強会やりませんか!?
今晩はジュリアナ東京一夜限りの復活にぶつかったので、参加者が少ないと思ったんですが、杞憂だったようですw

名無しさん 2008-09-06T19:56:35+09:00
ハンドル: kosh
活動場所: なし
CL/Scheme割合: 10/0(xyzzylisp依存CL)
お題ネタ: L-99みたいな問題を解く
こんばんは
活動場所: http://lispuser.net/
CL/Scheme割合: 8/2
http://lispuser.net/files/clisp-2.46-full.zip をダウンロード→解凍→すぐ使える! にしようかなーちまちま活動中です
内部関数はfletよりlabels派>好きな関数/マクロ

quek 2008-09-06T19:59:29+09:00
うん、うん、labels もいいですよねぇ。

g000001 2008-09-06T20:00:43+09:00

こんばんはー
では20時になりましたので、開始します!
第15回

お題は、cl-cookbookより、ファイル〜パッケージ〜マクロとバッククオート篇です。
http://cl-cookbook.sourceforge.net/files.html
ロゴがよりドリフっぽくなってますね(*'-')
scheme-users.jpさん提供のロゴです

quek 2008-09-06T20:02:05+09:00
おぉ、ロゴすごい!!

g000001 2008-09-06T20:02:24+09:00
自分もびっくりしましたw
baalさんは結構こういうのが好きな方なんでしょうか(*'-')
ありがたいですー。

名無しさん 2008-09-06T20:03:13+09:00
いい感じですね

g000001 2008-09-06T20:03:22+09:00
ですね▼(*'-')
今日は、LISP/Scheme版 Scheme.pmの
立ち上げ会議がIRCであるということで、

haiju 2008-09-06T20:03:38+09:00
こんばんわ。ロゴが・・・

g000001 2008-09-06T20:03:47+09:00
丁度CLerのみなさんんもあつまってるということで、
こんばんはー(*'-')
そっちに合流することも予定していますー
大体21:30位だと思います。
IRCのクライアントを用意するのが大変な方もいらっしゃるかと思いますが、

名無しさん 2008-09-06T20:05:02+09:00
こんばんは、hamano といいます。

g000001 2008-09-06T20:05:05+09:00
Web上ので結構使われてるのがあるので、そっちを
案内してみようかと思います。
こんばんはー(*'-')

名無しさん 2008-09-06T20:05:15+09:00
初参加です、よろしくお願いします。

g000001 2008-09-06T20:05:26+09:00
よろしくお願いします(*'-')
WebからアクセスできるIRCのクライアント http://www.mibbit.com/
ということでファイル篇を開始したいと思いますー
* The Common Lisp Cookbook - Files and Directories
* The Common Lisp Cookbook - Files and Directories
最初は、ファイルが存在するかのテストですね
** Testing whether a File Exists
*** Use the function PROBE-FILE which will return a generalized boolean - either NIL if the file doesn't exists, or its truename (which might be different from the argument you supplied).
みたいな感じで、
probe-fileを使用しますよと。
返ってくる値は、存在する場合は、ファイル名(truename)、存在しない場合は、NIL

名無しさん 2008-09-06T20:08:43+09:00
先生 !! truenameってなんですか

g000001 2008-09-06T20:08:46+09:00
(probe-file "/etc/passwd")とかすると
#p"/etc/passwd"
みたいな感じになります。
存在しない場合は、NILと。

名無しさん 2008-09-06T20:10:05+09:00
偽ならNIL,

g000001 2008-09-06T20:10:16+09:00
ですね(*'-')
詳しくは、実践Common Lisp等を参照すると良いかもと

名無しさん 2008-09-06T20:10:53+09:00
generalized boolean というのをはじめて知りました

g000001 2008-09-06T20:11:24+09:00
おお、全然気付きませんでしたw
なんでしょう、T/NILで返すんじゃなくて
非NILのオブジェクト/NILの関係を言うんでしょうか?

名無しさん 2008-09-06T20:12:22+09:00
NIL が偽で、それ以外が真

g000001 2008-09-06T20:13:34+09:00
偽以外は、真と。

名無しさん 2008-09-06T20:13:43+09:00
-でつないであるのでgeneralized booleanとそのあとは同じものを指していそうっす
見つかった場合は truename を返しますからね。
truename…

quek 2008-09-06T20:14:25+09:00
返ってくるのが truename ってことは、probe-file でリンクかどうか判定できるんですね。

g000001 2008-09-06T20:14:58+09:00
あれ、どうだったんでしょうw

名無しさん 2008-09-06T20:15:02+09:00
truename というのは、ファイルシステムにおけるファイル名のことです
相対パスを絶対パスに変換とか?

g000001 2008-09-06T20:15:29+09:00
ファイルシステム的に全部展開された結果がtruename

名無しさん 2008-09-06T20:15:40+09:00
相対パスは帰らないと書いてありますね…

g000001 2008-09-06T20:15:43+09:00
でしたでしょうか。その辺、調べようと思って忘れてました(^^;

名無しさん 2008-09-06T20:16:04+09:00
なんとなく引っかかったので復習したいとおもったのですが、
どんなもんでしょ
シンボリックリンクを渡すと、リンク先が帰るんですね。

g000001 2008-09-06T20:16:47+09:00
この辺泥沼なんじゃなかったでしたっけw

名無しさん 2008-09-06T20:17:15+09:00
(probe-file "cookbook.lisp") ; #P"C:\\home\\lxuser\\lisp\\cookbook.lisp"
CLISPの動作ですが

g000001 2008-09-06T20:18:09+09:00
パスネームオブジェクトを返すってのは、
OKなんですよね。
存在した場合ですが。

名無しさん 2008-09-06T20:19:04+09:00
そうみたいですね

g000001 2008-09-06T20:19:17+09:00
実践Common Lispでは、
シンボリックリンクのようなファイルシステムレベルでの
解決をすべて実行したパスネーム、と
いうことでした。
OS側の問題もあるんで、つっこむと、厄介な問題もありそうですがw

quek 2008-09-06T20:21:02+09:00
このへんでしょうか。http://www.lispworks.com/documentation/HyperSpec/Body/20_ac.htm

g000001 2008-09-06T20:21:51+09:00
なるほど、なるほど

quek 2008-09-06T20:22:01+09:00
ハードリンクは truename なんですね。

名無しさん 2008-09-06T20:22:19+09:00
とりあえず絶対パスがパスネームオブジェクトでもらえるはず…くらいで
とめておかないと泥沼?

g000001 2008-09-06T20:22:39+09:00
なるほど…ですね(*'-')

名無しさん 2008-09-06T20:23:13+09:00
先に進みましょうか

g000001 2008-09-06T20:23:16+09:00
とりあえず、パスネームオブジェクトが貰えると
では、次ですが
** Opening a File
*** Common Lisp has OPEN and CLOSE functions which resemble the functions of the same denominator from other programming languages you're probably familiar with. However, it is almost always recommendable to use the macro WITH-OPEN-FILE instead. Not only will this macro open the file for you and close it when you're done, it'll also take care of it if your code leaves the body abnormally (such as by a use of THROW). A typical use of
WITH-OPEN-FILE looks like this:
ということで
CLにも他の言語のそれと似たようなOPEN、CLOSE関数がありますが
大抵の場合、直接これらを使うのではなくて、WITH-OPEN-FILEを使うこと推奨されるだろうと
それで、with-open-fileの使い方ですが、
使い方というか、まず、機能ですが、
WITH-OPEN-FILEはただファイルを開いて閉じる
ということだけでなくて、ボディ部で異常が発生した場合でも適切に面倒をみてくれますよと
 (with-open-file (str 
                      :direction 
                      :if-exists 
                      :if-does-not-exist )
   )
みたいな形式です。
で、これの
strは束縛するストリームの名前
はファイル名
は指定が省略された場合、デフォルトで入力(:input) 出力で:output 双方向で、:io。
はファイルが存在している場合にどうするかという指示
こちらは逆に存在しない場合、どうするかという指示。
すごいはしょってますが(^^;
実際のところ大抵、with-open-fileを使って、close、openは単独で使うことはない感じですよね。

名無しさん 2008-09-06T20:27:41+09:00
日本限定ですけど :external-format パラメータもよくつかいますね…

g000001 2008-09-06T20:28:00+09:00
あ、そうですね。これ英語のテキストなんで抜けてましたが、
:external-format重要ですね!

名無しさん 2008-09-06T20:28:47+09:00
それか :element-type '(unsigned-byte 8) で 8bit のバイナリストリームとして開いてCっぽくがんばるか。

g000001 2008-09-06T20:29:11+09:00
なるほど(*'-')
ということで、ファイルの開き方、出力の仕方は
OKということで
次に
** Using Strings instead of Files
テキストを一行ずつ読み込むと
*** Reading a File one Line at a Time
まず、read-lineで
read-lienはストリームから1行ずつ読みこみます
行の区切は、#\Newlineで、

名無しさん 2008-09-06T20:31:19+09:00
あと FLEXI-STREAM とか SIMPLE-STREAM のような文字とバイナリの両方が扱えるストリームをつかう!
あ、ちょっと遅かった

g000001 2008-09-06T20:31:50+09:00
いえいえ、ありがとうございますー(*'-')
それで、read-lineの返り値は2値めで行に#\Newlineが含まれているかを確認することができますよと
で、read-line自体の引数で、EOFの値を指定できて
 * (with-open-file (stream "/etc/passwd")
     (loop for line = (read-line stream nil 'foo)
           until (eq line 'foo)
           do (print line)))
これの場合、'eofが返ってくると。
で、今度は、一文字ずつの読み込みで

名無しさん 2008-09-06T20:34:08+09:00
シンボルが気持ちになってるw 'foo が EOF として帰ってくる、ですね。

g000001 2008-09-06T20:34:10+09:00
** Reading a File one Character at a Time
あ、すいませんw 'fooが返ってくるんですね。
因みに割と定番なのは、:eofとかでしょうかw

名無しさん 2008-09-06T20:36:08+09:00
あと、stream自体をeofオブジェクトに使う人も居ますね

g000001 2008-09-06T20:36:29+09:00
おお、それはどういう感じになるんでしょうか。

名無しさん 2008-09-06T20:37:00+09:00
for line = (read-line stream nil stream) ; 俺がEOFだ!
until (eq line stream) ; オレオレ!ストリームだよ!

g000001 2008-09-06T20:37:39+09:00
なるほどー。
こういう書き方もあるんですね(*'-')

quek 2008-09-06T20:38:08+09:00
なるほど、EOF としてユニークのオブジェクトがほしいとき gensym しなくてもいいんですね。

g000001 2008-09-06T20:38:41+09:00
ポール・グレアムが、eofをdefconstantで定数で宣言してるのを
読んだことがあるんですが、
定数にするメリットってあったりするんでしょうか、

名無しさん 2008-09-06T20:39:00+09:00
Cのwhile(c=getch(...)) みたいなイディオムだったんでしょうね。

g000001 2008-09-06T20:39:05+09:00
というのを思い出しました、そういえば。

名無しさん 2008-09-06T20:39:16+09:00
定数にするとコンパイラががんばってくれるかもという期待が高まる。

g000001 2008-09-06T20:39:30+09:00
なるほど、なるほど(*'-')
ただ、他のパッケージとの組み合わせとか、ファイルの際読み込みとか、なんか面倒くさいことに
というか、注意しないでいるとはまったりしましたw

名無しさん 2008-09-06T20:40:45+09:00
ですよねぇ。:eof でいいじゃんと思ってしまう。

g000001 2008-09-06T20:41:18+09:00
:eofだけに、判定に失敗すると、停止しないとかw
ポール・グレアムも、:eofは使ってはいるみたいでしたが…。
ということで、一文字ずつの読み込みですが、
read-charを使います。
read-lineと似ているが、一度に一文字を読み込み
read-lineとの違いを言えば
当然ながら、#\Newlineは特別扱いされないと。
で、次ですが、
** Looking one Character ahead
*** You can 'look at' the next character of a stream without actually removing it from there - this is what the function PEEK-CHAR is for. It can be used for three different purposes depending on its first (optional) argument (the second one being the stream it reads from): If the first argument is NIL, PEEK-CHAR will just return the next character that's waiting on the stream:
ということで、次の一文字を確認する方法ですが
peek-charを使います。
第1引数にNILを与えた場合は、peek-charは次の文字をストリームに返すことになります
 * (with-input-from-string (stream "I'm not amused")
     (print (read-char stream))
     (print (peek-char nil stream))
     (print (read-char stream))
     (values))
 
 #\I 
 #\' 
 #\'
*** If the first argument is T, PEEK-CHAR will skip whitespace characters, i.e. it will return the next non-whitespace character that's waiting on the stream. The whitespace characters will vanish from the stream as if they had been read by READ-CHAR:
それで、
第1引数をTにすると空白文字を無視することができます
 * (with-input-from-string (stream "I'm 
                                    not amused")
     (print (read-char stream))
     (print (read-char stream))
     (print (read-char stream))
     (print (peek-char t stream))
     (print (read-char stream))
     (print (read-char stream))
     (values))
 #\I 
 #\' 
 #\m 
 #\n 
 #\n 
 #\o
みたいな感じで

*** If the first argument to PEEK-CHAR is a character, the function will skip all characters until that particular character is found:
第1引数に文字を指定すると、指定文字がみつかるまで読み飛すことができますと
第1引数に文字を指定すると、指定文字がみつかるまで読み飛す。
 * (with-input-from-string (stream "I'm not amused")
     (print (read-char stream))
     (print (peek-char #\a stream))
     (print (read-char stream))
     (print (read-char stream))
     (values))
 #\I 
 #\a 
 #\a 
 #\m 
で、peek-charもEOFにぶつかった際の値を与えることができますよと。
それで、peek-charの反対もあるのですが
*** You can also put one character back onto the stream with the function UNREAD-CHAR. You can use it as if, after you have read a character, you decide that you'd better used PEEK-CHAR instead of READ-CHAR:
unread-charで一文字読み込みを戻すことができますよと
 * (with-input-from-string (stream "I'm not amused")
     (let ((c (read-char stream)))
       (print c)
       (unread-char c stream)
       (print (read-char stream))
       (values)))
 #\I 
 #\I
みたいな感じで、
ただ、ストリームはスタックのようには機能しないため、読み戻せるのは1文字
字。
また、前に読んだ文字を読み戻せるのみなので、
当然ながら、まだ読んでいない場合には読み戻せないですよと。
それで、peek-charですが、
ここでは、どこで使うかは書いてないのですが、
大体どういうところで使われるんでしょうか。
自分が使ったことがあるのは、大抵、リーダーマクロ
を作るときくらいかなと、いう感じなのですが
文字列処理だと多用したりするものなんでしょうか(*'-')
俺言語作成には活躍しそうな気も。
というところで、
次にファイルのランダムアクセスなんですが、
** Random Access to a File
*** Use the function FILE-POSITION for random access to a file. If this function is used with one argument (a stream), it will return the current position within the stream. If it's used with two arguments (see below), it will actually change the file position in the stream.
ということで
ファイルのランダムアクセスには、file-positionを使用します。
1引数で使用された場合は、その時点のファイルポジションを返して
2つ目の引数が指定された場合、ファイルポジションを変更することができます
 * (with-input-from-string (stream "I'm not amused")
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (file-position stream 4)
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (values))
 0 
 #\I 
 1 
 4
 #\n  * (with-input-from-string (stream "I'm not amused")
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (file-position stream 4)
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (values))
 0 
 #\I 
 1 
 4
 #\n 
 5
 5
あ、コピペ失敗(;´Д`)

 * (with-input-from-string (stream "I'm not amused")
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (file-position stream 4)
     (print (file-position stream))
     (print (read-char stream))
     (print (file-position stream))
     (values))
 0 
 #\I 
 1 
 4
 #\n 
 5
というところで、ファイル篇は終了です。
ファイル篇で何か疑問点や、
これはおかしい、というところはありますでしょうかー(*'-')
ファイル篇の補助教材としては、

名無しさん 2008-09-06T20:53:44+09:00
あー file-position は文字列ストリームに対してはちょっとアレなんですよね。マルチバイト文字とか…

g000001 2008-09-06T20:53:54+09:00
やはり、実践Common Lisp
でしょうか。
なるほど(*'-')
自分も、doukaku.orgのtailの実装を途中までやって
投げ出しました。その問題を考えてしまってw

名無しさん 2008-09-06T20:54:40+09:00
改行とかで、write-char / read-char で 1よりも大きい数の変更が入る可能性がある。
peek-charかunread-charかなんかで引数の順番ではまったとかいうのをblogで読んだような... どこだったかな?
…と HyperSpec に書いてあってびっくり。当時のASCII圏の人がかいたのにすごいなー。Description のあたり。
http://www.lispworks.com/documentation/HyperSpec/Body/f_file_p.htm#file-position

g000001 2008-09-06T20:56:31+09:00
おお、なるほどー。
「当時のASCII職人が書いただけに、すごいなー、」に空目してしまいましたw
問題として把握はされてたんですねー(*'-')
peek-charの引数の順番はなんとなくはまりそうな気もしますね。
ということで、パッケージに進もうかと思いますー(*'-')
ここの内容なんですが、
まだ作成途中らしいです。
ということで、
Erann Gat氏の
"The Complete Idiot's Guide to Common Lisp Packages"
http://www.flownet.com/gat/packages.pdf
のリンクが示されているんですが、
この資料も分かりやすくて良いかなと思ってちょっと確認してみたんですが、
なんとなく、解説が処理系依存動作なのか、そうでないのか
はっきり書いてないようなところがあるような、
ないような、
感じで、
資料としては、やはり、実践Common Lispが良いんじゃないかなとw
例えば、最初のところで、
(make-package :bob)
でパッケージを作ってという風に解説してるんですが、
:useを省略した場合にデフォルトで、どのパッケージをuseするかは
処理系依存らしいので、
最初からつまづくこともあるんじゃないかと思ったりします(;´Д`)
http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_pkg.htm
ちなみに、SBCLだとnil
みたいなので、この問題に当りますねー。
で、パッケージの作成ですが、
defpackageを使用するのが無難だろうと、色んな本にも書いていると思うので
そういう感じが良いのかなとも思いました。
ところで、koshさんのシンボルの競合問題は、
どんなところが、
はまったところでしたでしょうか?(*'-')
シンボルのインポートとか、でしょうか。

名無しさん 2008-09-06T21:09:32+09:00
'user::hoge をインターンした後で
(export '(lisp::hoge))
をしたら名前衝突が起こったところです。
xyzzyにCLのsearch関数がなかったからCMUCLから持ってきてみたんですが
みごとにはまってしまいました。

g000001 2008-09-06T21:13:03+09:00
これは、なにかパッケージを作成してそこにインポートしてという感じで

名無しさん 2008-09-06T21:15:03+09:00
つまらない話題なんで先に進んだほうが良いかもしれません。
頻出パターンですよね。

g000001 2008-09-06T21:16:15+09:00
なるほど(*'-')

名無しさん 2008-09-06T21:16:21+09:00
別につまらなくはないと思いますが…ま
xyzzyはpackageを使う例があまり無いからいざ使おうとすると、やらかします。
(私も package は使ったこと無くて良く分っていません、予習しておけばよかったorz
あ、いや今ここで議論すると長くなるかなーとおもって>snmstsさん

g000001 2008-09-06T21:18:00+09:00
いや、時間的には丁度良いかなと思ってw

名無しさん 2008-09-06T21:18:14+09:00
xyzzyではdefpackageが余り頼れないので、
シンボルが衝突するとどっちかを選ばないといけません
やらかす確率は普通よりも少し高め…
あと、xyzzyはプロンプトが無いからパッケージ内で開発するのが、結構面倒だったり

g000001 2008-09-06T21:19:04+09:00
パッケージの話題については、ANSI Common Lispの14章とか、実践Common Lispとかに詳しいです(*'-') > hamanoさん

名無しさん 2008-09-06T21:19:09+09:00
いらないほうを隠す(shadowする)とか。
~/.xyzzy 書き換えて再起動したら怒られた、というのがときどきありますね
ありがとうございます、一応両方持っているので良く読んでおきます^^;
'editor:search の方は

g000001 2008-09-06T21:20:21+09:00
おお、両方持ってらっしゃるなら、

名無しさん 2008-09-06T21:20:22+09:00
#+xyzzy (shadow '(search) (find-package "editor"))

g000001 2008-09-06T21:21:08+09:00
実践Common Lispを参照されて
21章とかでしょうか。
本当は、パッケージについて、ここで解説するのが順当なのですが(;´Д`)

名無しさん 2008-09-06T21:22:09+09:00
お買い上げ感謝します…(_ _)

g000001 2008-09-06T21:22:17+09:00
機会を改めて、パッケージ篇をまたやりましょう!

名無しさん 2008-09-06T21:22:26+09:00
皆様
…なのでしょうか…

g000001 2008-09-06T21:22:50+09:00
shadowして回避する方法とか、そういう感じをやりたいですね。
というか、実践Common Lispのパッケージのところを
今日やれば良かったのかな(^^;
あ、cookbookの内容も残りがあるのですが、
** List all Symbols in a Package
パッケージ中の総てのシンボルをリストアップする。
ということを解説しています。
これには、専用のマクロ、do-symbols、do-external-symbols等が用意されています。
エクスポートされているシンボルを全部printするには、下記のようにします
 (do-external-symbols (s (find-package "PACKAGE"))
   (print s))
シンボルをリストにまとめたり
 (let (symbols)
   (do-external-symbols (s (find-package "PACKAGE"))
     (push s symbols))
   symbols)
LOOPにも専用の構文があります。
(loop for s being the external-symbols of (find-package "PACKAGE") collect s)
とか、
どういう訳か、繰り返し系のマクロは
それぞれこの機能を実装することが多くて、
seriesにも
(iterate ((s (scan-symbols :cl))) (print s))
こんな感じで書けたり。
あんまり使わなさそうなんですけども…。
という感じで、パッケージに若干の悔を残しつつ
今日は、まったり進行でした。すいません(;´Д`)

名無しさん 2008-09-06T21:28:05+09:00
河岸を変えましょう!と

g000001 2008-09-06T21:28:26+09:00
これから、Shibuya.pmのlisp/scheme版の立ち上げ
会議みたいなものがあるのですが、
そちらに興味がある方は是非という流れがございます(*'-')
WebからアクセスできるIRCのクライアント http://www.mibbit.com/
で、チャンネルは、
#Lisp_Scheme
文字コードは、utf-8です。
自分は両方見張ってるので、

名無しさん 2008-09-06T21:30:15+09:00
server は freenode でしょうか?

g000001 2008-09-06T21:30:18+09:00
どちらでも話し掛けて下さいw
あ、すいません、freenode.netです(*'-')

名無しさん 2008-09-06T21:30:49+09:00
了解です。

g000001 2008-09-06T21:32:03+09:00
そうなんですよね、utf-8ではまることが結構あるみたいです(*'-')
http://www.mibbit.com/
だと、とりあえず、utf-8が手短に使えるようです(*'-')

名無しさん 2008-09-06T21:36:32+09:00
ありがとうございます、emacs の erc で Invalid coding system: UTF-8 と怒られたので、web にしました^^;

g000001 2008-09-06T21:37:17+09:00
丁度mibbitがutf-8なんで楽という(*'-')

名無しさん 2008-09-06T21:48:51+09:00
見にきた。

g000001 2008-09-06T21:49:33+09:00
こんばんはー(*'-')

名無しさん 2008-09-06T21:50:39+09:00
僕は圏外の人間だから見せてもらってるよ。

g000001 2008-09-06T21:50:51+09:00
いやいや、そんなw

名無しさん 2008-09-06T21:51:11+09:00
外からの口出しは出来ない 笑

g000001 2008-09-06T21:51:35+09:00
いや、全然外じゃないじゃないですかw

名無しさん 2008-09-06T21:51:38+09:00
関西でも同じように作っていけばええねんけど 笑
関東には住んでないから^^;

g000001 2008-09-06T21:52:03+09:00
京都多いですからね、
活動している人は、京都の方が多い気がしますねー。

名無しさん 2008-09-06T21:52:17+09:00
まあね

g000001 2008-09-06T21:52:33+09:00
東京は人口が多いだけに、
好きな人が多いんでしょうね。

名無しさん 2008-09-06T21:52:59+09:00
うん

g000001 2008-09-06T21:53:07+09:00
LISPでなにかしてるって人は、そんなに多くない気がしますがw

名無しさん 2008-09-06T21:54:06+09:00
積極的に活用してる人は少なそうやね。

g000001 2008-09-06T21:55:08+09:00
そうなんですよね。
というか、コード書いてる人は少ない気が
人口比では、ですが(*'-')

名無しさん 2008-09-06T21:56:09+09:00
教えてもらいたいという人が集まるのは予想できるよね。
あとは言語マニア。いろんな言語触るのは楽しいからなぁ。

g000001 2008-09-06T21:57:03+09:00
そうですね、そんな感じかもしれませんねー。

名無しさん 2008-09-06T21:57:14+09:00
そこから関東のいろんな横のつながりを作って行ったら面白いんじゃないかな。
g000001さんのLL発表が近づくよ(ニヤリ)

g000001 2008-09-06T21:57:32+09:00
そうですねー。でも、Shibuya.pm時代も
最初地方から参戦ってのが結構多いんですよ(*'-')

名無しさん 2008-09-06T21:57:52+09:00
いいっすね>yasさん

g000001 2008-09-06T21:57:56+09:00
あ、あとビデオ参加とか

名無しさん 2008-09-06T21:58:16+09:00
ビデオサンカかぁ。

haiju 2008-09-06T21:58:26+09:00
へぇ・・・
楽しみだなぁ

名無しさん 2008-09-06T21:59:02+09:00
関西はrubyがらみが活発みたいだからそっちに足を運んで様子を見ようとは思ってるけど、いつも忘れてる^^;

g000001 2008-09-06T21:59:05+09:00
いやー、私は発表する側にはまわらないと思いますよw

haiju 2008-09-06T21:59:25+09:00
じゃぁ、実行委員側ですか?

g000001 2008-09-06T21:59:31+09:00
あと、skypeとかでしょうか

haiju 2008-09-06T21:59:32+09:00
LLの?

g000001 2008-09-06T21:59:48+09:00
gauche.nightのLTもビデオ発表ありましたし、
割といけるんじゃないかなと思ったりはします(*'-')

名無しさん 2008-09-06T22:00:38+09:00
skypeビデオでの発表って、「ヤマトの諸君〜」(デスラー総統)の気分になれそうw

g000001 2008-09-06T22:00:52+09:00
まさに、そういう感じになりますねw
実行委員側としても、もあやしいですが、
どっちかといえば、そんな感じですかねー(*'-')

haiju 2008-09-06T22:03:31+09:00
実行委員側になったら、今年の
Schemeの人たちみたいにCommon Lispを
外部の人たちにいろいろなテーマでアピールできるかも
という期待が持てました

名無しさん 2008-09-06T22:04:05+09:00
カエラちゃんもログがいっぱいになりそうだな。w

g000001 2008-09-06T22:04:26+09:00
CLは、まず人口が増えないとww
ですね > カエラたん
名前が、Shibuya.lispに決定しました(*'-')

名無しさん 2008-09-06T22:05:03+09:00
おめでとう。

g000001 2008-09-06T22:05:39+09:00
議題が次に

名無しさん 2008-09-06T22:05:50+09:00
http://usokosystem.com/?a=Maker&oo=shibuya.lisp (w

g000001 2008-09-06T22:05:50+09:00
ドメインとるらしいです。

名無しさん 2008-09-06T22:06:09+09:00
こっちだ http://usokosystem.com/?a=Maker&oo=Shibuya.lisp

g000001 2008-09-06T22:06:34+09:00
あとの方がなんか凄いですよw

名無しさん 2008-09-06T22:06:48+09:00
これはひどい(笑)

g000001 2008-09-06T22:23:08+09:00
割と各地の方が議論に参加してますよ(*'-')

名無しさん 2008-09-06T22:26:30+09:00
yharaさんとかそうだよね。

g000001 2008-09-06T22:27:05+09:00
以外に、割とまんべんなくって感じかもしれませんね。

名無しさん 2008-09-06T22:27:31+09:00
あんまりふかくかんがえずにぱんととっちゃえばええやん。
かといってxxx-lisp.comとかなら怪しまれると思うけどw
どんな画像が入ってんねんってね^^;

g000001 2008-09-06T22:29:14+09:00
lisp-users.orgで決まりの模様です(*'-')

名無しさん 2008-09-06T22:29:32+09:00
http://usokosystem.com/?a=Maker&oo=lisp-users.org

haiju 2008-09-06T22:29:43+09:00
アカデミックな感じですね

名無しさん 2008-09-06T22:30:19+09:00
これまた怪しいw

haiju 2008-09-06T22:30:22+09:00
嘘より愛と金かぁ・・・

名無しさん 2008-09-06T22:30:34+09:00
higeponはさすがに手際がいいね。
アカデミック…

g000001 2008-09-06T22:31:41+09:00
割と、渋谷の人が多いのかw

haiju 2008-09-06T22:32:30+09:00
渋谷はIT企業多いですからねぇ・・・
Web系とか

名無しさん 2008-09-06T22:32:55+09:00
わしゃ、新宿系と大岡山系やったけどw
アカデミックな感じですね
ML管理人g000001さんにキタ━━━━━━(゜∀゜)━━━━━━

haiju 2008-09-06T22:34:54+09:00
わーい!(´∀`)

g000001 2008-09-06T22:35:12+09:00
caddrじゃだめか、やっぱりw

haiju 2008-09-06T22:35:13+09:00
あとでグループに参加してこよう

名無しさん 2008-09-06T22:36:07+09:00
当確 日本lisp党 g000001 (common lisp派) 100,102,134票
http://ja.wikipedia.org/wiki/LIPS
これか。もしかしてLIPSとか検索エンジンにバカにされてた理由は。
日本lisp党 最大派閥scheme派、emacs lisp派、common lisp派、arcグループ、autocadグループ、gimpグループ
新進気鋭のnewlispグループとかclojureグループとか、common lisp派から分離独立のQi派とかですか?
ちがった、newlispはかなり歴史があるんだった
そそw分離独立のQi派はhaskell党やocaml党とバトルを繰り替えしてるとかw
Gmail利用、Googleグループの参加どちらもまずアカウントが必要なのでは?>ML

g000001 2008-09-06T22:49:10+09:00
そうなんですよね、
それを一応説明したつもりだったんですがw
伝わってなかった流れかな(^^;

名無しさん 2008-09-06T22:50:05+09:00
自分はGmail利用でアカウントをとってからのCaddrグループ参加でしたが。

g000001 2008-09-06T22:50:32+09:00
ですね、とって頂きましたね(*'-') 一応これからその辺説明しようと思います。

名無しさん 2008-09-06T22:51:11+09:00
Qi派はそろそろ世代交代っぽいですよ。9月中にQiIIがでるそうで。次はマクロがdropされてsugar functionになるとか。
8月中だったのが少し遅れてるんですねぇ。

g000001 2008-09-06T22:52:46+09:00
そうだ、Qi II遅いですね。

名無しさん 2008-09-06T22:54:02+09:00
みんなチェックしてたますねw 本と同時にリリースしたいとかでは。

g000001 2008-09-06T22:54:05+09:00
そういえば、Qiのマクロの書き方、まだ憶えてなかったのにw

haiju 2008-09-06T22:54:17+09:00
QiII楽しみですよね

g000001 2008-09-06T22:54:20+09:00
そうそう本も出すみたいってのが、凄いですよねw

名無しさん 2008-09-06T22:54:40+09:00
うれるんやろか?求愛本
今ドキュメントとしてついてくるFPQIに改版と追記したやつですよー

g000001 2008-09-06T22:55:27+09:00
あ、あのWordのやつですか(*'-')
そうだ、onjoさん、TechTalkで、video出演とか
どうですか?(*'-')

名無しさん 2008-09-06T22:55:59+09:00
デスラーonjoとしてw

g000001 2008-09-06T22:56:10+09:00
gauche.nightとか、ビデオ出演ってあったんですよ。
yasさんもどうですかw

名無しさん 2008-09-06T22:57:50+09:00
おれはネタが無いw

g000001 2008-09-06T22:57:52+09:00
デスラーコスでw
LTKとか沢山あるじゃないですかw

名無しさん 2008-09-06T22:58:12+09:00
極めてないしなぁ。

g000001 2008-09-06T22:58:17+09:00
10分程度らしいですよ。
いや、極める必要はw

名無しさん 2008-09-06T22:58:50+09:00
まともなものを作らないとw
作らなくても、チュートリアルをやるような事はできないとなぁ。

g000001 2008-09-06T22:59:13+09:00
あと、skype出演かな。

名無しさん 2008-09-06T22:59:25+09:00
どうなんだろう。質疑とか考えると人間のほうが楽しそうだけど。
そこまでや〜れん
俺も最近は気が抜けた炭酸水になってるからなぁ。^^;

g000001 2008-09-06T23:00:53+09:00
私は抜けきってますねw
さらに、なま暖いですねw

名無しさん 2008-09-06T23:01:18+09:00
g000001さんはワインからワインビネガーになってないよ大丈夫 笑
あの子をいきなり召喚って。。。
考えてみたけどネタが思いつかないなぁ…
あの子というと、あの各派閥が密かに注目しているという…

g000001 2008-09-06T23:04:25+09:00
各派閥w
なんか、CLだと、大規模なDBと連携とか、MOPバリバリで理解できないやつとか

名無しさん 2008-09-06T23:04:55+09:00
たしかにw

g000001 2008-09-06T23:04:57+09:00
そんなのどうですかw
あと、やたら速さにこだわるとかw

名無しさん 2008-09-06T23:05:45+09:00
clsqlならnekonyanさんが頑張ってた
clでねたとなったら、日本語がらみのパッケージ?

g000001 2008-09-06T23:06:30+09:00
とりあえず、CLのメリットっていわれてるところって
まだそんなにデモされてないと思うので、
その辺はうけるんじゃないかなーと思ったりはしますね(*'-')

名無しさん 2008-09-06T23:07:04+09:00
excelとの連携とか
LISPマシンのエミュレータでデモしてくださいよw
となるとquekさんの得意分野になってくる。

g000001 2008-09-06T23:07:29+09:00
Zmacs開いて編集とかならできますw
30年まえからできたんですよネタw

名無しさん 2008-09-06T23:07:47+09:00
レトロネタかぁ。
Emacs?いいえZmacsです!

g000001 2008-09-06T23:08:33+09:00
30年前の開発環境とはいえ、素のSchemeモードより便利ですからねw

名無しさん 2008-09-06T23:09:35+09:00
あの子は半年から一年後が楽しみだよなぁ。いまは青い果実ですよ奥さん!

haiju 2008-09-06T23:09:36+09:00
g000001さんのレトロネタ、見たいですねぇ
青い果実?

名無しさん 2008-09-06T23:10:08+09:00
始めて間がないみたいだから

haiju 2008-09-06T23:10:21+09:00
もしかして13歳の?

名無しさん 2008-09-06T23:10:26+09:00
そそ
微妙に気持ち悪い…


haiju 2008-09-06T23:11:46+09:00
中学生を呼ぼうってネタが!
呼ばれるんだろうか?13歳

名無しさん 2008-09-06T23:12:14+09:00
そもそも13歳どこに住んでるんでしょうか?

g000001 2008-09-06T23:12:22+09:00
ですよねw

名無しさん 2008-09-06T23:12:27+09:00
わからへん。

haiju 2008-09-06T23:12:31+09:00
気になりますねぇ

名無しさん 2008-09-06T23:12:47+09:00
暖かく見守ってて上げたいと思ってますわ。

haiju 2008-09-06T23:14:36+09:00
Tech Talkの開催時期が早まるんですかねぇ

g000001 2008-09-06T23:16:34+09:00
ネタっていえば、なんだろなー。
自分はとりあえず、onjoさんのデモがなんでも良いのでみたいですねー(*'-')
あ、そうだ。商用CL処理系の
動いてる画面もあまりみないので、
それだけでも価値がありそう。

名無しさん 2008-09-06T23:18:26+09:00
こーるまんからlispworksまで?

g000001 2008-09-06T23:19:16+09:00
商用のLISP処理系 自体レアかもと。

名無しさん 2008-09-06T23:20:05+09:00
うけねた。。。web関連。グラフィック関連、windows関連。。。そんなところ?
clispのcgiもさわってないなぁ〜^^;

haiju 2008-09-06T23:20:37+09:00
musicもいいと思いますが

名無しさん 2008-09-06T23:21:29+09:00
処理系の画面写真か動画なら用意できるなー

g000001 2008-09-06T23:24:07+09:00
やっぱりリッチな開発環境のデモをひとつですね。
いいな、CL、開発環境良いなCLとですねw

名無しさん 2008-09-06T23:25:58+09:00
日本語とかは見せない方向ってことですかw

g000001 2008-09-06T23:26:11+09:00
それが良いかもw

名無しさん 2008-09-06T23:26:15+09:00
w

g000001 2008-09-06T23:28:52+09:00
音楽関係も良さそうですね。
ただ音楽は音楽で専門知識がないといじれなさそうなのが、
ちょっと敷居が高そう(*'-')
Band in a Boxみたいのが自作できると楽しそうですけど

名無しさん 2008-09-06T23:30:18+09:00
全く関係ないですが、colorize便利だなぁ。clhsにリンクまで張ってくれるのか。http://raido.sakura.ne.jp/southly/lisp/colorize.html

g000001 2008-09-06T23:30:42+09:00
ですね、R5Rsとかも
マニュアルにリンクしてくれるという(*'-')
自分も全然関係ないのですが、
型の指定関係で使うsatisfiesなんですが、
http://h.hatena.ne.jp/g000001/9245604344912060912
にも書いてみたんですが、
lambda式はとれないのが普通みたいなんですが、
PGのANSI Common Lispだとlambda式の例が書いてあって
それはそれで、どうなのかと思うのですが、

higepon 2008-09-06T23:36:10+09:00
slime 自慢とか見てみたい

g000001 2008-09-06T23:36:13+09:00
でも、便利なことは便利だなと

higepon 2008-09-06T23:36:15+09:00
とリクエストしておこう

g000001 2008-09-06T23:36:37+09:00
ですねー、SLIME等の開発環境のデモは良いかもと思います(*'-')

名無しさん 2008-09-06T23:37:49+09:00
ご苦労さんです>higeponさん
逆にSLIME以外の環境で開発してるよって人の自慢も知りたいかも
vim派の人とか知りたいですね。
ひとまず、お疲れ様でした>higeponさん
vimのlimp?とか?eclisp(!)とか
あー。それは見たことないなぁ。

g000001 2008-09-06T23:42:21+09:00
smegheadさんvi派でしたよね

名無しさん 2008-09-06T23:43:22+09:00
eclisp=eclipseのcuspだけど面倒くさいからeclispと呼んでる^^;

haiju 2008-09-06T23:44:42+09:00
一瞬、入力ミス?かと思いました

名無しさん 2008-09-06T23:45:34+09:00
失敬
止まっちゃったけどhttp://jabberwocky.sourceforge.net/ 
とか、最近LISP-IDEなんてもどっかで見たなぁ。

g000001 2008-09-06T23:48:32+09:00
LISP-IDEとにかく簡単で良いですねw

名無しさん 2008-09-06T23:49:48+09:00
すまちゃんはvimだったよ。
日本語つかえたらごった煮いらないなーとかw
Lisp入門キットとか改名しようかな。
前回の指摘で絶対パスで起動できない問題もなおしたつもりです。設定ファイルをカレントディレクトリから読んでたとか、(make-pathname ... :device のデバイス指定を忘れてたとか寒いバグだったw
お疲れだったんでしょう。きっと
あと REPL に +++ ++ + /// // / *** ** * を実装してみました~

g000001 2008-09-06T23:53:25+09:00
おおっ、早速試してみます(*'-')

名無しさん 2008-09-06T23:54:04+09:00
…しかし、CL使い以外には意味不明な会話ですよねぇ。これも。

haiju 2008-09-06T23:54:36+09:00
onjoさんのごった煮版は前のバージョンを落とせなくて心待ちにしてたので、会社のPCで試してみます
家のノートでも試してみます

名無しさん 2008-09-06T23:56:43+09:00
oyasumi-
おやすみなさいー
ありがとうございます。>haiju

g000001 2008-09-06T23:57:18+09:00
おやすみなさいましー

haiju 2008-09-06T23:58:49+09:00
おやすみなさーい

名無しさん 2008-09-07T00:00:00+09:00
LingrとIRCのログを読んだら関西の話がほとんど無くて全俺が泣いた...
やっぱし人が集まるとなると自動的に関東になりますね

g000001 2008-09-07T00:01:29+09:00
いや、yasさんがw

名無しさん 2008-09-07T00:01:52+09:00
yasさんは集まれなかった扱いでしょうか…

g000001 2008-09-07T00:01:53+09:00
京都は熱いんじゃないかと思うんですが、どうなんですかね(*'-')
自分は基本的にオンライン活動がメインなので、
そっちの可能性を追及して行きますw
…あ、集まるとなると、ですかw

名無しさん 2008-09-07T00:03:05+09:00
誰かこの人に表に出ろと…

g000001 2008-09-07T00:03:39+09:00
IRCで、LingrもWassr監視できるようになったので、

名無しさん 2008-09-07T00:03:41+09:00
最初からshibuyaだったので今回は関西の話題はでないですよね

g000001 2008-09-07T00:03:52+09:00
かなり良い感じですよ!!(*'-')
でも、shibuya.pmって
関西とかからも駆け付けてたみたいですよ(*'-')
というか、まあ、仕事でPerl書けてたってのが、
一番大きい要因な気もしますがw

名無しさん 2008-09-07T00:08:32+09:00
はやく新幹線こないかなぁ
お魚おいしそうだよなぁ…onjoさんの方面
うちの実家の方が今めちゃめちゃ新幹線の工事やってます

g000001 2008-09-07T00:10:44+09:00
あれ、サーバ提供ってsnmstsさんですか?
NSレコードの設定したいとのことみたいですが…

名無しさん 2008-09-07T00:11:59+09:00
ほえ?

g000001 2008-09-07T00:12:23+09:00
dreamhostのアドレスに向けるのかな?
あ、NSレコードって自前のDNSのアドレスだったかな、どうだったかw mxしか憶えてないw

名無しさん 2008-09-07T00:15:21+09:00
hamanoさん?海外ということはdreamhostかな。

g000001 2008-09-07T00:17:42+09:00
あれ、dreamhostで勘違いしてたかw

名無しさん 2008-09-07T00:18:04+09:00
あーと
返信済み気味
さすがに公開はなんなので…直メールしてました

g000001 2008-09-07T00:20:03+09:00
あ、なるほど、メールで(*'-')

名無しさん 2008-09-07T15:24:27+09:00
こんにちは。
いない間に面白い話があったんですね。
楽しみにしております。

g000001 2008-09-07T17:51:37+09:00
ですね、LISPのコミュニティが一つ活動を開始しました(*'-')
Shibuya.lispのページからここにリンクが貼られました!

名無しさん 2008-09-07T22:09:16+09:00
eclでswankが動かなくなってる!?

g000001 2008-09-07T22:23:33+09:00
おお、そうなんですか!
でも、最近思いっきり変更がはいってるから、動かなくなってても
不思議でないような(;´Д`)
 SBCLでさえなんか挙動が変なことが多い気がします。どうしたんだろう…。
 うーん、うちでも動かないかも…。ちゃんと追い掛けてみないと分かりませんが…。

名無しさん 2008-09-07T22:31:49+09:00
$ ecl
;;; Loading #P"/Users/southly/local/lib/ecl/ASDF.fas"
;;; Loading #P"/Users/southly/local/lib/ecl/CMP.fas"
;;; Loading #P"/Users/southly/local/lib/ecl/sysfun.lsp"
;;; Compiling /Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.lisp.
;;; Compiling (DEFPARAMETER *ASDF-CACHE* ...).
;;; Compiling (DEFPARAMETER *EXCLUSIONS* ...).
;;; Compiling (DEFPARAMETER *IMPLEMENTATION-FEATURES* ...).
;;; Compiling (DEFPARAMETER *OS-FEATURES* ...).
;;; Compiling (DEFPARAMETER *ARCHITECTURE-FEATURES* ...).
;;; Compiling (DEFUN LISP-VERSION-STRING ...).
;;; Compiling (DEFUN UNIQUE-DIRECTORY-NAME ...).
;;; Compiling (DEFUN EXCLUDED ...).
;;; Compiling (DEFUN CALCULATE-PATH ...).
;;; Compiling (DEFMETHOD ASDF:OUTPUT-FILES ...).
;;; Note: In function G134, checking types of arguments SRC OP.
;;; Compiling (CLOS::INSTALL-METHOD 'ASDF:OUTPUT-FILES ...).
;;; The variable CLOS::.COMBINED-METHOD-ARGS. is undefined.
;;; The compiler will assume this variable is a global.
;;; End of Pass 1.  
;;; Note: Emiting FUNCALL for SI::DODEFPACKAGE
;;; Emitting code for LISP-VERSION-STRING.
;;; Emitting code for UNIQUE-DIRECTORY-NAME.
;;; Emitting code for FIRST-OF.
;;; Note: Eliminating unreachable code
;;; Emitting code for EXCLUDED.
;;; Note: Eliminating unreachable code
;;; Emitting code for CALCULATE-PATH.
;;; Emitting code for #:G134.
;;; Note: Eliminating unreachable code
;;; Note: Eliminating unreachable code
;;; Calling the C compiler... 
;;; Note: Invoking external command:
;;; gcc  -g -O2 -fPIC -fno-common  -Ddarwin -O "-I/Users/southly/local/include/" -w -c "/Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.c" -o "/Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.o"
;;; Note: Invoking external command:
;;; gcc -o "/Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.fas" -L"/Users/southly/local/lib/" "/Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.o"  -bundle    -lecl   -lm  
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
;;; Finished compiling /Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.lisp.
;;; Loading #P"/Users/southly/local/share/common-lisp/source/asdf-addons/asdf-cache.fas"
; loading system definition from
; /Users/southly/local/share/common-lisp/systems/swank.asd into #
;;; Loading "/Users/southly/local/share/common-lisp/systems/swank.asd"
; registering # as SWANK
;;; Loading "/Users/southly/local/share/common-lisp/source/slime/swank-loader.lisp"
;;; Warning: No architecture feature found in (POWERPC PPC X86 X86-64 AMD64 I686 I586 I486 PC386 IAPX386 SPARC64 SPARC HPPA64
 HPPA).
;;; Loading "/Users/southly/local/share/common-lisp/source/slime/swank-backend.lisp"
;;; Loading "/Users/southly/local/share/common-lisp/source/slime/swank-source-path-parser.lisp"
;;; Loading "/Users/southly/local/share/common-lisp/source/slime/swank-source-file-cache.lisp"
;;; Loading "/Users/southly/local/share/common-lisp/source/slime/swank-ecl.lisp"
An error occurred during initialization:
Symbol STREAM-FILE-POSITION not found in package GRAY.
GRAYストリームがおかしいのかな?

g000001 2008-09-07T22:36:19+09:00
 うちの場合は、Symbol STREAM-FILE-POSITION not found in package EXTですが、こちらは設定がおかしいのかもw でも、以前は動いてたんですけどねー。
 なんとなくstream-file-positionもgray streamっぽい命名ではありますが…。
 あ、良く読んだら、NANRIさんと最後は似た感じかw 0.9jでは、EXTにないといわれ、0.9Lでは、GRAYにない、といわれる模様。
swank-backend.lispの
(defvar *gray-stream-symbols*
  '(:fundamental-character-output-stream
    :stream-write-char
    :stream-write-string
    :stream-fresh-line
    :stream-force-output
    :stream-finish-output
    :fundamental-character-input-stream
    :stream-read-char
    :stream-peek-char
    :stream-read-line
#-ecl    :stream-file-position
    :stream-listen
    :stream-unread-char
    :stream-clear-input
    :stream-line-column
    :stream-read-char-no-hang
    ;; STREAM-LINE-LENGTH is an extension to gray streams that's apparently
    ;; supported by CMUCL, OpenMCL, SBCL and SCL.
    #+(or cmu openmcl sbcl scl)
    :stream-line-length))
みたいに #-ecl :stream-file-positionしたら動きました。
 でもこれではまずいんでしょうねw
 stream-file-positionってどこにあるんでしょう。grayパッケージにもないみたいなんですが…。trivial-gray-streamsも上手くコンパイルできないし…。

名無しさん 2008-09-07T23:04:20+09:00
http://common-lisp.net/pipermail/slime-devel/2008-August/007649.html
stream-file-position周りで他の実装でも問題が起きているみたいですので
slime側のチェックミスかなぁ

g000001 2008-09-07T23:06:36+09:00
 なるほどー。SBCLでは長時間接続して放置してると、なんかのエラーが起きたりするんですよね。深刻ではないので放置してますが。
 これは、SWANKのせいなのか、SBCLのせいか分かりませんが、でも、SLIMEを新しくしてからなんですよね。

名無しさん 2008-09-07T23:08:28+09:00
情報どうもでした。同じ対処でこちらでも動きました。

g000001 2008-09-07T23:10:55+09:00
 stream-file-positionが呼ばれなければ、この対策でどうにかなりそうですね(*'-') 呼ばれるように変更されてると、どうなるのかw
http://shibuya.lisp-users.org/ 公開おめでとうございますー (*'-')人('-'*)

(び) 2008-09-08T15:00:02+09:00
あ、こんなのあったんだ...

g000001 2008-09-08T15:06:37+09:00
こんにちはー(*'-')

(び) 2008-09-08T15:08:54+09:00
こんちわ
はじめまして

g000001 2008-09-08T15:08:59+09:00
ここは、ホールズワースとかコリエルを語るための部屋ですw

(び) 2008-09-08T15:09:06+09:00
おぉ

g000001 2008-09-08T15:09:16+09:00
いや、URLが変ったんですが、

(び) 2008-09-08T15:09:21+09:00
どこでも語っちゃうぞwww

g000001 2008-09-08T15:09:28+09:00
以前 び さんもこちらにいらしたことが、
あったと思います(*'-')

(び) 2008-09-08T15:09:36+09:00
あれ、そうだっけ
もはや歳のせいにもできない物忘れのひどさだな...

g000001 2008-09-08T15:10:12+09:00
いや、でも一回だけだったと思います(*'-')
自分は、前に、PAIP勉強会に一回だけ参加させて頂きました

(び) 2008-09-08T15:10:50+09:00
あ、そうでしたか
秋はレースシーズンのためしばらくお休みに入る予定です >PAIP本読書会

g000001 2008-09-08T15:11:21+09:00
本を持ってないのでお借りするという、ずうずうしい真似をしてしまいましたw

(び) 2008-09-08T15:11:29+09:00
思い出したwww

g000001 2008-09-08T15:11:46+09:00
すいませんでしたw
コリエルはずっとカールトンだと勘違いしてYouTubeの動画を観てましたw

(び) 2008-09-08T15:13:05+09:00
同じLarryでも、Carltonよりはずっとマイナーだから

g000001 2008-09-08T15:13:52+09:00
あと、自分は、Gauche部屋をちょくちょく覗いてるので、
エイドリアン・ブリューも見ました(*'-')
歌が上手いのにびっくりしましたw

(び) 2008-09-08T15:14:08+09:00
うはは
あーあの人歌うまいっすよ

g000001 2008-09-08T15:14:23+09:00
エフェクターで、イルカとかやってるだけだと思ってたのでw

(び) 2008-09-08T15:14:33+09:00
King Crimsonマニアには嫌われてるけど
John Wettonよりうまいと思うなー
最近すっかり死神博士化してる >Brew

g000001 2008-09-08T15:15:26+09:00
7拍子かなんかの曲で弾き語りってすごいですねw

(び) 2008-09-08T15:15:38+09:00
うん

g000001 2008-09-08T15:16:15+09:00
自分は、実はその辺の音楽はあまり詳しくはないのですが、ギター小僧だったので、
テクニカルな話題には自信がありますw

(び) 2008-09-08T15:16:34+09:00
でも、バルカン地方の民謡なんかには、11拍子とか13拍子の舞曲がたくさんあって、みんな普通にタンブーラ弾きながら歌い踊ってるんだよねぇ
誘われて一緒に踊ったら、どうしてもステップが1つ多くなって隣の足を踏んでしまったwww

g000001 2008-09-08T15:17:07+09:00
あっちの方の民謡はそういうのがあるらしいですねー(*'-')

(び) 2008-09-08T15:18:25+09:00
テクニカルな話題は大好きだけど、残念ながら今では全く指がついていきません

g000001 2008-09-08T15:18:56+09:00
自分も久し振りに弾いたら、人差指が、なんかおかしくなりましたw
これが、腱鞘炎でしょうかw

(び) 2008-09-08T15:19:18+09:00
Three of a Perfect Pairの弾き語りはコピーしたんだけど、とても歌いながらなんか弾けない...
やっと左指先のタコが復活してきました

g000001 2008-09-08T15:19:45+09:00
おお、Brewの曲ですよね。

(び) 2008-09-08T15:19:51+09:00
そです

g000001 2008-09-08T15:20:11+09:00
あれ、弦飛びが大変そうですね(*'-')

(び) 2008-09-08T15:20:38+09:00
根性なしなので、右手は指で弾いてますwww
フラットピッキングであれ弾くのは難しいっすよ

g000001 2008-09-08T15:21:33+09:00
ミスってないのが凄いなーと思いながら観てました

(び) 2008-09-08T15:22:27+09:00
そして七拍子で手拍子をうつ聴衆もすごいwww

g000001 2008-09-08T15:23:28+09:00
ファンは聴きこんでるんでしょうねー。

(び) 2008-09-08T15:23:40+09:00
でしょうね
ミスなしと言えば、「Frame by Frame」という曲でのRobert Frippもすごいです
どっかに動画があったと思うけど

g000001 2008-09-08T15:24:37+09:00
そういえば、Frippは自分観たことないです(*'-')

(び) 2008-09-08T15:24:55+09:00
あり得ないスピードで涼しい顔でアルペジオやってる

g000001 2008-09-08T15:25:14+09:00
コリエルのフリップもGutar Playerに連載セミナーみたいなのやってたのは
読んでたんですが(*'-')

(び) 2008-09-08T15:25:27+09:00
Windows VistaのジングルはRobert Frippだったんじゃないかな

g000001 2008-09-08T15:25:37+09:00
なるほど、凄そうですね(*'-')
おお、そうだったんですかー。

(び) 2008-09-08T15:25:55+09:00
へー

g000001 2008-09-08T15:26:11+09:00
スタンリー・ジョーダンが昔のMacの起動音ってのを思い出しましたw

(び) 2008-09-08T15:26:23+09:00
おお、スタンリー・ジョーダン
まだ元気なのかな
元祖8フィンガープレイヤーという印象の人

g000001 2008-09-08T15:27:19+09:00
ギターは変な人が多いですよねw

(び) 2008-09-08T15:27:47+09:00
そうかも
アバウトな楽器だから、変な奏法を試したくなるのかな

g000001 2008-09-08T15:28:34+09:00
なのかもしれませんね(*'-')
ヘッドを下にして両手タッピングで弾く人とかもいましたw

(び) 2008-09-08T15:29:53+09:00
そして Chapman Stick とか Warr Guitarにいっちゃうと
Chapman Stickはちょっとやってみたいかも

g000001 2008-09-08T15:30:22+09:00
そうですね、Stickがさかさになった感じですね。非常に異様ですw

(び) 2008-09-08T15:31:28+09:00
ヘッドを下、って人は知らないです

g000001 2008-09-08T15:32:23+09:00
Upside down guitar って
煽り文句だった気がするのですが、
なんて名前だったか…
あ、ありました、chet tompsonて人でした
http://jp.youtube.com/watch?v=MlASEvy48T4
初めてみるけど、上手いなw
でも、この格好はどうなんだろうなあとw
ハードロックの人なんですね。

(び) 2008-09-08T15:43:15+09:00
イントロ以外はベタベタオーソドックスなメタルギターですねぇ

g000001 2008-09-08T15:43:45+09:00
ですね、時代を感じましたw
すいません、お仕事中に、変な話題をふってしまって(^^;

(び) 2008-09-08T15:44:46+09:00
いやいや楽しかったっす
すっかり違う話題で占領してしまって申し訳ないww

g000001 2008-09-08T15:45:12+09:00
いえ、全然大丈夫ですw
ここから、CLと音楽でつながっていく予定ですw

名無しさん 2008-09-08T22:35:45+09:00
話が速すぎていまいち何が何やらです。

g000001 2008-09-09T08:12:57+09:00
エレクトリックギターとLISPの可能性についての話でしたw
でも、五線譜の楽譜から、TAB譜へ現実的な運指で自動変換してくれるプログラムとか、なんとなくAIっぽい(*'-')
 あったら非常に嬉しいなあと。

(び) 2008-09-09T09:38:32+09:00
Allan Holdsworthの運指でお届けします ;-)

g000001 2008-09-09T09:47:38+09:00
手が壊れてしまいますねw

(び) 2008-09-09T17:38:32+09:00
楽譜から現実的なギターのフィンがリングへの変換って、けっこう面白いネタかも...
ミューティングまで真面目にやるとけっこう難度高い
フィンがリングって...
フィンガリングだ
別にワイドストレッチにならなくても、異弦同フレットの連続なんかも厳しいしな

g000001 2008-09-10T09:24:54+09:00
 ですねー、この辺が、ギタリストに五線譜読めない人が多い理由なんでしょうね。
 お、なんか、2chのCLスレでHyperSpecの翻訳について動きがあったみたいですねー。頭から駄目という感じではないらしい。需要があれば、動きそうでもありますが、お金の面は一切書いてないので、その辺どうなのか…。
 あ、補足ですが、CL入門スレでHyperSpec訳したいということで、LispWorksに突撃した方がいらしたんですね。それで、それのレスが来たそうで…。

(び) 2008-09-10T10:27:59+09:00
なるほど

名無しさん 2008-09-11T00:38:27+09:00
久しぶりにCL話をオフラインでできて大満足♪

g000001 2008-09-11T00:39:50+09:00
お、お疲れさまですー(*'-')
もう家についたんですか?

名無しさん 2008-09-11T00:41:15+09:00
お疲れさまです。着きました。

g000001 2008-09-11T00:42:30+09:00
私は、TAOの話をしてましたw

名無しさん 2008-09-11T00:43:10+09:00
それはそれでおーけーでしょう

g000001 2008-09-11T15:53:13+09:00
 HyperSpecってCLtLの2.5倍も分量があるのかw 本になったら凄いなあ。
 第1回 Shibuya.lisp Tech TalkでCL的な話をする方を急募という感じなのですが、誰かめぼしい方はいますか?
 明後日の勉強会で募集してみるかな(*'-')

名無しさん 2008-09-11T19:46:23+09:00
誰もいないようであれば、自分がやろうかと思います。

g000001 2008-09-11T19:46:53+09:00
お!、漢!

名無しさん 2008-09-11T19:47:02+09:00
たいしたことはできませんが(^^;

g000001 2008-09-11T19:47:20+09:00
xyzzy方面でもOKかなという感じでもあります

名無しさん 2008-09-11T19:47:58+09:00
CLerは少ないみたいなので、入門的な感じでHyperSpec一巡りみたいなテーマでも

g000001 2008-09-11T19:48:21+09:00
なるほど、なるほど。

名無しさん 2008-09-11T19:48:22+09:00
こんなことまで決まってますよ、CLでは
ってなことを

g000001 2008-09-11T19:48:41+09:00
あ、それ良いかも!

名無しさん 2008-09-11T19:49:40+09:00
xyzzy方面は現状さきが見えないので、あんまりpushしなくないっス(^^;

g000001 2008-09-11T19:49:53+09:00
 まだ、全体的な方向性が決まってない気もするので、どういう感じになるのか、これから議論するんだと思うんですが、CLネタ的には非常に良いんじゃないかと。
 そうなんですかー。面白い動きが結構あるのに残念ですねー > 先行き

名無しさん 2008-09-11T19:51:10+09:00
vista対応するのかどうか…とか、そういうあたりが

g000001 2008-09-11T19:51:31+09:00
ああー、なるほど。Vistaですか。

名無しさん 2008-09-11T19:51:47+09:00
まぁ、動くらしいですけどね

g000001 2008-09-11T19:53:23+09:00
 とりあえず、NANRIさんが立候補してくれて良かったですー(*'-')
 どういう構成になるのかなー。ネタが決まらないと構成も決めにくいし、構成が決まらないとネタも決めにくいし、鶏と卵ですねw
 CL派は割と、アットホームな感じの会を望んでるような、いないような感じなんですよねw

名無しさん 2008-09-11T19:55:38+09:00
確かに、それはありそうです>アットホームな感じ

g000001 2008-09-11T19:56:51+09:00
 派手でなくても良いので、とりあえず気長に展開してくれたら良いなと思ったりはします(*'-')
 あと、snmstsさんと私の立ち位置というか、まだ、ふらふらしてるのが、良くないかなw
 なかなか、色々難しいですねー(*'-')

名無しさん 2008-09-11T20:03:00+09:00
どういう人が聞きにくるのかとか、全く読めませんね〜 CLerが少ないのは間違いないので、最初は入門的な話が無難だろうなぁとか思ってます。

g000001 2008-09-11T20:04:48+09:00
 ですね、そういう意味でも、NANRIさんのCL解説は良い感じですよね。Schemeと何が違うのかを打ち出した方が面白いかもしれないですね。
LISPとCLとScheme何が違うんだろう、みたいな(*'-')

名無しさん 2008-09-11T20:13:59+09:00
CLとSchemeの違いはおもしろそうですね。二人でかけあいやりながらとか、面白いことになりそうです。

g000001 2008-09-11T20:16:34+09:00
ですねー(*'-')

名無しさん 2008-09-11T21:32:35+09:00
ちわす

g000001 2008-09-11T21:32:49+09:00
こんばんはー(*'-')

名無しさん 2008-09-11T21:55:30+09:00
いつの間にかけられていたらしい…

g000001 2008-09-11T21:56:12+09:00
なんか仕組みが変ったという噂ですね > Lingr

名無しさん 2008-09-11T21:56:41+09:00
なんかいきなり飛ばすなぁという印象。

g000001 2008-09-11T21:56:45+09:00
全体的に接続が切られやすくなったという噂が。

名無しさん 2008-09-11T21:57:19+09:00
higeponさんもアドバンスド好きっぽくて悲しい
非lisper向けのlispの良さをschemer cler等で別々に考えてきて
10分ずつ発表して
それから討論とかすりゃ誰でもみれるのになー
とか思ってたのに全然初心者っぽいアイデアがお呼びで無い感じで…

g000001 2008-09-11T21:59:17+09:00
アドバンスドってなんですか?(*'-') 上級者向けということかな?
ふむー、非lisper向けのlispの良さですか(*'-')

名無しさん 2008-09-11T22:00:12+09:00
だいたいそんな感じです
多分それぞれがlispだと思っていることって
すこしずつ違うんですよ

g000001 2008-09-11T22:01:18+09:00
なるほどー。
なんというか、第1に、どういう風にしたいかを

名無しさん 2008-09-11T22:01:36+09:00
あ、良さだけじゃなくて思っている憎さも重要かもしれないです

g000001 2008-09-11T22:01:41+09:00
それぞれ語るのが先なのかもしれませんね(*'-')
Tech Talkをどうしたいかという。
どういう感じになったら良いなーという。

名無しさん 2008-09-11T22:04:15+09:00
今やりたい人に40-50minくらい与えてLTはあれば良いかも?
くらいで1回目は終われると思うんですけど

g000001 2008-09-11T22:04:54+09:00
なるほど、なるほど。自分もそんな感じかなあ。

名無しさん 2008-09-11T22:04:57+09:00
詰め込むともったいないなーと思ってます。

g000001 2008-09-11T22:05:03+09:00
なんとなく緩くしたいw
上でもNANRIさんと話したんですが、
アットホームに続く感じになると良いな、みたいなw
外部に向けてのアピールも重要だとは思うのですが。

名無しさん 2008-09-11T22:06:43+09:00
ですねー。
多分お二人ともhigeponさんよりもネタ資源は貴重だと思っている感じですね

g000001 2008-09-11T22:07:30+09:00
そんなこんなしてるうちにアピールできるネタが集まってくるんじゃないかなーみたいな緩い考えですw

名無しさん 2008-09-11T22:07:55+09:00
充電できる場と時間が重要なので、

g000001 2008-09-11T22:08:10+09:00
うーん、ぶっちゃけ、ネタは枯渇してるんじゃないのかなとw
なんでかというと、やっぱりネイティブなLisperがいないからかなw

名無しさん 2008-09-11T22:09:04+09:00
gaucheの人にも来てもらいたいけどgauche nightの資源が枯渇するともったいないし
尖ったことは実力的にまだできないですし、やってもついて来れる人もいなさそうなんですよね。

g000001 2008-09-11T22:09:59+09:00
ですよねー。CLの場合は、そこを育てるところからかな、みたいな(*'-')

名無しさん 2008-09-11T22:11:00+09:00
schemeも大差は無いと思いますが…そういうカタパルトいらなさそうなのはelispくらいじゃないですかね

g000001 2008-09-11T22:11:24+09:00
ですね、ただちょっと意味合いが違って、

名無しさん 2008-09-11T22:11:26+09:00
elispも聴衆を育てないといけないと思うし

g000001 2008-09-11T22:11:40+09:00
おー、便利なelispだー、みたいな感じだと思いますね。
anithingすげー、みたいなw
anyだw
最初は、なかなか、難しそう。
そうか、なるほど、Gauche.nightとの競合もあるのかw
そっち系のネタは温存しておいて欲しいですねえ、確かに(*'-')

名無しさん 2008-09-11T22:18:04+09:00
だから極力資源を消費せずに、人を呼ぶカタチを考えたいです。
全力でhigeponさんの足を引っ張るとかな気がしてちょっとイヤな感じ

g000001 2008-09-11T22:18:51+09:00
自分の温故知新案は、資源は消費しないですよ! むしろリサイクルw
 受けるかどうかが、一番の問題w
 でも、面白くない筈はないと思っているのですがー。

名無しさん 2008-09-11T22:20:27+09:00
人それぞれだと思いますよー

g000001 2008-09-11T22:22:05+09:00
 海外だとネタは割と
新しいのから古いのまで、って感じですね、最近は。
Lispの場合ですが。

名無しさん 2008-09-11T22:24:12+09:00
ふるいのあんまり聞いて無いな
ilc07でlisp1.5とかあったな

g000001 2008-09-11T22:24:37+09:00
あ、古いのってLispマシンの話とかですね。
あ、そういう本格的な会合じゃなくて、適当な30人規模の集まりですね。ヨーロッパとかの。

名無しさん 2008-09-11T22:25:34+09:00
どこらへんですか?

g000001 2008-09-11T22:27:56+09:00
http://mikael.jansson.be/journal/2008/06/retro-lisp-meeting-in-stockholm
とか
http://lispm.dyndns.org/news?ID=NEWS-2008-05-05-1 とかですかねー。
新しいネタは、常に、LispNYCとか、lispvanでやってる感じです。継続ベースのウェブアプリとか。
 LispNYCとかだと、2時間かけてClojureの紹介とかw

名無しさん 2008-09-11T22:33:05+09:00
なんとなくoldの方が貴重なような気がします

g000001 2008-09-11T22:34:15+09:00
 ハンブルクの方は古参Lisperが中心となって企画したみたいですね。
割とc.l.lとかでも有名どころばかり。

名無しさん 2008-09-11T22:37:40+09:00
後者は相当調べたのか、生き字引がいるのか、とにかくすごいなぁ

g000001 2008-09-11T22:38:53+09:00
このサイトを運用してる、Joswigさんが、Lispマシンの生き字引なんですねw

名無しさん 2008-09-11T22:46:15+09:00
話は変わりますけど、slime-refcard.pdf更新しました。http://raido.sakura.ne.jp/southly/lisp/slime-refcard.pdf

g000001 2008-09-11T22:47:43+09:00
おお、素晴らしい(*'-')

名無しさん 2008-09-11T22:47:47+09:00
あのよく分からなかったところはslime-develで質問してみたら、返ってきました。

g000001 2008-09-11T22:48:05+09:00
おー、直接質問とは凄いw

名無しさん 2008-09-11T22:48:26+09:00
パッチを送るついでに

g000001 2008-09-11T22:48:41+09:00
なるほど(*'-')

名無しさん 2008-09-11T22:48:46+09:00
だったので、勢いで(笑)
バインディングって単語が長い気がしますね

g000001 2008-09-11T22:49:33+09:00
ギブ・アンド・テイクみたいなw

名無しさん 2008-09-11T22:49:45+09:00
キーはバインドでよさそうな気が
変数は束縛で良くないですか
と思いました
了解です>バインド
こっちも了解です>束縛
後で直しておきます。
どもです
CLISP のドキュメントに Embed CLISP in VIM という行が追加されてる!
Multi-threading って書いてたら取り組む人が現れたから二匹目のドジョウを狙っているのかな。

g000001 2008-09-12T10:43:09+09:00
なるほどー。時代は、VIMなのか!w 自分も操作方法憶えてみたいですねー(*'-')
 JLUGさんから前向きな返答が来ました!!(*'-') 急に色々な展開が…。
IRCクライアントから書きこんでるといるか、誤爆するだろうなとは思ってましたがw

名無しさん 2008-09-12T15:57:58+09:00
話はこっちが先だと思うので良いんじゃないでしょうか…

g000001 2008-09-12T15:58:11+09:00
あ、そうですかねw
そういえば、そうだったw
消しちゃったw
実は自分、JLUGさんのサイトを活性化させてはどうかという打診をJLUGさん
にしていたのですが、
お返事が来ました!という流れですね(*'-')

名無しさん 2008-09-13T16:34:23+09:00
本日CLの何かがここで行われるといううわさを聴いたのですが。
うむー、このLingrというのも使うの初めてなので、ちょっと不安。上の方で"lost connection\nclick to retry"とか言ってたり。
今はどなたもいないようなので、またあとで覗いてみます。

g000001 2008-09-13T16:47:00+09:00
こんにちはー。
20時から、CLの勉強会がこの部屋で行なわれます。
今回は、マクロの話です。
良かったら是非覗いてみて下さいー(*'-')
こんばんはー、CL勉強会。本日も開催させて頂きます。
お題は、cl-cookbookより、マクロ篇です。早目に終ったら適当にマクロ談議とかw
http://cl-cookbook.sourceforge.net/macros.html
今回も軽く自己紹介テンプレ用意してみました! 良かったら、記入してみて投稿してみてくださいー。
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:

名無しさん 2008-09-13T19:38:19+09:00
こんばんは

g000001 2008-09-13T19:42:04+09:00
こんばんはー

haiju 2008-09-13T19:43:04+09:00
こんばんわ

g000001 2008-09-13T19:43:27+09:00
こんばんはー

名無しさん 2008-09-13T19:45:02+09:00
おじゃまします。

g000001 2008-09-13T19:45:15+09:00
こんばんはー、よろしくおねがいしますー(*'-')
akaさんは、色々なlisp本の学習ブログを書いてらっしゃる方ですか?(*'-')

名無しさん 2008-09-13T19:46:12+09:00
学習ブログは書いてるですよ。同一かはわからないですが、、、

g000001 2008-09-13T19:46:43+09:00
oopclとか、pclとか

名無しさん 2008-09-13T19:46:52+09:00
ああ、そです。

g000001 2008-09-13T19:46:54+09:00
あとは…竹内先生のとか

名無しさん 2008-09-13T19:47:14+09:00
最近はゆあさ先生です。復習中。

g000001 2008-09-13T19:47:15+09:00
おおお、自分、前から講読させて頂いてます(*'-')

名無しさん 2008-09-13T19:47:36+09:00
おお? あれ、読んでくださっている人がいるのですね。感謝です。

g000001 2008-09-13T19:48:03+09:00
多分、一連のは全部読んでますw

名無しさん 2008-09-13T19:48:49+09:00
おはずかしいかぎりです。今日はよろしくお願いします。<(_ _)>

g000001 2008-09-13T19:49:11+09:00
いえいえ、非常に参考になってます(*'-')
こちらこそ、よろしくおねがいしますー

quek 2008-09-13T19:51:07+09:00
こんばんは。

g000001 2008-09-13T19:51:23+09:00
こんばんはー

名無しさん 2008-09-13T19:54:03+09:00
こんばんは

g000001 2008-09-13T19:55:57+09:00
こんばんはー

名無しさん 2008-09-13T19:56:28+09:00
こんばんは

g000001 2008-09-13T19:56:52+09:00
こんばんはー

名無しさん 2008-09-13T19:57:01+09:00
マクロ編ということで楽しみです。長居できないかもしれませんが、よろしくおねがいします。

g000001 2008-09-13T19:57:16+09:00
すいません、割とグダグダになりそうですw
入門な感じから進んでゆくのでsmegheadさんにはちょっと退屈かもしれません(^^;

名無しさん 2008-09-13T19:59:35+09:00
いえいえ、そんな。。ちゃんと理解してないので(汗

g000001 2008-09-13T20:00:10+09:00
あらためまして、こんばんはー、では20時になりましたので、開始します。
第16回

お題は、cl-cookbookより、マクロとバッククオート篇です。
http://cl-cookbook.sourceforge.net/macros.html
その前に、毎度ですいませんが、3分くらい自己紹介タイム的な、
なにかをw
|g000001|
ハンドル:g000001
活動場所: 
cadr.g.hatena.ne.jp/g000001

自分内CL/Scheme割合: 
9:1くらい

勉強会でお題になったら良いなと思うネタ: 
CLOS、MOP、Lispとデザインパターン。

なんとなく質問してみたいこと:
なんとなくCLOS勉強会やりませんか!?
こんばんはー(*'-')

名無しさん 2008-09-13T20:02:21+09:00
あああ、すいません。このLingrというの慣れてなくて。書くの間に合わないかもです。
おばんです。

g000001 2008-09-13T20:02:32+09:00
いえいえ、大丈夫ですー。
こんばんはー(*'-')
ちょっとインターフェース的に、あまり書くのには適してない感じなんですよね > Lingr
自己紹介テンプレは適宜投下して頂ければと思いますー。
ということで、本編に入りますー。
* The Common Lisp Cookbook - Macros and Backquote
からです
** How Macros Work
*** The word macro is used generally in computer science to mean a syntactic extension to a programming language. (Note: The name comes from the word "macro-instruction," which was a useful feature of many second-generation assembly languages. A macro-instruction looked like a single instruction, but expanded into a sequence of actual instructions. The basic idea has since been used many times, notably in the C preprocessor. The name
"macro" is perhaps not ideal, since it connotes nothing relevant to what it names, but we're stuck with it.) Although many languages have a macro facility, none of them are as powerful as Lisp's. The basic mechanism of Lisp macros is simple, but has subtle complexities, so learning your way around it takes a bit of practice.
ということなのですが、
-名前は、マクロインストラクションに由来
-第二世代のアセンブリに重宝された
-Lispのマクロは強力
くらいでしょうか。
適当すぎる要約ですw
*** A macro is an ordinary piece of Lisp code that operates on another piece of putative Lisp code, translating it into (a version closer to) executable Lisp. That may sound a bit complicated, so let's give a simple example. Suppose you want a version of setq that sets two variables to the same value. So if you write
ということで、
非常に簡単なマクロの例としてsetq2というのを作りつつ基本を解説してゆく
ようです。
(setq2 x y (+ z 3))
こんな感じに書けて、
setq2は、2つの変数に同時に1つの値を代入するという動作
(setq2 x y (+ z 3))として、
zが8だとすると、xとyには11が代入される
という動きです。
*** It should be obvious that we can't define setq2 as a function. If x=50 and y=-5, this function would receive the values 50, -5, and 11; it would have no knowledge of what variables were supposed to be set. What we really want to say is, When you (the Lisp system) see (setq2 v1 v2 e), treat it as equivalent to (progn (setq v1 e) (setq v2 e)). Actually, this isn't quite right, but it will do for now. A macro allows us to do precisely
this, by specifying a program for transforming the input pattern (setq2 v1 v2 e) into the output pattern (progn ...).
ということで
このsetq2は関数で実装できないのは明かじゃないだろうかと
ここで質問してみたほうが良いかと
思ったりもしましたが、
どうしましょうw
それはやめにして、とりあえず先に進むと
(setq2 x y (+ z 3))の場合に、x→50 y→-5、だとすると、setq2には、50、-5、11が渡されるのみで、setq2は、変数の名前を知る術はなし、
というような感じで解説されてます。
あ、質問もなにも答えを貼り付けてましたね(^^;
(setq2 v1 v2 e)と書かれた場合、
(progn (setq v1 e) (setq v2 e))
と動作するような、何かが欲しいと。いう感じですね。
*** Here's how we could define the setq2 macro:
ということで、
(progn (setq v1 e) (setq v2 e))
という式を生成する為に、defmacroを使って、
(defmacro setq2 (v1 v2 e)
   (list 'progn (list 'setq v1 e) (list 'setq v2 e)))
ことになります。
(defun setq2F (v1 v2 e)
   (list 'progn (list 'setq v1 e) (list 'setq v2 e)))
という関数定義に見た目が非常に似ています
区別のために、名前にFをつけてsetq2Fとなっています。
それで、
*** If we evaluated (setq2F 'x 'y '(+ z 3)), we would get (progn (setq x (+ z 3)) (setq y (+ z 3))). This is a perfectly ordinary Lisp computation, whose sole point of interest is that its output is a piece of executable Lisp code. What defmacro does is create this function implicitly and arrange that whenever an expression of the form (setq2 x y (+ z 3)) is seen, setq2F is called with the pieces of the form as arguments, namely x, y,
and (+ z 3). The resulting piece of code then replaces the call to setq2, and execution resumes as if the new piece of code had occurred in the first place. The macro form is said to expand into the new piece of code.
setq2Fの動作なのですが、
(setq2F 'x 'y '(+ z 3))
を実行すると、
(progn (setq x (+ z 3)) (setq y (+ z 3)))
という内容のリストを返します
defmacroの内部の動きとしては、このsetq2Fの動きみたいなものですよと
いうところでしょうか。
S式というリストを作って、それを評価する、という。
それで次ですが、
*** This is all there is to it, except, of course, for the myriad subtle consequences. The main consequence is that run time for the setq2 macro is compile time for its context. That is, suppose the Lisp system is compiling a function, and midway through it finds the expression (setq2 x y (+ z 3)). The job of the compiler is, of course, to translate source code into something executable, such as machine language or perhaps byte
code. Hence it doesn't execute the source code, but operates on it in various mysterious ways. However, once the compiler sees the setq2 expression, it must suddenly switch to executing the body of the setq2 macro. As I said, this is an ordinary piece of Lisp code, which can in principle do anything any other piece of Lisp code can do. That means that when the compiler is running, the entire Lisp (run-time) system must be present.
両者とも似てるわけですが、違いといえば、関数は実行時に展開されるのに対して、マクロはコンパイル時に展開されるということ、
コンパイラはコンパイル時に(setq2 x y (+ z 3))という式を見付けると、適切に展開してくれます。実行されるわけではありません。
みたいな。
ちなみに、マクロはコンパイル時に展開されるというのは間違い!、マクロはマクロ展開時に展開されるんです!という話も聞いたことがあります。
HyperSpecとか細かく読むとそういうことになるんでしょうか。
それはさておき
*** Novices often make the following sort of mistake. Suppose that the setq2 macro needs to do some complex transformation on its e argument before plugging it into the result. Suppose this transformation can be written as a Lisp procedure comtran. The novice will often write:
(defmacro setq2 (v1 v2 e)
    (let ((e1 (comtran e)))
       (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))
 (defmacro comtran (exp) ...) ;; Wrong!

名無しさん 2008-09-13T20:15:41+09:00
例えばdefunなんかで関数を定義した時はその定義時に中のマクロを展開することが許されていたような記憶があります。
それにコンパイルせずに eval しても展開されますからねぇ

g000001 2008-09-13T20:16:24+09:00
なるほど、なるほど。
海外の教材ってコンパイル時に結びつけて
説明することが多い気がするんですが、
なんでなんでしょうね。
この教材もそういう感じなんですけども。
On Lispもそうだったかな

名無しさん 2008-09-13T20:17:18+09:00
いや、それは、マクロ展開時と関数が動くときでは環境が違うということだと思いますよ。

g000001 2008-09-13T20:17:26+09:00
あと、実践Common Lispもそうなのかな。

名無しさん 2008-09-13T20:17:54+09:00
http://raido.sakura.ne.jp/southly/rn/index.rb?1204644339.txt

g000001 2008-09-13T20:18:00+09:00
ですね、それのマクロ展開時というのと
コンパイル時というのが、割と同義な感じで
説明されているような、

名無しさん 2008-09-13T20:19:27+09:00
マクロを展開するときは、ランタイムの環境(シンボルテーブルにせよなんにせよ)ではなくコンパイルの環境ですよ、という理解では駄目?

g000001 2008-09-13T20:19:28+09:00
なるほど、なるほど。NANRIさんの記事は前に読んだようなw
PAIP勉強会のログですよね(*'-')

名無しさん 2008-09-13T20:20:06+09:00
いえ、SANOさんの日記への反応です。
たしか。

g000001 2008-09-13T20:20:26+09:00
あれ、そうでしたか(^^;
そうですね、何れにせよ、
難しいので、後で議論しましょうw
すいませんw
で、上の例なんですけど、
マクロの中で、
定義されたcomtranというマクロが使われています。
で、こういうのは、
*** The mistake is to suppose that once a macro is called, the Lisp system enters a "macro world," so naturally everything in that world must be defined using defmacro. This is the wrong picture. The right picture is that defmacro enables a step into the ordinary Lisp world, but in which the principal object of manipulation is Lisp code. Once that step is taken, one uses ordinary Lisp function definitions:
駄目で、
(defmacro setq2 (v1 v2 e)
    (let ((e1 (comtran e)))
       (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))
 
 
 (defun comtran (exp) ...) ;; Right!
こういう風にしないと駄目だ! と書いてあるんですが、
これは、
(defmacro foo (n)
  (let* (expr 
         (x (dotimes (i n expr)
              (push ''foo expr))))
    `(progn ,@x)))
ってのを定義したとして、
(let ((x 3))
  (foo (+ x 3)))
を実行したときに駄目ってのと
同じ理由なんでしょうか。
いまいち元の
説明でのcomtranの動きが分からないので、
しっくりこないのですが…。
マクロ展開は一段階しか

名無しさん 2008-09-13T20:28:17+09:00
これっていけないんだ? (defmacro comtran (exp) ...)
そんな制約あったっけ?

g000001 2008-09-13T20:28:27+09:00
展開しませんよ、という例なんでしょうか。

名無しさん 2008-09-13T20:29:23+09:00
いや、日頃、macroを複数段階で使っている気がするので。
それが許されていないと、あらやるoperatorについて、いちいちmacroでできてるか関数でできてるかを覚えておかないといけないような。

g000001 2008-09-13T20:30:54+09:00
自分の(let ((x 3)) (foo (+ x 3)))
の例だと、
fooに(+ x 3)が渡るんですが、
'(+ x 3)が渡るのでアウト、みたいな、
無理矢理な例なんですがw
でも、3とか即値なら、動きます。
こういう状況なのかなーとか、首をひねってるんですが。
とりあえず、これは、宿題みたいなw

名無しさん 2008-09-13T20:32:46+09:00
いや、それはg000001さん例のマクロが健全でなくて、gensymしとけや、ってことじゃないかな。
すいません、進行をさまたげて。。。進めてくださいませ。

g000001 2008-09-13T20:34:07+09:00
いえいえ、健全うんぬんについても後程ありますー(*'-')
いや、がんがんツッコんでもらえると嬉しいですw
で、
*** Another subtle consequence is that we must spell out how the arguments to the macro get distributed to the hypothetical behind-the-scenes function (called setq2F in my example). In most cases, it is easy to do so: In defining a macro, we use all the usual lambda-list syntax, such as &optional, &rest, &key, but what gets bound to the formal parameters are pieces of the macro form, not their values (which are mostly unknown, this
being compile time for the macro form). So if we defined a macro thus:
 (defmacro foo (x &optional y &key (cxt 'null)) ...)
 
 then
 If we call it thus ...  The parameters' values are ...
 (foo a)         x=a, y=nil, cxt=null
 (foo (+ a 1) (- y 1))   x=(+ a 1), y=(- y 1), cxt=null
 (foo a b :cxt (zap zip))        x=a, y=b, cxt=(zap zip)
マクロに渡される引数はどういう風に展開されて、どういう風に記述する必要があるのかということですが、
大抵の場合、普通のラムダリストパラメータの扱いと同じと考えても良いみたいな。
但し、これらのパラメータは変数に束縛されているのではなく、フォームに束縛されているというところが違いますよという感じでしょうか。
という感じで、
概略は、フォーム=リストを作成して評価というのが
評価は、後でするんですが、
そういう流れが、マクロだということなんですが、
次にバッククオートの話になります。
** Backquote
*** Before taking another step, we need to introduce a piece of Lisp notation that is indispensable to defining macros, even though technically it is quite independent of macros. This is the backquote facility. As we saw above, the main job of a macro, when all is said and done, is to define a piece of Lisp code, and that means evaluating expressions such as (list 'prog (list 'setq ...) ...). As these expressions grow in complexity, it
becomes hard to read them and write them. What we find ourselves wanting is a notation that provides the skeleton of an expression, with some of the pieces filled in with new expressions. That's what backquote provides. Instead of the the list expression given above, one writes
-次に進むまえにマクロ定義の記述には不可欠なバッククオートの話
-バッククオート自体は、マクロとは独立したもので、マクロ定義でしか使えないというわけではない。
-(list 'progn (list 'setq ...))というようなものを、`(progn (setq ...))という風に書けるようにしてくれる。
という感じで、
バッククオートを使うと、listで
リストを生成するより、読みやすいし、書きやすいと
で、バッククオートの動きなんですが、
*** The backquote (`) character signals that in the expression that follows, every subexpression not preceded by a comma is to be quoted, and every subexpression preceded by a comma is to be evaluated.
バッククオートの後は、コンマで指示したもの以外は評価されない、というものです。
*** That's mostly all there is to backquote. There are just two extra items to point out. First, if you write ",@e" instead of ",e" then the value of e is spliced into the result. So if v=(oh boy), then `(zap ,@v ,v) evaluates to (zap oh boy (oh boy)). The second occurrence of v is replaced by its value. The first is replaced by the elements of its value. If v had had value (), it would have disappeared entirely: the value of (zap ,@v
,v) would have been (zap ()), which is the same as (zap nil).
もの凄く端折りますが、
バッククオートについては、2種類あって、,@eとすると、eの内容がスプライスされるものがありますと
スプライというのは、
(let ((e '(1 2 3 4)) `(a b c ,@e))) => (a b c 1 2 3 4)という風
みたいな感じの動き、
(let ((e '(1 2 3 4)) `(a b c ,e)))だと(a b c (1 2 3 4))
これはスプライスなし
中身を外に出す、というような、そんな感じでしょうか
それで
*** Second, one might wonder what happens if a backquote expression occurs inside another backquote. The answer is that the backquote becomes essentially unreadable and unwriteable; using nested backquote is usually a tedious debugging exercise. The reason, in my not-so-humble opinion, is that backquote is defined wrong. A comma pairs up with the innermost backquote when the default should be that it pairs up with the outermost. But
this is not the place for a rant or tutorial; consult your favorite Lisp reference for the exact behavior of nested backquote plus some examples.
バッククオートが入れ子になったらどうなるか、ということについては、基本的にぱっと見では読み書きできなくなるということを憶えておくと良いかもというような感じで
-入れ子のバッククオートは退屈なデバッグの練習みたいなもの。
-著者曰く、設計に失敗したんじゃないか。
-詳しい動作については、リファレンス等を参照せよ。
みたいな感じでしょうか。
入れ子は確かに、ぱっとは理解できないことが多いですよねw
で、注意点のようなものなのですが、
*** One problem with backquote is that once you learn it you tend to use for every list-building occasion. For instance, you might write
バッククオートで構築されたリストの場合、必ず新しくコンスされたリストが来るとは限らない。
ということで、
自分は、リストの破壊的操作で、初期値に、`(())とかやってはまったことがありますw

quek 2008-09-13T20:44:07+09:00
あるある。

g000001 2008-09-13T20:44:18+09:00
`(())という例ではないなw
似たような、`(,list)みたいな感じですね。
知らないとはまりますよねー
ということで、mapcanを使った例が、説明されています。
こういう場合は、きちんと、(list list)みたいに新しいリストを作りましょう、みたいな。
感じのことが説明されています。
それで、
*** My personal preference is to use backquote only to build S-expressions, that is, hierarchical expressions that consist of symbols, numbers, and strings, and that are not conceptualized as changing in length. For instance, I would never write
ということで、
この著者の方針としては、
個人的には、S式を構築するときにだけバッククオートを使用する。
ということで、
(setq sk `(,x ,@sk))
とは絶対書かないようにしているとのこと。
このskは、
*** If sk is being used as a stack, that is, it's going to be popped in the normal course of things, I would write tt (push x sk). If not, I would write (setq sk (cons x sk)).
(push sk)
とかされる場合ということですね。
で、次に進みますが、
マクロの落し穴で有名なところで、
** Getting Macros Right
*** I said in the first section that my definition of setq2 wasn't quite right, and now it's time to fix it.
上の例の定義ではsetq2はまだ正しい動作をしていないと
*** Suppose we write (setq2 x y (+ x 3)), when x=8. Then according to the definition given above, this form will expand into (progn (setq x (+ x 3)) (setq y (+ x 3))), so that x will have value 11 and y will have value 14. Chances are that isn't what the macro is expected to do (although you never know). Another problematic case is (setq2 x y (pop l)), which causes l to be popped twice; again, probably not right.
上の定義だと、
(setq2 x y (+ x 3))
(progn (setq x (+ x 3)) (setq y (+ x 3)))
と展開されるので、
xは2回評価されて、14となってしまう。
もしくは、
(setq2 x y (pop l))
のようなものが来た場合には、lは2回popされてしまう。
これをどうしたもんかと
多重評価の話ですね。
*** The solution is to evaluate e just once, save it in a temporary variable, and then set v1 and v2 to it. To make temporary variables, we use the gensym function, which returns a fresh variable guaranteed to appear nowhere else. Here is what the macro should look like:
ということで、評価は一度だけ起きるように変更する必要がある。
ということで、改良
 (defmacro setq2 (v1 v2 e)
    (let ((tempvar (gensym)))
       `(let ((,tempvar ,e))
           (progn (setq ,v1 ,tempvar) 
                  (setq ,v2 ,tempvar)))))
これによって
 Now (setq2 x y (+ x 3)) expands to
 
    (let ((#:g2003 (+ x 3)))
       (progn (setq x #:g2003) (setq y #:g2003)))
ということで、2回評価されることはなくなりました。
*** Here gensym has returned the symbol #:g2003, which prints in this funny way because it won't be recognized by the reader. (Nor is there any need for the reader to recognize it, since it exists only long enough for the code that contains it to be compiled.)
ここでは、gensymを利用して他と競合することのない変数に評価した値を格納して、それを分配してつかっていますね。
詳しくは、
実践Common Lisp
ANSI Common Lisp
On lisp
にそれぞれ、例と共に解説されています。
On lispだと、
多重評価
http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/otherMacroPitfalls.html
変数補足
http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/variableCapture.html
s/補足/捕捉/
という感じでしょうか。
この後練習問題があるので、
やってみると良いのではないかと
で、次ですが、
** What Macros are For
で、マクロはどういう風につかうのかと
いうところなのですが、
ここでは、

名無しさん 2008-09-13T20:55:05+09:00
それと紫藤さんの解説もあります。http://www.shido.info/lisp/idx_cl.html

g000001 2008-09-13T20:55:29+09:00
おお、これも素晴らしいドキュメントですね
分かりやすい
そう、それで使い分けなのですが、
ここでは、関数と同じ動きをするsqoneというマクロを定義してみせて、
関数版と比較して、
関数でできることは、マクロでやらない、
ということを示しているようです。
これが、使い方、その1
で、次に、
そのまま書くと読みにくい式を
マクロにして、書き易くするという例があります。
(mapcar (lambda (x)
            (let ((y (hairy-fun1 x)) (z (hairy-fun2 x)))
               (dolist (y1 y)
                  (dolist (z1 z) 
                     ... and further meaningless
                     space-filling nonsense...
                     ))))
         l)
は、とりあえず読み難い、ということで
(for (x :in l)
    (let ((y (hairy-fun1 x)) (z (hairy-fun2 x)))
       (dolist (y1 y)
          (dolist (z1 z) 
             ... and further meaningless
             space-filling nonsense...
             ))))
こういう風に書ければ、よみやすいんじゃないかということで、
こういう風に書けるような、マクロを定義する。
そういう、オレ構文な使い方が、その2
で、細々してますが、重要なところとして、
*** Second, notice that I wrote (eq (cadr listspec) ':in) in the macro definition to check for the presence of the guide symbol. If I had used in instead, I would have had to think about which package my in lives in and which package the macro user's in lives in. One way to avoid trouble would be to write
マクロ内でのキーワードを使う際にキーワードパッケージのシンボルを使うことの意義みたいなことが書いてあります。
マクロのユーティリティ作って、それを外から使おうとした場合に、
割とはまりますね(*'-')
で、次ですが、
On lispでいうユーティリティのような
例があって、
build-symbolというものと
symstuffというものが説明されています。
なんとなく
On lispの
http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/utilityFunctions.html
シンボルとストリング
ののmkstrとsymb参照。
みたいな感じですが
build-symbolは結構高機能です
ので眺めてみて下さい。
すいません、端折ってしまってw
で、他の使い方ですが、
*** Sometimes a macro is needed only temporarily, as a sort of syntactic scaffolding. Suppose you need to define 12 functions, but they fall into 3 stereotyped groups of 4:
ただ単に作業を纏めるだけの使いかた
 (defun make-a-zip (y z)
   (vector 2 'zip y z))
 (defun test-whether-zip (x)
   (and (vectorp x) (eq (aref x 1) 'zip)))
 (defun zip-copy (x) ...)
 (defun zip-deactivate (x) ...)
というのを繰り返し書くことが必要になる場合に
面倒臭いので
 (defmacro odd-define (name buildargs)
    `(progn (defun ,(build-symbol make-a- (:< name)) 
                                  ,buildargs
               (vector ,(length buildargs) ',name ,@buildargs))
            (defun ,(build-symbol test-whether- (:< name)) (x)
               (and (vectorp x) (eq (aref x 1) ',name))
            (defun ,(build-symbol (:< name) -copy) (x) 
               ...)
            (defun ,(build-symbol (:< name) -deactivate) (x) 
               ...))))
みたいにマクロにしてしまいますよと
*** If all the uses of this macro are collected in this one place, it might be clearer to make it a local macro using macrolet:
あと、局所的しか使いたくない場合は、macroletが使えますよと
で、最後なんですが、
最後に、マクロはインタラクティブに便利につかうコマンド作成にもつかえるのではないか

で、例が割と高度なのですが、
ここでは、exとfiというものを定義して、
1. (ex [form]): Apply macro-expand1 to form (if supplied) or the current form, and make the result the current form. Then pretty-print the current form.
2. (fi s [k]): Find the k'th subexpression of the current form whose car is s. (k defaults to 0.) Make that subexpression the current form and pretty-print it.
ということで
これらは、マクロデバッグ用のマクロです
exは、macroexpand-1してプリティプリントするような
fiは、k番目の
subexpressionを…
という感じなのですが、動かしてないので、ちょっと分かりませんでしたw
すいません。
ここでは、exとfiの定義もあるんですが、
その中のfiで▼使う
find-nth-occurrenceの定義は練習問題となっています。
これ、動かした方いらっしゃいますか?(*'-')
(progn (defun ...) (defun xxx))みたいなのを
デバッグするときに有用なんでしょうかねー。
動作が追いきれませんでした。
ということで、
さっと流した感じなのですが、
さっき後回しにした、ところを
再度議論してみようかと思いますが、
http://www.lingr.com/room/common-lisp-jp/archives/2008/09/13#msg-47174865

名無しさん 2008-09-13T21:15:24+09:00
cookbookでは、前処理、後処理を隠蔽するwith系マクロには触れてないんですね。オレ構文にまとめられたのかな?

g000001 2008-09-13T21:15:46+09:00
あ、そうですねー。
with-系のマクロは
割と良い題材ですよね。
オレ構文、ってことなんでしょうか。

名無しさん 2008-09-13T21:16:22+09:00
ですよね。

g000001 2008-09-13T21:16:34+09:00
それとも、unwind-protectとかその辺を説明するのを省きたかったとかw

名無しさん 2008-09-13T21:17:05+09:00
w だとしたら、もったいない気が。。。w

g000001 2008-09-13T21:17:49+09:00
ですねー。割とその後はつっこんだ例ばかりなのですが。
で、さっきの
*** Novices often make the following sort of mistake. Suppose that the setq2 macro needs to do some complex transformation on its e argument before plugging it into the result. Suppose this transformation can be written as a Lisp procedure comtran. The novice will often write:
 
 (defmacro setq2 (v1 v2 e)
    (let ((e1 (comtran e)))
       (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))
 
 (defmacro comtran (exp) ...) ;; Wrong!
ですが、
こっちは駄目で、
*** The mistake is to suppose that once a macro is called, the Lisp system enters a "macro world," so naturally everything in that world must be defined using defmacro. This is the wrong picture. The right picture is that defmacro enables a step into the ordinary Lisp world, but in which the principal object of manipulation is Lisp code. Once that step is taken, one uses ordinary Lisp function definitions:
 
 (defmacro setq2 (v1 v2 e)
    (let ((e1 (comtran e)))
       (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))
 
 
 (defun comtran (exp) ...) ;; Right!
こっちはOKというのを
もっと著者より分かりやすい、コードの例はないでしょうかw

名無しさん 2008-09-13T21:20:17+09:00
「マクロの中のマクロは展開されない」の話ですが、OnLispにも書いてあったのをさっき思い出しました
;; マクロその他の落とし穴->再帰
(defmacro nthb (n lst)		; Wrong
  `(if (zerop ,n 0)
       (car ,lst)
     (nthb (1- ,n) (cdr ,lst))))
(macroexpand '(nthb 2 '(a b c d)))
=> (IF (ZEROP 2 0) (CAR '(A B C D)) (NTHB (1- 2) (CDR '(A B C D))))

(defmacro nthe (n lst)
  `(labels ((nth-fn (n lst)
	      (if (zerop n)
		  (car lst)
		(nth-fn (1- n) (cdr lst)))))
     (nth-fn ,n ,lst)))
(nthe 2 '(a b c d))		; => C

g000001 2008-09-13T21:20:48+09:00
おお、なるほど

名無しさん 2008-09-13T21:21:13+09:00
マクロな comptran だと引数が評価されずに e になっちゃうといのを簡潔に示すには…
ちょっと勘違い。上のnthbはインタプリタでは動くけど、コンパイルの際に無限ループになるみたいですね。

g000001 2008-09-13T21:26:58+09:00
nthbは、類似の現象の違った側面ですかね
いや、なんとなく似てる気もしますが、
似てるというか自分の理解に近いだけかもしれませんw
(defmacro foo (n)
  (let* (expr 
         (x (dotimes (i n expr)
              (push ''foo expr))))
    `(progn ,@x)))

(let ((x 3))
  (foo (+ x 3)))
さっきのこれですね。
でも、これもなんか外してるような

quek 2008-09-13T21:29:53+09:00
まったく意味のないマクロですが、こんなかんじでしょうか?
;;(defmacro bar (x) ;; Wrong!
(defun bar (x) ;; Right!
  (let ((y (car x)))
    y))
(defmacro foo (x)
  (let ((y (bar x)))
    `(cons ,y ,y)))
(foo (1 2))

名無しさん 2008-09-13T21:31:21+09:00
Cook-bookのニュアンスというか、かきぶりがいまいち、ということはないのかなぁ。

g000001 2008-09-13T21:32:06+09:00
comptranがかっちり決まってれば、もう少し分かりやすいようなw

名無しさん 2008-09-13T21:32:17+09:00
(defun f-tran (exp) (format t "~S~%" exp) exp)
(defun m-tran (exp) (format t "~S~%" exp) exp)

g000001 2008-09-13T21:32:30+09:00
なるほど、なるほど > quek さんのbar & foo

名無しさん 2008-09-13T21:32:59+09:00
これを comptran のかわりに使うとか。
cook-bookがいいたいのは、macroの中はmacroワールドだから、なにか変換したいときは全部macroを使うべしということ「考え」が間違いであって、それは普通のLispワールドだから関数がいいところは関数使えばいいだよ、くらいという案はどうですか。

g000001 2008-09-13T21:36:33+09:00
なるほど、なるほど。
(defun f-tran (exp) (format t "~S~%" exp) exp)
(defmacro m-tran (exp) (format t "~S~%" exp) exp)

(defmacro setq2 (v1 v2 e)
  (let ((e1 (f-tran e)))
    (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))

(defmacro setq2w (v1 v2 e)
  (let ((e1 (m-tran e)))
    (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))

(setq2 x y (+ 3 3))
(setq2w x y (+ 3 3))
setq2は(+ 3 3)と表示されて6がかえって
setq2wは表示はされずに6がかえると
というか、初心者がやりがちなミスという気が
あまりしないのは
私だけでしょうかww

名無しさん 2008-09-13T21:41:04+09:00
私もしないです。。。

g000001 2008-09-13T21:41:57+09:00
という感じで、時間になってしまいましたが、
今回も色々つっこんで頂きありがとうございました(*'-')
ちょっと自分が準備不足と、理解不足で
至らぬところがありましたが(^^;
で、次回からなのですが、
順当に行くとCLOS篇に突入なのですが、
どんなもんでしょう。
CLOS篇は翻訳もされてるんですが、
これまでの例と違って実習メインになるので、
予習が必須な感じになってしまいます。
http://d.hatena.ne.jp/cl-intern/20071113#p1

名無しさん 2008-09-13T21:44:55+09:00
む、変形をいれないと駄目かな。>f-tran,m-tran

g000001 2008-09-13T21:46:03+09:00
あ、そうだ、上の例で重要なことを
書くのを忘れてましたが、
setq2wの場合、定義のときに E がプリントされます。

名無しさん 2008-09-13T21:46:55+09:00
(defun f-tran (exp) (format t "~S~%" exp) (reverse exp))
(defmacro setq2 (v1 v2 e)
  (let ((e1 (f-tran e)))
    (list 'progn (list 'setq v1 e1) (list 'setq v2 e1))))
こんなの。
このEって何なんだろ?

g000001 2008-09-13T21:47:41+09:00
m-tranでマクロ展開された副作用で

名無しさん 2008-09-13T21:47:44+09:00
誤爆したm-tran の引数です。
(setq2 x y (1 2 +))
こんな感じで、フォームを変形したのを

g000001 2008-09-13T21:47:57+09:00
表示されたEですね('-'*)

名無しさん 2008-09-13T21:48:22+09:00
考えると m-tran はちょっと残念。変形できない。引数に e がきちゃうから。
ああ、補足されてるですね。

g000001 2008-09-13T21:49:44+09:00
なんというか、展開時における副作用ですね。
あ、それで、CLOSの件なのですが、
予習必須というか、
各章の問題を解かないと、という感じなのですが、
どんなもんでしょう。
皆なで答あわせとかしてみますか?
自分は一回問題をやってるので、準備は楽なんですけどw
それとも、何か違うお題とか、
違うお題なら、自分は、seriesをやってみたいのですが、どうでしょうw
seriesのドキュメントは、2、3回で、眺めて行けるかなという感じです。

名無しさん 2008-09-13T21:53:30+09:00
Exerciseをやればいいのかな。

g000001 2008-09-13T21:53:35+09:00
理論的な背景の説明はちょっと無理ですがw
ですね、
でも、そのExerciseが、なんというか、
ちょっと変な気がするんですね、
その辺がどうなのかと。

名無しさん 2008-09-13T21:54:09+09:00
SERIESga
イメージに入ってる人ってどれくらい居るんだろう?

g000001 2008-09-13T21:54:49+09:00
defclassで、defstructの真似としてみろとかw > Exercise
s/真似と/真似を/

名無しさん 2008-09-13T21:55:11+09:00
seriesって何ですか。すいません、ものをしらず。。。

g000001 2008-09-13T21:55:32+09:00
いや、マイナーなので、普通そんな感じかなと思いますw
やっぱり、SERIESよりは、CLOSですかねw
汎用的な、繰り返しの仕組みというか、

名無しさん 2008-09-13T21:56:35+09:00
これは g000001 さんが悪いw
SERIES というのは CLtL2 の付録に載っていたライブラリですw

g000001 2008-09-13T21:56:38+09:00
無限リストとかを実現するものです > SERIES

名無しさん 2008-09-13T21:56:59+09:00
lazyな感じ?

g000001 2008-09-13T21:57:11+09:00
ですね、いきなりSERIESという名前を出してました(^^;
ですね。そういう感じです。
> lazy

名無しさん 2008-09-13T21:57:38+09:00
なるほどです。
私は今日が初参加なので、わかりませんが、
どちらかするかは継続的に参加されている方の
方向によるかと。

quek 2008-09-13T21:58:12+09:00
たしかに CLOS の Exercise はちょっと不思議ですねw

名無しさん 2008-09-13T21:58:36+09:00
CLを学ぶなら、CLOSのさわりはやっておいたほうが展望はよいとも思います。

g000001 2008-09-13T21:58:46+09:00
そうなんですよねw > cookbook CLOS
CLOSの本質とはあまりからんでこないようでもありw > EXERCISE
ですねー、CLOSは自分も勉強したいんですが。
あ、あと、進行役も募集してますので、
akaさんがやってみたいテーマを
今日の自分のように、進行役になって頂くというのも
大歓迎なんです。
テーマはなんでもOKです。
何かあれば、是非w
とりあえず、CLOSに進んでみましょうか?
Exerciseは変ですけどw

名無しさん 2008-09-13T22:04:31+09:00
今日はg00001さんにご準備いただいたので、機会があれば、お役に立てれば、とは思いますが、体調からいって来週は無理かもです。再来週ならニーズがあれば、何か。

g000001 2008-09-13T22:04:51+09:00
おおおお!、ありがとうございます!

名無しさん 2008-09-13T22:04:58+09:00
見てきましたexercise変ですね

g000001 2008-09-13T22:05:31+09:00
ニーズは、どんなもんなんでしょうw

名無しさん 2008-09-13T22:05:59+09:00
closの説明は真っ当で、exerciseはclosと直接関係ない力がつきそう

g000001 2008-09-13T22:06:05+09:00
なんというか、普通の定番なCLOSの使い方の枠をはみ出そうという、Exerciseばかりですねw
そう、そんな感じなのですw

名無しさん 2008-09-13T22:06:44+09:00
CLOSの本当の演習にしようとすると,OOをちゃんと説明しないといけないからですかね。

g000001 2008-09-13T22:06:44+09:00
基本的に、マクロ書けないとだめかもという、なんというか、マクロの練習なのかと。

名無しさん 2008-09-13T22:07:00+09:00
あー基本マクロっぽいですね
defstructの定義を探せとか
結構しんどいのではなかろうかと思った

g000001 2008-09-13T22:08:02+09:00
なんというか、妙に泥臭いExerciseなんですねw
基本的に常にその調子w

名無しさん 2008-09-13T22:08:47+09:00
この処理系ではここだということがわかった!!

g000001 2008-09-13T22:08:47+09:00
確かにOOのちゃんとした説明が必要というところもあるのかもしれませんね > akaさん

名無しさん 2008-09-13T22:08:49+09:00
で、終わり?
という印象が
ん?何番の Exercise です?

g000001 2008-09-13T22:12:14+09:00
あなたが使用しているLispの処理系の、class-precedence-list の総称関数を調べなさい。
とかでしょうか(*'-')

名無しさん 2008-09-13T22:14:09+09:00
う、すいません、体調がわるくて体がそろそろ持たず。。。まったりな感じになってもいるので、ここらへんでいったん抜けますです。久しぶりにマクロについて考えるよいきっかけになりました。ありがとうございました。m(_ _)m

g000001 2008-09-13T22:14:10+09:00
いままで頂いた、
はいー(*'-')
ありがとうございますー(*'-') また、よろしくお願いします。
これまで出た、ネタ希望案ですが、
なんとなくCLOS勉強会やりませんか!?
基礎的及び実践的なCLOSプログラミング
Lispを実装するとか (Lisp in Lispが無難かな)
各処理系の違いとか?
お題ネタ: L-99みたいな問題を解く
ASDF, CLOS, SLIME

みたいな感じで、割とCLOSは挙がってはいますね。
ASDFとかも良いのかも

名無しさん 2008-09-13T22:17:03+09:00
CLOS の例として?
defstruct マクロの実装を探し、CLOSのスロットオプションを一つ以上追加しなさい。
これに反応したけど

g000001 2008-09-13T22:17:25+09:00
あ、そういえば、ASDFはCLOSな感じですね、

名無しさん 2008-09-13T22:17:27+09:00
Exercise: Find a defstruct form and "port to CLOS" one of its slot options (or more if they're interesting).
ちょっと違うかも
defstructの式を探してclosで書きなさい ですね。

g000001 2008-09-13T22:19:27+09:00
ん、ということは、私が苦労するのは当然みたいなw

名無しさん 2008-09-13T22:19:30+09:00
ミーハーな私は手を動かせ、実践せよとのNickからのありがたい忠告だと受け取ったw
CLOSに手を出してみようかなあ。。。

g000001 2008-09-13T22:21:18+09:00
自分はどういう風に回答したんだったか。

名無しさん 2008-09-13T22:21:41+09:00
見てみたらがんばってた

g000001 2008-09-13T22:24:04+09:00
頭良い感じの解答でないのは確かだったと思いますがw
ああ、defclassで、defstruct-plusみたいなのを定義してますねw

名無しさん 2008-09-13T22:25:24+09:00
それは別のにあったような…

g000001 2008-09-13T22:27:17+09:00
とりあえず、変だけど、CLOSに突入しますかw

名無しさん 2008-09-13T22:27:53+09:00
ASDFとか良く使われますからね。

g000001 2008-09-13T22:27:53+09:00
なにか訳の解釈で違いがあったら、cl-internさんにもフィードバックを送るみたいな感じで

名無しさん 2008-09-13T22:28:05+09:00
CLOSしってて損はない。

g000001 2008-09-13T22:29:01+09:00
ですねー。自分は、理由は分かりませんが、CLOSメインでプログラムが組みたいです。

名無しさん 2008-09-13T22:29:19+09:00
あと処理系毎の違いとかもなぁ。こないだECLのJuanが熱いメール出してたけどw
…我々はANSI互換テストではもはや不十分なレベルに到達した!未定義動作が予期せずにライブラリを壊す…そんな事がリリースの度におこるのを見てきた!

そこで私はECL-TESにライブラリをダウンロードして自動テストすることを考えている!…

g000001 2008-09-13T22:29:27+09:00
根拠はなしというw
自動テストw
あ、そうだ、

名無しさん 2008-09-13T22:30:21+09:00
へぇーと思って ECL-TEST をとってきたけどそれっぽいのはまだ入ってなかった。

g000001 2008-09-13T22:30:24+09:00
処理系のマニュアルを、端から読んで行きましょう!ってのも
考えてはいるんですが、
今にもまして暗くなりそうw

名無しさん 2008-09-13T22:30:59+09:00
どれが薄いかなー
とかそんな感じですかね
ユーザー数の多い処理系とか?

g000001 2008-09-13T22:31:47+09:00
そうなると、CLISPですかね。
あと、SBCLかな。
SBCL x CLISPw
ここでは、CLISPかな?

名無しさん 2008-09-13T22:32:26+09:00
CLISPに一票

g000001 2008-09-13T22:32:44+09:00
CLISP人気あるなーw
自分は、SBCLにべったりになりつつありますがw

名無しさん 2008-09-13T22:33:56+09:00
私は処理系はまだ考えていなくてUnCommonWebを動かそうとしています。

g000001 2008-09-13T22:34:14+09:00
その辺だと、SBCLかなという
勝手な思い込みがありますw
あと、Allegroとか?

haiju 2008-09-13T22:35:28+09:00
sbclに一票

g000001 2008-09-13T22:35:36+09:00
この土曜の集会をもうちょっと違う形態にした方が良いのか、とか、
も考えてまして、

名無しさん 2008-09-13T22:36:10+09:00
UnCommon Web has been ported to various Common Lisp implementations: OpenMCL, CMUCL and SBCL, CLISP and Allegro.
だそうです。

g000001 2008-09-13T22:36:34+09:00
なるほど、なるほど。
なんか面白くて盛り上がりそうな、形態ってないでしょうかw > 皆さん
集合して議論をするのがメインにしても良いと思いますし、
今迄のように、下敷きになるものを一応読んで行くというのも、ありだとは思います。
井戸端会議の場所っていうのが良いんですかねー。
何回かやってみての感想なのですが、
時間を決めて集合して、議論できれば、それでOKな気もしてきましたw

名無しさん 2008-09-13T22:42:29+09:00
あまりマターリしすぎるのもどうかと思うんですけどね>井戸端会議

g000001 2008-09-13T22:42:52+09:00
ですね。そうなる危険性は十分にありますw
その為のお題でもありましたw

名無しさん 2008-09-13T22:43:22+09:00
身内ねたっぽくなると、新参の人がこない気がします
お題がなかなか貴重ですよねぇ。何かお手伝いできればと思ってはいるのですが。

g000001 2008-09-13T22:43:56+09:00
いや、onjoさんは、ネタの宝庫ではないですか!(*'-')

名無しさん 2008-09-13T22:44:41+09:00
面白芸人なイメージですね

g000001 2008-09-13T22:44:42+09:00
そうなんですよね、新規の間口も広くしたい、みたいな > koshさん

名無しさん 2008-09-13T22:45:18+09:00
あんまりネタが長くてもしんどいですよね

g000001 2008-09-13T22:46:02+09:00
連続ものという意味ででしょうか? > しんどい
CLOS全10回みたいなw

名無しさん 2008-09-13T22:46:29+09:00
CLISPのドキュメントというと、LISP-TutorialかCLOS-Guideか、Implementation-Note?
まさに、その意味です。
implementation-Noteでかいですよね…

g000001 2008-09-13T22:47:23+09:00
色々なものの概要を、さっと説明して、

名無しさん 2008-09-13T22:47:26+09:00
お互いに開発環境を紹介し合うというのは?>ネタ
自分の開発環境ね
どういうライブラリを使っているとか

g000001 2008-09-13T22:47:51+09:00
行くというのも良いような

名無しさん 2008-09-13T22:47:55+09:00
ディレクトリ構成をどうしているとか

g000001 2008-09-13T22:48:03+09:00
なるほど > 紹介
それ良いかもしれないですね。

名無しさん 2008-09-13T22:48:21+09:00
LISP-Tutorial: 1000行 CLOS-Guide: 500行 Implementation-Note: 15,000… でかい…

g000001 2008-09-13T22:48:22+09:00
画面操作になると、オフラインがベストな感じではありますが、
ユーティリティの紹介とか面白いかも。
onjoさんは、やっぱり、知識が深いので、
こういうのが面白いですよー、というのを、
ざっと列記して頂くだけでも、相当面白いんじゃないかと思いますねー。
DB関係なら、コレ。ウェブ関係なら、コレ、最近ホットな処理系のネタはこんな感じ、みたいな。
後は各自調べるみたいなw
しかし、自分の処理系設定は面白いかもしれないですね!
処理系設定話は良いかも!
割と共有してないですよねw
処理系設定話は
いろんなレイヤがありますが、

名無しさん 2008-09-13T22:52:46+09:00
言われてみれば(笑)

g000001 2008-09-13T22:53:58+09:00
asdf-addons使ってみたり、cl-buildつかってみたり
だと思うんですが、
割と共有はしてないかな。
じゃあ、来週はそのネタで行こうかなと!

名無しさん 2008-09-13T22:55:06+09:00
オールドタイプな私は全部 ~/lisp/lib にライブラリを集めて、 ~/lisp/asd に .asd を集めてるなぁ。

g000001 2008-09-13T22:56:10+09:00
自分は、SBCLで、イメージ作成で、使うライブラリを全部読みこんで、巨大なSWANKの実行ファイルを作ることを基本にしていますw
割と人それぞれですねー。

名無しさん 2008-09-13T22:56:46+09:00
そこは同じw

g000001 2008-09-13T22:56:49+09:00
ll /var/lisp/swank-sbcl
-rwxr-xr-x 1 mc mc 134M 2008-09-06 18:17 /var/lisp/swank-sbcl*
みたいな感じです。

quek 2008-09-13T22:57:14+09:00
私は対照的にずっと素のイメージです。

g000001 2008-09-13T22:57:58+09:00
なんか盛り上がれそうですw

名無しさん 2008-09-13T22:58:04+09:00
ffiでcのライブラリを固める…感じでasdとか使える状態にすらすること稀…しかもwindowsの茨。死のう。
な…。コアが100MB越え!?

g000001 2008-09-13T22:58:22+09:00
ですね、なんでなんでしょうw

haiju 2008-09-13T22:58:34+09:00
聞いてるだけでも面白いし、参考になりますね

名無しさん 2008-09-13T22:58:52+09:00
今日のうちに終わっちゃいそうな気がするんだが
w

g000001 2008-09-13T22:59:06+09:00
それはまずいw
いや、あとパスの設定とかelispとか、細かく行けば結構延せるかなと。
今回の告知で、比較したいことを大まかに列挙してみますので、
それを各自報告してもらうという
流れを作ってみようかなと
90分は行けるんじゃないかと。

名無しさん 2008-09-13T23:04:52+09:00
はーい
了解です。

g000001 2008-09-13T23:05:19+09:00
よろしくおねがいします(*'-')
ということで、ご歓談でもw
2chでは、HyperSpecの翻訳について盛り上がってますが、
自分はなぜかアクセス禁止になるので、
書き込めませんw
近くのノードがなにか惡さをしてるんだろうかと。
でも、HyperSpecがCLtL2の1.8倍って本当なんですかねw
大変な分量だ。

名無しさん 2008-09-13T23:11:57+09:00
わかんないですけど、.9倍だってうんざりしますよ

g000001 2008-09-13T23:12:30+09:00
ですねー。圧倒的な量だしw
という感じなのですが、秋に向けて、
自分どんどん起きていられる時間が少なくなってきてしまいまして、
もう寝落ちな感じなので、
この辺でお暇を頂こうかと
存じますw

名無しさん 2008-09-13T23:15:58+09:00
おやすみなさい~

quek 2008-09-13T23:16:10+09:00
おやすみなさい。

haiju 2008-09-13T23:16:17+09:00
おやすみなさい

g000001 2008-09-13T23:16:25+09:00
はいー、是非来週環境自慢よろしくお願いしますー(*'-')
アイコンは、そのままですけど、落ちてますw
中身が。

名無しさん 2008-09-13T23:17:10+09:00
梅干無しか…
おやすみなさい
梅干w
えーと
Shibuya.lispなるものでイベントをやる感じなんですけど、
環境自慢はスクリーンショットを用意すればいいのかな?
どんな話がうれしいんでしょうねぇ

あ、説明に必要ならば、じゃないですかね
Common の人は少ないんでしたっけ?>Shibuya
少ない印象ありますね。
誰もいなければ自分がHyperSpecからつまんで話そうかなとか思ってました。
かといって残りはぱりっとschemerという感じではなくて、冷やし中華よろしくSICP始めました。って感じの人が多いような印象があります。
こんなことまで決まってますよ、CLではという感じで。
compile とかw
そうですね、NANRIさんによろしくする可能性はとても高いです。
compileは良いですよね
Schemeと似ている、Schemeと異なる、他言語に類を見ないというあたりで、探せばいいかなと
それ自体何にも問題が無いので、その方向で考えて良いと思うんですけど、
それでもまだ進みすぎているんじゃないかな…という印象があったりします
誰に向かって話せるものを用意したらよいのかよくわからないんですよね
皆さんだったら誰のどんな話が聞きたいですか?
目一杯下げたつもりだったので、その観点は無かったです>進みすぎている
あんまり下げるとCommonが付かないLispになっていくので難しいですね。

haiju 2008-09-13T23:35:04+09:00
少し外れてるかもしれませんが、Zickさんが夏休みに作っていたWebアプリのその後が気になります

名無しさん 2008-09-13T23:36:10+09:00
なるほど>haijuさん
私には逆に、commonが取れたlispの全体像っていうのが見えないんですよ
common lispを知らない人の知っているlispってどこからどこまでなんだろう?
今作っているものがあるのでアプリの話もできなくはないです。
ってピンときます?
compileが出てくれば満足ですw
ごめんなさい。そういうつもりじゃなかったんです。
う〜ん、自分はS式だったら、割となんでもLispかなぁ。consセルは欲しいかも
というぐらい
CL知らない人のLISPってのは 1. elisp 2. scheme 3. カッコだらけ のどれかだろうという気がする

quek 2008-09-13T23:41:03+09:00
なんとなく Gauche や SICP なイメージのような気がします。

名無しさん 2008-09-13T23:41:39+09:00
かっこだらけでcons car cdrか
はてなの動向を見る限り2がおおいんじゃないかな
それもgauche組
なるほど

haiju 2008-09-13T23:42:11+09:00
rubyからの人も多いかも

名無しさん 2008-09-13T23:42:25+09:00
quekさんのいうようにsicp組もね
ふらっと戻ってきました。
せんざいてきに、XMLは?
興味のある人でやってくる人ならonjoさんの3の人は少ない気がします。
ども>akaさん
elispはどちらかというと他の言語を使ってemacsを仕方なくカスタマイズするからというタイプの人がおおそう。
Waterとか、だいぶLispなような。括弧とがってますが。どもです。> snmstsさん
それゆえにcみたいなlispコードが山ほどでてきてる。^^;
xmlispみたいな話ですね
XMLをS式と見るのはLispを知っている人だけじゃないかなぁ
私もそう思いますw >NANRI
xmlispはあっとうてきに使えないけどね。。。あ、いや、3.カッコだらけ 4.知らずにXMLとかくとう、ぐらいな意味で、すいませんSKK serverがおかしくて、漢字の変換が、、、
なるほど、納得>4番目
えと、なんだっけか
来る人のlispの認識としてはschemeの初歩は読めるけど書けない。くらいで良いのかな…
LISP属は全部覚えましょう.
みんな仲良く!
Qi?
あの手の会って、オープンだから、熱心に使う人が2割いればいい方じゃないかと思う。
そののこり8割をどうみるのか?だよね。
濃い人ばかり集める目的の会ってのは招待制になるから。
tech talkをどっちを向いて話せばよいのか(というよりは向いて話す人に声をかければよいのか)
という悩みっぽいです
きっとNANRIさんが当初想定したレベルで良いんでしょうね
マーケットイン、プロダクトアウト、どちらで行くかという段階からおなやみなんですかね?
うん。 その話でどうしたいのか?(「common lispを使う人を増やしたい」とか「知ってもらいたい」とか。) 
あれ? yasさんのメッセージは私のメッセージにかかってます?
できそうな話ってだけで、あんまり考えてなかったりしますけどね>想定したレベル
snmstsさんへ>akaさん
了解。> yasさん
考えは知ってもらいたいによってます。akaさんの答えにもなっているでしょうか…
知ってもらいたいなら、自分が楽しめる話を中心にすればよいかも。
NANRIさんの構成として、Schemeじゃなくて、CLを選ぶ理由にフォーカスされるのはいかがですか。それが無いとSchemerはSchemerのままかと。
仲良くしつつスライドでは…けんか腰…良いかも
多少のちょうはつはエールの交換でもあり、好奇心も刺激しますよね。
う〜ん、それは加減が難しくなりそう>CLを選ぶ理由
自分がSchemeをあんまり知らないからなぁ
理由か…そこに xyzzy があったから
それただのキッカケっすよきっと
CLを選ぶ理由がテーマになる時は、同時にSchemeを選ぶ理由をテーマにしないとバランスが悪いかなと思います。
僕は重い計算をやりたいと思ったからだよね 軽量だけならschemeでもかまわんし。
相手がgaucheだとだいぶ限定されますが、scheme自体ならもりだくさんかと。> NANRIさん
私も、やはりそこそこ速いコンパイラ処理系の存在が大きかったです。> yasさん
選びたい理由とおもったけどままならないことでバランスしてもよいかもしれません。
gauche軍団か。。日本のS式のメインストリームだからなぁ。
うん、Schemerと連携する必要があるので、まだちょっと時期尚早かなと>akaさん
でもまぁ、Lisp-1 vs Lisp-2 とか、どっちが優れているか的な議論はどうかなぁ。単に違っているというだけなんだと思う。
繰り返される水掛論争を会場で生で!
盛り上がる?
相手を挑発するのがどを過ぎると政治と同じで見てて疲れるからなぁ。
そのへんは適度を探った方がいいかもね。
はい。そう思います
私も、演出しだい、だと思います。楽しいか、疲れるか。
ああ、すいません。>みなさん
ん?
単に、はじめてこういう場にきたので、何かお役に立てるアイデアがだせるかな、というだけですから、
ブラックジョークでやるんだったら、日本lisp党の派閥正治だな 笑
更に黒くlambda教の宗派内対立ですかね
そんなところやね。
lambda教lisp派common lisp門
古いLISPの伝統を受け継いでいるとか、compileがあるとか、処理系間の互換性が比較的高いとか、規格が安定してるとか。
規格安定のメリットを歌う人ってclerだけですかね
謳う
multi-threadとかは、嫌な状況なんですよね、、、> CL
まぁ、後発の最新鋭言語みたいにカッコイイ機能はないですが…
嫌な部分はそれなりに…
いや、そういうことも知らせてあげると、聴いた人には役立つかなと。
なるほど
なんというか考えこんでしまいました。
ずっとなんですけど、
あんまり話を進めるというほど頭がまとまっていないので、
考え込んだときは初心に戻るが一番いいよ。
自分が楽しめるものをですよね
ありがとうございます。
何か思いついたらいつでも書き込んでいただければ…
という感じで。
普通のご歓談モードに…
根本的な話だけど、言語を使うってなんだろうね。
自然言語も含めて、ですか?
考えるときにそのアーキテクチャで考えることのような気がします。
自然言語も含めてですかね
好きな言語だから。仕事で使うから。日本語の情報がいっぱいだから。とか欲求が何だろうって思ったの。
自然言語は意識してなかった
CLを先にやるべき理由:
CLtLの末尾にR5RSをくっつけても問題ないが、
R5RSの後ろにCLtLをつけたら…

haiju 2008-09-14T00:29:31+09:00
概念や考え方が自分に馴染むから?とか

名無しさん 2008-09-14T00:29:49+09:00
というネタをふと思いついた
背景となる数理モデルと、生活したり思考したりする社会の語彙形成のバランスが取れているもの、ということかと。> yasさん
全部自然言語にもあてはまりますね>akaさん
そですね。>snmstsさん
なるほど 考え方が馴染んだり数理モデル的背景ってのは影響をうけるね。たしかに
ライブラリは語彙なのかな…
語彙かと。> snmstsさん
数理モデルとして如何に優れていても、対象ドメインの既存語彙や語彙形成力が貧弱だったら、何も語れないですし。> yasさん
いくら語彙が豊富でも、数理モデルとして弱ければ、冗長な表現になるし。Javaとか。そのバランスかと。
haskellなんては数理モデルに相性がかなりいいけど、Javaとかじゃたしかに助長に成りそうだよね。
単純に好きだからってのも言語を使うようそにおおそうなんだよな。
数理モデルやその表現と脳みその相性ですかね
どうも良い言葉が浮かびません
思考に素直といえばlispの利点だと思ってる 笑
Emacs で C のソース書いてるときにたまに「あ~ソースを書く elisp を書こう」と思う時があるんだよな。
「個人の言語の選択は、その人自身のもつ数理モデルと語彙のセットと、その人の環境で主導的な数理モデルと語彙のセットとの兼ね合いで決まる。ただし、環境をどこまでのスコープとするかも人それぞれである」という感じかしら。>snmstsさん
あ、環境は社会環境のこと。
で、LisperおよびSchemerは、スコープの時間軸が未来に広い人達と思ってたります。
自然言語を含めると、思いつきで「そうだドイツ語始めよう!」とかは説明できないですが、ばっちりかと思います。
先にある自由度って大切にするよね
かといって今がとりたてて不自由な気もしないんですけど、そこらへんが鈍感なんでしょうかね
新しいS式でない構文を導入したら?とかアイデンティティが崩落しそうなので無理ですが。
for文の中に丁寧にfizzbuzzを書くみたいなのって、時間軸が現在だよな。
私の場合は、全てDOAまたは全てOO!という業務システム関係者の感覚がどうしてもagreeできなくて、Lispに流れたというのがあります。
いらいらしちゃったのね。>akaさん
そです。> yasさん
なので、Rubyのまつもとさんともagreeできないと思います。脳がOOらしいので。。。
また体調がわるくなってきてしまいました。。。ああ、何だか初めてきたのに、いろいろ書き込んですいませんでした。いろいろ刺激をいただけました。ありがとうございました。
また来てください。
おつかれ〜
おやすみなさい
lisperにooが苦手って人はグレアムやLOLの人とかおおそうやね。
俺も極力ooは避けてるけど^^;
…苦手です。^^;
あ、あれ。結構好きかもw
g000001さんも好きそうだったな
でもそれほど熱烈でもないか。
closの話は面白いんですけど、なくても良いの壁は越えられなさそうです。
closに興味を持ってる非lisperはおおいかも。
CLISP付属のドキュメントはこれですね。短い!
http://www.aiai.ed.ac.uk/~jeff/clos-guide.html
それでclosの読み方を知った
シーロスかクロスw
悪口なら殺すだろうなw
第三の読み方ですか
書き方を間違ったら捕まる言い方だw
まぁ、用途によっては便利ってことで。さすがにあらゆる場所でCLOSを…という純粋CLOS主義というのは見たことが無いし。
私もそろそろ寝ます。おやすみなさい~
おやすみなさい
ぼくもねます おやすみなさいません

g000001 2008-09-14T15:16:15+09:00
 おお、なんか自分が落ちてから盛り上がってたんですね(*'-')
 自分は、CLOSは理解できないから追及したいだけで、好きかどうかは理解してからですねw
(provide 'ネタ)
http://xach.livejournal.com/188527.html
単一の実行ファイルが求められるってのは、海外でも同じっぽいw
その点Dylanは先を進んでましたね(*'-')

shiro 2008-09-14T20:04:48+09:00
それ環境の問題じゃないかなあと思うんですよね>単一実行ファイル
組み込み系でもない限り。
普通のCのプログラムだって、システムに既にlibc.soがあるから動いてるわけで。
昔はそれでも全部static linkしてバイナリだけ持ってくってのを時々やってたけど
最近は依存ライブラリが多すぎて全部staticにするよりもターゲットと環境を合わせる方がずっと楽だということに気づきました。
で、そう考えると要するにターゲットにもLispのランタイムが入ってればいいってだけの話になるような。

名無しさん 2008-09-14T20:52:28+09:00
昔と状況が変わったのは環境構築の道具がネットワーク対応っぽくなって、足りないものをインストールするのが部分的に楽になったからでしょうかね。
windowsでJREや.NETのランタイムに抵抗があった昔の感覚を思い出すのが大変です。
Lispのランタイムが当然入っているようになるようにキラーアプリを書くと良い…と

g000001 2008-09-14T22:00:15+09:00
おお、凄い!、shiroさんからレスが付いてる!
 単一実行ファイルネタは2ch等で何回も繰り返される質問なんですが、どこも変らないんだなーと思ったもので投下してみました(*'-')
 Lispのランタイムが当然入っているような時代になると良いですねーw
なんか w つけると馬鹿にしてるように読めるな(^^;
 Wineとか、QuickTransitとか普通な時代なので、仮想Lispマシンも取り込まれる時代にならないでしょうかw
とか思いましたが、Lispマシンって、そもそも実行ファイル作って実行とかいうモデルじゃなかったですね(^^;

quek 2008-09-15T00:41:53+09:00
JavaScript みたいに ブラウザに Lisp がのってほしい。

(び) 2008-09-15T10:46:49+09:00
SBCL使い始めて、一番戸惑ったのがそこですねぇ >実行ファイル作って実行するモデルじゃない
UNIXianは#!/usr/local/bin/sbcl とかスクリプトの先頭に書きたいわけですが
SBCLのinfo見ると何かまじないじみたスタートアップスクリプトを用意して云々とか書いてあって激しく萎えた
clispだとその辺違うのかな
SBCL can generate stand-alone executables.  The generated executables
include the SBCL runtime itself, so no restrictions are placed on
program functionality.  For example, a deployed program can call
`compile' and `load', which requires the compiler to be present in the
executable.  For further information, *Note Function
sb-ext:save-lisp-and-die::.
あーなるほど
今気がついたぞこの記述www

g000001 2008-09-15T12:15:00+09:00
 自分は、ライブラリを読み込めるだけ読みこんで。save-lisp-and-dieでSWANKの実行ファイルを作成して、それを実行してSWANKを起動しています(*'-')
ちなみに、サイズが、134MBもありますw 素だと、30MB位?
 ブラウザでCLということだと、FireFoxのaddonでKamen lispってのがあるみだいですが、手元では上手く動きませんでした。残念。
http://www.progmatism.com/software/kamen/index.php

名無しさん 2008-09-15T13:32:35+09:00
他と同じでしーばんを普通に書けば大丈夫ですよ。<CLISP >ぴさん

g000001 2008-09-15T16:17:07+09:00
 お、NANRIさんの報告が早速反映されてますね(*'-')
2008-09-11 Helmut Eller

* doc/slime-refcard.tex: Fix typos.
 stream-file-positionもコメントアウトされたらしい(*'-')
2008-09-10 Tobias C. Rittweiler

* swank-backend.lisp (*gray-stream-symbols*): Comment out
STREAM-FILE-POSITION
 しかし、SLIMEはなんでここに来て急に活溌になってるんでしょうね。

(び) 2008-09-16T13:36:04+09:00
やっぱりスクリプト言語的な使い方をするならclispがよさそうですねぇ

g000001 2008-09-16T13:41:09+09:00
 ですね、そういう感じみたいです(*'-') 自分は第二の方法として、SLIMEから何でも実行するのに挑戦しているのですが、思ったより使えてます。気分だけLispマシンですw

(び) 2008-09-16T13:55:23+09:00
UnCommonWebやHunchentootのデモやドキュメント見てると、そんな感じの使い方を想定してるっぽい
だから、サーバ系のプログラムであれば、GNU screen上でREPLを動かしてそこでloadして実行して、普段はデタッチしとくという使い方がいいのかなぁ、などと思ってます

g000001 2008-09-16T14:02:55+09:00
 なるほど、サーバだとそういう感じでしょうね(*'-')SWANKのデーモンを起動して置けば、好きなPCから接続できて、イメージも共有できるので、そういうところは便利に使えてます(*'-')
デタッチといえば、こういうのもあるみたいですね。
http://www.cliki.net/detachtty
自分は設定が何となく面倒だったので、まだ、試してはいないのですが。

(び) 2008-09-16T14:27:59+09:00
こちらの方がscreenよりシンプルみたい
端末エミュレーションは想定してなくて、dum端末的なものなのかな
用途によってはこれで充分かも
わたしが管理しているサーバだと、必ずscreenは入れてあるので、わざわざ他のものを使う理由はないけど

名無しさん 2008-09-16T21:33:17+09:00
自分とこのMacportsのclispはこんな感じです。
$ clisp --version
GNU CLISP 2.43 (2007-11-18) (built on ntt2-ppp299.tokyo.sannet.ne.jp [219.106.53.45])
Software: GNU C 4.0.1 (Apple Inc. build 5465) 
gcc -D_NONSTD_SOURCE -Igllib -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -Wno-sign-compare -O2 -fexpensive-optimizations -falign-functions=4 -DUNIX_BINARY_DISTRIB -DUNICODE -I. -x none -L/opt/local/lib -lintl -liconv -lc  -Wl,-framework -Wl,CoreFoundation -L/opt/local/lib -lreadline -lncurses  -L/opt/local/lib -liconv -L/opt/local/lib -lsigsegv -lc -R/opt/local/lib -L/usr/X11/lib -R/usr/X11/lib
SAFETY=0 HEAPCODES STANDARD_HEAPCODES GENERATIONAL_GC SPVW_BLOCKS SPVW_MIXED TRIVIALMAP_MEMORY
libsigsegv 2.5
libiconv 1.11
libreadline 5.2
Features: 
(REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL COMMON-LISP LISP=CL
 INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN GETTEXT UNICODE
 BASE-CHAR=CHARACTER UNIX MACOS)
C Modules: (clisp i18n syscalls regexp)
Installation directory: /opt/local/lib/clisp-2.43/
User language: ENGLISH
libffcallはビルドに必要だけれど、リンクはされないんだったような
http://www.freshports.org/lang/clisp/
に書いてあるというだけで、自分で確かめてませんが

(び) 2008-09-16T21:46:08+09:00
思い出した
わたしのMacはpkgsrcでUNIX系ソフトウェアを管理してるんだけど
そいつに入ってるclispはXを要求してて、何だかよくわからんものを大量に入れようとするので途中で止めたんだった
あれっきり追求してないな

名無しさん 2008-09-16T22:49:03+09:00
libffcall 自体は FFI が使えなくなることを我慢すれば --without-ffcall で外せるはず。
Xを要求するのは CLX か GTK2 モジュールですかね。私もそれらは使ってないなぁ。
Chapter 33. Extensions Implemented as Modules ばっかり見てましたが、FFIは32.3でした。
そういえば libffcall が切り離された理由って Implementation Note に書いてないですねぇ。
libiconv は他のプロジェクトでよく使われるので分離されて、libsigsegv は CLISP と GNU Smalltalk で半々くらいなので分離されて、
libffcall はあんまり使われて無いだろうと思ったらけっこう使われてるっぽいので分離…だそうです。
CLISP だけ使ってる人からするとだんだんビルドが面倒になっていくw

g000001 2008-09-16T23:55:00+09:00
 そういう経緯だったんですか(*'-') 上の3つはビルドするとき知らぬまに外れてることが多いなあw

名無しさん 2008-09-17T00:10:22+09:00
確かにclispのビルドは面倒ですね。libffcallなんて最初サンタフェにとりにいったけど、あらへんといわれるし、「アホかっ!」と言いたくなったよ。^^;
配布しているところを探すのが困難です。
私もビルドできなくなってから ffcall を探し歩きました

g000001 2008-09-17T22:35:53+09:00
 JLUGサイト活性化/ハブサイト化に興味のある方を募集しています! 詳しいことは、まだ何も決まっていませんが、興味のある方、手伝っても良いよ!という方、是非教えて下さいまし!!
http://jp.franz.com/jlug/index.html
このページですね。
テスト、テスト


名無しさん 2008-09-18T20:44:32+09:00
手伝いたいなぁと思ってたので、メールしておきました。>g000001さん

g000001 2008-09-18T20:59:00+09:00

おお!、ありがとうございます!!

名無しさん 2008-09-18T23:35:23+09:00
処理系のページの最新化とかなら手伝えます>g000001 さん

g000001 2008-09-18T23:38:51+09:00
はいー、こんばんは(*'-')
処理系の最適化ページとは、またツッコんだところをw
あ、最(新)化ですね、すいません(^^;
確かに、onjoさんのところに、日本語ページがありますよね、是非お願いしたいですー(*'-')
ただ、まだ具体的な話が進んでないので、興味のある方募集という感じなんですね。

名無しさん 2008-09-18T23:44:47+09:00
学生時代にCMUCLの「日本語を通すためのtips」がすっごい見たかったんだよなぁ。当時すでにリンク切れになっていた。

g000001 2008-09-18T23:45:20+09:00
なるほど、なるほど、自分もそういうの多いので、
そういうの回収して行きたいとは思っています。
あと、自分の趣味になってしまいますが、大学の研究で開発された処理系のリンク切れとかもフォローしたいw
これはShibuya.lispでも提案してみたりしてますがw

名無しさん 2008-09-18T23:50:28+09:00
LispMachineとかSchemeはあんまりわからない

g000001 2008-09-18T23:52:27+09:00
いえ、CLの処理系だけで十分嬉しいです(*'-')
Schemeは、Schemerの方と相談してみようかと。
というか、scheme-users.jpがありますねw

名無しさん 2008-09-18T23:58:44+09:00
ニュースとかも頻繁に更新されていていいですねぇ >scheme-users.jp

g000001 2008-09-19T00:00:29+09:00
ですねー。こういう風になると良いなあと。
というか、中の人にご一緒にどうですかと、相談してみようかとも思ってましたw
JLUGは、LISP全般みたいなので。
 onjoさんにもご相談したいことがあるんですが、もう少し具体的に方向性が見えてきたら、メールで相談させて頂いても良いでしょうか?(*'-')

名無しさん 2008-09-19T00:05:50+09:00
どうぞ~

g000001 2008-09-19T00:06:23+09:00
ありがとうございます(*'-')

名無しさん 2008-09-19T00:13:25+09:00
今週の勉強会の資料どうしようかなぁ。
Google Docsでも使ってみようかと試してるんですが、

g000001 2008-09-19T00:14:08+09:00
え、まじですか!、そんなに気合い入れてもらえるんですか(*'-')
そうなると、自分のは大分しょぼいかもw

名無しさん 2008-09-19T00:15:44+09:00
スクリーンショット貼るだけですけど

g000001 2008-09-19T00:16:24+09:00
なるほど、画像ですね(*'-')
スライドなら、
http://www.slideshare.net/
とかあるんですけれど
画像だとどこが一番なんだろう。

名無しさん 2008-09-19T00:18:12+09:00
SlideshareってGoogle DocsのPresentationと似たようなもんなのかな

g000001 2008-09-19T00:18:29+09:00
ですね、割とそんな感じですね。
Google DocsのPresentationはチャットできたりして高機能ですよね。
勉強会でも、これで行けないかとか考えたこともありました(*'-')

名無しさん 2008-09-19T00:21:53+09:00
あんまり見かけないんでこの機に試してみようかと。
しかしオフライン動作はうまくいかないなぁ。諦めてオンラインで作ってみるか…
もう金曜日か〜 早いな〜
資料書かないと

g000001 2008-09-19T00:31:33+09:00
え、NANRIさんもそんなに気合い入ってるんですか(^^;
でも、ちゃんと説明しようと思うと、そういう感じになるのかな。確かに。
自分は、テキストを準備して適当にペタペタ貼って行く予定でしたがw
あ、そういえば、画像については、ここは、画像のURLをペーストすれば、
自動でインラインで表示されますね。

とか
http://world.std.com/~jdostale/kbd/SpaceCadet1.jpeg
おお、ちゃんとリサイズされるんだ。

名無しさん 2008-09-19T00:36:46+09:00
気合いは入ってませんけど、必要な時にコピペでぺたっと貼付けられるようにの準備です。
言い出しっぺですしね

g000001 2008-09-19T00:37:51+09:00
下書きはあると、とりあえず楽ですよね。自分毎回コピペですw

名無しさん 2008-09-19T08:59:11+09:00
画像なら http://photobucket.com あたりがおすすめかな そのまま画像をほかに埋め込んでも問題は起きないので、flickrなら規約違反になりますが。
Lisp50@OOPSLA
http://www.lisp50.org/
10月20日か
Shibuya.lispの2日後か、タイミングがいいのか!?

g000001 2008-09-19T22:36:47+09:00
 おお、flickrって埋め込み規約違反になるんですか… 自分、昔のブログにじゃんじゃん埋め込んでました(^^;

 これは凄い > lisp50
 錚々たりすぎるスピーカーww

こんな感じなのかなあ
SCHEME* Wiliam Clinger, Northeastern University, USA
CL* Pascal Costanza, Vrije Universiteit Brussel, Belgium
CL* Richard Gabriel, IBM Research, USA
?? * Rich Hickey, Independent Consultant, USA
(笑) * Alan Kay, Viewpoints Research Institute, USA
CL * Fritz Kunze, USA
CL * Ora Lassila, Nokia Research Center, USA
LISP(笑) * John McCarthy, USA
MacLISP, CL, SCHEME * Kent Pitman, PTC, USA
SCHEME,CL * Guy Steele, Sun Microsystems Laboratories, USA
LISPの歴史の方? * Herbert Stoyan, University of Erlangen, Germany
INTERLISP * Warren Teitelman, Google Inc., USA
MacLISP、CL * JonL White, USA
INTERLISPがちゃんと押えられてるところが、素晴しい(*'-')

名無しさん 2008-09-20T00:10:08+09:00
うん。もう少し丁寧に言うと、*.jpgをそのまま張るのは規約違反になって、リファラをチェックされたうえで直張りが出来なくなります。逆に、そのjpgファイルがあるページを張っておくならば規約違反にはなりません。この辺の面倒くささがさっきの所ではないですよ。もう一つの利点は画像の特定部分に説明を加えたりする機能も優れていますね。この辺はflickrよりいいとおもう。

g000001 2008-09-20T02:45:13+09:00
なるほど、なるほど > flickr
こんばんはー、CL勉強会 本日も開催させて頂きます。
お題は、今回は、開発環境などについての情報交換です。
今回も軽く自己紹介テンプレ用意してみました! 良かったら、記入してみて投稿してみてくださいー。
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:

haiju 2008-09-20T19:30:38+09:00
chymK47
こんばんわ。少し自宅のネットワークの状態が悪いみたいですがヨロシクです。

名無しさん 2008-09-20T19:41:29+09:00
こんばんはー。GoogleDocs と格闘中w

g000001 2008-09-20T19:44:06+09:00
こんばんはー(*'-')
自分もいまいち準備が間に合ってません(^^;

名無しさん 2008-09-20T19:45:46+09:00
なんか保存でエラーでて以降文字が入力できないな…

g000001 2008-09-20T19:53:39+09:00
しかし、何人お話してくれるのか考えてなかった(笑)
昨日の時点では、3人ですが、
一人30分ひっぱれるでしょうかw
6人で、一人あたり15分くらいか。
まあ、適当につっこみをいれつつということで、大丈夫かな。

名無しさん 2008-09-20T19:58:52+09:00
初Google Presentation!
ブラウザによって相性とかないかな

g000001 2008-09-20T19:59:47+09:00
おお!、期待大!

haiju 2008-09-20T20:00:03+09:00
楽しみです!!!

g000001 2008-09-20T20:00:23+09:00
あらためまして、こんばんはー、では20時になりましたので、開始します。
第17回

お題は、今回は、開発環境とかについての情報交換です。
では、まず、勝手に皆さん発表してくださるものと決め付けて考えてしまっていたのですがw
準備された方は
私と、onjoさんと、NANRIさんってところでしょうか?

名無しさん 2008-09-20T20:02:39+09:00
はい。準備ありです。

g000001 2008-09-20T20:02:48+09:00
その他、随時適当に流れで挙手していただければと思います!
では、順番どうしましょうかw
とりあえず、自分から行きますか?
なんとなく様子見ということで、では、自分から行きたいと思いますー(*'-')
とりあえず、自己紹介とか
|g000001|
ハンドル:g000001
活動場所: 
cadr.g.hatena.ne.jp/g000001

自分内CL/Scheme割合: 
9:1くらい

勉強会でお題になったら良いなと思うネタ: 
CLOS、MOP、Lispとデザインパターン。

なんとなく質問してみたいこと:
なんとなくCLOS勉強会やりませんか!?
毎回同じですいませんがw
では、自分なんですが、
* OS周り
は、
メイン環境:
Linux x86_64
サブ:
MacOSX 10.4 PPC
みたいな感じです、
割と色々な処理系を試してはみたい方なので、CLの処理系は、

名無しさん 2008-09-20T20:04:39+09:00
64bit 世界の人だったのか…

g000001 2008-09-20T20:04:51+09:00
ですね、自分64bit村ですw
SBCL、Clozure、Allegro、CLISP、LispWorks、ECL、MCL、
あと、CMUCLとか、
使ったりしています。
メインは、SBCLです。
32bit環境でしか動かない処理系は、
apt-get install ia32-libs
みたいに準備して動かしてます。
あんまり調子良くないですけれどw
本体は、こんな感じかと思うんですが、
次に *ライブラリの整備ですね
自分は、asdf-addonsを使って
faslファイルとソースディレクトリは分けるようにしています。
asdf-addonsについては、
http://cadr.g.hatena.ne.jp/g000001/20071108/1194519637
に過去に纏めた記事があります。
デフォルトだと、faslファイルが同じディレクトリにばらまかれるので、
異なる処理系の共存がなかなか面倒なんですが、
これを使うと回避できます。
具体的には、自分は、
/share/sys/cl/src
にソースを展開
/share/sys/cl/asdf
にasdファイルを纏め
/share/sys/cl/fasls
以下にソースファイルとは別個にfaslファイルを配置
という感じです。
この/share/sys/は、NFSサーバ上にあるので、家の中のマシンは全部同じパスで共有しています。
この点でも、asdf-addonsは便利です。
それで、開発環境に関係してコアイメージの作成ですが、
mkcore.lispという環境構築ファイルを作成して、
それを読み込ませて作成しています。
/usr/local/sbcl/1.0.20/bin/sbcl --core /usr/local/sbcl/1.0.20/lib/sbcl/sbcl.core --load ~/cl/mkcore
みたいな感じで作成
で、そのmkcore.lispですが、
今回、いつも使ってるのを見た目よく整理しようとしたんですが、
なんか壊してしまいましたw
http://code.google.com/p/setagaya/source/browse/trunk/home/mc/mkcore/mkcore.lisp
こんな感じです。
SBCLの場合は、このファイルを読み込ませると、/var/lisp以下に、swank-sbclという巨大な実行ファイルが作られるので、
これを実行すると、SWANKサーバが起動します。
で、これにSLIMEから接続する、という感じです。

名無しさん 2008-09-20T20:13:08+09:00
おおー、全処理系分あるんですね、すごい。

g000001 2008-09-20T20:13:10+09:00
それで、次にエディタですが、
ですね、お蔭でもの凄く汚なくなるんですけどねw
あ、補足なのですが、上のmkcore.lispは、処理系によって読み込んだ後に、単一の実行ファイルを作成するか、
coreを生成するか、最後にswankを起動するかに
分かれています。LispWorksとかは、イメージが作成できないので、
swank起動スクリプトの様になっています。

名無しさん 2008-09-20T20:15:19+09:00
ACL体験版って dumplisp できるのか…

g000001 2008-09-20T20:15:25+09:00
LispWorksでイメージ作れないのは、試用版だからなのですがw
ですね、Allegroは太っ腹ですよね(*'-')
あと、ECLでも、単一実行ファイルを作成しようとしてたんですが、

名無しさん 2008-09-20T20:16:05+09:00
windows版もできますよ。>onjoさん

g000001 2008-09-20T20:16:05+09:00
面倒なので放置してますw
あ、そういえば、上のmkcore.lispですが、パス決め打ちですいませんw
修正しようと思って間に合いませんでした…。
それで、次は、エディタですが、
EMACSを使用しています
というか、SLIMEをつかっています。
で、SLIMEとは独立したところですが、
キーバインド:
TABは、C-iするため、TABを使わないので、superキーに割り振ってみています。
それで、s-lで、CL開発環境が起動するようにしています。

名無しさん 2008-09-20T20:18:21+09:00
な、なんだってー

g000001 2008-09-20T20:18:36+09:00
これ結構便利かなと
勝手に思っているというか、Lispマシンは、Selectキーというのがありまして、
メールとか、replとか、SELECT+ ~ で切り換えられるんですね、
それの真似をしたかったというw
それで、SLIMEを起動しつつ、2008-09-20.lispというファイルを作って、そこでガチャガチャするというのを基本にしています。
そういうelispを書いています。
キーバインド関係では、paredit.elも良いかもと思いながら、ちょっと使って放置しています。
で、他にちょっと変えているところとしては、
Lispマシン風に
C-sh-eで、評価
(define-key slime-mode-map [(control shift ?e)] 'slime-eval-defun)
C-sh-cで、コンパイルにしています。
(define-key slime-mode-map [(control shift ?c)] 'slime-compile-defun)
みたいな。
あと、これ便利です。
(define-key slime-mode-map [(control ?c) (meta ?\;)] 'slime-remove-balanced-comments)
あと、SLIME Selectorも便利
(global-set-key [(control ?\;)] 'slime-selector)
で、SLIMEですが、
SLIMEはCVS版を使っています。
最近壊れてるのに遭遇することが多いので、
困ることが多いですw
前に新宿の勉強会でSLIMEをお題にしたんですが、
http://cadr.g.hatena.ne.jp/g000001/?word=%2a%5bSLIME%5d
に書いてるところから進歩してません(^^;)
あとは、ドキュメントの参照方法とかですが、
SLIME経由で、C-c C-d h > HyperSpec
C-c C-d c > CLtL2
lispdocとか便利そうだけど使っていないです。
CLtL2は、ILISPからパクッて来ましたw
あと、シンボルの補完とかですが、
SLIME標準のm-v-b形式

名無しさん 2008-09-20T20:22:44+09:00
そうか、CLtL2を引くっていうのは忘れてた

g000001 2008-09-20T20:22:44+09:00
mvbind形式はなんでか動かなくなったので深追いせず放置していますw
あんまり使わないですけどね(^^;
lispdocを引いたりする方が良いような気もしますねー。
あと、シンボルの補完とかですが、
SLIME標準のm-v-b形式
mvbind形式はなんでか動かなくなったので深追いせず放置。
という感じです。
それで、どんな感じの開発サイクルか
ですが
あれ、
書けてないな。
あと、個人的に、ないとやってられない機能: 引数を教えてくれる機能(slime-autodoc)、マクロ展開、シンボルの補完(slime-c-p-c)、ソースファイルの定義したところにに飛ぶ機能
です。
それで、どんな感じの開発サイクルか
ですが、
ちょっと書いて、コンパイル→怒られる→修正→動いた→バグがあった→修正→動いた…
ですw
デバッガはあまり使ったことがありません。
**テスト環境
前は書いてたんですが、テストは最近書いていません、
億劫になってしまうんですねー
テスト駆動自体には感銘をおぼえて
Emacsで、
(defun find-testcase ()
  (interactive)
  (let ((fn (file-name-nondirectory buffer-file-name))
        (dn (file-name-directory buffer-file-name)))
    (find-file (concat dn "test_" fn))))

(defun find-testcase-return ()
  (interactive)
  (let ((fn (file-name-nondirectory buffer-file-name))
        (dn (file-name-directory buffer-file-name)))
    (if (string-match "\\(test_\\)\\(\.\*\\)" fn)
        (find-file
         (concat dn (substring fn (match-beginning 2))))
      (message "NSF?"))))

(global-set-key [(control meta ?>)] 'find-testcase)
(global-set-key [(control meta ?<)] 'find-testcase-return)
 みたいなのを書いてテストファイルを自動で作成するようにしてみましたが、パッケージの移動等中途半端なのとテスト書く習慣が身に付かず放置していますw
という感じですかねー。
何か、これはどうやってるのか?というような質問
ありますでしょうかー?(*'-')

quek 2008-09-20T20:28:17+09:00
ライブラリの取得は asdf-install 使ってますか?

g000001 2008-09-20T20:28:18+09:00
あ、そういえば、補足ですが、上のmkcore.lispを読み込ませると、一発で全部の処理系で、基本的に揃えられるところまで揃えることができます。
ですね、apt-getみたいに必須になってますw
asdf-install:installとタイプするのが面倒なのでcl-userにインポートしていますw

quek 2008-09-20T20:29:06+09:00
なるほど。

名無しさん 2008-09-20T20:29:19+09:00
テストをサポートするライブラリは、使ってましたか?

g000001 2008-09-20T20:29:36+09:00
SBCLだと標準で、RTという
簡単なのがあるんですが、
それを使ったり、

名無しさん 2008-09-20T20:30:13+09:00
私は、lisp-unitが、junitに似てて、ちょっと使ってました。

g000001 2008-09-20T20:30:17+09:00
http://cadr.g.hatena.ne.jp/g000001/20080112/1200124491
lispunit使ってみたり、みたいな
あ、被ったw

名無しさん 2008-09-20T20:30:51+09:00
あ、w

g000001 2008-09-20T20:30:53+09:00
自分は、ちょっと使っただけですねー。

名無しさん 2008-09-20T20:30:58+09:00
うちは5amを使ったりその場で作ったりしてる<テスト

g000001 2008-09-20T20:31:09+09:00
あ、yasさんの
あ、デバッグだったw
yt-debugはテストじゃない

自分の理想としては、

quek 2008-09-20T20:32:17+09:00
ちかごろは stefil です。http://common-lisp.net/project/stefil/

g000001 2008-09-20T20:33:03+09:00
おお、こういうのもあるんですね(*'-')
自分の理想としては、C-c C-cした時点で、
別ファイルにテストができて欲しいw
そんなに難しくはないとは思うんですが▼…
パッケージの切り替えとか面倒かな。
C-c C-cというか、関数とかマクロを定義した時点で、ですね。

quek 2008-09-20T20:34:10+09:00
それよさそうです。
inserted by FC2 system