CommonLisp Scheme Part10

このエントリーをはてなブックマークに追加
過去スレ
Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/test/read.cgi/tech/1002584344/
Part3: http://pc.2ch.net/test/read.cgi/tech/1008220265/
Part4: http://pc.2ch.net/test/read.cgi/tech/1016211619/
Part5: http://pc3.2ch.net/test/read.cgi/tech/1023091882/
Part6: http://pc3.2ch.net/test/read.cgi/tech/1031560687/
Part7: http://ruku.qp.tc/dat2ch/0311/20/1042167213.html
Part8: http://pc2.2ch.net/test/read.cgi/tech/1058263391/
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/

前、"Schemeスレはあるのになんでcommonlispスレはないの?"とか言って別のスレを建てた大馬鹿者がいたので、
標題にCommonLispと付けておきました。
Lispの話題でCommonLisp,Scheme,EmacsLisp(専用スレッドがある)以外のものが出ることはこのスレの歴史上でも
稀なので問題はほとんどないかと思います。

関連リンクは>>2-10あたり
□参考リンク□

日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
http://jp.franz.com/
削るとAllegro Common Lispのページへ

プログラミング言語Scheme(日本語)
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。

Lisper への道(日本語)
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html
判りやすいLISP入門サイト。

Schemeへの道(日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
ここはschemeの入門サイト。
慶応の授業のページ・記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html

Practical Scheme(日本語)
ttp://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)

Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
S式でXMLを使える様にするSXMLなど

John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。

Association of Lisp Users
http://www.alu.org/alu/home
米国のLispユーザ会
□SICP関係□

SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。

計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
http://www.ipl.t.u-tokyo.ac.jp/sicp/

SICPの回答集
http://www.melt.kyutech.ac.jp/~gogogo/sicp_ex/
http://pluto.aurorasd.co.jp/~mkama/sicp/
http://www.ipl.t.u-tokyo.ac.jp/sicp/solution.root.html
http://www.sampou.org/scheme/sicp/answer/
□その他□

Schemeで書かれた正規表現ライブラリ
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html

幻の「入門Scheme」
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
オンラインで読める

各種scheme処理系をcygwin上からビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/

Bit - Implantation compacte de Scheme
http://www.iro.umontreal.ca/~dube/
mini-schemeよりも小さい(?)bytecode変換系

Lisp 言語処理系: CAMPUS LIsP, Lemon version
http://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
Cコードによるわずか1000行の実装

Cliki
http://www.cliki.net/index
CommonLispのプログラムがたくさん紹介されているのでここを当たるべし。
encyCMUCLopedia
http://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/
cmucl以外でも有益なはず

CMUのLisp Repository
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html
新旧様々なプログラムが置いてある

Tiny CLOS Tutorial
http://home.adelphi.edu/~sbloch/class/272/tclos/tutorial.shtml

Schemix
http://www.abstractnonsense.com/schemix/
Linuxのkernelへのパッチで、/dev/として扱えるTinyScheme

Bibliography of Scheme-related Research
http://library.readscheme.org/
Scheme関連の論文リンク集

その他よさそうなリンク

awkで書かれたわずか500行のLispインタプリタ
awklispを読めばLispが理解できる
ttp://www.accesscom.com/~darius/

Emacs Lisp 2
http://pc2.2ch.net/test/read.cgi/tech/1068467385/

* Hotdog Scheme http://rover.cs.nwu.edu/~scheme/
 MS が金出してたみたい
* Bigloo http://www-sop.inria.fr/mimosa/fp/Bigloo/
 CLR 用のコードを吐けるようになったらしい

継続

なんでも継続
ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
Schemeへの道:継続
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html
継続の使い方
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation
継続の使用法
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
CPS(継続渡しスタイル)の説明
http://www.csl.sony.co.jp/person/masui/Forum/data/20011215023622/
乙彼〜

>>7
君もやっちまったか(w
独習 Scheme 三週間
http://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html
Schemeの教科書

よろずや
http://www.geocities.co.jp/SiliconValley-SanJose/7474/
lispの実用的な情報が色々。


  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >_∧∩
  _/し' //. V`Д´)/ ←11
 (_フ彡        /
仕様関係)
CLtL2: Common Lisp the Language 2nd edition
  http://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
CLHS: Common Lisp Hyper Spec
  http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/FrontMatter/Chapter-Index.html
R5RS: Revised(5) Scheme(ja)
  http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html

便利な情報リソース)
The Common Lisp Cookbook: いわゆる Cookbook
  http://cl-cookbook.sourceforge.net/

小さい実装)
SECDR-Scheme: SECD machine model に基づく実装
  ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu
Minischeme: 1 ファイルに凝縮された Scheme 処理系
  http://tinyscheme.sourceforge.net/minischeme.tar.gz
TinyScheme: Minischeme を色々弄ったもの
  http://tinyscheme.sourceforge.net/
KI-Scheme, AM-Scheme, etc...
  http://www.nifty.com/download/dos/prog/lisp/
LispMe: Palm 上で動く Scheme 処理系. これも SECD virtual machine.
  http://www.lispme.de/lispme/
リンクとかはどこかに置いとけばいいんじゃないかな。
MacLispスレ立てていいですか?
>>16
いい加減にしてください。
>>16
まず、LISPスレ見てる様な奴は、ほとんどが他のLISP系スレも
同時に見てる、という事を忘れないでくれ。
ここのスレタイが`CommonLISP'となった以上、話題提供したり
自分で盛り立てたりして維持できると思うのなら立てるのは自由だ。
本当に立てるならスレタイを「マイナーLISP隔離スレ」みたいな感じに
してくれると再利用しやすいと思う。
まあよく考えれ。
schemeでxyzzyみたいな軽いエディターを作ってくれるなら
ゆるし、う、うご、、、ごめんなさい
>>19 guile-emacs
1/29のレス 15
1/30のレス 41
1/31のレス 24
2/01のレス 89
驚異的だなw
>>14 どこかって? WiLiKi に置いちゃうとか?
>>23
Weblog って要するに日記ツールでしょ? CLISP って遅いって聞くし。
>>22 の言うように WiLiKi みたいな Wiki のほうがまとめとか書き込めて
嬉しいんじゃないかな。でも Shiro さんとことかに書くのはマズイ予感。
2ch 色がついたら WiLiKi とかのイメージダウンになるかもしれないし…。
25デフォルトの名無しさん:04/02/03 01:52
少々の2ch色だったら平気だと思うんだけど。
>>1
大馬鹿者はおまえ
>>25
2ch ねらーが数人とかならともかく,スレのまとめとか FAQ とかあるのが
少々か?世の中には 2ch 嫌いな人も居るわけで,そーゆう人が引いてしま
うんじゃないかとちょっと心配.
つまり、wikiが使えて、無料のウェブホスティングサービスを探せということか。
そんな便利なものがあるわけが
CGIでPerlが使えるとかありそうな気もするけどな。SourceForgeはソフトウェアだけか. 太っ腹な個人に期待か。
Perlで書かれたCommonLispの処理系とかって見たことありますか?
無料ホスティングサービスは perl ばっかりかと思っていましたが,
python, ruby が動かせるところも当たり前になってきましたね.
# もちろん重いのは禁止ですが.
lisp も...
つーか、システムとしてWikiが動いてりゃ、裏でそれがPerlだろうと何で書かれていても
構わないって話じゃないの?

>>32 そういう無料ホスティングサービスあるんだ。Wikiも動かせるよね、重そうじゃないし。

>>31
Perlで書かれたCLじゃなくて、Common LispをPerlに直すトランスレータの話題は
最近、comp.lang.lispであったな。
>>24
weblog っても /(weblog 10) ← 10 日数分の日記を表示するコマンド
みたいなのがあるだけで、基本的には Wiki だよ。データをメモリに
読みこんで動作するらしいし、ローカルで動かす分には CLISP でも
全然遅さは感じない。しかしリンクが _(Link) みたいな非標準な形式だし
HTML の生成機能とか不要な機能もついてるし、みんなで使う Wiki にはちょとねぇ。
ttp://www.komaba.utmc.or.jp/~flatline/wiliki.cgi
いつまで存在するか保証はしません
キタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
>>35
onlisp.pdf頂きました。アリガトソ
flatlineって誰だっけ
R5RS に書いてある、Scheme がメッセージ送信的な記述をサポートしているという
のは、↓にある様な事が出来るという事ですよね?

ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/actor/actor.html

メッセージ送信と聞くと、オブジェクト指向言語を思い浮かべるのですが、何らかの
繋がりがあるのでしょうか。Act1 の資料を探したのですが、見つかりませんでした。
Act1の資料て何?
4125:04/02/03 22:39
>>35さん
ありがとうごさいます。
>>25は初心者スレとの勘違いした上に文章削って、
「やっぱ辞めとこ」って"キャンセルボタン"を押した
つもりが"OK"ボタンだったりする2重の誤射です。

おちゅーしゃのお気に入りの中に、旧スレとここと初心者が
並んでてついうっかりというか…。
lisp初心者どころかプログラム初心者ですが利用させて
いただきます。といってQ&Aを拾うことくらいで、
読ませて頂くことがほとんどだと思いますが。
>39
ちょうどbitの掲載号を読み返してた所だったりw
教えてくれてありがd!
>>35 に感謝しながら >>14 はリンク切り貼りする事。
いいだしっぺにやってもらおうじゃないか。
基地外に感謝するのは嫌。
>>44 うすっぺらいやっちゃな。
46デフォルトの名無しさん:04/02/04 09:31
>>44が基地外
>>35
> ttp://www.komaba.utmc.or.jp/~flatline/wiliki.cgi
> いつまで存在するか保証はしません
ありがとう。内容がたまってきたら、定期的にバックアップをどっかに
おいておいてくれませんか。バックアップの負担を分散しておけば、
何かあったときに、復旧できる可能性が増すでしょ。
つまり、tar玉かなにかを誰でもダウソできる場所においておくということね。
無理にやってくれなくてもいいけど。
www.komaba.utmc.or.jp/~flatline/wiliki.cgi
にすこし書いときました。Wikiは初めてなので、もっといいフォーマット
があるかも。
>>47
どっか CGI の使える無料鯖とかでミラーできるかもしれないしね。
閲覧だけならそっちを勧めれば本家に負荷かけずに済んでウマー
>>50
> どっか CGI の使える無料鯖とかでミラーできるかもしれないしね。
ミラーとなると... Wilikiってschemeで書かれているんだよね?
schemeを使わせてくれる無料サーバがあるかな?

もしかして、Wilikiって文法レベルで他の言語処理系で実装されている
Wikiシステムと互換性があるのかな?
>>51
基本的な構文くらいなら Perl で作っても比較的簡単でしょ。マクロは厳しいかもし
れないけど。まー最悪 HTML にしちゃうって手もあるわけで。

# でもファイルのアップロードとかできる Perl 製 Wiki も捨てがたいなー。WiLiKi
# だとスレのアーカイブをウプするのとか管理者にやってもらわなきゃいけないよね?
wilikiにschemeの項目を少し追加しました。
といっても項目だけなので内容はどなたか宜しう。

既存のもの(toyama-uとか本家WiLiKiとか)と同じのを作ってもしょうがないので
ここでの質問などを纏めてFAQなどを充実できたらいいなあ。
CMUCLのCVSにアクセスできん....

cvs -d :pserver:[email protected]:/home/anoncvs/CVS-cmucl login
-> unknown host
となるので、MLを見てどうやらマシンが不調なのか別のサーバに切り替わったらしい。
cvs2.cons.orgかtrumpet.cons.orgが使えるらしいので
cvs -d :pserver:[email protected]:/home/CVS-cmucl login
cvs -d :pserver:[email protected]:/home/CVS-cmucl login
とやってもunknown hostとなる。MLには新サーバのIPが207.22.2.3となっていたので
cvs -d :pserver:[email protected]:/home/CVS-cmucl login
とやったが、これは永遠と待たされてタイムアウト。

誰かCVSにアクセスできてる御仁はおらぬか。
永遠と日本語勉強するよろし。
>>54
> となるので、MLを見てどうやらマシンが不調なのか別のサーバに切り替わったらしい。
ほんとに ML 読んだのか? 切り替わっ *た* と? とりあえずマターリ待つかもっかい ML 読み直すか汁。
マシンが切り替わったかどうかははっきりと読んでいないのだが、少なくともアクセスする場所は変わったような。
"update on CVS repository"で
The new IP number for cvs2.cons.org (trumpet.cons.org) is 207.22.2.3.
I put an entry in my /etc/hosts file to map cvs2.cons.org to that new number
and was able to access the repository OK.

と、Werkowski氏が言っておられるので、この二つのドメインにアクセスしてみた。
それがunknown hostになるので、
"I put an entry in my /etc/hosts file"と言っているところからして、
グローバルなドメインには含まれていない予感がしたので、
207.22.2.3に直に
cvs -d :pserver:[email protected]:/home/CVS-cmucl login
とやってみたがタイムアウト。cmuclのwebの例に倣って
cvs -d :pserver:[email protected]:/home/anoncvs/CVS-cmucl login
としてもやはりタイムアウト。

Toy氏がupdateに15分かかる云々と言っているが、loginに5分以上かかるということはあるまい
と考えて、思案に暮れている次第。

その他、
http://www2.cons.org/ftp-area/cmucl/CVS-cmucl/
でブラウズしようとしても404。
ftp2.cons.orgやcmucl.cons.orgもやはり使えない状態。

"Status of CVS machine","Hosting the CVS machine"も読んだが解決せず。
しかし、cvs-commitにはtoy氏によるcvsアップデートの知らせが続々と届き、
そのCVSサーバはtrumpet.cons.org(207.22.2.3)
なのでもはや私には理解不能ということでここに助けを求めました。
なんで解決しないのか不思議だが Martin タンの↓のメールを全て読み飛したのか?
マターリ待てと逝っているだろーが。2ch で聞いてどうにかなる話じゃない。
1/16
Martin: we are still fiddling with the wires and I won't make it this weekend, sorry.
1/23
Martin: We still need more time to create the physical (cable, floor) space
for the machine but we will do it. Sorry for the delay, shouldn't be
too long anymore now.
1/27
Martin: However, I decided to exchange some of the hardware. ITA will host it
where I don't have instant physical access, so I will move the
installation/harddisk to one of my former Quakestations^H^H^H
known-good battletested PCs and while I'm at it upgrade to the newest FreeBSD.
Things are coming along, though and it looks like we get a cozy,
well-connected place.
>2ch で聞いてどうにかなる話じゃない。
いえ、それを聞いて理解しました。

cvs-commitの日付を読み違えていて、21日以降cvsへのアクセスがないことに気付きませんでした。スマソ。
60デフォルトの名無しさん:04/02/05 16:29
Gauche release 0.7.4 リリースage
でもバグがあった為、バグフィックス版0.7.4.1を
だすそうです。
例えば,Javaというプログラミング言語があります.
現在,JavaかPerlの求人多いみたいですね.
システム何とか学科の知合いによれば,猫も杓子もWebアプリって感じで(レベルは一様に低い).

Common LispがJavaに敵いそうもない分野とは?
GUIは,これだけ引きはなされてしまってはまず追い抜くのは無理でしょう.
でも,SwingだのAWTだのが使えるのはスタンドアローンアプリ.
Javaでスタンドアローンアプリ開発を大々的に行っている所ってどこよ? (あるんでしょうけど)
JavaでJEditみたいなエディタ作れると就職にいいですか?

現在のJavaは,DBやWebなどサーバサイドに活路を見出しているらしい.
それなら,Common Lispがどうして敵わないことがあろうか.
そりゃライブラリだってフレームワークだって現在ではJavaのN分の一だろうけど,
Common Lispは言語としては本質的にJavaより優れている.完全に動的なその性格からして.
(Javaさあ,クラスキャストなんぞしてるんなら静的型システムの意味ないって)
Lispは遅い? 何と比べて? Javaより遅いんですか?

Javaが狙っている分野は,Lispの主戦場ですよ.みなさん,ぜひぜひがんばって下さいよ.
62デフォルトの名無しさん:04/02/05 17:00
だからflatlineって誰だっけ
James Goslingって、LispとCの中間的な言語を作るの好きみたいだね。
Gosling EmacsのMock Lispといい、Javaといい。

Gosling EmacsはGNU Emacsに負けたけど、Javaはどうなるかな。
Sunが潰れたら、意外と簡単に逝ってしまいそうな気もする。
それとも、もう臨界値をこえて普及したから簡単には死なない?

プログラミングしやすさで考えると、C++ならJavaでいいやって
気もするけど、それならC#のほうがもっと気持いい?
>>62 On Lispのボランティア翻訳者。
flatlineの元ネタはたぶん「ニューロマンサー」
ああ、80年代は遠くなりにけり。
正直 〜より優れている とか 勝つ とか 負ける とかはあんまり興味を持てないんだ
よな.他の言語の良い面は積極的に取り入れるべきだと思うし.(Java だとパッケー
ジシステムとか豊富なライブラリとか?).あと Common Lisp は完全に動的じゃな
いぞ.型とか型とか型とか.オプショナルな型システム大好きな漏れにはこれがツボ
なわけだが(必須だとウザーだけど無いと物足りない).

Web 関連とかってどうなのかねぇ? Common Lisp だと Aserve + WebAction だろう
けど趣味で遊べるようなもんでもないしねぇ.もっと気軽にあそべる環境がないと人
気でないと思われ.Portable Aserve とかもスレッド使える実装ってフリーじゃあん
まりないし.IMHO も慣れてないと使うの大変だろうし.他になんかあったっけ?
cl-httpってのもあるね。
cl-httpを解説してた本があったな。
たぶん MCL を題材にした ASCII の本だったと思われ。
cl-http が気軽に遊べるかどうかは微妙だが……
>>60 すでに 0.7.4.1 になってるね。インスコした記念 age
>>66
どの言語がどの言語に対してどんな場面で、なにがどういうふうに勝っているのか
を分析しなくては、言語が発展しないのでは? ただの印象批評で、カッタ、マケタ、ワショーイ、
ではは面白くないけど。

まぁ、俺は単純に言語の栄枯盛衰をみているだけでも楽しいけどね。

Common Lispの型システムよりも、より動的な型システムを持つ言語を教えて
くれないかな?

>>67
cl-httpってライセンスが曖昧だった気がする。大統領関連の公式ウェブサイト
の一部でcl-httpが使われていた(いる?)って話があったね。
7166:04/02/06 12:25
>>70
他の言語の良い面は見習うべきだと言ってるつもりなんだけど ……例えば Java だ
とインターフェースに対してプログラムするスタイルとか CLOS にインタフェースを
MOP で組み込んでみればいいわけで.

より動的な型システムってのはどーゆうのかよくわかりません.物分りが悪くてスマソ
>>71
> 他の言語の良い面は見習うべきだと言ってるつもりなんだけど
うまくできるのなら賛成。

> 例えば Java だ
> とインターフェースに対してプログラムするスタイルとか CLOS にインタフェースを
> MOP で組み込んでみればいいわけで.
Javaのインターフェイスというと、メソッドのシグナチャの一群をインターフェイスと
呼んで一まとめにしてあつかうやつだよね。これって、CLOSだと多重継承とGeneric関数で
実現できるのでは?

>>66
> あと Common Lisp は完全に動的じゃな
> いぞ.型とか型とか型とか.オプショナルな型システム大好きな漏れにはこれがツボ
> なわけだが(必須だとウザーだけど無いと物足りない).
上の記述を見て、66さんが好きな型システムを実現している言語ってどんなんかなと
思ったわけ。CLより、もっと「ユルイ」型システムかなとか。
7366:04/02/06 17:48
>>72
漏れは
Common Lisp にも(オプショナルで)静的な型がある == "完全に動的" ってわけじゃない
というつもりですた.で,これが好きだと言ってるつもりだったんです.
作るだけなら動的だけでも良いけど動かす時には性能が必要なとこもあるじゃん.
74デフォルトの名無しさん:04/02/06 22:13
Gauche-0.6.8/FreeBSD で sys-access が変なので syslib.c の
if defined(FreeBSD) をはずしてみました。
一見直ってるけどいいのかな。
FAQ?
>>35
Wiliki のデータベースって他の環境でも使いまわせるのかな?
とりあえずダウンロード可能なところに置いて頂けると嬉しいなぁ。
>>74 0.7.4.1 使わないのはなんで?
ports が 0.6.8 で止まってるからと予想。
78デフォルトの名無しさん:04/02/06 23:28
>>76
恐れ入ります。
FreeBSDで make したらなんか新しいの取りに行ったと思ったら。
あれ、まだこれ貼ってないの?

flatline 氏のサイト
http://user.ecc.u-tokyo.ac.jp/~g340299/

Paul Graham『On Lisp』邦訳
http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf
http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.tex
(最終更新日:2004.02.01 翻訳済み:18章/全25章)

おまけ。PDF から引用。
> 翻訳に手を付けたのは2003 年の始め位だったのですがね.
> 受験勉強から逃避していたあの頃からもう1 年以上経ってしまったのか.

受験生のうちからこんな高水準の翻訳を…。


# スレ違いだが、Vim を Scheme ベースで作り直してくれる人がいたら
# 現人神として終生、たたえられると思う。
え、まだなかったっけ?
sparcあるから既にPowerPCもあるかと思ったよ。
じゃあ残るはWindows(←なぜかportできない)だけだね。
>>81
"(←だれも port しない)" の間違いだろう。何故か、なんてのは自明だろ。
主要開発者がだれも Windows 使ってないから。
元ネタ的には、"(←なぜかportされない)" だろうね
まあ、cygwinでも使わないと非現実的だよな。
なんだっけ、ブートストラップさせるんだよな
スゲー面倒そう
処理系2つ作り置きするようなもんだろ?
build script 入ったのにね > ( ´д)ヒソ(´д`)ヒソ(д` ) < コマンド 4 回打つのも "スゲー面倒" なんだって

というのは冗談として、そのへんは勘弁してください。そんなに珍しい事でもないでしょう?
cygwinでcmuclが使用しているメモリとシグナルのシステムコールがエミュレートされているのかな?

cygwinのライセンスが多分GPL系ということで、cmuclの大部分がパブリックドメインであることを
考えると、ライセンス的に縛りがきつくなるね、cygwin使うと。

cmuclのメーリングリストへ、windowsポートに金だすよと言ってた人がいたけど、どうしたかな。
できたら金を払うよ〜と言われても興味ないもんはだれもやらんでしょ。Lisper を
雇うとか汁。どうしても欲しければ仕事として頼むという手もある。pmai タンを一年
も雇ってフルタイムで移植してもらえば Win32 ネイティブで移植できるんじゃねーの。
「Portしてくれたら金を払ってでも使う」じゃなくて
「WindowsにPortしたいので金を払うからやってくれるLisper募集」
していました。それで、元のライセンス(パブリックドメイン)から変更したくないので、
cygwinは使わない方向で考えていると言っていました。俺の知る限り、1人がやりたいと
名乗りをあげていました。あとSBCLの方へいってみれば、とも言われていました。
>元のライセンス(パブリックドメイン)
これが結構色々な面で障壁になってるよね。
>>90 そうか? パブリックドメインよりも制限のないライセンス形態ってあるの?
>>90 >>91
「元のライセンスを保つためには,伝播性をもつライセンスのものと組み合わせられない」
ということなら,GPLなどの伝播性が問題ということでしょう.

ところで私はGPLの要求は真っ当なものだと思う.
この辺の悩みは健全な開発に必要不可欠なコストでしょう.
制限がないから障壁なんじゃないか。
この意味が分からないとしたら、>>91はオープンソースライセンスをほとんど知らないんだろうね。
GPL キモい。他所でやってくれ。
>>94
煽りは他所でやってくれ
Kahua: 継続ベースのアプリケーションサーバー
ttp://www.kahua.org/
>>96
で?低脳な漏れにもわかるように、もちっと紹介してくれょぅ。
ドキュメント読んでも利点がよくわからん。どこがどうすごいの?
>>97 かっこいい
>>93
> 制限がないから障壁なんじゃないか。
> この意味が分からないとしたら、>>91はオープンソースライセンスをほとんど知らないんだろうね。
意味が分かりません。障壁とはなんですか? 具体例をあげていただけますか?
win32oleできるScheme処理系ってありますか?
ググったらそれらしいのが出てきたけど、いまいち手がかりが
つかめず…
>>101
COM/ActiveX なら DrScheme (MysterX) がサポートしていますけど。
実際にはどういうことをやりたいのかな? ドキュメントへのオブジェクト埋め込みかな。
>>102 WSH の完全な代替.ナンチャッテ
104100:04/02/08 13:05
えーと、煽りと間違われると無念なので、少し説明。

俺は、オープンソースライセンスやパブリックドメインについての議論を
多少なりともフォローしてきているつもりです。

今後、cmuclを使用する上で、何かライセンス的にハマるといやなので、
パブリックドメインに置かれているソフトウェアが誰にどういう面で
障壁になっているのか教えてくれませんか?

>>92
> 「元のライセンスを保つためには,伝播性をもつライセンスのものと組み合わせられない」
> ということなら,GPLなどの伝播性が問題ということでしょう.
どのように組み合わせるかによって、GPLが持つ伝播性の影響がでるかどうか変わるでしょう。
>>100
つまりこういうことじゃないかな。
GPL,LGPLみたいなライセンスが使われているライブラリ(など)は、
まったく制限のないパブリックドメインのソフトウェアには使えないと。

例えば、cmuclが(GPLだと反発する香具師が多そうなので)LGPLでリリースされていたとすると、
cmuclの中に取り込めるコードがどのくらいあるか考えてみるといい(何もLispのコードに限ったことじゃないわけだし)。
そして、それらが現状の(パブリックドメインの)cmuclに取り込められるかどうか、をね。

オープンソースの現状は
http://sourceforge.net/softwaremap/trove_list.php?form_cat=14
になっているわけで、GPL/LGPLキモイとか言っても、無視することはできないだろ。
要するにこの場面で極論するとcygwinが使えないのが障壁とw

まあ、パブリックドメインなら派生ソフトウェアは自由にライセンスを選べるわけだし、
気に入らないなら派生作ってGPLにしたっていい(保守する人が少なければ廃れるのがオチだけど)。
だから、そこまで深刻な問題でもないよな。
SFUが.NETみたいに標準搭載になればいいのにねえ。
WinFXでWin32を順次置き換えていくらしいから、
もう既にWin32で囲い込みする必要もないだろうに。
サポートの手間がメンドクサイからまあ、なさそうだけど。
>GPL,LGPLみたいなライセンスが使われているライブラリ(など)は、
>まったく制限のないパブリックドメインのソフトウェアには使えないと。
まず、自分で使用するだけなら法的に問題なく使えるよね。
ソフトウェアを配布する場合でも、パブリックドメインになっている
ソフトウェアをGPL(など制限のきつい方)にライセンスしなおせば、
問題なく使えて配布できるでしょ?

> 例えば、cmuclが(GPLだと反発する香具師が多そうなので)LGPLでリリースされていたとすると、
> cmuclの中に取り込めるコードがどのくらいあるか考えてみるといい(何もLispのコードに限ったことじゃないわけだし)。
パブリックドメインにあるソフトウェアはいつでも、ライセンスを変更する自由があるという点が一つ。
これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
FSFと一蓮托生でいいのか。

そこらへんを考えると、パブリックドメインにあるソフトウェアが障壁になっているという
言い方はあべこべだと思う。
GPL厨的には、プロプラエタリで非オープンなものに転用できてしまう
パプリックドメインなソフトは、GPLの普及にとって障壁になっていると
考えられるんじゃないの?
ああ、そういう視点ですか。
>まず、自分で使用するだけなら法的に問題なく使えるよね。
もちろんそう。
これはデベロッパサイドの問題。すなわち>>89の"cygwinが使えない"とか他にも"readlineが使えない"とかね。

>ソフトウェアを配布する場合でも、パブリックドメインになっている
>ソフトウェアをGPL(など制限のきつい方)にライセンスしなおせば、
>問題なく使えて配布できるでしょ?

GPLでリリースしたらそれはGPLのソフトウェアであってパブリックドメインではないからそもそも前提が違う。
CMUCLプロジェクトがGPL/LGPLを選択するか否かという問題ではcygwinの件で既に蹴っているではないか。

>パブリックドメインにあるソフトウェアはいつでも、ライセンスを変更する自由があるという点が一つ。

これも上に同じ。ライセンスを変更したらそのソフトウェアはパブリックドメインではない。
そのソフトウェアがパブリックドメインを続ける限りはcygwinもreadlineも使えないし、"GPLに変えたら使えるじゃん"というのは"cmuclがパブリックドメインを続けようとしていて、その方針をとることによるcmuclプロジェクトへの制限"という話のすり替え。

>これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
>FSFと一蓮托生でいいのか。
明らかなプロバガンダ。GPLでリリースしたソフトウェアはFSFに支配されるようになるみたいな言い方だな。
>>99
スマソそれは読んだ事あるんだ。で、ついに継続ベース Web アプリケーション鯖デターーー
とおもったんだけどサンプルとかあんま載ってないからさ。こうスゲーとわかるような
サンプルキボンヌ。
>GPLでリリースしたらそれはGPLのソフトウェアであってパブリックドメインではないからそもそも前提が違う。
いいたいことが分かりにくいな。cmuclプロジェクトに加わっていない人が、
cmuclの成果だけ持って来て、ライセンスだけGPLにして定期的にリリースするとか
できるでしょ? つまり、フォークしてもGPL側はいつでもパブリックドメインのコード
を利用できると。

>CMUCLプロジェクトがGPL/LGPLを選択するか否かという問題ではcygwinの件で既に蹴っているではないか。
これも分かりにくいな。CMUCLプロジェクト内での議論でcygwinはライセンスが問題だから
cygwin使うのよそうやという意見の一致はないと思うよ。ただ、cygwin使ったらパブリックドメイン
のままにはできないかもねという認識があるだけ。

> そのソフトウェアがパブリックドメインを続ける限りはcygwinもreadlineも使えないし、
> "GPLに変えたら使えるじゃん"というのは "cmuclがパブリックドメインを続けようとしていて、
> その方針をとることによるcmuclプロジェクトへの制限"という話のすり替え。
なんか陰謀説みたいな話だけど、単純にcygwinかreadline使いたい人は使えばいいし、それを
配布したい人は、GPLかLGPLでcmuclをフォークすればいいだけでしょ? だれもだれかを制限しようと
なんてしていないでしょ?

> >これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
> >FSFと一蓮托生でいいのか。
> 明らかなプロバガンダ。GPLでリリースしたソフトウェアはFSFに支配されるようになるみたいな言い方だな。
じゃあプロパガンダを消した残りの部分はどう?
114101:04/02/08 16:03
>>102
ありがとうございます!
Excel, Word文書の自動作成をSchemeで書いてみたかったので。

とりあえず、こんなことができました。
(require (lib "mysterx.ss" "mysterx"))
(require (lib "class.ss"))
(define excel (cci/progid "Excel.Application"))
(com-set-property! excel "Visible" #t)
(com-invoke excel "Quit")
面白そうですね.Dr. Scheme って日本語ダメポって聞くけど,文字列としてなら
Excel とかに渡せるのかな?その辺が可能なら Dr. Scheme インスコしてみようかな.
>>113 そもそも議論の前提がちょっと。GPLの第0項を引用しておく。

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.

著作権保持者でなければGPLに出来ない。PDSには著作権保持者がいないのでそ
のままGPLではリリースできない。GPLに限らずライセンスは通常、著作権保持
者との契約なので、PDSに無改変のままでライセンスを付けるのは問題がある。

もう一つ考えとく必要があるのは、日本のように著作権を完全には放棄できな
い国があること。アメリカで権利を放棄して著作権表記をしなくても、同じも
のが日本の法律では著作権が自動的に発生して保護の対象になる。

Lisp関係では書き手が研究者のことがままある。研究者にはええかげんな人間
が多い。著作権表記がないものでも、ヒモつき研究活動の成果で実は著作権保
持者は勤務先なんてことがありがち。だから、ホントにPDSかは不安。GPL で
も修正BSDでも何でもいいからライセンス付けてくれれば善意の第三者ぶれる
ので少しは安心。

# あ〜、不安になってきた。明日勤務先の規定調べないと。確か委託研究以外
# はコピーライト俺でいいはずなんだけど。
>cmuclの成果だけ持って来て、ライセンスだけGPLにして定期的にリリースするとかできるでしょ?
...
>なんか陰謀説みたいな話だけど、単純にcygwinかreadline使いたい人は使えばいいし、それを
>配布したい人は、GPLかLGPLでcmuclをフォークすればいいだけでしょ? だれもだれかを制限しようと
>なんてしていないでしょ?
それを"出来る"(=GPL/LGPL/BSD...に出来る)というのはお前の云う通り。
しかし、例えば、誰かが"cmuclをcygwinに移植しようかな"と言い出したとき、技術がそこそこあってそれが可能な人達というのは
まさにcmuclプロジェクトの彼らのことだろ(他にもたくさんいるだろうが、まず注目されるの彼ら)。
cmuclが現在パブリックドメインであることはこれ(=cygwinに移植しようかな)を多少なりとも足踏させる結果になっただろ?
可能論じゃなくって実際にそれをやる人が居るかを考えたときに、cmuclがオープンソースであることとcmuclがパブリックドメインであることには意識の違いが出てくると思わないか?

>じゃあプロパガンダを消した残りの部分はどう?
とりあえず
>>FSFと一蓮托生でいいのか。
についてはっきりと釈明しろと。で、これ
>これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
別に何もしないでしょ。何か問題になる?
これまでの資産は
http://sourceforge.net/softwaremap/trove_list.php?form_cat=14
莫大にあるというのに。
ライセンス話ウザイ。
119117:04/02/08 18:02
>もう一つ考えとく必要があるのは、日本のように著作権を完全には放棄できない国があること。
これは忘れてたな。そういえばsourceforge.jpにはpdsがなかったなあ。

これって、もしかしてcmuclプロジェクトに参加できない...ってことじゃないよな。
ライセンスの話でlispがスレが埋まる現状はちょっと.....

頼むから、お 前 ら C o m m o n L i s p の 話 題 に 戻 ってくれ。
スレが伸びてもライセンスについての議論じゃあ、lispスレとしての価値がない

↓新鮮な話題を希望
>>112
CVSに入ってるnqueenが面白いですよ
S c h e m e の 話 題 に 戻 っ て く れ

>>121
マンセーこいつぁ面白そうだ。最初っからこのくれー宣伝汁 !
でもまだ Anonymous CVS はないのか。今後に期待〜
---新鮮な話題---

新しいlispの実装ができましたよ。
(defun lisp ()
(loop
(format t "~%* ")
(prin1 (eval (read)))))
cygwin上のgaucheとWindowsのapacheでWilikiを動かすと
書き込みのときに
unbound variable: alist-delete
って出るんですけど 対処法ありますか?
(リロードすると書き込めてるんですが・・・)
誰か解答求む
あります
教えてください
128124:04/02/08 19:01
wilikiのdb.scmの
(define-module wiliki.db
(use srfi-13)
の部分に
(define-module wiliki.db
(use srfi-1)
(use srfi-13)
てやったら オケーぽいけど
これでいいのかな?
藻前らこっちにきなさい

ライセンスあれこれ
http://pc.2ch.net/test/read.cgi/unix/1032702590/

たまたま別スレの都合で数日前に書き込んだんですけど.
>>129
誤爆? 宣伝?
131 :04/02/10 19:06
(define make-structure
(lambda (n) (lambda (d) (lambda (m) ((m n) d)))))
(define select
(lambda (c) (c (lambda (a) (lambda (b) a)))))

の意味がいまいちわかりません。
例えば、
(select ((make-structure (+ 7 5)) (- 9 3)))
とした時のラムダ計算の課程を教えてくれませんか。
>>131
n := 7 + 5 => 12
d := 9 - 3 => 6
c := (lambda (m) ((m 12) 6)) => #<closure>
m := (lambda (a) (lambda (b) a)) => #<closure>
a := 12 => 12
b := 6 => 6
=> 12
133 :04/02/10 19:38
>>131
ありがとうございます、ホントに。助かりました。
.net系でlisp.netみたいなものってないの?
誰か作ってそうなもんだが。
これのことですか.

ttp://dotlisp.sourceforge.net/

Activity Percentile (last week): 19.2626%
ecl をインストールしてみた。ドキュメントに書いてあるように hello world の
スタンドアローンプログラムを作ってみたら約 3MB の実行ファイルが出来た @
Mac OS X. こんなもんかな。

ところで、数ある Lisp レベルのスレッドの実装ってマルチプロセッサ下でどの位
スケールする物なのでしょうか? 実装依存 && 環境依存でしょうか。
clisp と ecl をたらいまわし簡易ベンチで比較してみました。ソースはここから。

最速スクリプト言語決定戦!
http://pc2.2ch.net/test/read.cgi/tech/1074996153

結果)
非コンパイル:
clisp tarai.lsp 101.07s user 0.36s system 96% cpu 1:44.59 total
ロード -> コンパイル -> 実行:
clisp -C tarai.lsp 9.30s user 0.03s system 99% cpu 9.380 total
コンパイル済:
clisp tarai.fasl 9.28s user 0.06s system 99% cpu 9.342 total

ロード -> コンパイル -> 実行:
ecl -load tarai.lsp 67.55s user 19.54s system 93% cpu 1:33.05 total
コンパイル済:
./taraiecl 1.89s user 0.05s system 100% cpu 1.935 total

バージョンとか)
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1495)
GNU CLISP 2.32 (2003-12-29) (built 3285246448)
ECL (Embeddable Common-Lisp) 0.9c
>>137
C で書いたプログラムを動かすには C のランタイムが必要だ。
Java で書いたプログラムを動かすには java のランタイムが必要だ。
Lisp で書いたプログラムを動かすには Lisp のランタイムが必要だ。
で、通常 C のランタイムはシステム標準で付いてくるので意識する人が
少ないだけ。

寡聞にして Lisp レベルのスレッドの実装が複数あるとは知らなかった。
商用 Lisp は大抵 OS のネイティブスレッドだろうしなぁ……。まぁ
Lisp レベルのスレッドだとあんまりマルチプロセッサだから〜とか
期待しないほうがいいんじゃないかな。ネイティブスレッドのほうが
どう見ても有利だろう。
>>139
>寡聞にして Lisp レベルのスレッドの実装が複数あるとは知らなかった。
すんません。嘘書きました。CMUCL 以外の処理系がネイティブである
事をあまりにも強調してるので、混乱してました。

>商用 Lisp は大抵 OS のネイティブスレッドだろうしなぁ……。まぁ
>Lisp レベルのスレッドだとあんまりマルチプロセッサだから〜とか
>期待しないほうがいいんじゃないかな。ネイティブスレッドのほうが
>どう見ても有利だろう。
御意。

ファイルサイズの件について、ECL はデフォルトで共有ライブラリ化
されるみたいなので Mac 以外でも試してみます。現状でも特に不満は
無いです。
>>141
俺にゃぁこーゆうのは複雑怪奇に見えるが,それでも、lisp よりはマシだとか思う
人も多いのだろうな。
GNUがm4なんて捨ててGuileをGNUツールの中心に据えるなんて話を
大分昔に聞いたんだけど、どうなったんだろう。親分の思惑とは
離れて、LISP嫌いのUNIXユーザが多すぎるんだろうな。arcなんてのも
最近は更新されてないし。
多過ぎるって程でもないんじゃないのかな。elispは結構使われてるし。
>>141
##の使い方見てて切なくなった(w
俺は元大したことないLisper。CLOSなんかでprogramming。
今はC++のtemplateを使ったgeneric programmingに萌え。
漏れは大したことのないC++コード書き。template使ってgeneric&generativeなprogramming。
最近興味本位で触ったLispのマクロにくらくらしてる。
リストが循環構造かどうか、って判定する方法ある?
いちいち全部比較してくよりは、GCのマーク&スイープみたいに
マーク付けながら辿っていった方がいいかな。
>>148
hare and tortoise
"tortoise and hare" algorithm は
guile/libguile/list.c の scm_ilength() を見たらよいよ。
SICPの例題をこなすのにお勧めのSchemeの処理系はありますか?
環境は、Win2000 です。
何でもいいに決まってる。
>>151
DrSceme が簡単でいいんじゃないの?
cygwin + gauche という手もあるけど。
>>153
漏れ、最初DrScheme使ってt-y-schemeやったけど、
売りのトレースとかが、初心者モード(ほとんど何にもできない)でしか使えなくて泣いた。
>>151
SICPのサンプルコードはSCMかMIT-Schemeだった気がするので、
Cygwinで動くようならこれが無難?

win2kならPetite Chez + ChezEditも良いかもしんない。
156151:04/02/15 11:17
MIT-Schemeってこれ http://www.gnu.org/software/mit-scheme/ ですか?
Windows binary 版をインストールしてみました。
EDwinって言うEmacs見たいなエディタも付属してます。

つか、殆どEmacs。。。
Lisp/Scheme やるには Emacs も覚えなあかんの。 _| ̄|○

Schemeの処理系って小さいイメージがあったけど
MIT-Schemeって一式で35Mbyteもあるのね。
>Emacs も覚えなあかんの。 _| ̄|○
Win環境の人からすると異常だけど、
UNIXのソフトって全体的にemacsのキーバインドに沿ったものが多いからね。
>>156
さあ、*nix文化へいらっしゃい。
今までM$に飼い頃されてたのはなんだったんだ、と開眼するから。
vi>>>>>>>>>>>>>>>>>>emacs
秀丸>>>>>>>vi
Emacs>>>>>秀丸

さてどうしよう。
162140:04/02/15 18:55
Scheme についても調べてみました。ネイティブコードコンパイル可能な処理系では、chicken と
mzScheme は Lisp レベルでの thread みたいでした。RScheme はサイトが落ちていて不明。

ECL で --enable-threads するとビルド出来ない(最新 CVS 版)のですが、Linux 限定なのかな。
>>157, 158
一応、vi (ex, ed) は使えるんですけどね。漏れって vi 信者。w
などと言いながら emacs のマニュアル本買って来ました。


Kahua セミナー逝った香具師、レポートしてください。
地方在住 lisper は逝きたくても逝けないのです。おながいします。
>>158
ウイソのプログラムでメシを食ってる漏れとしてはそんな事は口が裂けても・・・
166これってどうよ?:04/02/16 10:40
Pythonによるcommon lispのフロントエンド "lython"
http://www.caddr.com/code/lython/

スラドの記事
http://slashdot.jp/developers/04/02/15/1528254.shtml?topic=93

あくまで、Common Lisp風ね。だからScheme風といってもいいだろうし。
(import os)

(:= out "/tmp/lythontest")
(if (os.path.exists out)
    (os.unlink out)
  (print "target file does not exist"))

(:= f (open "/tmp/lythontest" "w+"))
(f.write "Hello World from Lython!")
pythonのライブラリが使えるlispモドキかな。
ちょっと前に話になったスクリプト云々の話は
これに食われそうだね。
ポータブルな実装としてはベースがpythonなら問題ないだろうし。
前も話題に出たけど、pythonと共存できて何か意味あるのか?

速度: pythonはバイトコード
ライブラリ: pythonよりもC/C++のライブラリの方が膨大
> ライブラリ: pythonよりもC/C++のライブラリの方が膨大

FFI が面倒なので Python のライブラリでウマーって事でしょう.
まぁ,中途半端な Lisp モドキよりは普通に Python 使ったほうが
いいような気がしますがね…
#define BEGIN { と似たような一抹の虚しさがただような。
ライブラリを手軽に使うのだけが目的なら、Common LispかSchemeと言語仕様を同じにしなくちゃね。
ただ、ここから新しい言語として羽ばたかせようというなら話は別だけど。
Arcみたいにね。

まぁ、ただ面白そうだからやってみたんだろうけど。
おまえらこんなとこでケチつけてないで、今 後 に 期 待 し と け
>>172 そんな言い方じゃ、話が面白くならないよ。今後に期待できるようなことは何かあるの?
pythonが超ポピュラーになってライブラリが暴発的に増えるとかいう展望を抱けw
lythonダウンロードしてみました。ウェブサイトやコードを見た限り、まだまだ、
孵化する日は先で、生まれたてのホヤホヤという感じです。

みんなが作るのが好きな俺Lispの1つですね。

しかし、よくSlashdotが取り上げたね。それが悪いというわけじゃないけど。
176175:04/02/17 17:13
あっ、つけるの忘れてた。最後にwをつけて読んでください。
(´-`).。oO(孵化してないのに産まれたて。。。)
(・A・)lython!!
大蛇は卵生だから、産まれてから孵るまで時間がかかるんじゃないの。

しかし、インデントのかわりにS式使ってる感じだね。

そういえば、Parrot上のSchemeはどうなったんだろ。Parrot自体が資金ショー
トという噂も聞いたこともあるけど。
えーとguileやgaucheは「組み込みLispライブラリ」としての用途も意図されているわけですが,
実際に組み込むためのHOWTO文書とかチュートリアルってあります?
けっこう検索したんだが見付からない.

guileを組み込んだGNUプロジェクトのアプリはいくつかあるけど,大き過ぎて見る気がしない.
なんか「Schemeで拡張できるtail(1)を作ってみました」みたいな文書ないもんですかね.
>>180 guileの現状は知らないんですが、すこし前までは、guile自体の発展速度が
速すぎて、非互換な変更とかがけっこうあって、アプリに組み込んだ人が苦労した
という話がありました。とかいうふうに一度、レッテルを貼られると、それを取り除く
のに苦労しますよね。GNUはマニュアルをちゃんと書く習慣があると思うんだけど、
guileのマニュアルにアプリへの組み込みチュートリアルないのかな?

>>179 つーか、Parrotをやってる人たちって金もらっているのですか?
ParrotがJVMレベルのバーチャルマシンとしてみんなに認められれば、オモロ。
>>181
とりあえず去年の今ごろのParrot/Perl6の紹介には金が足りないというのがあっ
た。http://www.newsfactor.com/perl/story/20748.html

CVSにはscheme用もあったけど動くのか不明。ぱっと見、まだ途中かなという
感じがした。H"なんで下して試す元気がないから、誰が試してくれるとうれし
い。

;; 遅れぎみ(婉曲的な表現)なんで、逆に誰かがどれでもいいから別のVM上に
;; Perl6を実装しちゃえば英雄になれるかも。
183180:04/02/19 01:04
>>181
GuileのinfoのPart 3がそれっぽいんですが,どうもイマイチ実感が...
マトモなサンプルになってないんですよ.
ドローソフトの組み込みにするために,いかに「図形」をSchemeオブジェクトとして
Cレベルで定義するかが主眼らしいんだけど.
そんな高尚なことよりとりあえずS式の設定ファイルを読みたいだけなのにな.
ま,がんばったらできそうなので文書にするかも.
>>180
Gaucheはドキュメントはまだ無いみたいだけど、インタプリタであるgoshが
「Gaucheライブラリのサンプルアプリ」という位置付けらしいのでソース見るのが早い。
goshはlibgaucheを初期化してrepl起動してるだけだから本当に小さいし。
185デフォルトの名無しさん:04/02/20 23:00
Gauche0.7.4.1 で gdbm はどうやって使うのでしょうか。
gdbm.so が ext/Makefile から外されてる
gdbm.c はコンパイルできない。エラー多すぎ
までは調べました
186デフォルトの名無しさん:04/02/20 23:04
半分解決

ndbm 使うと perl コンパチのファイルができたみたい・・
なので gdbmは不要となりました。
確か、configure時にgdbmの存在をチェックしてると
思うので、それが見つけられていないのでは。
gdbmが/usr/localとかにインストールしてあるなら、
./configure --with-local=/usr/local みたいにするとか。
恐れ入ります。
config.log 見て納得しました。
perl は p5-GDBM 入れないと駄目なんですね。
gdbm はあまり使われてないと。
multiple-value-bind の属性リスト版を書いたんですけど、
どうやったら gensym を使うように改良できますか?

使い方は、(setq alist '((a 2) (b 3))) と代入しておいてから
(alist-bind alist (print (+ a b)) (* a b)) を評価すると、
5 を印字してから 6 を返すような関数です。

現状はこんな感じです。
(defmacro alist-bind (alist &body body)
 (let ((alist-bind-internal-variable (eval alist)))
  `(multiple-value-bind
   ,(values (mapcar #'car alist-bind-internal-variable))
  ,(cons 'values (mapcar #'cadr alist-bind-internal-variable))
   ,@body)))
バッククオートを入れ子にして使うのがどうしてもうまくいかなくて
ほかと重ならない変数名で逃げてます。実用上は問題ないんですが
もっとスマートな解決策はないものでしょうか。
>>189
>5 を印字してから 6 を返すような関数です
マクロの typo です。
>>189
ちょっとあなたのと仕様が違いますが、昔書いたものを。

(defmacro alist-bind ((&rest vars) alist &body body)
(let ((tmp (gensym)))
`(let ((,tmp ,alist))
(let ,(mapcar #'(lambda (var)
`(,var (cdr (assoc ',var ,tmp :test #'eq))))
vars)
,@body))))

(setq data '((a . 1) (b . 2) (c . 3)))

(alist-bind (b c a) data
(list b c a))
=> (2 3 1)

(macroexpand-1 '(alist-bind (b c a) data (list b c a)))
=> (LET ((#:G219 DATA))
(LET ((B (CDR (ASSOC 'B #:G219 :TEST #'EQ)))
(C (CDR (ASSOC 'C #:G219 :TEST #'EQ)))
(A (CDR (ASSOC 'A #:G219 :TEST #'EQ))))
(LIST B C A)))
192189:04/02/22 22:00
>>191
let の変数定義をマクロ展開の結果に置き換えるマクロを書くわけですね。
勉強になります。alist-bind がレキシカルコンテキストを参照できるので、
こちらの方が優れてますね。その代わり、vars に与える変数一覧を事前に
与えないといけないので、今やりたい用途には使えないですね。

いま欲しいのは、destrucuring-bind の複数版で、1個の値に対して
パターンを複数与えることができるようなマクロです。最初のパターンに
うまくマッチしなければ次のパターンを試し、マッチしたパターンがあれば
そこで変数を束縛して、対応する式を順次評価して最後の式の値を返すと
いうような物です。最後のパターンにもマッチしなかったばあいは nil と
いうことで。
(let ((x 2))
 (dbind* (list (+ 3 4) 5)      ; 最初に評価して(7 5)を得る
  ((a b c) (list a b c))       ; マッチしないので実行されない
  ((a b) (incf x) (list a b x))))   ; (7 5 3) になる
というような dbind* がうまくできなくて困ってます。
まず値を集めて、後から展開するという方針が間違ってるのかもしれません。
どうしても評価のレベルが一致しないんですよね。
先に進んじゃってるとろスマンけど、>>189 ってちゃんと動くのか?
(setq alist '((a 1) (b 2)))
(alist-bind alist (print (+ a b)) (* a b))
とかいたファイルをコンパイルしたら、alist-bind の展開時に
まだ alist がバインドされてないとかでエラーになるような…。
>>192
パターンが単純であればこんな感じかな?
destructuring-bind と同等のことがしたい場合は、
もっと複雑なことをしなければならないが。

(defmacro dbind* (list &body forms)
 (let ((vals (gensym)))
  `(let ((,vals ,list))
    (case (length ,vals)
     ,@(mapcar #'(lambda (form)
            (let ((vars (car form)))
             `(,(length vars)
              (let ,(mapcar #'(lambda (var)
                       `(,var (pop ,vals)))
                     vars)
               ,@(cdr form)))))
          forms)))))
195189:04/02/22 23:50
>>193 やってみたら、compile-file でエラーが出ました。load したら 3 が印字されて t が
返りましたけど。>>192 がうまく動かないはそのせいなのかもしれません。
196189:04/02/23 00:21
>>194 すみません、調べてみたら destructuring-bind よりもっと複雑な仕様でした。
例えば (dbind* '(a (2 3 4)) (('a (b 3 c)) (+ b c))) がマッチして、6 が返されます。
シンボル以外のアトムや quote されたシンボルをネストした S 式の中に書くことができ、
パターンの同じ場所に eq になるアトムが存在するときに、マッチするものと見なされます。
上の例の 3 や a がそれです。このとき、a はシンボル a に束縛されます。
>>196
ふむ、若干面倒だね。とりあえず、パターンのシンボルに
リストがマッチするものとして書いてみた。

(defun match (vars vals)
 (do ((vars vars (cdr vars))
    (vals vals (cdr vals)))
   ((or (null vars) (null vals))
    (not (or vars vals)))
  (let ((var (car vars))
     (val (car vals)))
   (unless (cond ((eq var val) t)
          ((symbolp var) t)
          ((atom var) nil)
          ((eq (car var) 'quote)
           (eq (cadr var) val))
          ((atom val) nil)
          (t (match var val)))
    (return)))))
198197:04/02/23 01:50
続き

(defmacro dbind* (list &body forms)
 (let ((dummy (gensym))
    (vals (gensym)))
  (labels ((bind (vars vals)
        (mapcan #'(lambda (var)
              (cond ((atom var)
                 `((,(if (symbolp var) var dummy)
                   (pop ,vals))))
                 ((eq (car var) 'quote)
                 `((,(if (symbolp (cadr var)) (cadr var) dummy)
                   (pop ,vals))))
                 (t (let ((temp (gensym)))
                   `((,temp (pop ,vals))
                    ,@(bind var temp))))))
            vars)))
   `(let ((,vals ,list))
     (cond ,@(mapcar #'(lambda (form)
               (let ((vars (car form)))
                `((match ',vars ,vals)
                 (let* (,@(bind vars vals))
                  ,@(cdr form)))))
             forms))))))
Gauche0.7.4.1をインストールして
(string-concatenate-reverse '(" must be" "Hello, I") " going.XXXX" 7)
っていう式を評価させたらエラーになったんだけど、
SRFI-13ではそういう実装も許されてるの?
それともインストール失敗しただけ?
>>199 バグじゃん? wilikiにでも報告するよろし。
201デフォルトの名無しさん:04/02/23 18:37
perlのスクリプトとをgaucheに移植してるんだけど
perlとgaucheの対応表なんてどっかにありませんか。
とりあえず
open(STDERR, ">&STDOUT")
$| = 1
$!
がわからない。
>>199
ttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_236.html
optionalついてないのがGaucheでの仕様なんじゃないの?
つーかトランスレーター作ろうぜ
perlよくわからない
Perl を勉強して書き直すほうがためになるよ。きっと。
Perlを知らずにトランスレータもないだろうに
>>201
$| = 1 と $! の例を強引に考えてみた(dup は不明)。詳しい人のフォロー希望。

(with-error-handler
(lambda (e) ;; e は例外オブジェクト($! のようなもの)
(format (current-error-port) "ERROR: ~a¥n" (ref e 'message)))
(lambda ()
;;(with-input-from-file *program-name* ;; 正常パターン
(with-input-from-file "nowhere file" ;; エラーパターン
(lambda ()
(set! (port-buffering (current-output-port)) :full) ;; $| = 1 ?
(port-for-each
(lambda (line)
(display line)
(newline))
read-line)))))

C がわかるなら、リファレンスの C と Scheme の対応一覧が役に立つかも。
勘で。

----
$|=1;
open IN, "foo.pl";
print while (<IN>);

-----
(call-with-input-file "foo.scm"
(lambda (in) (copy-port in (current-output-port)))
:buffering :none)
208こゆことかな...?:04/02/26 11:29

------------------------------
#!/path/to/gosh

(display "Content-type: text/plain\r\n\r\n")
(display "Test.\r\n")

(with-error-handler (lambda (e) (print #`"***ERROR: ,(ref e 'message)") (exit 1))
(lambda () (with-input-from-file "no_such_file" (lambda () (print "File opend.")))
))

------------------------------
#!/path/to/perl

open(STDERR, ">&STDOUT");
$| = 1;

print "Content-type: text/html\n\n";
print "This is a test.<BR>";

open(IN, "no_such_file") || die "***ERROR: ", $!;
close(IN);
恐れ入ります。
簡単に行かないというのがわかりました。
dup と flush は gosh本体に仕込んで起動時オプションで処理する。
$! もグローバル変数に組み込んでしまうのが簡単か
別の言語なんだし全部直訳はできないのは当然じゃん。
いろいろ解説してくれた人がいたんで代わりにまとめ。

open(STDERR, ">& STDOUT") なら
(with-error-to-port (current-output-port) THUNK)

$| = 1 じゃなくて autoflush を使うべきなんで
((setter port-buffering) PORT :none)

$! でメッセージが欲しいのなら with-error-handler
でエラーをキャッチして (slot-ref ERR 'message)。
これは eval で die をキャッチするのをイメージ。
211189:04/02/27 08:09
>>197-198
ありがとうございました。遅くなりましたが、自分の欲しい内容への改造が
やっとできたのでお伝えします。
比較対象がアトムやquoteされたアトムの場合の動作を改善するため、
トップレベルだけを別扱いにすることにしました。
(defun match0 (vars vals)
(cond ((symbolp vars) t)
((atom vars) (eq vars vals))
((atom vals)
(and (eq (car vars) 'quote) (null (cddr vars)) (eq (cadr vars) vals)))
((eq (car vars) 'quote) nil)
(t (match vars vals))))
という関数を追加し、dbind* の labels で定義している局所関数にも
((bind0 (vars vals)
(cond ((atom vars) (if (symbolp vars) `((,vars ,vals))
`((,dummy ,vals))))
((eq (car vars) 'quote) `((,dummy ,vals)))
(t (bind vars vals))))
という定義を追加します。そして dbind* 末尾から3,4行目の
`((match ',vars ,vals)
(let* (,@(bind vars vals))
をそれぞれmatch0, bind0 の呼び出しに置き換えます。

動作の変わった例としては、以下のようなものがあります。
(dbind* 3 ((4) 5)) ; エラーにならずにnilを返すようになった
(dbind* '(3 7) (any any)) ; (3 7) を返すようになった
(dbind* '(3 7) ('any t) ; 7 を返していたのがnilを返すようになった
212:04/02/27 16:48
131 : :04/02/10 19:06
(define make-structure
(lambda (n) (lambda (d) (lambda (m) ((m n) d)))))
(define select
(lambda (c) (c (lambda (a) (lambda (b) a)))))

の意味がいまいちわかりません。
例えば、
(select ((make-structure (+ 7 5)) (- 9 3)))
とした時のラムダ計算の課程を教えてくれませんか。

132 :デフォルトの名無しさん :04/02/10 19:17
>>131
n := 7 + 5 => 12
d := 9 - 3 => 6
c := (lambda (m) ((m 12) 6)) => #<closure>
m := (lambda (a) (lambda (b) a)) => #<closure>
a := 12 => 12
b := 6 => 6
=> 12

となっているけど、もう少し詳しく説明できる人いますか?
ラムダ計算が今一よくわからないもんで。
>>212
詳しく説明できるが

聞 き 方 が 気 に 食 わ な い
関数適用で束縛変数を引数で置き換えればいいんだよ。
make-structure = λn.λd.λm.((m n) d)
select = λc.(c λa.λb.a)

(select ((make-structure (+ 7 5)) (- 9 3)))
= (select ((make-structure 12) 6))
= (select ((λn.λd.λm.((m n) d) 12) 6)) ; nを消す
= (select (λd.λm.((m 12) d) 6)) ; dを消す
= (select λm.((m 12) 6))
= (λc.(c λa.λb.a) λm.((m 12) 6)) ; cを消す
= (λm.((m 12) 6) λa.λb.a) ; mを消す
= ((λa.λb.a 12) 6) ; aを消す
= (λb.12 6) ; bを消す
= 12
216デフォルトの名無しさん:04/02/27 23:36
私はslot-refでCLOS止めました
letで囲めばいいじゃん!
217デフォルトの名無しさん:04/02/28 02:39
なんか物凄い基本的なことかもしれないですが、
Schemeの末尾再帰の動きが良くわからないのです。
どなたか教えてくださいませんか

(define fact-tail
(lambda(n x)(if( (= n 0) x
(fact-tail(- n 1)(* n x)))))

階乗を求めようとしているのはわかりますが、
これに対して、(fact-tail 5 1)
を与えたら何で120が導けるのかいまいちわからないです。

(fact-tail 3 1) として
どういう風に再帰展開されるのかわかるかた
教えていただけませんでしょうか。
>>217
1ステップずつ考えれば分かるだろ
>>217
(fact-tail 3 1)
(fact-tail (- 3 1) (* 3 1))
(fact-tail 2 3)
(fact-tail (- 2 1) (* 2 3))
(fact-tail 1 6)
(fact-tail (- 1 1) (* 1 6))
(fact-tail 0 6)
(= n 0) が真になるので 6 を返す

末尾再帰は C などの for ループと本質的に同じ
int fact(int n){
    int x=1;
    for(; n--; 0!=n) x*=n;
    return x
}
220217:04/02/28 03:05
>>219
ありがとうございます。ぼけてました。引用もとの文には
(if (= n 0) x
と書いてあるのに手持ちのメモに
(if (= n 0) 1
と書き写してしまいそっちをみていてはまってしまいました
すっきりしました。おさわがせしてすみません。
221217:04/02/28 03:11
>>219
引用元はSoftwareDesign の2000年9月号のScheme特集でした。
「末尾再帰を使うとスタックを消費しない」
と書いてあったけどイメージしにくかったんですが
for ループに対応してると考えるとわかりやすいですね。
繰り返しを末尾再帰に直すと、変数代入の様な
明示的副作用を書なくて良いというのがあって、
Schemeではset!をほとんど使わずにコードが書ける。
schemeに限ったことじゃないような。
まあ、"俺Lisp"的な実装はは末尾再帰最適化がなかったりするけど。
>>223
Schemeは言語仕様上いつでも安心して使えるってことだよ。
例えばtail recursionがproperじゃないCommonLispで
「常に末尾再帰を意識しながら書く」って奴がいるとも思えないが。
>>216
言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?

>>224
大抵のプログラマは意識はしてると思いますが。
末尾再帰の話が出てこない CL の入門書は見たことないですし。
CL だと最適化オプション下げれば末尾再帰の最適化が
OFF になってデバッグしやすくなるし。
Emacs LispやCommon Lispを主に使って、Schemeはあまり使わない俺の場合だと、
再帰呼び出しが末尾にあるかどうかは最初はほとんど気にしません。

読みやすさや見ための綺麗さを優先して最初はコーディングします。

再帰を使う時は、スタックの消費量が問題になるほど、呼び出しが深くなるか
どうかには注意します。そして、CLを使っているときは、もし再帰呼び出しが
末尾位置にあれば、ああ、スタックの消費量を気にしなくてもいいかな、という
考えが頭に浮かびます。
227225:04/02/28 16:16
> 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?
いかん、丁寧に直したら副作用で日本語が壊れている……

>>226
末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。
>>227
>末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。
R5RSに定義されている「末尾位置」のつもりだったんですけど?
229デフォルトの名無しさん:04/02/28 16:45
>>227
> 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?
あんた、いい人だ!
でもgoshに無いのでやっぱりCLOS止め
>>228
スマン。末尾位置ってはじめて聞いたもんで。tail context の事なのか?

>>229
なんだそりゃ! 無いならお前が作れ!
>>230
> tail context の事なのか?
そうです。不正確でしたね失礼しました。今、R5RSで確認したんですけど、
tail contextが正しい用語みたいですね。覚えておこう。ちなみにtail contextの
日本語定訳はあるのかな?

gaucheでゴーシュ。俺はしばらく「ガウチェ」と発音していたよ。
>>225
末尾呼び出しを思いっきり使えるかどうかって、
コーティングスタイルがまるで変わってくると思うんですが、

>ttp://www.swiss.ai.mit.edu/~jaffer/hobbit_4.html
(define (cpstak x y z)
 (define (tak x y z k)
  (if (not (< y x))
    (k z)
    (tak (- x 1)
       y
       z
       (lambda (v1)
        (tak (- y 1)
          z
          x
          (lambda (v2)
           (tak (- z 1)
              x
              y
              (lambda (v3)
               (tak v1 v2 v3 k)))))))))
 (tak x y z (lambda (a) a)))
;;; call: (cpstak 18 12 6)

たとえばこういう内包挟んだ末尾再帰もCommonLispコンパイラが
ちゃんと末尾として認識するのかなと。
233デフォルトの名無しさん:04/02/28 17:18
>>230
いや、おれは「letで囲めば良い」を布教させる事に全力を傾けたい
だから、もう一度、キョンキョンにこの歌を歌ってもらおう

(キョンキョン)おまえら!一緒に歌ってくださーい

♪defineの次に、letで囲めばぁー
いーじゃん♪ (見逃してくれよー)
いーじゃん♪ (見逃してくれよー)

♪作ったlambdaの引数はいつもこれ→(msg . args)
いーじゃん♪ (メッセージ送れよー)
いーじゃん♪ (メッセージ送れよー)


(キョンキョン)よし、分かったな。じゃあ解散!
↑バカ?
>>232
大抵のコンパイラは普通に認識するよ。
徹夜で気でも狂ったか?
ワロタ
>>232 俺はこういうコーディングは思いつかないと思うけど、schemerの人って
こういうコーディングをよくするの? 見ためは、綺麗だよね。
>>232
そういうコードが安心して使えるかどうかっていうと駄目だろ。
CommonLispはコンパイラの最適化って点でインプリメンタの気まぐれなわけだし。
コーティングスタイルにまでは及ばない。
>>238
CPS(232みたいなk=continuationを渡していくやつ)はよく使うよ。
241デフォルトの名無しさん:04/02/28 17:40
♪defineの次に、letで囲めばぁー
春はまだ先だぞ
最適化部分は処理系依存なだけで。 C とかだって最適化は規格で決まってなくても
プログラマは処理系のマニュアル見て安心して使うだろう?末尾再帰の最適化が完全
に良い事づくめなら Scheme みたいに規格で決めちゃってもいいかもしれんけど,デ
バッグがやりにくくなるからなぁ……

でも普通は処理系が対応してりゃ安心して使えるだろう。大抵のコンパイラは末尾再
帰の最適化機能を備えているわけだ。以前 c.l.l でも出ていたがやっぱ最適化オプ
ションに「末尾再帰の最適化」を設けるべきだろうなぁ。規格以外は一切使わないと
いうポリシーもありだと思うけどね。
244sage:04/02/28 17:45
(見逃してやれよー)
>>243
デバッグがやりにくくなる?
どんなデバッグしてるのさ
ログ出すだけじゃないの?
アセンブラ出力しておっかけてるんだろ
xyzzy で tail recursion が遅いのは大変残念な思いがします.
関数トレースしたり、エラーがでたらバックトレースみたり、
スタックフレームのぞくだけだけど…。ひょっとして「ログ出す」
ってのが普通なの?漏れ Lisp の正規の教育受けてないので
常識には自身がないんだよね。
s/自身/自信/
どうやら国語も勉強しなおしたほうがいいようだ。吊ってくるわ。
所詮はエディタだし。
Lispの正規の教育受けてる人なんてほとんどいないだろ。
Java/C/C++でさえ書籍orWebの情報だけでやっていく人がたくさんいるし。
正規の教育ってなんだ?(w
>>245 のデバッグ手法を教えてください。漏れも最適化したらデバッグ用
情報が減るのは当たり前だと思ってたんだけど。Scheme では関数呼び出し
情報とかはあんまりデバッグに使わないんですか?
schemeも、トレース実行すると末尾再帰の呼び出しが
普通の再帰みたくツリー上に出るんじゃない?
デバッグでなんか大きな違いってあるの?
>>253
ログ出しについての説明か?
ループの中で変化する変数を表示するだけですが。
>>254
え、何という処理系ですか?デバッグ周りって処理系依存ですよね。
トレース実行って特定の関数だけとか全体とか指定できるんですか?
>>255
それだけじゃキツイなぁ。再帰がふか〜い所でエラーな時とか。
やっぱエラーになってデバッガが立ち上がったところから手繰って
いけたほうが便利だと思いますが。私の使ってる処理系は debug レベル
を 2 以上にすると末尾再帰の最適化が行われなくなるのでエラーに
なった時点からフレームをたどっていけますが…。
traceなら処理系というかマクロでできるよ
デバッグがらみの話題で、処理の流れを目で追うことができるソースレベルデバッガが
売り物の処理系でも付いていないというのは、要望が少ないからなのかな? たしかに
バックトレースの表示などの伝統的なやり方でもデバッグできるけどね。あと、要所
要所に(format t "my-var = ~S~%" my-var)を挿入とか。俺はPerlでもこのやり方で
デバッグするね。Data::Dumperという便利なものもあるし。

俺はEmacs Lispではソースレベルデバッガであるedebugをもっぱら使ってdebugはほとんど
使ったことがない。
stepじゃ駄目なの?
>>259 いや、stepでもたぶん同じことができると思うけど、エディタでコード全体を
見渡しながらデバッグできると気持がいいんだよね。ついでに、監視したい式なんかを
複数登録しておいて常時、その値を表示させておくとか。ブレーク時に画面上で変数の
上にマウスポインタを置くだけで、値が表示されるとか。

つまり、昔かたぎの人からみれば、俺は現在のIDEに毒されているヘタレということか。プ
slimeに期待かな。
現時点でもエラー箇所の表示とか凝ったことできるし。
名前がスライムっぽくて嫌
メタルスライムがあらわれた
メタルスライムAは逃げ出した
バックトレースってデバッグでは便利だと思うんだけど Scheme の人は
要らないのかな?拾ってきたプログラムがエラー吐いてとまったときと
かバックトレースが空だとちょっと悲しいんだけど。

>>257
なんか安心して使える trace の実装とかあります?処理系によっては
付いてるみたいだけど。付いてないのも結構あるので困るんですが。
>>264
そういうのはどう転んでも処理系依存だしなあ。
いつでも外せるassertみたいなの埋め込むぐらいしか。
昔さわったminischemeのトレースはトレース対象を出力用の
フック関数で挟む方式だった。後付けマクロ。
関数突入・脱出でトレース出力するので、
トレース対象関数は自然と末尾再帰が外れて山形の出力になる。
ただし内部関数、名無し関数には使えない。
266デフォルトの名無しさん:04/03/01 12:48
foo,bar,baz,mumble,glorp
これって何に由来してんだぁ?
>>266
foo と bar は RFC で定義されているよ
RFCは冗談も混ざっているからなぁ。
269デフォルトの名無しさん:04/03/01 23:33
MLの有名な本より写経
A Lisp hacker says: 'Since the integers are a subset of the
real numbers,the distinction between them is wholly artificial
--foisted on us by hardware designers.ML should simply provide numbers,
as Lisp does, and automaticaly use integers or reals as appropriate.'
Do you agree? What considerations are there?

MLerはいろいろ言うだろうが、Lisperはどう答える?
なにを勿体つけてるんだ? ML for the working programmer の ex2.2
って言えばいいじゃん。翻訳もせずに丸投げなあたり宿題か何か?

まぁ実際 ML にまでそうしろと言う Lisper は少ないと思うよ。
NetNews でも ML の数値周りが気に食わないと噛み付いてた Lisper
は居たけど ML に Lisp 式の数値にしろ!とまで言うやつぁ少ないだろ。
理由はなんで ML がそうしてるかを考えればわかるだろ。
271デフォルトの名無しさん:04/03/02 00:08
まあ、そう熱くならんでも。
型無しのありがたみって何だろうな、というネタフリなんよ。
本からのコピペ程度でいちいち age るのがウザイんだよ。
ML スレでやれば?型無しのありがたみは無いってことでいいからさ。
デバッグ方法が聞けてウマーと思ってたのに、そんなつまらんネタ振るな。
だいたいここは Lisp 総合スレなんだ、型有りの Lisper 連中からすりゃ
ハァ?って話題だろーが。全部の LISP 型無しという狭い見識をなんとか
してから出直してきてくれ。
dat 落ちした前スレを html 化してもらいました。

LISP Scheme Part9
http://ruku.qp.tc/dat2ch/0403/01/1069594582.html
274デフォルトの名無しさん:04/03/02 12:24
強い型付けのないSchemeのような言語には
良いところもあるよなぁ、ということを言いたかった
だけなんだがなぁ...
まぁ、あんまり気にすんなや。
健全なマクロ VS 不健全なマクロ

1 :デフォルトの名無しさん :04/03/02 19:14
(ちょっと入れ子でスレ立たせてくれや)
健全なマクロって不便だし、不健全なマクロの貸しコートもささくれ立っていてなんかイヤ。
だから、健全なマクロに「不健全」ていうオプション欲しいよな?
お前ら、どう思いますか。

健全なマクロ VS 不健全なマクロ

2 :デフォルトの名無しさん :04/03/02 19:15
2get
「不健全」というと健全なのより悪いイメージがあるからな〜。
個人的にはつまらないマクロと楽しいマクロだな。変数キャプチャ
があった方がいろんな意味で楽しい。はまるとデバッグも愉快な事
になるしな。アヒャヒャヒャヒャ。
define-unhygienic-syntax ;-)
defmacro/define-macroの方が簡単だし構造見えるし作りやすい。
gensym命。でもSRFIのhygienicマクロそのまま読めない罠。
まあhygienic作る暇あったら正規表現でも統一しなさいってこった。
>>278
define-boring-macro/define-amusing-macro とか?
まぁ変数キャプチャを防いだところで世間の見る目はかわらんよね。
R... な言語の作者だってマクロはダメポって言ってたけどこれは
変数キャプチャ云々の話じゃないわけだし。
>>281
世間の見る目って?どんな風に見られてるの?
m@zはどうしてマクロはダメポって言ってるの?
>>282
「神聖なる構文を一般利用者が触るなんてとんでもない。そんなの混乱の元だよ!」
ユーザビリティの問題だとかいってたあたりの事だと思われ。確認してないから
不正確かも知れんが探すのマンドクサ(括弧の話だったかも?)
あのひとはユーザビリティって言葉好きだよね
その割にRubyて妙な構文だらけだね
え、LISPには劣るって!?
あぁ!?神聖なる構文?

しゃらくせえ。

おれ様が欲しいのは圧倒的な自由なんだよ!
Schemeは聖域無き言語だぜ!

ユーザビリティーだと?

ヌルイ!ヌルイよそれ!
ちょーヌルイよ!

あーヌルイ。母さーん、火ぃつけてくれ。

ふぅー、ぬるぽ。
C言語みたいな、ちょっと小汚い言語の方が好かれるかもなあ
vimのVIlispってプラグインまともに動かせてる人いる?
設定のコツを教えてくれ。
\esで評価しようとするとvimが固まるんだけど…
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>286

Lispをよく知る前は、Lispは再帰が命と聞いた。

Common Lispを習ったら、再帰はC++と同じくらいしか使わないなと思った。

Schemeを習ったら、「やっぱりLispは再帰が命?」と思った。
CPS (continuation passing style)ってSchemerの人達が発明したコーディングスタイルなのかな?
末尾再帰の最適化が保証されていないと、いやがる人がいそうな書き方だよね。

実際は、メモリを結構積んでいるマシンが増えたから、再帰が多少深くなったって、困る場面ってそうそう
ないような気もするけど。
コンパイラ関連でよく出てくるよ>CPS
>>291
CPS ってもう少し汎用的な概念だと思う。
state パターンも原始的な CPS だと言えなくもない。

末尾再帰を使うのはたまたま scheme が末尾再帰を正当化してくれているから。
http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm
> System Class STANDARD-CLASS
> Class Precedence List: standard-class, class, standard-object, t
(subtypep 'standard-class 'standard-object)
=> NIL T ;; clisp
=> NIL T ;; cmucl
=> T T ;; ecl
=> T T ;; lispworks
なにこの処理系たち…

久しぶりにaclをインストールしたら、
./alisp
dlopen(/tmp/acl62_trial/libacli623t.so, mode) error: /tmp/acl62_trial/libacli623t.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
と言って立ち上がらない…
CVS 鯖のトラブルで遅れれてるけど CMUCL 19a は↓だよ.がんがれ Martin !
(Martin は週末に時間があったらがんがるそうです)

CLOS based on Gerd's PCL 2003/06/18 09:23:09
* (subtypep 'standard-class 'standard-object)
T
T
296294:04/03/05 15:47
clisp 2.28 (released 2002-03-03)
cmucl CLOS 18e (based on PCL September 16 92 PCL (f))
ecl 0.9c
lispworks Version 4.3.6
でした。

そういえば、cmuclはCLOSをだれか(Martinていう人?)が速くなるように書き直し
ているという話を聞きました。

clispとか報告したほうがいいのかな…。fixも一緒じゃないとなんとなく気が引ける
んだよね。一般的にconformance bugって重箱の隅をつつきだしたら結構あるし。
あれっ、clisp 2.28って古すぎですね。今は2.32か。
GNU CLISP 2.32 (2003-12-29)
[1]> (subtypep 'standard-class 'standard-object)
NIL ;
T
いや今 CMUCL はメインの CVS 鯖がダウンしてて Martin タソが準備してるってだけ。
はやくなおらないなか〜。PCL をいじってたのは Gerd Moellmann です。だから Gred's PCL。
19a からこっちになる予定。
今、cl-ppcreをDebianシステムにインストールしたんだけど、
apt-get install cl-ppcre
で、clisp、cmucl、sbcl-mtなどインストールされているコンパイラ用にちゃんと
コンパイルしてインストールくれるんだね。

しばらくDebianにさわってなかったけど、なんだか、とんでもなく便利になってきている気がする。
debパッケージになっているライブラリも多いし。Debian使っているLisperが多いのかな。
たしかcmuclの開発者もdebianの人が多かったよね。

あと、Redhat(Fedora?)だとメモリチェッカか何かの影響でcmuclが動かない(かった)という話も
きいたことがあるね。今でもそうなのかな?
>>299
同意。
早く復活しないとSBCLに(ry
たしかに、現状でSBCLの方が開発に勢いがあると言ってた人がいたな。
CMUCL派生なのに、ベンチマーク結果が大きく違うのは何でだろ。
http://www.cons.org/cmucl/benchmarks/index-print.html
>>303 俺にはだいたい同じような結果に見えます。sbcl vs cmucl
block compile って何ですか?
>>305 どんな文脈で、でてきた言葉ですか?
たぶんcmuclじゃないかな。
ftp://ftp.averillpark.net/cmucl/doc/cmu-user/compiler-hint.html#toc161
を熟読。
Gaucheはmingw用でいいからWindows向けのmakefile書いて欲しいなあ。
cygwin入れてconfigure環境作るのマンドクサ
>>309
確かに。漏れもGaucheのためにcygwin入れたよ。
310305:04/03/08 22:55
>>306-307
レス遅くなりまして済みません。SBCL と CMUCL の比較で、SBCL はまだ block compile
が出来ないよみたいな記述があったので、お聞きしました。

>>307
どうもありがとうございます。読ませて頂きます。
block compileには何のメリットが?
312189:04/03/12 00:29
以前、>>197-198 でコードを提供していただいた者です。
>>211 の後で、ドットリストも扱えるように改造して、欲しい仕様の物ができました。
それを、いま移植作業を進めているプログラムに同梱したいのですが、著作権表記や
ライセンスなどでご要望がありましたらお知らせください。
(元プログラムがBSDライセンスなので、それと同じで配布できるとありがたいのですが)
313197:04/03/12 01:37
>>312
好きにしていいよ。
314デフォルトの名無しさん:04/03/12 16:59
このスレ廃れたな....
わざわざ言うほどでもない
いや、初心者スレの登場でレスが分散して、ここ数日何か寂しいなあと感じたので。
淋しがりやさんなのね
新ネタがくれば ワッシワッシ盛り上がるよ
両方見てれば別に寂しくないじゃん。
ところで >>189 は何を移植してるんだろ。
期待して待つぞ〜
↓新ネタ登場!
321189:04/03/12 22:37
>>321 リンク先みても(12.1.4というアンカー名が見つからない)、いまいち分からないのですが、フォント関連のアプリですか?
なるほろ
#+cmu
(loop for i from 128 to 255 do (set-syntax-from-char (code-char i) #\a))
みたいに処理系固有の処理は *features* を使うとイイと思われ。
326デフォルトの名無しさん:04/03/13 21:52
こういうのを高階関数を使って綺麗に書けませんか?
(lambda (a b) (> (car a) (car b)))
>>326
逆に汚いかも
(lambda (a b) (apply > (map car (list a b))))
(> a b :key #'car)

みたいに書きたいということじゃないの。
329326:04/03/14 00:03
説明不足ですみません。↓こういう用途で使いたいのです。
(sort '((5 a) (3 b) (4 c))
(lambda (a b) (> (car a) (car b))))
map,cut,apply,compose等を使って相当考えたんですが
lambdaを使わないで表現できません・・・
綺麗or簡潔にするのは無理な気がしました。
でも汚い例ですら考えつかなかったので悔しいです。
330 :04/03/14 01:35
(define (cons x y)
(lambda(m)(m x y)))

(define (car z)
(z (lambda (p q) p)))

としたとき、(car (cons x y)) が x を生じることを
証明せよ、とSICPに言われたんですけど、よくわからんのです。
頭がこんがらがって。
mzscheme というのを使ってるのですが、動きを追うための
機能ってないんでしょうかね。
言語レベルを落とせばトレースできたような気がしなくもないが
普通に式変形してけばOKかと
(car (cons x y))
=> (car (lambda (m) (m x y)))
=> ((lambda (m) (m x y)) (lambda (p q) p)))
=> ((lambda (p q) p) x y)
=> x
332 :04/03/14 01:59
>>331
あ〜、なるほど。ありがとうございます。
すっきりしました。わたしまだ基本ができてないっすね。
精進します。
>>329
(sort '((5 a) (3 b) (4 c)) #'> :key #'car)
334326:04/03/14 15:16
>>333
おおっ ありがとうございます。
Schemeは無理ですか?
sort関数自体の仕様による。
どうしても必要なら
(sort '((5 a) (3 b) (4 c)) > car)
という引数を受け付ける様にするとか。
car>という関数でも作るとか。
(lambda a (apply > (map car a)))
337326:04/03/14 16:04
>>336
こんなことができたのですか。これなら満足です。
皆さんどうもありがとうございました。
338 :04/03/14 23:11
(define (reverse ls)
(if (null? ls)
ls
(append (reverse (cdr ls))(list (car ls)))))

とやると、リストがさかさまになるらしいのですが、動きは
どうなるのでしょう。
最初の引数が(1 2 3)として、
(append (reverse (cdr (1 2 3))(list (car (1 2 3))))
(append (reverse ((2 3))(list (1)))
(append (reverse ( (cdr (2 3)))) (list (car (2 3))))
(append (reverse (3))(list (2)))
となって、あれ?となります。けど実行するとさかさまになっている
なんかわからないです。だれか動き方を教えてください!
>>338
(reverse '(1 2 3))
(append (reverse '(2 3)) '(1))
(append (append (reverse '(3)) '(2)) '(1))
(append (append (append (reverse '()) '(3)) '(2)) '(1))
(append (append (append '() '(3)) '(2)) '(1))
(append (append '(3) '(2)) '(1))
(append '(3 2) '(1))
'(3 2 1)
340 :04/03/14 23:39
>> 339
あ!
append 自体が入れ子になるわけですね!
やっとわかった!ありがとうございました!
だれか、これ知っていますか? ECLと似たアプローチだと思うけど、評判はあまり聞かないな。
WCL 3.0 - Embeddable Common Lisp for Linux
http://wcl.kontiki.com/
何でもいいから情報キボンヌ
前スレ 422 からの Y combinator は面白い。
関係ないけど、クロージャをオブジェクトと見立てて self や this 相当の機能を実現しようと
するとマクロを使うか引数で渡してあげるしかないのかな。
>>342
letrec とか使えば、とりあえず自分を参照できるけど。

(let* ((foo (let ((val 1))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)))
self))
(bar (let ((super foo)
(val 2))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)
((eq? sym 'super) super)
(t (super sym))))
self)))
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))

=> (2 2 1)

とか、こういう話?
>>343
そっか、let で括ってあげれば良いんですね。lambda だけでと考えてました。
頼むから、CMUCLのCVS早く復旧してくれよ。
もう二ヶ月以上も経過してるぞ。
ミラーは全部生きてるわけだし普通のユーザーにはそれほど不都合は
無いでしょ。Martin タンだってボランティアなんだしあまりワガママを
言うもの気の毒じゃん。どうしても文句言いたきゃ cmucl-devel で騒ぐ
ほうか良いと思われ。
>Martin タンだってボランティアなんだしあまりワガママを言うもの気の毒じゃん。
なのに
>どうしても文句言いたきゃ cmucl-devel で騒ぐほうか良いと思われ。
ってのは一番ヤバい選択なような。
自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら
黙ってたほうが賢明かと。別に配布が完全停止ってわけでもなくデベロッパーは
黙々と作業してるわけで。でも建設的な提案(回線とセットアップ済みハードウェア
を提供とか)があるなら言ってみれば。
>自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら黙ってたほうが賢明かと。
俺はそうは思わない。以上

>でも建設的な提案(回線とセットアップ済みハードウェアを提供とか)があるなら言ってみれば。
なんで建設的な話?
不毛な雑談を認めないのかよ。
建設的な提案があればこんなところではなくcmucl-develへ投稿するところだが。
Lisperはまじめっこが多いから不毛な雑談はできません
         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!   
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・   
                                             
            ,. -─- 、._               ,. -─v─- 、._     _
            ,. ‐'´      `‐、        __, ‐'´           ヽ, ‐''´~   `´ ̄`‐、
       /           ヽ、_/)ノ   ≦         ヽ‐'´            `‐、
      /     / ̄~`'''‐- 、.._   ノ   ≦         ≦               ヽ
      i.    /          ̄l 7    1  イ/l/|ヘ ヽヘ ≦   , ,ヘ 、           i
      ,!ヘ. / ‐- 、._   u    |/      l |/ ! ! | ヾ ヾ ヽ_、l イ/l/|/ヽlヘト、      │
.      |〃、!ミ:   -─ゝ、    __ .l         レ二ヽ、 、__∠´_ |/ | ! |  | ヾ ヾヘト、    l
      !_ヒ;    L(.:)_ `ー'"〈:)_,` /       riヽ_(:)_i  '_(:)_/ ! ‐;-、   、__,._-─‐ヽ. ,.-'、
      /`゙i u       ´    ヽ  !        !{   ,!   `   ( } ' (:)〉  ´(.:)`i    |//ニ !
    _/:::::::!             ,,..ゝ!       ゙!   ヽ '      .゙!  7     ̄    | トy'/
_,,. -‐ヘ::::::::::::::ヽ、    r'´~`''‐、  /        !、  ‐=ニ⊃    /!  `ヽ"    u    ;-‐i´
 !    \::::::::::::::ヽ   `ー─ ' /             ヽ  ‐-   / ヽ  ` ̄二)      /ヽト、
 i、     \:::::::::::::::..、  ~" /             ヽ.___,./  //ヽ、 ー        
別に 348 の見解をそんなに気にする事はないだろう。
不毛な雑談でもオモシロければイイ。同じネタのループはイクナイ。
で CVS の復旧マダーな話は「こんなところ」でも既出なわけだが。
じゃあ、次はCVSのクラッキンg(ry
>>344
展開してみた。

((lambda (foo)
((lambda (bar)
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))
((lambda (super val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1)
((eq? sym 'super) super)
(#t (super sym)))))
(lambda (sym) ((self0 self0) sym))))))
foo 2)))
((lambda (val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1))))
(lambda (sym) ((self0 self0) sym))))))
1))

=> (2 2 1)

; ところで、 closure を object と見立てるって、こういうので合ってるの?
まぁ正直 let 使ったほうが見やすいわけだが。わざわざ展開してあげるとは
>>354 も人が良いねぇ。let や let* は lambda で書けるだろゴルァ!! で
終わりそうなもんだが。まぁ >>344 よ、基本的に

(let ((x 1) (y 2)) (+ x y))
=>
((lambda (x y) (+ x y)) 1 2)

(let* ((x 1) (y 2)) (+ x y))
=>
((lambda (x) ((lambda (y) (+ x y)) 2)) 1)

でも流石に let 使ったほうがわかりやすいので大抵の Lisp にゃ
let や let* が用意されてるわけだ。
むしろ define(= letrec) を展開してることに意味があったり。
The Seasoned Schemerってどうかな。安いから買おうかな。littleは持ってるんだけど。
http://www.amazon.co.jp/exec/obidos/ASIN/026256100X/249-6997664-7938729

と思ったら、The Little Mler などというもっと面白そうな本が...
358デフォルトの名無しさん:04/03/22 14:37
Lispがそんなにすごいなら ---If Lisp Is So Great---
http://www.shiro.dreamhost.com/scheme/trans/iflisp-j.html
JavaとかC++とか手続き型で一般的なオブジェクトの
メソッド呼び出し形式が書ける様になれば普及すると思うんだけど、
どうかな。
シングルメソッドディスパッチでいいし。

つまりこういうこと
(object.method param) ;; object->method(param)
(object->method param) ;; object->method(param)
(setf object->prop value) ;; object->prop = value
.と->はどっちでもいいけど。.はdot-pairと被るから->かな。
マクロ文字でなんとかなったりする?

でもメソッド呼び出しをネストさせると
((object->method param1)->method param2) ;; object->method(param1)->method(param2)
変な違和感がある。

そもそも->はsuffix演算子だから、本来ならLISP流に書くと
(-> (-> object method param1) method param2)
こうなる。

でもこれじゃ使う人いないだろう。
まいった。
>>358
>(だが、気をつけ給え。その論理の行き着く先はWindowsだ。)
ワロタ
広まるのが悪いみたいな言い方だな(w
>>359
. や -> は繋ぎの役割しかしてないから、括弧と両方あるのは冗長。省こう。
object と getter や method の順序は、lisp だと procedure が前だから、
(setf (prop obj) value) と ((method obj) param)

あと方のは中の括弧はなくてもいいか。そうすると、(method obj param)。

あれ、両方とも今のままだ。
(だが、気をつけ給え。その論理の行き着く先はloopだ。)
loop keywordをリスト中にいきなり出てくるキーワードではなくて、ローカルマクロ
みたいに見えるように定義したら、loop嫌いな人も減ったかな。
(loop (for item in list) (collect item))
364デフォルトの名無しさん:04/03/23 10:22
> (* 1.05 12)
12.600000000000001
> (* 1.05 12.0)
12.600000000000001

Gaucheでこの誤差をなくす方法を教えてください。
(プログラム初心者板ものですね。申し訳ないです)
そんなもの
(* 105/100 12)
とすれば、、、
12.600000000000001
あれ???
浮動小数点の仕様。
十進数使え。Gaucheにあるかどうかはしらんが。
gaucheはexact rationalないみたいだからね。
formatで桁指定できれば助かるんだが。
clisp なら (* 105/100 12) => 63/5 でウマー!! というは置いといてだ,
#include <stdio.h>
int main(int argc, char *argv[])
{
double f = 1.05*12;
printf("%f\n", f);
printf("%.14f\n", f);
printf("%.15f\n", f);
printf("%.16f\n", f);
return 0;
}
の結果が
12.600000
12.60000000000000
12.600000000000001
12.6000000000000014
になる事について,どう思う?
What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.sun.com/source/806-3568/ncg_goldberg.html
日本語訳は腐っていた記憶あり。

他にも浮動小数点数の入門文書あったら紹介してください。
IEEE double precision floating pointで、
1.05の最良近似は丸めが入って (* #x10cccccccccccd (expt 2 -52))。

仮数部を12倍すると #xc999999999999c。
これは54bitになるから、仮数部53bitに収めるにはまた丸めなくちゃ
ならない。ちょうど中間の値に来るときは仮数部が偶数になるように
丸めるから、演算結果はこうなる。
(* #xc99999999999a0 (expt 2 -52))

一方、12.6, 12.600000000000001の最良近似は、桁を揃えればそれぞれ:
(* #xc9999999999998 (expt t -52))
(* #xc99999999999a0 (expt t -52))

だもんで、正確さを言うなら12.600000000000001の方が正確やね。
見にくいことは否定しないが。
>>364
gosh> (* 1.05 1.2 10)
12.6
>>359
(obj 'msg args) という形で Smalltalk のメッセージ式風に記述するとか。

キーワード引数付きのメッセージ式って Lisp 等の関数呼び出し式と同様に
一貫した記述(条件分岐とか、繰り返しとかもメッセージ式風に記述出来る)
が出来て、尚かつ読み易くて イイ! と思うんだけどどうかな?
>>359,372
そんな簡単なことで普及するなら Dylan はとっくの昔にメジャーになっとるがな。
要するに、マクロで書式を自由にできることがウリの LISP で駄目だってことは、
(なにが駄目だかわらかんが)問題は(あるとすれば)書式にあるんじゃないっ
てことなんだよ。(で、なにが駄目で問題なんだ…?藁)
他の言語で満足してるからじゃないの?
足りないこと
・(すでに)C/C++言語並みに広まっていること
・C/C++のようにどこでも動くこと(最近のPCでも、組み込み機器でも)
それは言語が普及する原因ではなく、結果ですよ
>>373
お前、括弧の使い方が下手だな。
その文章、激しく読みにくいぞ。
>>376
分からないかな。
"普及すれば普及する"というロジックが。
最初の出発点は些細なことでしょ。(Lispは重すぎたとか)
>>378 言いたいことは、分かるよ。原因と結果が循環するということね。
ただそれは、ある言語が普及しだして、一応、人気が軌道にのってからの話しでしょ。

>最初の出発点は些細なことでしょ。
最初の一撃ってけっこう大切なことでしょ。それが些細なことであっても。
しかし、今となってはLispが重いとか言っている年寄りは、そろそろ引退してくれる頃だよね。
(だが、気をつけ給え。その論理の行き着く先はIf Lisp Is So Greatだ。)
>>380
いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
PCとかワークステーション以外は、始める前から年寄り引退確定か
多分動かすだけなら難しくはないな
>382 は自分でLisp処理系を作ったことがないのか?
動かすだけなら難しくないと思う。
>382 はILC2003で絶賛された湯浅センセのXSでも勉強すれ。
hxxp://www.xslisp.com/
・動かすだけなら難しくない
・処理系作れ

馬鹿の一つ覚えですか?
Cだったらすでにコンパイラがあったりするわけですよ。
お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
もう、Lisperとやりあうのは疲れた
「新しい環境」が来たらそのたびに、 C だって移植作業してるんじゃないかな。
「新しい環境」を作った人達が一緒に開発するかもしれないけど。

「すでに」あるかどうかは、その環境と言語がどれだけ普及してるかって話でしかないと思う。
>>382
> いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
たしか、LispMeという処理系がPalm PilotというPDAで動いていたな。
携帯とかGBAとかでも、開発環境が入手しやすければ、だれかが動かしても
おかしくないね。LispといってもCommon Lispのようにライブラリ的な機能が
豊富にそろっている言語から、Schemeみたいに山椒は小粒で…みたいなものまで
色々あるんだよ。

>>385
>Cだったらすでにコンパイラがあったりするわけですよ。
たしかに最初から使えれば便利だね。Cでそのままプログラミングするか、
Lispのようなもう少し抽象化が行われた言語を実装してから作業するか、
そのコストの見積りだろうね。

>お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
だれかが作業をやってくれていなければ、自分でやるか、人にやってもらうしかないでしょう。
それは、Cでも変わらないよ。ただCとLispの守備範囲はあまり、かぶらないと思うけど。
最近は組み込み用途にも、C++やJavaを使う事があるらしいね。ここらへんならLispとかぶるかね。
>>385
ならバックエンドにはすでにある C コンパイラを利用するような
拡張をするという手もあるよ.C のソースを出力すりゃいいわけで
仲良くやってけるじゃん.なんで勝手に対決姿勢になってんの?
390 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:04
そういやKCLはオブジェクト言語がCだったような。
391 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:54
ターゲット用の専用言語(GC 無しとかね)を作るのも楽だな.S 式ベースで構文考
える手間が少ないし.C のソース出力でもアセンブラ出力でもバイナリ出力でも気合
いと時間に応じて自由に選べるし.
392 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:54
あれ?誰もいない・・・
393 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:59
ジリリリリリリリリーン
結局Schemeに戻ってきてしまった.
slime のマニュアル。既出じゃなかったような気がするので一応。
ttp://www.bluetail.com/~luke/misc/lisp/slime.pdf
slime のマニュアル。既出じゃなかった気がするので一応。
ttp://www.bluetail.com/~luke/misc/lisp/slime.pdf
slime のマニュアル。既出じゃない気がするので一応。
ttp://www.bluetail.com/~luke/misc/lisp/slime.pdf
slime のマニュアル。既出でない気がするので一応。
ttp://www.bluetail.com/~luke/misc/lisp/slime.pdf
(gc)
荒らし?
('A`)
「警察だ。ドンドンドン。開けろ。荒しの容疑で逮捕する。開けなさい。」
「ふぁ〜(眠)け、けいさつ〜?」
「そうだ。警察だ。早く開けなさい。」
「け、けいさつ〜?ここは、けいさつじゃないよ〜。」
「ふざけるな。私は警察だぞ。いつまで寝たふりしてるんだ。早く開けろ。」
「ふぁ〜(眠)ね、ねた〜?ね、ねたなんて、ふってないよ〜」
「ネタ振りじゃないよ!寝たふりだよ!このやろう!無駄な抵抗は止めろ!」
「ね、ねたふり〜?こ、ここは、ネタスレじゃないよ〜。」
「ここはネタスレじゃないよ!ここをネタスレ化している荒らしはお前だろ!いいから開けろ!」
「あらし〜?」
「そうだ。容疑を認めるならさっさとここを開けなさい!」
「こ、ここは、ゲームセンターじゃないよ〜」
「俺はアラシじゃないよ!!お前が荒らしなんだよ!なんだよっゲームセンターって!!!炎のコマかよ!・・・」
「・・・」
「・・・」

(;´∀`)
(;´∀`)
nil
>>403
うれピー!!!
(;`∀`) 韮韮韮韮韮韮韮韮韮
      韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
春爛漫
>>405
>>春爛漫
1/2 なんちゃって!
Kahua使ってる人いる?
感想聞かせて
408デフォルトの名無しさん:04/04/06 13:19
cmucl19a期待age
cmuclの新しいCLOSで以下の式を評価すると何が返りますか?
(class-name (class-of (class-of #'make-instance)))

ちなみに、cmucl18eだとstandard-class、clisp 2.33だとbuilt-in-class
ですが、MOP的には、funcallable-standard-classが正しい気がします。
初心やスレからやってきました。
LISP初心者です。

ここのスレの皆様方に教えっていただきたいことがあるのですが、
WINDOWS版のCL-HTTPを落としたいのですが、MITのHPのダウンロード
できそうなリンクがほとんどエラーになるのですが、CL-HTTPを
ダウンロードするにはどうすればいいんでしょうか?
よろしくお願いします。
ハァ
    〃〃∩  _, ,_
     ⊂⌒( `Д´) < WINDOWS版のCL-HTTPを落としたいよ〜!
       `ヽ_つ ⊂ノ
              ジタバタ
>>409
[gcl 2.5.3]
Error: The function CLASS-NAME is undefined.

[ecl 0.9c]
STANDARD-CLASS

[sbcl 0.8.6]
SB-PCL:FUNCALLABLE-STANDARD-CLASS

やさしいLisp入門
ttp://www.cutt.co.jp/book/4-87783-102-9.html

こんなもん出てるようだけど、どうなん?
4200円! たっか〜。
どうみても入門書でたいして面白そうな例題もないこの内容で、この値段。うーむ。

CLOSどころかマクロのマの字もないな。
ネタじゃないんだよね?
他のやさしいシリーズの倍近い値段は置いておくとして
(ページ数も倍の480だし)、
よりによってCommonも何もついてないLISPとは、
いったいどういうことなのか。
読んでみないことには何とも言えないけど、
最終章にコンパイラとローダとリンカがあるということは、
やっぱりCommonLISPなのか。
日本のLISP業界にとって歴史的事件となるのかどうか。
>>409
>(class-name (class-of (class-of #'make-instance)))
LispWorksPersonalEditionで試してみると

FUNCALLABLE-STANDARD-CLASS
だね
>>417
> よりによってCommonも何もついてないLISPとは、
> いったいどういうことなのか。

書店で立ち読みしたところ第一章にCommon Lispと明記してあったのだが。
何を見当違いのことで騒いでいるのかね。
>>420
内容はどうだったの?
>>409
手元ではこんなんですが.
CMU Common Lisp pre19a 20040410, running on lavie
With core: /home/lambda/local/lib/cmucl/lib/lisp.core
Dumped on: Sat, 2004-04-10 11:20:09+09:00 on lavie
See <http://www.cons.org/cmucl/> for support information.
Loaded subsystems:
Python 1.1, target Intel x86
CLOS based on Gerd's PCL 2004/01/09 04:34:17
* (class-name (class-of (class-of #'make-instance)))

PCL:FUNCALLABLE-STANDARD-CLASS
*
423409:04/04/11 16:59
情報を頂いたみなさん、ありがとうございました。

FUNCALLABLE-STANDARD-CLASSの方が、MOP的に「正しい」とまでは言えないかもしれないけど、
「そのほうが自然」とは言えるかな?

clispの開発者の人が1、2年前にMLで、「FUNCALLABLE-STANDARD-CLASSをサポートしないの?」と
尋ねられて、「自分で書いても同じような事を手軽にできるし、ANSI規格でもないから、今のところ
作業予定はないよ」と言っていました。
>>423
ACL がでてないみたいなので一応書いておく。

CL-USER(1): (class-name (class-of (class-of #'make-instance)))
ACLMOP:FUNCALLABLE-STANDARD-CLASS

ACL 6.2 にて。
425デフォルトの名無しさん:04/04/17 19:19
scheme age
xyzzyでLispをやり始めたんですが
(- 1)
はなぜ-1になるのでしょうか?

引数が一つの時は引数に-を付けて返す、というのが関数として定義されてるから
という理解でいいのでしょうか?
>引数が一つの時は引数に-を付けて返す、というのが関数として定義されてるから
>という理解でいいのでしょうか?
いいです。

Function `-'
http://www.lispworks.com/reference/HyperSpec/Body/f__.htm
> If only one number is supplied, the negation of that number is returned.
>>427
関数定義されてるから、という理解でよかったみたいですね。
どうもでした。
(*)
は1
(+)
は0
>>428
-を付けて返すと、the negation of that number is returned は全然違うぞ
428さんじゃないけど、具体的に結果が違ってくる例みたいなものを教えていただけますか?
432428:04/04/18 13:21
>>430
その数の否定を返す→正負反転して返す、という理解ではどうしてダメなんでしょうか?
negateは正負反転の意味で普通に使われてるし、
the negation of taht number は正負反転した数のこと。
negative numberというぐらいだから、負は正の「反対」だと
自然に思っているのだろうね。
>>432
「-を付けて返す」と「正負反転して返す」は全然違うぞ
だから馬鹿みたいに違う違うって言わずに431が言ってるみたいに例をもってくるとか
何が、どう違うかいいなよ。
つまり430=434がこれから始めたい事とは、
「-を付けて返す」という言い回しに対しての、
無益な重箱の隅を突く日本語講釈ですか?

(最近、関数型関連スレはこの手の変な人が増えて悲しいですね。)


ところで、
(- -1)
この式は何が返ると思いますか?
-を90度回転させてから前につけて +1
予想1:絶対値の符号反転したもの。 (- -1) => -1
予想2:文字通り (- -1) => "--1"
>(- -1)
>この式は何が返ると思いますか?

>予想2:文字通り (- -1) => "--1"

字面レベルでの議論だとは気がつきませんでした。
複素数の場合かなとも想像していました。
(- -1) => (^_^)
('A`) => (-_-)
(゚д゚) => (゚∀゚)
(* ゚▽゚) => ゚▽゚
バッククォートって、list や cons で書いたのと等価じゃないんですか?
なんだか処理系によって値が違うんですが。
(defun bq (x) `(,x nil))
(defun ls (x) (list x nil))
(let ((l nil) (m nil))
(push (bq 1) l) (push (bq 2) l) (push (bq 3) l)
(rplaca (cdar l) t) (print l)
(push (ls 1) m) (push (ls 2) m) (push (ls 3) m)
(rplaca (cdar m) t) (print m))
を評価すると、clisp では
((3 T) (2 NIL) (1 NIL))
((3 T) (2 NIL) (1 NIL))
となるんですが、CMUCLでは
((3 T) (2 T) (1 T))
((3 T) (2 NIL) (1 NIL))
と異なる結果になるんです。言語仕様上どっちが正しいんでしょうか?
>>441
このへんかな

Once again, it is emphasized that an implementation is free
to interpret a backquoted form as any form that, when evaluated,
will produce a result that is equal to the result implied by
the above definition. In particular, no guarantees are made
as to whether the constructed copy of the template will or
will not share list structure with the template itself.

cltl2
22.1.3. Macro Characters
Common Lisp Hyperspec 2.4.6 Backquote
http://www.lispworks.com/reference/HyperSpec/Body/02_df.htm

によると、`(,x nil) = (append (list x) (list 'nil)) = (list x nil)
となり、さらに、side-effectについて、

>An implementation is free to interpret a backquoted form F1 as any form F2 that,
>when evaluated, will produce a result that is the same under equal as the result
>implied by the above definition, provided that the side-effect behavior of
>the substitute form F2 is also consistent with the description given above.

になるから、cmuclは間違いの気がする。

... share list structure ... のくだりは、backquoted formからreaderが作るform自体が
templateと相似構造なformである必要はないと言っているのであって、template自体を構成する
consを共有して使いまわしていいと言っているわけではないと思う。
バッククォートの解釈は、結果が(equalの意味で)等しければ実装は自由。

`(,x nil) は次の何れにも解釈できる。
(append (list x) (list 'nil) 'nil)
(append (list x) (list 'nil))
(append (list x) '(nil))
(cons x '(nil))
(cons x (list 'nil))
... etc

したがって、規格ではどちらも正しい。
side-effectはこの場合関係ない。
445443:04/04/20 11:32
>>444 了解。規格の例をもっと読むべきでした。
最初は、俺もquoteの一種だから変更するべきじゃないと、
正しく解釈していたんですが規格を誤読して解釈を変えてしまいました。

書き直さなきゃならないコードがあるな。ありがとう。

この場合、cmuclは以下のような事をやって、consしないようにしていると
いうわけね。
(let ((list (list nil nil)))
(defun bq (x)
(setf (car list) x)
list))
>この場合、cmuclは以下のような事をやって、consしないようにしていると
>いうわけね。
例が間違っていました。忘れてください。
447441:04/04/20 12:56
トップレベルのリストも全て cons とは限らないというわけですね。
(defun bq1 (x) `(,x 1 2))
(defun bq2 (x) `(,x 1 2 ,x))
(let ((l nil) (m nil))
(push (bq1 0) l) (push (bq1 0) l)
(rplaca (cdar l) 3) (print l)
(push (bq2 0) m) (push (bq2 0) m)
(rplaca (cdar m) 3) (print m))
を CMUCL で評価したら
((0 3 2) (0 3 2))
((0 3 2 0) (0 1 2 0))
となりました。リストの末尾に定数リストが来ていると使い回されるようです。
>リストの末尾に定数リストが来ていると使い回されるようです。
そうみたいですね。それで、その分、consする回数が減ってリソースの節約になり、
それは規格で許された動作であると。
一応貼っておく。Emacs Common Lisp。
http://www.lisp.se/emacs-cl/
外国でxyzzyのこと知っている人は、どれくらいいるのだろう?
とりあえずぐぐってみてはどうか。
Windows マインスウィーパーの隠しコマンドが
xyzzy なんだけどなんか関連ってあんの?
とりあえずぐぐってみてはどうか。
foo bar
>>452 魔法の呪文として「xyzzy」を使うことがあるみたい。出典知っている人いる?

>>451 >とりあえずぐぐってみてはどうか。
googleで調べてみたけど、結果を絞りきれなかった。Emacs系エディタリストには記載が
あったけど、情報は名前だけ。Common Lispのサブセットを搭載しているという情報はなし。
ADVENT(初期のコンピュータゲーム)の魔法が出典。
Jargon Fileの
ttp://www.catb.org/~esr/jargon/html/X/xyzzy.html
を参照。
すんません、cmucl19のソースを入手するにはどうしたらいいんですか?
cmucl web siteの指示どおりanonymous cvsで入手しようとすると、
/home/anoncvs/CVS-cmucl: no such repository
と言われて失敗します。
>>457
hxxp://common-lisp.net
>>458
ありがとう、入手できました。
linuxのfirefoxでcommon-lisp.netを表示すると、トップページの横一列になった項目に
打ち消し線がかかっているように見えるので、ずっと、改装中なのかと思っていたよ。
たぶん、単なる下線の表示がおかしくなっているのね。
stklosとstkはwindows98でも使えますか?
>>460 STk は動くはず。stklos は Windows はダメなはず。
schemeの継続についての質問です。
処理系はgaucheを使っています。

(begin (call/cc (lambda (x) (set! cont1 x)))(display "山崎13\n"))
でcont1に代入される継続と、
(call/cc (lambda (x) (set! cont2 x)))(display "山崎13\n")
でcont2に代入される継続が違うのは何故ですか?

cont2には、
「(display "山崎13\n")を評価する」
と云う継続が代入されるのではないかと思ったのですが、なぜそうではないのでしょうか?
トップレベルまでだから。
464462:04/04/28 19:40
>>463
そういう解釈で良いのですね、

ありがとうございました。
http://www.asahi-net.or.jp/~ia7k-ismr/lisp_contents/ansi_commonlisp_a2.txt
暇に飽かせてANSI CommonLispの解答っぽいものを作ってみました。
誤り、勘違いなどあったら教えて頂けるとありがたいです。
>>465 あんたは、えらいっ!
atom: a
list: (a b c)
tree: (a (b) ((c))))
graph: #1=(a #2=(b . #1#) . #2#)
graphのもっとよい表記法を希望します。
ttp://www.geocities.co.jp/SiliconValley-Cupertino/6957/bibliography.ja.html
Scheamて。
それにDrShcemaとはなんや?

>私が読んで良かったなー、と思っている本を紹介します。
ほんとに読んだのか?


・・・まあそれはともかく、
紙媒体の参考資料集としては使えるかも。
>C++を使うために絶対読まなければならない本
11冊は多すぎ。一冊読めば使えるだろ。しかもC++を使う⇒=Windowsユーザと勘違いしてるし、
他の項目も同様。
誰?
俺だよ俺!
472デフォルトの名無しさん:04/05/04 14:40
schemeで循環参照を印字する方法って規定されてるのでしょうか。

(define x (cons 'x 'x))
(set-car! x x)
(set-cdr! x x)
x
==> ???
srfi-38のwrite/ss (write-with-shared-strcture)
http://srfi.schemers.org/srfi-38/srfi-38.html

x => #0=(#0# . #0#)
474デフォルトの名無しさん:04/05/05 20:50
schemeの局所関数について質問です.
(define (f x)
(define (g x) (* x x))
(g (* x x)))
とした場合gはfの定義時に定義されるのでしょうか,
それとも実行時でしょうか.
もし実行時だとすると次の式と等価なのでしょうか.
(define (f x)
(let ((g (lambda (x) (* x x))))
(g (* x x))))
letではなくletrecだろ?

(define (f x)
(letrec ((g (lambda (x) (* x x))))
(g (* x x))))
>>475
let でいい
>>476
この場合は、だろ
>475 に賛成.
; (define (f x)
; (let ((g (lambda (x) (* x x))))
; (g (* x x))))

(define f
(lambda (x)
((lambda (g) (g (* x x)))
(lambda (x) (* x x)))))
と等価だからこのgは定義されてるとはいえない.
例えば,
(define (f x)
(define (g x) (if (= x 0) 0 (+ x (g (- x 1)))))
(g (* x x)))

(define (f x)
(let ((g (lambda (x) (if (= x 0) 0 (+ x (g (- x 1)))))))
(g (* x x))))
かのどちらをとるかで
(let ((g (lambda (x) x)))
(f 3))
を評価した結果が違う.
>>476は当然この場合の話をしているのだと思うが。
そんなことより、質問の答えが知りたい。
答えは等価。でも質問の前提の実行時とか定義時という
考え方がおかしい。定義は実行されない。
481479 != 474:04/05/06 01:49
>>480
(define (f x) ..
    (define (g x) .. 
だと、fが定義されるときにgも定義されそうだが、
(define (f x) ..
    (let ((g ..
だと、gに値が束縛されるのは実行時ではないか、
ということだと思うが、結局何が違うのかは俺にはよくわからん...
(define (f x)
(define (g x) (+ 1 x))
(set! g (let ((g g)) (lambda (x) (+ 1 (g x)))))
(g x))
こんなんだったら違いがでるんじゃない?
パフォーマンスを意識したプログラミング
Programming as if Performance Mattered
http://www.dadgum.com/james/performance.html
484デフォルトの名無しさん:04/05/07 21:10
>>473
ありがとうございます。
SRFIにあったとは気づきませんでした。
英語読まないとだめですね・・・。
>>481
トップレベルのdefineとinternal defineは、字面は同じ
"define"だけど、全然別物だよ。
前者はトップレベルの束縛を定義するもの。後者はレキシカル
変数の束縛を定義するシンタックスシュガーでletrecと同じ。
>>485
それで納得。CommonLispのdefunとは違うんだね。

>>484
Schemeで、REPループがwrite/ssを使うように指示するにはどうすんのかな。
CommonLispなら変数*print-circle*をtrueに設定すればいいのだけれど。
487474:04/05/08 21:36
みなさん回答ありがとうございました.
局所関数定義(internal define)とletrecが等価だということは,
パフォーマンスが要求される部分では局所関数定義を避けた方がいいということですよね.

(define (f x)
(define (g x) (* x x))
(g (* x x)))
↑は↓こうした方が速い
(define (f x)
(f-g (* x x)))
(define (f-g) (* x x))

>>487
そんなのは処理系依存
多少賢い処理系ならどっちもパフォーマンス的には同じかと
さらに賢く最適化をする処理系なら前者の方が良くなるはず
>>487
Internal defineが毎回コンパイルされると思ってるみたいだが、
そんなペナルティはない。evalじゃないんだから。安心して使え。
490474:04/05/09 08:03
>>488-489
純粋に言語仕様だけを見れば,gのinternal defineの定義はfの実行時に毎回行われますよね.
でもそれなりの処理系を使っている限り,最適化してくれるので意識する必要はないということかな.
最適化というのは>>487のような変換を処理系が自動でやってくれるということでしょうか.
>>490
> 純粋に言語仕様だけを見れば

どこにそんな仕様が?

> 最適化というのは>>487のような変換を処理系が自動でやってくれるということでしょうか.

違う
後者の場合、f のコンパイル時には f-g は再定義される可能性があるため特定できないが、
前者の場合、f のコンパイル時には g が再定義される可能性は無いため (g (* x x) をインライン展開できる。
>>490
> 純粋に言語仕様だけを見れば,gのinternal defineの定義はfの実行時に毎回行われますよね.
確かに、インタープリタの場合、あなたの言う通りに遅くなる処理系が
存在する可能性もあるけど、そのレベルの事を心配して、コーディングを変える必要は
ないことが多いのでは。
493474:04/05/09 22:41
>>491-492
ありがとうございます.
なるほど,インライン展開ですか.考えていませんでした…
中身をある程度知っていないと効率的にしようと思った対策が
逆効果ってことはよくありますよねぇ.
効率なんてのはSchemeをもっと理解してから考えろよ。
外したレスなんでアドバイスに困る。
インライン展開は抜きにしても、
「gのinternal defineの定義はfの実行時に毎回行われますよね」
と書いている時点でclosureというものを激しく誤解している予感。

最も単純な(最適化しない)実装でも、closure g作成のコストは
f実行一回あたりcons一個分。
>>495
closure g作成のイメージは、
(define g (list 'closure '(lambda (x) (* x x)) current-lexical-environment))
みたいな感じでいいのかな。
変数xというのを残してもいいけど、それだと毎回
環境からxを探すコストがかかってしまう。

レキシカルスコープでは毎回同じxが発見される
ことになるんだから、ローカルにバインドされた
識別子はコンパイル時に参照に置き換えられるのが普通。
実行時には、レキシカル変数はもはやシンボルや
identifierではなく、名前のわからない、ただの参照になってる。
guileを検索したら↓がpageRankの上位にあったのだが、、

http://www.guile.jp
499デフォルトの名無しさん:04/05/13 20:53
ガイルがいる
500デフォルトの名無しさん:04/05/13 20:57
【誰でもできる47氏支援運動!】
【以下の文章を、各種掲示板にコピペして47氏を救おう!】

すみません、貴サイトには直接は関係のない話題ですが、
広くネットに携わるものとして、いや、日本国民として、真剣に考えるべき事案であると考え、あえて宣伝させていただきます。
管理者様、もし、不適切とお感じならば、どうぞ削除なさってください。

先日、著作権違反の幇助との名目で、ファイル交換ソフトwinnyの製作者で、東京大学助手の金子勇氏(通称47氏)が逮捕されました。
しかし、winnyそれ自体は、違法なファイルの流通だけでなく、合法なファイルの流通も可能なものであり、著作権を違反するか否かは、ソフトの作成者ではなく、ソフトの使用者に、その責任がゆだねられるべき問題であります。
さきに、winnyを使用して、著作権違反で逮捕された二人のユーザーは、47氏と何らつながりのない人間であり、「幇助」の理由を付して逮捕するには、あまりにも無理があります。
以上の観点から、私たちは、Winny開発者、47氏に対する不当逮捕に強く抗議します!!
京都府警は、逮捕の理由として、「『著作権法への挑発的態度』が逮捕理由」に挙げたと、報道されています。この報道が真実であるとすれば、これは思想信条の自由の侵害であり、「思想犯」として不当逮捕したものと断ぜざるを得ません!!
これはもはや著作権の問題ではなく人権問題です!!皆様のご協力をお願いいたします。

詳しくは、下記ページをご覧下さい!
Winny開発者 47氏を救う為に
http://77483.org/47/
ネットワークの自由防衛同盟
http://www.netfreedom.tk/
プログラマ仲間の新井氏が設置したblog(47氏支援運動など)
http://www.moodindigo.org/blog/archives/cat_kaneko.html?page=%B6%E2%BB%D2%CD%A6%BB%E1%BB%D9%B1%E7

また、本運動に賛同される方、お知り合いの掲示板などに、本文章を掲示していただけると幸いです。
Scheme美しすぎ
Scheme かわいいよ Scheme
"on lisp"の翻訳は最近すすんでるの?
ごめんなさい、すすめますた
いや、催促じゃなくて、応援しているよってことね。
普通に読めば催促だわな
そりゃ、考えすぎ。普通に読めば、現状を聞いているだけ。
字面だけをみれば聞いてるだけ
だが、普通に読めば催促にしか読めないだろう。
おっ、雑談か。「普通」ね。

まず、尋ねている人が翻訳版「On Lisp」の読者かどうかさえ、分からないでしょう?
それに、翻訳者に向けて書いたのかさえ分からないし。自分でチェックするのが
面倒だから、誰かに聞いたとか。

あんまり自分の「普通」を信用しすぎないほうがいいよ。
みんなが「普通」に「普通」と言う言葉を使っているから俺も「普通」と言ってみただけだよ
509を発言したのが507だったら笑い話にしかならないけど。
509=507が、
「みんなが「普通」に「普通」と言う言葉を使っているから俺も"揶揄をこめて"「普通」と言ってみただけだよ」
と言ったら?
それならわざわざ「普通」議論を持ち出す意味が無いな。
その程度か、君はもっと出来る人のはずだ。
507のような意見を「普通」と考える人もいる。
また、507は出来るだけ「字面」のみで判断しようとしている点で、
できるだけ広い「普通」をカバーしようとしている。

「ことほどさように"普通"には同じ日本語を使う者の中でも差異がある」と
509は"普通"議論をもちだしたのではないの?

506が「"俺"には催促に聞こえるな」と言っていれば"普通"の意見だろうけどな。
雑談うぜえ。
いくら広い「普通」をカバーしようとしたところで
裏づけが無ければその「普通」は507の中での「普通」でしかないわけで
507自身が509の発言をするのは結局のところ自分の中の「普通」を
棚に上げた都合のいい「普通」感の押し付けでしかないということだ。
lisp> (eq '俺:普通 'みんな:普通)
nil
lisp> (in-package :俺)
#<The 俺 package>
lisp> (use-package :みんな)
Error: Using package `みんな' results in name conflicts for these symbols: 普通
[condition type: package-error]
517デフォルトの名無しさん:04/05/19 13:14
普通の奴らの上を行けよ、おまいら。
これからは、「CommonLisp」を「普通のLisp」と呼ぶことを推奨します。
>>519

けっこう、おもしろそうだ。つーか、まとまった資料を読みたく思う。
行きたかったけど、平日か・・・
誰か実況たのむ
522189=312:04/05/19 20:19
ようやく和田研フォントキットの Common Lisp への移植ができました。
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/efont/wadalab-fontkit/
>>191 さんに助けていただかなければ絶対あきらめていました。ありがとう
ございます。

>>519 のセミナーに行かれる方がいらっしゃいましたら、>>189 が感謝して
いたと和田先生にお伝えいただければ望外の喜びです。
>>519
>ACL7.0の新しい正規表現ライブラリ 講演者: 川合史朗
Shiroさんはgaucheの開発をしながら、こんなライブラリを書いているのか。すごいね。

Edi WeitzさんのCL-PPCREとの比較レビューを読みたいな。
ACL Trial Editionはまだ6.2か。
>>523
あと Kahua もやってるでしょ
Common Lisp から RDB を利用した∈ですが,何か良い
フリーのライブラリってありますか?
ACLだとあるみたいですが,フリーはなかなか見つからない・・・
CLSQL, Uncommon SQLとかかな。
527525:04/05/21 12:35
>>526
ふたつもあるんですね.
とりあえず Uncommon SQL のほうから試してみようと思います
ありがとうございました
shiroは有名だか、折れ的には新山を応援したい所だ。なんつーかアホの新山の
ページ見ていると同じ人種だなっていうか、哲学とか高度な話題をさりげなく
振ってしまう高学歴lisperの中でもヒトキワ庶民派って言うか、アホな記事を
読んでいたりすると、(例えばメリケンは飯の味はわからねぇと文句タレる新山)
Oh,Pretty!なんて感じたり。ヒヒヒッ。
同じ穴のムジナっていうかにほいがするんだよね。っーつわけで新山センセもがんばって
メリケンのように弾けまくっってください。
シソヤマは自意識つよすぎで恐いよ。
lisperじゃなくてpythonerだと思うけどな。
最新のアホ GtkYes http://www.unixuser.org/~euske/silly/gtkyes/
無意味さにはワラタ (ダイアログ全てにビシバシ [Yes] を押してくれる
ランチャーのような単なる実用プログラムを彼が作るはずがない)。
ブサイクフィルターとか美人フィルターというネタもあるが、アレは新山じゃ
なかったか。

新山ネタをフりつつ真面目な話をして恐縮なのでありますが、Symbolicsのマシン
を知って思ったのです。lispでレンダリング(行列計算や座標計算)までやって
いるのだろうか?と。例えばcのmallocのようなヒープの確保をするような場面
ってあるじゃないですか。ピットマップを操作する場合などですが、その場合
lispではどのように処理しているのだろう?と疑問に思ったのです。
GIMPのスクリプトもscheme系らしいですが、Cやfortranならば配列とかmalloc
である程度のメモリーを確保してそのメモリーへの各種操作という形になります
よね。lispだとリスト処理や記号処理のイメージが強くてどうしてもSymbolicsの
ようなCGのビットマップ操作や座標変換、行列の計算のイメージが全く頭に浮かばない
のですが、詳しい人この辺りの話しりませんか?
組み込みでそういう操作を入れればいい。
Symbolicsは知らないけど、Common Lispには配列型やベクタ型が用意されていて、
bit-vector型なんてのもあるから、ビットマップ操作は普通にできる気がします。

行列型はないけど、多次元配列は使えるので、行列の操作関数群もだれかがすでに
書いて公開している気がします。
Symbolicsは使ったことないけど。
optimizeでspeed最高、safety最低にしてちゃんと型宣言すれば、
simple-vectorやbit-vectorのアクセスはCで配列使った場合と
変わらないよ。そのかわり配列の境界チェックや型のチェックは
プログラマの責任になるけどね。
現在でも、Lisperに渡したら、ハマるような代物かなSymbolicsは?
そのくらい、プログラム開発システムとして完成度が高い?

それともWindowsとVisual Studioなんかと比べたら見劣りする?

経験者の人、いねーかな。
ILC2003に居合わせた人達が言うには商業的に失敗しただけで現存するどの処理系も
あのレベルに到達できていないらしい。本当かどうかは知らんけど。
アレをオープンソース(システム?)として公開しようとかいう動きもどっかにあったような。
配列でつか。いやてっきりコンスセルを2Mbyteほど確保してハイリツとしたりするかと
思ってしまいました。何らかのツリー型データベースも一旦ファイルからリストへロードして
などするのかと。

もう一つ聞きたい事があるのですが、Lisperの人たちは手続き型プログラミング
で言うところのフローチャートのような図は書いたりしないのですか?
オブジェクト指向となるとUMLなどありますし、Lispだとどんな図を日常的に
書いているんでしょう?リストか?、再帰のツリーかな?
Symbolicsの画面キャプチャにはそれっぽい図も見かけたりしますが。(class継承の
ずのようなもの)

>ILC2003に居合わせた人達が言うには商業的に失敗しただけで現存するどの処理系も
>あのレベルに到達できていないらしい。本当かどうかは知らんけど。
という事は、現物を触った人はここには誰も以内と?
昔の第五世代コンピュータプロジェクト辺りでLispマシンを研究していたと
言うような話を聞いた事があるんですが、サイ(psy)のあれは推論マシンだしたか?
よくわからんが
http://www.pfu.co.jp/hhkeyboard/kb_collection/images/symbolics.gif
このキーボードは使いやすそう
>>538
使った人によればAの隣のRUBOUTは一度慣れると病みつき
だそうです。

オレの代の頃にはハードがいかれてたんでほとんど置物と
化していて残念だった記憶が。いじり倒してみたかった...

540デフォルトの名無しさん:04/05/23 20:39
UNIXの仕事だけではないのでファンクションとWindowsキーはないと困る
>>537
もしかして、Lisperはリストしか使わないとか思ってた?

自分でコード書くときに図を書くことってほとんどないな。
コードが大きくなりそうな時に全体の構成をコメント中にメモったりはするけど。

他人のコードを読む時には、Allegro Composerだと関数の呼び出し関係や
クラス階層をグラフ表示してくれるんでたまに使うかな。
>>531 それは hirax.net の人かと。
http://shibuya.pm.org/blosxom/techtalks/bkcon_reviews.html
で最近講演してますね。
543デフォルトの名無しさん:04/05/24 22:57
cygwin-1.5.5 に scm-5d9 インストールしたのですが、
バックスペースでプロンプト文字 "<" を超えて
行頭までカーソル移動してしまいます。

動作は問題ないのですが何かと不便で困っています。
何かお気づきの点がありましたらお願いします。
>>543
stty の設定か何かで、改行コードが CR+LF (Carriage Return + Line Feed) に
なってるからでは?
勘違いだったらスマソ。
545537:04/05/25 18:15
チンボリクスの神がコノスレに降臨しますやうに(・∀・)ニヤニヤ
Interlisp-Dがフリーでダウソできるみたい。
ttp://www.sra.co.jp/smalltalk/SML/archives/2004-May/006503.html
http://user.ecc.u-tokyo.ac.jp/~g340299/
flatline氏の日本語訳『on Lisp』、第20章「継続」の説明がすばらしい。
いろいろ読んだけど、これほどすっきりと理解できたことは無かった。
ありがとうございます。

ところで、pdf版の図109(P148)、TeX のタグが残ってしまっているようです。
ご報告まで。
548543:04/05/25 23:15
>544 氏

今色々キータイプしてみたら Ctrl + BS で
バックスペースが出来て,プロンプト文字 "<" でブロックされました。
何か分かりますでしょうか?
新山氏のサイトに、かなりショッキングな文章が登場。

http://tabesugi.net/memo/2004/61.html
> 新山は、汎用プログラミング言語としての Lisp (Scheme) はもう信用していない。
> だって、現在のたいていのアプリケーションで大変なのはデータ構造の設計と
> 入出力の扱いで、そういう部分はふつう圧倒的に手続きだらけなんだもん。
…(略)…
> いまでは自然言語処理っつうと、ほとんどが「どーやって大量のデータを収集・
> 変換・学習・適用するか」につきているので、これはおそろしく手続き的な操作で、
> Scheme なんか使ったらほとんど begin と let* だらけになる。


新山氏が以前言っていた
http://tabesugi.net/memo/2003/92.html
> だいたい新山はもともとストイックな Scheme が好きだったのだが、あまりに
> 実用的でないから Python に「逃げてきた」のである。

って、そういうことだったのね。ライブラリの少なさの問題ではないのね。


ちなみに、COBOL の代わりにこそ Java ではなく LISP を、という主張もされていて、
(最初の引用元を参照)、こちらも非常に興味深い。
beginとlet*使えばいいじゃん。
ってか新山って誰?
>「どーやって大量のデータを収集・変換・学習・適用するか」につきているので

> Scheme なんか使ったらほとんど begin と let* だらけになる
に論理の飛躍を感じるのは漏れだけですか?
ブブカもびっくりですよ。
『Schemeはプログラマを映す鏡』だなあと思う今日この頃、おまえら、いかがお過ごしですか。
日記なんだから論理は飛躍しても仕方ないと思うけど...
>> 552
ところで「begin, let*を使うコードだらけになるじゃん」と言う主張は
新山さんが明らかに何か分かってないという証拠になるのかな?
もしそうならどうしてそうなのか教えて欲しいなぁ。
554デフォルトの名無しさん:04/06/07 13:23
Interlisp-D試した人いないの?
>>554
普通に動いたよ。ドキュメント読む暇が無いんで後回しになってるけど。
>>555-556
レスサンクス。試してみる。
古参Interlisperの話を聞いてみたいな…
>>553
つまるところ、ストイックな Scheme で全てをやろうとすると、
begin や let* の嵐になるということではないか。言いかえれば、gosh などの
現実的(または妥協的)な Scheme 処理系を使ったことがないのかもしれない。

日記は良く読んでないので外してるかもしれんけど、新山氏は普段 Python を
使ってるらしいからね。

# ほら、Python ってライブラリが充実してるじゃん
>>557
おれも聞いてみたい。どうしてもSymbolicsとかの統合環境への夢が捨てがたい。
いま良くあるような保護指向のOSのモデルと、統合環境指向のシステムを
うまく統合させる方法ってないのかねぇ。
>>558
たぶん、「ストイック」の意味が違うと思う。
変数をできるだけ使わず、関数のネストだけで
コーディングするのがストイックなScheme流なんだと
思う。
>>560
それは Scheme 限定というより、Lisp 族の一般的な慣習のような。
ああでも、elisp やってる人達はちょいと違う気もするけど。
まあどうでもいいか。
なぜ人間の脳はオーバーロードしないのか。
563553:04/06/09 00:21
>>560
に賛成。でも個人的には、関数型プログラミングの作法と手続き型の作法をまぜこぜに使えるのがLISPの強みの1つだとおもうので、新山さんの意見には賛同できないんだけど。
ecl で thread 使えている方いらっしゃいますか?
CVS の CHANGELOG には Linux で pthread サポートしている様に書いてありますけど。
565デフォルトの名無しさん:04/06/09 14:50
fibonacci 数列について質問です。
これを関数型の記述のまま、計算量を減らすことはできないでしょうか?


まず、定義どおりに関数型で記述してみました。
(define (fib x)
 (if (< x 2)
   1
   (+ (fib (- x 1)) (fib (- x 2)))))

これだと、定義がそのままコードになっていて、とてもわかりやすいのですが、
x の小さな項を何度も計算しなおすので、x が大きくなると計算量が膨れ
上がってしまいます。
Chez Scheme では x=35 ぐらいが限界でした。


手続き型で、小さい項をまず求めて、それをもとに大きな項を求めるように書くと、
計算量がはるかに少なくて済むのですが、わかりづらくなります。
定義がそのままコードになっている、関数型の記述とはだいぶ違います。
(define (fib2 n)
 (if (< n 2)
   1
   (do ((x1 1 (+ x1 x0))
      (x0 1 x1)
      (m 2 (+ m 1)))
     ((<= n m) (+ x1 x0)))))
566デフォルトの名無しさん:04/06/09 14:51
末尾再帰であらわしたコードも見かけましたが、わかりにくさでは似たようなものです。と言うか、これは手続き型のロジックを末尾再帰に無理に書き換えただけだと思います。
(define (fibo num)
 (let loop ((num num)
       (p2 1)
       (p1 1))
  (cond ((= num 0) 1)
     ((= num 1) 1)
     ((= num 2) (+ p2 p1))
     (else (loop (- num 1) (+ p2 p1) p2)))))


もしかして、(よく知らない)遅延評価を使えばよいのかと思い、頭の悪いコードを
書いてみましたが、かえって遅くなるだけでした。
(define (fib3 x)
 (if (< x 2)
   1
   (+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2)))))))

遅延評価に関して、Shiro さんのところも見てみたのですが、
http://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_86.html
これも結局、手続き型と同じ、小さい項をまず計算して、徐々に大きい項を求めていく
やり方でした。定義がそのままコードになるような書き方ではないと思います。


ということで、質問をもう一度まとめますと、
定義がそのままコードになるような書き方で、fibonacci 数列の一般項を求める関数の
計算量を減らすことはできないでしょうか?

以上です。どうかよろしくお願いいたします。
567デフォルトの名無しさん:04/06/09 15:07
memo関数使ったら?
一度計算した値をとっておくだけで、再帰的な「素直な」定義はそのまま。
568デフォルトの名無しさん:04/06/09 15:30
>>567
ありがとうございます。memo関数とは、これのことでしょうか?勉強してみます。
http://www.sampou.org/scheme/sicp/mailingList/msg00130.html

それにしても、delay/force は、一度計算したものはキャッシュされるということでしたが、
それは、同一の約束オブジェクトに関する話なのですね。
(define (fib3 x)
 (if (< x 2)
   1
   (+ (force (delay (fib3 (- x 1)))) (force (delay (fib3 (- x 2)))))))
において、
(fib3 1) が何回現れても、それは毎回、別の約束オブジェクトとみなされるから、
再計算するしかないのですね。まだまだ勉強が足りないなあ。
(define (fib x)
 (define fib (let loop ((y 1) (lst '(1 1)))
        (if (>= y x) (lambda (x) (list-ref (reverse lst) x))
          (loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst)))))
 (if (< x 2) 1
   (+ (fib (- x 1)) (fib (- x 2)))))
>>566
> 末尾再帰に無理に書き換えた

そうか?俺には自然に見える。
末尾再帰 = ループ という概念に慣れていないだけでは?
http://www.iijlab.net/~ew/ptt.html
の最後に載ってるfibがO(log n)でなかったかな
572デフォルトの名無しさん:04/06/10 03:09
>>569
面白いコードをありがとうございます。ただ、fibonacci 数列の定義をこのコードから
読み取るのは難しいと思います。
また、最後の2行は実質的に不要で、コードのわかりやすさに寄与していないのではないでしょうか?
(define (fib x)
 (define fib (let loop ((y 1) (lst '(1 1)))
        (if (>= y x) (lambda (x) (list-ref (reverse lst) x))
          (loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst)))))
 (fib x))
と書いても結果は同じです。


>>570
すみません、私の言葉が正確でありませんでした。
手続き型の記述をループに書き換える方法としては、私も自然だと思います。
(実は、>>566 の関数 fibo は、既存のそのままのコードではなく、自分がわかりやすい
ように書き直したものです。)
ただ私は、もとの定義どおりの>>565 の関数 fib の方を末尾再帰にしたかったのです。
手続き型のロジックを元にしたため、定義から大きく違った形になっている、という意味で
「無理に」という言葉を使いました。


>>571
恥ずかしながら、このコードは私には難しいです。
慣れた人になら、このコードも関数型らしい「定義を書くだけでそれがそのままコードになる」
記述に読めるのでしょうか?
573デフォルトの名無しさん:04/06/10 03:11
訂正。
×自分がわかりやすいように書き直した、
○自分にわかりやすいように、自分なりに書き直した
自分で末尾再帰にする言語を作れ。
>>572
"関数型らしい「定義を書くだけでそれがそのままコードになる」"
ってだれに聞いたのか知らないけど、幻想入り過ぎなのでは。
>>565
計算機プログラムの構造と解釈 
問題3.27 メモ化
問題1.19 対数的
>>565
その書き方のまま、高度なキャッシングをするよう最適化するような処理系があったらうれしいな。
仕様としては、R*RSには入らないだろうけどSRFIになら入りそう。
でもこれは夢のような技術っぽい。
578デフォルトの名無しさん:04/06/10 11:08
Schemeは、どれをDLすればいいんだ?
579デフォルトの名無しさん:04/06/10 12:07
>>576 ありがとうございます。
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3.3
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#memoize
を参考にして、以下のコードを書いてみました。

(define (memoize proc)
 (let ((cache '()))
  (lambda args
   (let ((hit (assoc args cache)))
    (if hit (cdr hit)
      (let ((result (apply proc args)))
       (set! cache (cons (cons args result) cache))
       result))))))

(define memo-fib
 (memoize (lambda (n)
       (if (< n 2)
         1
         (+ (memo-fib (- n 1))
          (memo-fib (- n 2)))))))

大変うまくいきました。コードはほぼ定義どおりで、しかも (memo-fib 10000)でも
即時に演算が終わるようになりました。memoize って素晴らしいです。

数年前、Java で数値計算をしていて、再帰で書いたら同じ問題に遭遇して、仕方なく
ループで書き直したことがあります。あのときに memoize を知っていたらなあ。

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.4
は私には難しいので、時間をかけて考えてみます。


ということで皆さま、いろいろありがとうございました。
>>578
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
ここに処理系のリンク先あり

Windowsなら
  DrScheme 
  あるいは
  Petite Chez Scheme + ChezEdit
が簡単
>>580 ありがとう
DrSchemeを入れてみました。
40Mってのには驚きましたよ。
582デフォルトの名無しさん:04/06/10 23:26
今日のセミナーに参加した人いる?
午前中は完全に雑談だった。せっかく早起きしたのにちょっと鬱。
明日に期待しよう。
>>582
まあそう言うな、生CEO や生和田先生や生Shiroさんが見れただけでもオレは満足だ
もっとちゃんと時間をとって役に立つ話をやって欲しいとは思ったけど
>>582, 583
漏れ行きたくても行けない地方在住者。
レポートキボンヌ!キボンヌ!
CL-USER(2): (require :regexp2)
; Fast loading /opt/franz/acl70b/code/regexp2.fasl
;;; Installing regexp2 patch, version 0
; yacc constructing #<GRAMMAR-CLASS REGEXP> ...
; Finished
T
CL-USER(3):

regexp2キター
587デフォルトの名無しさん:04/06/12 01:07
これからはJavaよりもLispだと確信しました。
しかしACLの値段は高いのお…
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる

などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?

【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
scmutilsについて教えてくだされ。
Structure and Interpretation of Classical Mechanics
を読み進むのにScmutilsを使いたいのだが、MITScheme
は苦手だ。他の処理系に移植されていないだろうか?
Chez Scheme にあるとうれしいのだが。
>>589
私もぜんぜん知らないのだけど、Google で検索すると、
ChezEdit-NT の作者である 笹川さんが出てくる。
http://www.sampou.org/scheme/sicp/mailingList/msg01408.html

その結果は
http://chabo.kingdom.biglobe.ne.jp/93453084312522391/bbs/index9.html
> SICMのためのScmutilsを動かしたいんだけど、MIT-Schemeはどうも苦手だなぁ。
> かといって移植するのは大変な労力だ。どうしたもんだろう。

どうも移植はされていないっぽい。

Gauche 方面では、
Scheme:ライブラリ -> scmutils
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Scheme%3a%a5%e9%a5%a4%a5%d6%a5%e9%a5%ea#H-jmimjv
> MIT Scheme べったり。Gauche に移植しようとして途中で挫折。-- skimu

こちらもだめっぽい。
あきらめて Debian GNU/Linux と MIT-Scheme に行くしかなさそう。
591589:04/06/12 10:40
>>590
ありがとう。
MIT-Schemeでなんとかやってみるよ。
CPS(継続渡し)が今までどうしても理解できなかったのだけど、
このページの例を見て、目がさめるようによく分かりました。
http://www.namikilab.tuat.ac.jp/~sasada/diary/200308.html#d28

なあんだ、まず最初に巨大にネストした無名関数をこしらえて、
それを一気に実行するだけじゃないか。
それだったら、普通にスタックが積まれる再帰とコストが等しくて当然。

しかし、Petite Chez Scheme は CPS の方が二倍ほど速いのですね。
自分の手元で試してみても同様でした。不思議ですね。
593デフォルトの名無しさん:04/06/12 16:09
すまねぇ、誰か助けてくれ。
こないだAllegroCommonLispのウワサを聞きつけトライヤル版を試してみたくて
ダウンロードしたんだが、さっきFranz.comのSalesManagerのクレイグから
いきなしメール来て、ACLを何処で知ったか、とかいって幾つか質問が
書かれたハードオファーなメールが来たんだよ。英語だし意味ワカンネエし、
毎日にチャンネルしかやってない俺にとって非常に恥ずかしいっていうか、
何で俺のようなアホにメールよこすんだよ!っていうか、「読んでくれて
ありがとう。私はあなたからすぐに便りをもらうことを期待します」とか
クレイグ書いてるし、そういう訳で困っています。
普段アホの新山とかblog読んでアヒャヒャと喜んでいるアホなのですが、天才新山名誉
教授でもなんでも良いのでだれか知恵を貸して下さい。
知名みにlispは初心者で、本当はAllegroCommonLispよりもGaucheを使って
半日ほどハアハアしてたりDを使っていました。
>>593
相手は単に商売なんだから、ほっといたらいいんではないかー?
どれシニョリーナ
「ウミネコ」の魔術をといてやるよ
>>593
トライアル版落とすとそのメール来るよね。
前に落としたときは日本の法人から営業担当者のメールが来ますたよ。
そんな高いもん個人で買えないからご遠慮メール出しちゃったら、担当が変わりましたメールが忘れた頃に(w
そこまで売りたいなら値段下げれ!とか思た(藁
とりあえずexe作る権限だけでも売れると思うんだけどなあ。
598595:04/06/13 18:21
すみません595 は誤爆…良スレを汚してごめんなさい

599デフォルトの名無しさん:04/06/13 21:26
確かに個人で買えるような値段ではないよね。学生なら研究室の予算で買ってもらえるかも
知れないから指導教員に頼んでみるのもいいと思うけど。
かえなければほかのつかったらいいじゃん、ってきもするんだけど。
使ったことがある人のAllegro CLの「これはべんりだ」ってあたりを
聞かせてもらえるとうれしいかも。
あと、個人的にはAlleglo Storeがすごそうなんだけど、そのへんも。
601デフォルトの名無しさん:04/06/14 00:49
Trial版しか使ったことないけど、日本語の文字がちゃんと扱えてWindows上でちゃんとした
処理系があるのはACLだけかな。Trial版でもちょっとしたプログラム開発には十分使えますよ。
VBやObjectPascalのイベントハンドラがLispで書かれていて萌えた(w
603デフォルトの名無しさん:04/06/15 23:31
>>13
で紹介されているSECDR-Schemeですが、配布元のサイトが
無くなっているみたいです。
私が利用しているDNSが悪いのでしょうか?
誰か親切な人うぷしていただけませんか?
604603:04/06/15 23:39
今、鯖落ちてる?
>>601
LispWorksは?

>>603
覚えてたら暇なとき発掘してみるよ。flatlineさん(だっけ?)が上げてたサイト使わせて
もらってねら〜Lisper用ポータルでも作ろうか。
先週のセミナーでも思ったんだけど、Lisp興味あるけどどこから手を付けたらいいのか
わからないって人も結構居るみたいだし。
>Lisp興味あるけどどこから手を付けたらいいのか
わからないって人も結構居るみたいだし

禿げしく力強くうなづきつつ、同意。
そういえば初心者スレ無くなっちゃったね。
とりあえず c.l.l と Blog と wiki と *-dev 系の ML はチェックしてる。
>>606
そうだよなぁ。
Schemeに関して言えば、そういう情報を集積する場所としてWiLiKiがあると
思うのでがしがし「こんな情報はないのか?」って書き込んでみるといいかも。
>>607
次スレは
【common lisp】(S式のみで語らう漢のスレ)【scheme】
でお願いしm
>>609
(だが気をつけ給え。
((その論理)の行きつく先は)
(激しく読み難い(スレ)だ))
>>610
(and (気をつけ給え。 インデント)
(equal (修正すると >>610)
(気をつけ給え。
(equal (行きつく先 (その論理))
(激しく読み難い スレ)))))
このスレを見て思い出した・・・

去年、プログラミング言語2(Scheme)の単位落としたんだよな・・・
今年の後期プログラミング言語2(Lisp)取らないと・・・
おまいさんの大学は Scheme -> Lisp に変わったのか
おれんとこは2年前から逆になったわけだが
614デフォルトの名無しさん:04/06/16 22:19
(age)
615605:04/06/16 22:32
>>603
Secdr.tar.bz2っての拾ってきたけど多分コレだろ。
ドコに置けばいいか教えれ。288KBくらい。
皆さんは、LISP を習得することで、他の言語でのプログラミングにどういう
メリットを感じましたか?

私は Scheme をある程度おぼえて、簡単なプログラムなら書けるようになったの
だけど、この知識が例えば Java でのプログラミングに生かせるかというと、
今のところ、よく分からない。
関数プログラミング、ファーストクラスクロージャ、継続、マクロなどはとても
面白いと思ったけれど、Java では使えないし。

今のところ、JavaScript で何かできるかな?と思うぐらいです。JavaScript には
ファーストクラスクロージャがあるから。

エリック・レイモンドが
http://cruel.org/freeware/hacker.html
「LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
 この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
 たとえ、実際には LISP そのものをあまり使わなくても。」

と言っていたのはどういう意味なんだろう?
>>616
> たとえ、実際には LISP そのものをあまり使わなくても。」

LISP を直接扱う仕事が少ない、LISP の技法が C に直接マッピングし辛い(クロージャとか)って
事ですよね。Java でも無名クラスとか CPS とか使う機会はそれほど無いのではないでしょうか。
>>615
Secdr.tar.gz が 313KB なんでそれくらいでしょうね。ライセンスは GPL みたいなんで
うぷろださえあれば私もうぷ出来ます。

ところで、SECD マシンじゃなくて SGCD マシン(G-Machine)というのがあるみたい
ですが、これってどういう物なのでしょうか?
ググって見たらグラフ理論と関係あるみたいですが、グラフ理論って最適化とかでよく
聞く物の、中身が良く分かりません。。。
>>617
 ちょっとメール欄が気になりますが、まあ、まさにその通りです。それだけでは
Java のプログラミングスタイルが大きく変わる、という気がしないんです。

 Lisp の良さは、どのようにも書けることだと思うんです。手続き型風にも、オブジェクト
指向風にも、関数型風にも書ける、何でもそろう百貨店のようです。

 ところが他の言語は専門店なんです。例えば Java はクラスベースの型制限のきつい
オブジェクト指向言語として書く以外に、あんまりできることがない。そうすると、
結局デザインパターンに従って書くより他にないのかな、ということになってしまう。

Java 捨てろ、と言われても、Lisp でやらせてもらえる仕事なんてないし。
皆さんはどのように考えていらっしゃいますか?


>>618
私もグラフ理論はぜんぜん知らないんですが、n次空間での点と線の組み合わせの性質を
研究する学問だと聞いたことがあります。応用としては、回路図を基盤に起こすとき、
どのように回路を取り回せばよいかを検討するのに役立つそうです。
レゲエ数学者の秋山仁先生が、日本における第一人者だそうです。

『秋山仁の 落ちこぼれは天才だ 』
http://www.amazon.co.jp/exec/obidos/ASIN/4062739623/
>>619
んー。逆方向で。
Lisp が百貨店だとしたら、他の言語で初めて触れるような機能に出くわしたとき、
「ああ、これは Lisp で言ったら○○だな」
て風に(Lisp にマッピングして)理解してみる、ということがやり易い、
ていう具合に考えてみるのはどうでしょう。
>>618
G-Machineは、lazyな言語向きの仮想機械で
実行にグラフ書換えを利用してるものだったような。
うろ覚えだけど。

グラフ書換えについては、
『コンピュータ基礎理論ハンドブック』のたぶん2巻に解説があった気がする。
>>620
確かにそれはできるかも知れません。実は Lisp を源流としている技術はこの業界には
すごく多いみたいですから。

Java には、フレームワークだとか、EJB とかさまざまな新技術が次々導入されて
いますが、「あ、これは Lisp のアレに相当するな」と分かれば習得は早いでしょうね。

しかし、もともと Lisp のエキスパートだった人はそれで良いでしょうが、今から
Lisp を学ぼうという人はどうでしょう?遠回りをせず、Java の新技術を学んだ
方が早いのではないかという気がします。

何しろサーバサイド・プログラミングは Java の一人勝ちで、Java だけ覚えれば
それで済んでしまうような状況ですから。代わりに Lisp が普及していてくれたらなあ。
それにしても、Scheme の世界観は本当に美しいと思います。
以前、「継続というのは、靴下を裏返すようにして、ひっくり返した ラムダ」
という話を聞いて感動したのですが、

この下のほうの Shiro さんの説明
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Seminar%3aKahua
「値を返す ≡ 値を継続手続きに渡す」
これを聞いて、さらに感動しました。
結局 Scheme の制御構造は ラムダしかない。関数もブロックも環境も、全部
ラムダ。なんか世界の見え方が変わってしまいますよね。

しかし、これを Java でのプログラミングに、どのように生かせばいいのだろう…。
例えば,今まで C しか知らず,そのままでいると:

1. 再帰を恐れる.再帰で考えられない.再帰のコーディングの仕方に慣れていない.
2. 配列ばっかり.
3. スコープについてしっかり理解できていない.
4. なぜか速度ばかり気にして,少ないステップ数を重視した見辛いコードを書く.

といった感じになると思います.
でも,これは「言語はいくつか学べ」の理由でしか無いかも.
>>624
お前、C使いに物凄い偏見を持っていないか?

または、たまたま >>624 の周りでCを使う奴は皆
その程度にしか使えないだけなのか?
626デフォルトの名無しさん:04/06/17 20:52
scheme 使う人に質問です。

何故 scheme は list の末尾が nil ではないのですか?

末尾は nil にしておいた方が美しい設計だと思うのですが・・・
nil が存在しないからです。
scheme を知ってからは C でも alist もどきを多用するようになった。
629デフォルトの名無しさん:04/06/17 23:11
>>626
リストの末尾は他と区別できる単一の要素(空リスト)があればいいだけなので、特にnilだと
美しいという根拠がわかりません。それよりも真偽値と区別のないLispよりはSchemeの方が
すっきりしているのではないでしょうか。そもそも真偽値とリストは型が違うわけですから。
>>626
名前が欲しいだけなら(define nil '())で。
>>630
'(a . nil) が (a) にならない罠
632630:04/06/17 23:50
あうち。リーダーマクロでなんとかとか...
ごめん、忘れてください。
633603:04/06/18 01:39
>>618
有難う御座います。↓とかにうpして貰えれば嬉しいです。
ttp://www.uploda.net/cgi/uploader2/index.php

>>605 = 615
ご親切に有難う御座います。
bz2でうpできる場所は、見つかれませんでした。
拡張子を誤魔化してうpするという方法が、可能かどうかまで調べていません。
気が向いたら、うpしてください。
うう…結局、Lisp を学んで、Java のプログラミングスタイルが変わった人は
いらっしゃらないのでしょうか。この言語はとても魅力的だけど、仕事にほとんど
生かせないのなら、なんとも悲しいものがあります。

Namazu の高林さんが
「Scheme を学んでからは、他の言語でプログラムを書くときの切れ味もずいぶん変わった
 気がする。」
http://namazu.org/~satoru/unimag/10/
と言っていたから、すごく期待していたんだけどなあ。

そう言えば高林さんは、Java が嫌いだとも言っていたか…。
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview20.html
所詮その程度の人間だったということだ
>>633
上げといた。こういうの使うの初めてなんだけど、これで良いのかな。
>>634
今どきLispをやろうなんて物好きは、趣味で楽しんでやってるだけなんだから
仕事に生かそうなんて期待するな。
638603=633:04/06/18 03:51
無事↓できました。有難う御座いました。

勝手に想像していたものより良い意味で裏切られました。
まだ、ちょろっと読んだだけですが、付属のLibも一通り揃っている感じですし
SECDRのRを何故Sから分離したのか、勉強してみたいと思います。

そういえば、どこかでSECDH machineというのが有ると聞いたときがありますが
ここでのHの意味って、何なんでしょうね?
>>634
プログラミングスタイルが変わらないんだとしたら、要するにLispで
やってるような抽象化が必要とされるようなプロジェクトをやってない
ってことでは。実際、Paul Grahamがなんと言おうと、世の中の
プログラムの9割はそんな「力」を必要としないんだしさ。

漏れは、どうしても仕事でLisp以外の言語で書かざるを得ない時は、
人間コンパイラになったつもりで頭の中の高階関数のコードを静的な
クラスに展開したり、人間マクロエクスパンダになったつもりで
パターンに沿ったコード書いたりしてるけど。つくづく無駄なことを
してると思うが、そのぶん金払うのはお客さんだしね。
ただ、どうしても我慢ができなくなった時は、LispでJavaやらCやらの
簡易マクロプロセッサを書くこともある。
>>637
そう割り切ればいいのかもしれませんけど、仕事しんどいし、何かこの知見を
利用して楽になれないものかと思っちゃうんです。


>>639
> 要するにLispでやってるような抽象化が必要とされるようなプロジェクトをやってない
ああ、それはありますねえ。
せっかく CPS を理解したんだから、今度の Java の仕事で session に継続を
保持させてみよう、と思ったんですが、考えてみたら、CPS を用いるほど細かい
制御はまず必要ないんです。

Lisp が一番力を発揮するのは、構文解析とか、複雑な構造のデータを扱う場合
だと思うんですけど、そういう仕事やってないですし。DB に SQL を発行して、
返った値をオブジェクトに収めて、JSP で表示させて、ハイ、おしまい。
マクロで展開させたいと思うようなことも、あんまりないです。
嫌だと言っても、世の中の99%はそういう仕事ですし。

「技術野郎の復讐---Revenge of the Nerds---」への反響
http://www.shiro.dreamhost.com/scheme/trans/icadmore-j.html

>>635 氏の言う通り、私には Lisp は必要なかったのかな?いや、Lisp 業界が
私を必要としていないのか。…鬱だ死のう。
IO操作はcall-with-うんたらかんたら系があると便利だよね。
標準IOをインターフェース変えずにファイルやソケットや文字列に割り当てたり。

C/C++言語もそういう仕様だったらよかったのに。
こっちは出来た時代が古かったんだね。
642デフォルトの名無しさん:04/06/18 11:27
LISPのcarやcdrが基本なリスト操作知ってからは
ほかの言語でリストコンテナ書き直す回数が減った。
いまどきのC++やjavaには標準で付いてるけどね。
でもそういう標準コンテナを使うときも
LISPで培ったやり方が適用できると思う。
先にLISPのマクロ知ったおかげでboostとかのライブラリが幼稚に見える。
Javaの仕事がきついって言うけど、
それなら一番手っ取り早いのはJavaのエキスパートにコードを見せて
何か改善点がないか相談することでしょ。
改善のしようがなかったら、転職するかその仕事に耐えるかしかない。
どうやったらJavaに生かせるかLisperに訊かれても、そんなん知らんがな。
自分で応用していくしかないんだよ。
ま、仕事の質から言って、やっぱLISPが最強だったね。
何でもかんでもLispでやりたがる奴はLisperじゃない
Guy Steele Jr.のメアド教えてください。
誰もそんなこと言ってないが。
>被害妄想な645
>>646
どっかのMLにいたよ。
`(Guy,@Steele.Jr)
最強厨、現る
>>647
お前に言ったわけじゃないんだが
652デフォルトの名無しさん:04/06/18 15:41
Lispの本って高い!!
>>642
複雑なデータ構造の仕事をしている人だと、Lisp の経験が生かせるみたいですね。

>>643
なんというか最近、Java の世界そのものに息苦しさを感じてしまいまして。

Lisp の世界は自由自在・融通無碍だとどこかで聞きまして、Lisp だけで食っていける
人はまずいないそうですから、Lisper が Java を書くことも当然あるだろうと。
Java しか知らない人からじゃなくて、そういう視野の広い人から、話を聞いて
みたかったのです。
>>653
本物の Lisper なら、

>DB に SQL を発行して、
>返った値をオブジェクトに収めて、JSP で表示させて、ハイ、おしまい。

その作業を、システムを使うユーザーにやらせようとする。
つまりスクリプトを積む訳だ。
で、スクリプトには当然 Lisp を採用。
655605=615:04/06/18 23:57
>>603
SECDR入手済みだよね?親切な人が生息しているようで何より。

過去ログ眺めてきたけど、何か妙に卑屈になってるのが居るみたいね。
2chで泣き言いってる暇があったら自分でLisp使う仕事作りゃいいのに。
漏れは作ったぞ。他にLisper居ないから1人デスマーチだけどな(w
そうそう。Javaにうんざりしている同志がこんなもん作ってるけどこのスレでは紹介されてなかったよね?
暇なとき調べてみようと思って手付かずなので誰かが使用感レポートしてくれることを期待して貼っておこっと。
hxxp://www.evaluator.pt/linj.html
http://www.evaluator.pt/linj.html
めんどくせーことするな
Meadowのrun-schemeで、Gauche(utf-8)を使いたいのですが、可能でしょうか。
いまの設定は、下の設定です。
(setq scheme-program-name "d:/cygwin/usr/local/bin/gosh.exe -i")
http://kawacho.don.am/win/meadow/customize/dot-emacs-sample.html#japanese

ご面倒ですが、アドバイスをお願いします。
659デフォルトの名無しさん:04/06/20 00:23
>>658
Meadow1.15はutf-8対応でないそうなので、Meadow2をインストールしました。
そして、M-x set-buffer-file-coding-system utf-8にしました。
すると、こんな出力になっています。
gosh> (display "山下")
ツ山ツ可コ#<undef>
よう分からんけど set-process-coding-system の方じゃないかと疑ってみる。
661デフォルトの名無しさん:04/06/20 10:03
>>660
ありがとうございました。
ご指摘のとおり、set-buffer-process-coding-systemで
inputもoutputもutf-8に設定することで、問題解決しました。
ども。
Lisp の知見を 他言語で、という話だけれど、継続を使えば、Web アプリが
スッキリ一つながりに書けるようになるよ。
http://tabesugi.net/memo/2003/b1.html#101129
普通なら HTTP リクエストごとに分断されたコードを書かなきゃいけないけど、
継続を使って、コードの実行を中断して、HTTPリクエストを処理してから再開、
といった作業がシームレスに行えるから。

だけど、この継続をいちいち手作業で作るのは面倒くさいね。言語自体が継続を
サポートしていないと、かえって面倒くさいと思う。Java じゃ無理か。

Perl6 は継続をサポートするようになるそうな。Perl使いの皆さん、おめでとう。
http://tabesugi.net/memo/2004/61.html#092240
Perl使いは誰も継続なんて知らないみたいだけどな。

新山氏のサイトを斜め読みしていたら、たまたま出てきたんで書きました。
以前も話題になりましたが,defpackage にはキーワードを使ったらいいのか
文字列を使ったらいいのか分かりません.

cliki に置いてあるコードでも両方見かけます.

叫ぶぼどではないので大文字は避け,キーワードを使いたいのですが,
どんなトラブルが起こりうるのでしょうか.教えていただきたいのです.

パッケージ名は :pkg-name のようになっていて,その中で :export される
シンボルは #:func1 のようにすれば絶対安心なのでしょうか?
最近 asdf というのがあるんですが,これは何ですか?
ちょっとしたプログラムを install するにもコレが必要らしいです.
google しても関係なさそうなサイトばかり引っかかります.

正直,べんり? 入れなきゃダメ?
asdf は lisp 版 make …という説明でわかるかな?
昔からある defsystem に代わるもの.CLOS ベースになってる.

依存関係や C ライブラリのビルドなどが設定可能な便利
ツールだが,どうしても嫌なら別に入れなくてもいいぞ.
全部手動でやる事も面倒だけど可能だし,defsystem 用の
ファイルも提供してるプロジェクトも多いしな.
マニュアルはここ。入れなきゃダメってことはないけどDebianでCommon Lisp Controller
使ってれば普通に入ってるし、正直便利。いろんな人が作ったライブラリ突っ込むのも
asdf-install一発で片付くんでらくちんだよ。
hxxp://constantly.at/lisp/asdf/
667664:04/06/20 17:47
>>665-666
恥ずかしながら,lisp プログラムのインストールに make のような
ものが必要ということさえ知りませんでした.
(load "hoge") 一発かと...

debian を使っているので,sarge あたりから
common lisp 周りのパッケージが増えたな,と感じていました.

ただ,自分の管理下でないシステムに,自分が書いたコードを持っていったとき
のことが気になります.そのコードが,asdf を使ってインストールされた
プログラムを使っていると,向こうのシステムにも色々持っていかないと
なぁ,,,という気がするのです.
とにかく試してみます.ありがとうございました.
668664:04/06/20 22:15
私は asdf も入れられないレベルのようです.どうか力を貸してください.

$ clisp -q

[1]> (load "load-asdf-install")
;; Loading file /home/yu/src/html/src/asdf-install/load-asdf-install.lisp ...
;;; ASDF-INSTALL: Loading ASDF-INSTALL package from directory
;;;               "/home/yu/src/html/src/asdf-install/"


*** - A file with name ASDF-INSTALL-LIBRARY:defpackage.lisp does not exist
1. Break ASDF-INSTALL-LOADER[2]>

defpackage.lisp を ASDF-INSTALL-LIBRARY:defpackage.lisp みたいな
変な名前にリネーム,,,するわけないですよね?
どうすればいいのでしょうか.まずは cl-ppcre を入れたいのに.
>>667
ある程度の規模になると依存関係とかロード順を考えなきゃならんでしょ?
C/C++ だってファイルが増えてくると make や IDE の支援が必要になるわけで。
で、C/C++ のソースを配るときに make があるか心配だから make を使わない
というほどの心配性ならともかく、asdf 自体は特に依存してないのでそんなに
心配する必要はないです。asdf.lisp 添付してもいいしね。

それでも、どーしても嫌なら自分で書いたコードには使わなきゃ良いだけです。
>>668
できれば自分の環境(特に使ってる clisp のバージョン)はかいといた
ほうがいい。なぜなら clisp で format のバグで asdf.lisp がコンパイル
できないバージョンとかあったからな。最新のは大丈夫なんだけど。

で、先に asdf.lisp をロードしてないとかそーゆうんでないかな。今手元に
clisp が無いんで推測なんだが。
671664:04/06/20 22:31
>>670
はい.clisp 2.27 です.
うっかり asdf-install/doc/index.html を読んでいませんでした.
README がインストール方法かと思ってしまいました.
そこで,index.html にある方法でやりましたが,,,

current directory には asdf があるディレクトリと,
asdf-install/asdf-install.asd へのリンクがあります.
$ clisp -q

[1]> (load "asdf/asdf")
;; Loading file /home/yu/src/html/src/asdf/asdf.fas ...
;; Loading of file /home/yu/src/html/src/asdf/asdf.fas is finished.
T
[2]> (asdf:operate 'asdf:compile-op :asdf-install)
; loading system definition from asdf-install.asd into #<PACKAGE ASDF1175>
;; Loading file asdf-install.asd ...
; registering #<SYSTEM ASDF-INSTALL #x203A4CB1> as ASDF-INSTALL

*** - handle_fault error2 ! address = 0x4556454F not in [0x202B6000,0x2037220C)!
SIGSEGV cannot be cured. Fault address = 0x4556454F.
セグメンテーション違反です

asdf って簡単そうな名前なのに orz
2.27 て…。まぁ、asdf.lisp がロードできてるなら cl-ppcre の
インストールに asdf-install は要らないよ。手動で cl-ppcre の
アーカイブをダウンロードしてきて
[1]> (load "asdf/asdf.lisp")
[2]> (load "cl-ppcre/cl-ppcre.asd")
[3]> (asdf:oos 'asdf:load-op :cl-ppcre)
だけ。あとは (saveinitmem) としてイメージ作れば良いじゃん。
あと 2.27 にこだわる理由がなければ 2.33.x にしとくのが吉。
673664:04/06/20 22:43
>>672
親切にありがとうございます.
いま,cmucl でやってみると,一通り終わるものの 5 errors 出ました.
;;; メインで clisp を使うのに *.x86f が出来ても...

はい.debian woody なのと HDD が小さいのでバージョンアップを
渋っておりましたが,以下の理由で考え直します.


[2]> (load "cl-ppcre/cl-ppcre.asd")
;; Loading file cl-ppcre/cl-ppcre.asd ...
*** - handle_fault error2 ! address = 0x4556454F not in [0x202B6000,0x2037220C)!
SIGSEGV cannot be cured. Fault address = 0x4556454F.
セグメンテーション違反です
やたっ! Mac OS X 上の ECL でスレッド使えた。
つっても無理矢理ビルド通しただけなんで、実用性はありませんけど。

素朴な疑問ですが、Lisper な人ってスレッドをあまり必要としていないんでしょうか?
ネイティブスレッドを使える環境がかなり限られている感じがします。
675674:04/06/21 00:15
と思ったら、重い処理させると落ちる・・・。
>>664
Debian使ってLispやるならsidがいいのではないかと。
Kevin M Rosenbergが精力的にパッケージ作ってくれてるのでマジで助かります。
バグ修正したり機能拡張したコード送ると(暇なら)次の日にはパッケージ更新してくれるし。
ディスク容量とかメモリとかはカネで時間(作業効率)が稼げると思えば安いもの。組み込み
用途を検討中とかなら話は別だけどね。
hxxp://b9.com/debian.html

>>674
Lisperがスレッドを必要としないってことはないでしょう。SBCLのウリのひとつだし。
Lisperは正規表現を必要しないってのは聞いたことがあるけど。リーダーマクロマンセー。
677664:04/06/22 02:50
clisp バージョンを上げて解決しました.
便利な正規表現を使えるようになりました.みなさんのおかげです.

ところで,
(asdf:oos 'asdf:load-op 'cl-ppcre)
が終わるのに 2 分くらいかかりますが,これは毎回必要なんですか?
実際に使うために動かすのは手元ではないので耐えられますが...

>>676 sid は色々気をつけないとならないので逃げます orz
>>677
cl-ppcre をロードした後に (saveinitmem) で
新しいイメージを作ってそっちを使うようにするのが定石です。
#!/bin/sh
/usr/local/bin/clisp -M ~/my/dir/initmem
みたいに自分のイメージを使って起動するシェルスクリプトを
パスの通ったところに置いておきましょう。

あと、clisp なら標準の regex, あるいは pcre モジュールの
ほうが性能は良いって事は心に留めておいたほうがいいです。
cl-ppcre は移植性と互換性は良いけどね。
Gaucheのwww.cgiを使ってみたいのですが、下のようにoutput-charset
を定義すると、「"euc-jp"」と評価されます。ここで、「euc-jp」と
評価されるにはどうしたらいいのでしょうか?
(define output-charset "euc-jp")
(define (main args)
(cgi-main
(lambda (params)
`(,(cgi-header
:content-type #`"text/html; charset=,(output-charset)")

>>679
あっ。。。
(define output-charset "euc-jp")
(define (main args)
(cgi-main
(lambda (params)
`(,(cgi-header
:content-type #`"text/html; charset=,output-charset")
CGIプログラムを継続を使って書くと綺麗なコードになると何度か聞いたことがあります。
たぶん、HTTPがステートレスな接続形態であることをうまく隠して、
複数のHTTP要求と応答をひとつのセッションとしたコーディングができるようになるのかなと
想像しています。具体的に教えてください。

また、Continuation Passing Styleで書けば継続が直接サポートされていない
Common Lispでも同じように綺麗なコーディングができますか?

Kahuaも継続を売りにしていますよね。
cygwin 環境で guile-1.6.4をコンパイルしたのですが、make途中で
エラーが発生してしまいます。

場所は

cat alist.doc (略) regex-posix.doc | GUILE="/cygdrive/c/home/work/guile-1.6.4/
pre-inst-guile" ../scripts/snarf-check-and-output-texi --manual > guile.texi ||
{ rm guile.texi; false; }
ERROR: Unbound variable: define

guile.texiを作成するところです。実行ファイルそのものはできている
ようなのでそれを直接実行してみると

bash-2.05b$ libguile/guile
ERROR: In procedure primitive-load-path:
ERROR: Unable to find file "ice-9/boot-9.scm" in load path
bash-2.05b$

のようなエラーになります。configure時には何も指定していません。
どなたか対処法をご存知ありませんか?
683664:04/06/22 23:04
>>678
>>672 で (saveinitmem) に触れていただいたのに見落としていました.すみません.
debian sarge の cmucl でも cl-ppcre を難無く load できました.

移植性と互換性とはいっても,古いバージョンには入れられないものなんですね.
他所 (sparc マシン) の cmucl で動くか試してみましたが,
load 中,api.sparcf で type-error が出て入れられないんです.
しかも api.lisp の何行目が悪いのかも分からず...

自宅では軽い clisp で作り,cmucl の入ったサーバーにアップロードという
目標は無理のようです.orz
>>681
Kahuaのチュートリアルがわかりやすいかと。
http://www.kahua.org/cgi-bin/kahua.cgi/kahua-web/show/doc/hello-kahua#H-y3tjno

ちなみにKahuaでいう「継続ベース」というのは、call/ccでどうのこうの
ということではなくてCPSで書きますということです。
すなわち、Common Lispでも同様にやれるでしょう。
>>681
http://www.common-lisp.net/project/ucw/index.html
Common Lisp で継続ベースの Web アプリ開発フレームワーク、だそうです。
使ったことないですが。
>>683
エラー吐いてデバッガに落ちてるんじゃないの?
バックトレースとかスタックフレームとか調べてみた?
まず「ソースコードの何行目が悪いのか」という思考から「どこの式が悪さしてるか」を
意識するようにしてみるといいかも。
>>684-685 ありがとうございます。
688664:04/06/23 22:44
今日,>>686 のご指摘通りデバッガとの対話を学び,試そうと某所へ行きました.

すると,コケたはずのインストールが,修正していないのに出来てしまいました.
(asdf:oos ...) も (load "cl-ppcre-0.7.7/load.lisp") も出来ます.
;;; 管理者さんがこのスレにいるのでしょうか...
そして,マイ core も作りました.
あとはカッコいいプログラムを作るだけです.ありがとうございました > root
Windows版はないのね。残念。
湯浅センセがスーパークリエイタになってはる。応募しはったときも
思たんやけど、なんで今さら…。めっさ、違和感あるわ。次世代ちゃ
うやろ。
ペタジーニのバントみたいだな。
夢が壊れるよ。
692デフォルトの名無しさん:04/06/25 08:54
そう?
あの年で(失礼)、また教授になってもhackするのはいいことじゃないですか。
おまえらももっとhackしろというメッセージだと思ってます。
lisp屋が おじさん/おばさん、おじいさん/おばあさん になっても
hack するのは、デフォじゃないの?
お金とって来れる偉い人がなっちゃいかんよなぁ。
もっと若い人に譲らなきゃ。
若い連中がふがいないから教授に取られちゃうんだよ。
ファイルの中身をまるまる string にするには,どうやればいいですか?
get-output-string-stream は output stream にしか使えないんですね.
>>694
>お金とって来れる偉い人がなっちゃいかんよなぁ。

もしかして「京大教授」って、意外と薄給なのでは?
>>696
処理系は? まぁ、このへんを参考にしたらいいと思いますが。
http://www.shiro.dreamhost.com/scheme/wiliki/schemexref.cgi?port-%3estring

>>697
「お金」= 「給料」ではなくて研究費です。
給料は国立大の教授なら1000万程度では。
いいと思うかは微妙なところだけど。
XSで未踏に応募したのはWindows版の開発を委託する費用を捻出するため。
スーパークリエイターに認定されたのは湯浅センセがどうこうできることじゃない。
695の意見が正しいと思う。
少し前に話題になっていた、Lisp の知見を他言語(Javaなど)で生かす話、
こんなのを見つけました。

『A Little Java, A Few Patterns』
http://namazu.org/~satoru/diary/20010320.html#p01

この本は、名著『Little Schemer』の著者によるものだそうで、デザパタの中でも
難解で知られる Visitor パターンが、関数型言語の考え方から自然に導かれることを
説明するのだそうです。

そうか。関数型言語なら高階関数で行うことを、オブジェクト指向言語はオブジェクトで
行うのか。それらの知見は、ある程度は相互に利用が可能みたいですね。

邦訳も出ているみたいです。
『Javaとピザとデザインパターン』
http://www.amazon.co.jp/exec/obidos/ASIN/4797307900
あと一つ、Greenespun's 10th Rule のグリーンスパンの Blog から
『Scheme vs. Common Lisp』
http://philip.greenspun.com/bboard/q-and-a-fetch-msg?msg_id=0006XQ

私は Scheme を少し知っているだけなのですが、これを読むと Common Lisp の実用性は
素晴らしいと思いますねえ。

それにしても、flame war 勃発と思いきや、あんまり騒ぎになってない。
そもそも Lisp 界にはフレームが起こるほど人がいないのか。

グリーンスパンが同じ Blog で Java を揶揄したときは、スラドを含めて
大騒ぎになったらしいのにねえ。
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Shiro%3alog%3a2003%b8%e5%c8%be
(2003/09/24 18:54:23 PDT)を参照
702696:04/06/26 14:06
>>698
あっ,common lisp の話なのに書き忘れてしまいました.ごめんなさい.
処理系は clisp ですが,処理系に依存しない方がいいです.
いろいろ試してはみましたが,do と read-line よりいいものは無いのでしょうか.
>過去ログ眺めてきたけど、何か妙に卑屈になってるのが居るみたいね。

lisp界には凄い人が普通にいる感じがするからじゃないかな。
shiroとか苫米地とか新山とか。
KCLの両先生はさしあたり東大寺の仁王像、京都大学は奈良の大仏、
アランスク先生はジャンヌダルクかフランス貴公子(奇行氏)といった所だろう
(適当だが)
shiro >>>>>>>>>>>>>>>> 苫米地 > 俺 > 新山
↑バカディスカー?
706デフォルトの名無しさん:04/06/26 21:00
>>703
>アランスク先生はジャンヌダルクかフランス貴公子(奇行氏)といった所だろう
>(適当だが)

災いを招くつもりですか?
707デフォルトの名無しさん:04/06/26 22:09
新山さんとアランスク先生って誰?
shiroさん最強。
苫米地さんは謎。コード読んだこと無いし。
新山さんは・・・日記職人(田口)。
>>707
aranskはゲームセンターで小学生突き落とした中学生
710デフォルトの名無しさん:04/06/27 12:26
>>710 特に意味がない。

(fold KONS KNIL LIST ...) (SRFI1) が元ネタ。2つの引数を持つ
プロシージャを何度も呼ぶとき、第2引数の初期値として使われる。
多くの場合、KONS として cons のような 関数を使い、KNIL として
'() が使われる。
712デフォルトの名無しさん:04/06/28 14:23
chezのコンパイラについて御意見を聞かせてください。購入しても
バイナリのみのライセンスですよねぇ(いくらするんだろう)? >chezer様
>>712
個人向けの販売はしてないらしい。
$9000とか、学校向けでも$4500もするんだもんな。
Kent教授に嘆願書でも出さないか?
>>713
それでもずいぶん安くなったのではないですか?
ACL もずいぶん安いライセンスも出るようになったから、Chez も今後、
期待したいですね。

下は、2年前の話。

LISP Scheme Part6
http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html

835 名前: デフォルトの名無しさん 02/11/26 03:59
Chez Scheme 6.0の見積もりを取ったが、いやはやあんなに高いとは。
マシン・タイプごとに24,500ドル。サポートが1機種 年間1,350ドルだと。
それほどの価値があるソフトなのか???
ACL アカデミックとかじゃなくて普通に商用に使うために買うといくらするの?
このスレの Part 8 で紹介されていた URL に $599 という価格があるんだけど、
http://www.franz.com/products/packages/

これって、アカデミック・ディスカウントなの?
そうは思ってなかった。
教育関係なら、ここからさらに割り引かれるのかと思ってました。

ご存知の方おられませんか?
717デフォルトの名無しさん:04/06/29 08:23
先日のFranzセミナーでもらった価格表によると…

Windows/Linux/FreeBSD/MacOS X版
Professional 750,000 (395,000)
Enterprise 1,400,000 (795,000)
Platinum 2,000,000 (895,000)

UNIX (Sun, IBM, HP, Compaq)版
Professional 1,300,000 (520,000)
Enterprise 2,000,000 (1,040,000)
Platinum 2,750,000 (1,200,000)

…高い… orz
718717:04/06/29 08:24
あ、括弧の中はアカデミック価格ね。
俺はソースネクストが1980円で売り出すのを待つよ。
括弧を無くして初心者にやさしい構文になったAllegro CLパーソナル版
1,980円!
>>717-718
ありがとうございます。
業務システムなら千万単位の金が動くのは当たり前なので、そういうところが
売り込みの対象なのでしょうね。

SUN の Java みたいにただでばら撒いてもらえるとありがたいけど、これを
売って会社を成り立たせているから、市場の少ない段階ではおいそれと値下げも
できないし。

考えてみたら、Java がタダでばら撒かれているのがすごく不思議な気がしてきた。
インタプリンタでさえF1マシンのように速いのにコンパイラは
どれ程のものだろうね。個人的にはchez(petite)で
EdwinみたいなEmacs互換のエディタがあればいいなぁ。
そういえば奥村先生の辞典にあるメルセンヌ数(素数)判定の
プログラムをpetiteで再実装したらCコンパイラ(gcc)のコードより
かなり速かった。…やっぱpetiteインタプリンタが内蔵された
エディタが欲しいなぁ。doctorの腕も上がるかもねww
723デフォルトの名無しさん:04/06/29 15:23
Gaucheのテキストツリー構造を見ています。仕様の資料ってありますか?

(use text.html-lite)
(html:html (html:h1 "TITLE"))
=>(#0="<" html () #1=">" ((#0# h1 () #1# ("TITLE") #2="</"
h1 #3="\n>")) #2# html#3#)

(html:html (html:h1 "タイトル"))
=>(#0="<" html () #1=">" ((#0# h1 () #1# ("ツタツイツトツδ・)
#2="</" h1 #3="\n>")) #2# html #3#)
May the source be with you.
happy hacking
726デフォルトの名無しさん:04/06/29 18:26
Windows版のLispってありませんか?
ググれ
ググった
>>721
petite の方はただで配ってるし、プロプラなアプリに組込んで使っても問題無い感じ。
ところで、↓この chez の方の src.rpm ってソースコード丸々入ってるんですか?

ttps://www.cs.indiana.edu/chezscheme/iu/
730デフォルトの名無しさん:04/06/30 00:52
>>726
Allegro CLのWindows版があるよ。
731デフォルトの名無しさん:04/06/30 11:47
>>724-725
了解しました
(文字化けは、文字コード設定だけの問題でした)
>>729
.aしか入っとらん。
そんなに世の中甘くないぞ
 Gaucheのマニュアルを見ているんですが、なぜ戻り値の型が記載されていな
のですか? 下のような形が標準であって、戻り値の型は必須になっていない
です。Scheme的な流儀?
 調べてみると、stringが返ってくるのか、portが返ってくるのか等々、判断
しにくいです。

ex) Function: read-block nbytes &optional iport
ttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_101.html#SEC105
釣りか?
吊りなのか?
>>733
srfi とか、あるいは(scheme じゃないけれど)clhs みたいな
フォーマットで書いてほしいって事でしょうか。
と、解釈してみます。
>>733
MLやWiLiKiでshiroさんにきいてみなよ。
即効でレスしてくれるぞ。
>>733
文字列を返すこともあれば、eof オブジェクトを返すこともあるわけで、
一つの型には決められないからじゃないのかな。

そこらへんをうまく扱えるいい表記があればね、と無責任モード。
Schemeにも型表記の取り決めがあればいいね。
型が変化しない関数は組み込みを含めてありえるわけだし。
CommonLisp族のdeclareディレクテイブはどうなんだろう。
739デフォルトの名無しさん:04/07/02 18:38
型なんかが必要な人は頭が型いんです。
OnLisp 邦訳、Franz のサイトからリンク張ってあるね。
>>740
すげぇな。ほんとだ。
あとは訳が完成するのをまた〜りまつこととしますか。
訳が完成したら出版してほしいなあ。
翻訳の完成度高いし。
そんなことより >>740 -- >>742 よ,ちょいと聞いて下さいよ.Lispとあんまり関係ないけどさ.
今日(昨日),ACMプログラミングコンテスト予選があったんです,ICPC国内予選.
そしたら各大学3チームしか選ばれないのに,東大から19チームも出てて絶望なんです.もうね,ア(ry
で,1年生(教養前期)3人のチームの中にうちのサークルの新人がいたんで,
「ま,選抜はされないだろうけど精一杯やるさ.きみっちもがんばれよ」と先輩風吹かしてみたら,
なんと彼ら qoo_ が東大3位,全国4位(まだ暫定)で選抜されるっぽいんです.
ttp://www.logos.ic.i.u-tokyo.ac.jp/acm-icpc/standings.html
そこでまた(全国86位の自分に)ぶち切れですよ.
偉そうな顔して何が,探索空間広杉,だ.
自分はJavaでO(n^6)の土方コーディングしかできないのちゃうんかと.
まあ私,flatlineは,分数の単位分数による分解をきちんと解きなさいってこった.

            ☆      ☆      ☆

なお使用可能言語はC, C++, Javaの3つ,時間は3時間15分でした.
それに対してICFP http://www.cis.upenn.edu/proj/plclub/contest/ の方は任意の環境が利用でき,
時間も数日単位です(チームで寝る奴と書く奴を分担したり).
例年OCamlとかが人気のようですが,Common Lispも数チームずつ選んでいるようです.
これを読んでいる学生の方,どっちでもいいですが参加してみてはいかが.
優秀な方に対しても,私みたいな orz に対しても,よい体験になると思います.
これって、参加者のコード見れるの?
>>743
なんかこう何とも言えないでつな(汗
C, C++, Javaてのがまた。来年あたりC#とかが追加されてみたりすんのかねぇ?
Lispでごりごりなら743もゴリゴリ逝けたはず?
まぁ、学生さんたち頑張ってくれ。
>>726
SBCL win32 port のパッチが公開されてるよ。
見られません < 提出済みコード
審判システムが終了してるので,感想戦やろうにもなかなか難しい.
まぁ大きなコミュニティに属してる利点ってのは,
そういうときでも「そのコードがacceptされたチームの人」「その場で(!)解ける人」が
身近にいるってことなんですが.

ICPCはどの言語だろうと本質的な手間は変わらない問題が多いぽ.
手続的言語にしぼってるのは,それなりの意図でしょう(Pascalが加わる場合も).
まぁ「Lispだとこうなる」ってのも面白いのでちょっと過去問を解いたことがありますが.
絶対に declare しておきたい場合を教えてください.

cliki に置いてあるのを参考にしてみるも,全部に型を書いてあるんです.
ここまで頑張るのでは大変です.
効果が大きいとか小さいとかは,どうしたら分かるのでしょうか.
絶対必要なのはプロファイルをとる事。なんでかっつーと、
効果がわからないって奴の大半はボトルネックをきちんと
測定していないから〜。

型指定はその後。一番良く呼ばれる関数のインライン化、
速度なら多用される計算関数、頻繁にアクセスする配列、
メモリ量ならサイズの大きい構造体や配列、クラス等で
の型指定かなぁ。きちんと Profiling してるなら効果
もそれなりに測定できるはず。後は disassemble するとか。
750デフォルトの名無しさん:04/07/03 20:56
ヤッターマン
751デフォルトの名無しさん:04/07/03 20:57
コーヒー
752デフォルトの名無しさん:04/07/03 20:57
ライター
753748:04/07/04 16:05
>>749
ありがとうございます.こんなに簡単に分かるものだったなんて初めて知りました.

declare 前後の効果をはっきり知るために declare 式を一斉に
on, off したいのですが,コメントにするのでは大変です.
C の ifdef のようなものがあると便利なのですが,
こういうときに役立つ方法を教えてください.
*feature* に :declare-shiru を push して #+ 等を使うのは普通ですか?
関数として扱え,setf の 1 番目の引数でも使える accessor とは何なんでしょうか.
例えば,色々なものをごちゃ混ぜにしたリストを複数の関数で扱うとき,

(defun data1 (lst) (cdr (nth 3 lst)))
(defun data2 (lst) (cdr (nth 5 lst)))

とやると setf でアクセスできなくなりますし,

(defmacro data1 (lst) `(cdr (nth 3 ,lst)))
(defmacro data2 (lst) `(cdr (nth 5 ,lst)))

とやると関数を引数にするものに渡せません (:key など).
こんなとき,みなさんはどうやっていますか?
こんなんじゃなかったっけ? あと適当に defsetf とかで検索しておくれ。

(defun kar (kons)
(car kons))

(defun (setf kar) (kons obj)
(rplaca obj kons))

> (setq data '(1 2))
(1 2)
> (kar data)
1
> (setf (kar data) 3)
(3 2)
> data
(3 2)
756754:04/07/05 20:02
>>755
全く知りませんでした.ありがとうございます.
CLHS を一から読むと,まだ知らないことがゴロゴロ出てきそうです.
あ、上のでも一応動くんだが

(defun (setf kar) (obj kons)
(rplaca kons obj))

だった。
あら、gencgc って SPARC にも対応してたんだ。CVS 追っかけてなかったから知らんかった。
次は MP かしらん(ワクワク
(っ´∀`)っ(defun mona () ((っ´∀`)っ(defun mona() ((っ´∀`)っ
(っ´∀`)っ(defun mona () ((っ´∀`)っ(defun mona() ((っ´∀`)っ
(っ´∀`)っ(defun mona () ((っ´∀`)っ(defun mona() ((っ´∀`)っ
(っ´∀`)っ(defun mona () ((っ´∀`)っ(defun mona() ((っ´∀`)っ
(っ´∀`)っ(defun mona () ((っ´∀`)っ(defun mona() ((っ´∀`)っ
そういうの、大人はあまり面白がってくれないよ。
無名関数のみで再帰するシンプルな方法を考えてみました。
まず、リストの長さを測る関数 my-length を作ってみる。

(define (my-length list0)
 (if (null? list0)
   0
   (+ 1
     (my-length (cdr list0)))))

(my-length '(1 2 3 4))

==> 4

それを無名関数だけで書き直す。要するに、自分と同じ形の関数を
引数に取って、それを再帰の代わりに呼び出すのである。

((lambda (function list0)
  (if (null? list0)
    0
    (+ 1
     (function function (cdr list0)))))
(lambda (function list0)
  (if (null? list0)
    0
    (+ 1
     (function function (cdr list0)))))
'(1 2 3 4))

==> 4

これを理解すれば、Yコンビネータを理解することの助けになると
思ったんですが、いかがなものでしょうか?
前スレあたりにいくつかあったよ
>>762
ありがとうございます。なるほど、確かに前スレにありました。
見たはずなのですが、当時は理解できなくて読み飛ばしていました。

今『Scheme 手習い』の9章を読んだばかりで、
「この Yコンビネータは洗練されているけれど、分かりづらい。汎用性をなくせば、
 もっと分かりやすい再帰ができるのじゃないか?」
と思ったのですが、すでによく知られていることなのですね。すみません。

以下は前スレの引用ですが、眼からウロコが落ちる思いでした。
-----------------------------------------------------------
437 名前: デフォルトの名無しさん 03/12/12 23:03
lambdaだけで回すコードは、カンの鋭い人なら、相互的な再帰処理を
書いている内に自然と気付くかもしれない
結局は、以下のより単純にした式

((lambda(x)(x x))(lambda(x)(x x)))

この式の応用だから
このスレの話題と呼応する様に、Bill Clementson のブログに Java と CL の連携の話が出てるね。








hobbitとBiglooってどう違うん?
>>743 flatline 氏

on Lisp の邦訳の 148ページ目に、TeX のタグが残っていますよ。
-----------------------------------
Common Lisp のこのコードは,
\begin{verbatim}
(let ((f #’(lambda (x) (1+ x))))
(funcall f 2))
\end{verbatim}
>>765
hobbit は r4rs だし、末尾再帰の最適化もされないんじゃなかったっけ?
Bigloo がどうだか知らないけど、hobbit は Scheme で書かれてる。

Scheme で標準的な FFI のライブラリってありますか?
C の struct とか union も Scheme から扱えると嬉しいのですが。
> Scheme で標準的な FFI のライブラリってありますか?

SRFI でもめてたっけなー
r5rs の 7.3 Derived expression types に書いてある、
case の定義について質問です。
template の最初の clause (+ の部分) を省いたら、
もとの定義とどういう違いが生まれるのでしょうか?
それとも省略しても変わらないのでしょうか?

(define-syntax case
(syntax-rules (else)
((case (key ...) ;+
clauses ...) ;+
(let ((atom-key (key ...))) ;+
(case atom-key clauses ...)));+
((case key
(else result1 result2 ...))
(begin result1 result2 ...))
((case key
((atoms ...) result1 result2 ...))
(if (memv key '(atoms ...))
(begin result1 result2 ...)))
((case key
((atoms ...) result1 result2 ...)
clause clauses ...)
(if (memv key '(atoms ...))
(begin result1 result2 ...)
(case key clause clauses ...)))))
>>769 key が複数回評価されてしまう。値が変るかもしれないし、
変な副作用が出るかもしれない。
省略するとKEYが複数回評価されてしまうことがあるな。
こんなんだと違いが出るでしょ。
(case (begin (print "foo") 2)
((0) ())
((1) ())
((2) ()))
772769:04/07/10 13:42
>770,771
回答ありがとうございます。
理解できました。
773デフォルトの名無しさん:04/07/10 17:55
Lispに興味ある人って結構いると思うんだよね。
でも、ほとんどのユーザーがWindowsなわけで、
LispはWinユーザーにとっては手軽じゃない。
さくっとDLできて、すこっとインストーるできれば
もっと流行るんじゃないかねぇ。
商用/フリー含めて一番多く Common Lisp 処理系が使える環境は Mac OS X だって
誰かが言ってたね。
なんか最近は学生気分で呑気なヤシ多いよなぁ。
こちとらpetiteをbinutilsでハックラン中なのに…
そろそろ寝まつか
>>775
そもそもLispなんて仕事で使えるか?
VC++やVBに疲れたプログラマが息抜きにやりたいんだろ。
Shiroさんは仕事で使ってるぜ。
洩れは... 「Lispならこう書ける」を基準に、脳内コンパイルしつつJava書いてる(ぉ
無名クラスを乱用しないように気をつけましょうね
Lispって大脳皮質みたいな感じがする。
でね、運動神経ゼロなの。
Cは脊髄。
ANSI Common Lisp を読んでいて疑問に思ったのですが、(setf symbol) が
defun の第一引数 (function name) になるって変じゃないですか?

CLHS 見たんですけど、良く分かりませんでした。(setf symbol) って何を
返すのでしょうか?

http://www.lisp.org/HyperSpec/Body/mac_defun.html
http://www.lisp.org/HyperSpec/Body/glo_f.html#function_name
781780:04/07/11 01:01
済みません。ここを読んだら何となく納得しました。

http://groups.google.co.jp/groups?&th=49b3a6ce675ecc26
http://www.lisp.org/HyperSpec/Body/sec_5-1.html
お前ら俺にschemeのsyntax-rulesの使い方を教えなさい
特に
(syntax-rules (←この部分には何を書くのよ?→) ((パターン) (テンプレート))* )
           ↑この部分

ここhttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC42
によると「リテラル」などというご大層な名前が付いてるそうだが
じぇんじぇん意味わかんねーぞ(#゚Д゚)ゴルァ(#゚Д゚)ゴルァ(#゚Д゚)ゴルァ(ていうかそもそも訳が下手じゃね?)
このスレにいるスーパーハカーの皆さんは
大至急私に、リテラルの意味を教えなさい。



いや、マジで。どこにも分かりやすい説明が無くて。
あんまりバカにしないで。
とりあえずぬるぽっておくか

(null? ぬるぽ)
784デフォルトの名無しさん:04/07/11 22:17
厨房に荒らされてしまって、このスレももう終わりだな
>>784
本当に分かんないんだって!

もったいつけないで教えろよ!
>>782
ああ、syntax-rules の説明は、R5Rs を読んでもまずわかんない。
日本語の資料に限ると、

オンラインで読める文献は >>5 に出てる「入門Scheme」以外にないと
思う。これなら何とか分かるんじゃないかな。pdf ファイル。
#http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html

書籍だったら、『プログラミング言語SCHEME』R.ケント ディヴィグ (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4894712261
この本、原書(英語版)が Chez Scheme といっしょにフリーで配布されてる。

古い本には syntax-rules は全然載ってないから気をつけて。
>>785
まあ、おちつけ。
Scheme を知ってる人は大学で習った場合が多いから、一般人が独力で学ぶ場合の
苦労はあんまり共有されてないんだよ。漏れもこれを見つけるまで、マクロの書き方
わかんなくて苦労した。

ついでだけど、R5Rs はこっちの訳のほうが読みやすいと思うよ。
http://www.unixuser.org/~euske/doc/r5rs-ja/index.html
>>786さんありがとうございます
しかしそのpdfファイル文字化けしてて読めなかった(Debian sarge にデフォでついてきたviewer)
あとで環境揃えて読んでおきます THX

784さんもありがとう

そして785にガッ
>>787
ぬ?こっちも調べておきます。ありがとう
790784:04/07/11 22:45
>>783に言ったんだがな・・・
>>788-789
だからおちつけ。少しレス番ずれてるぞ。
PDF 今読めないそうだから、いいかげんな解説をしてみる。

>>782 の (←この部分には何を書くのよ?→) だけど、
そこにはマクロの冒頭に来ない予約語を書くんだよ。

例えばマクロで cond を実装するとして、必要な予約語は cond と else だろ。
マクロの冒頭に来る予約語が cond で、それは当然 define-syntax のあとに書く。

で、(←この部分→) に書くのが else だ。マクロの途中に現れる、特別な意味を持つ
シンボルをそこに書いて宣言するんだよ。

つうことは、単純なマクロならたいていそこは空欄になる。だから普通は()の中には
何も書かなくてよし。


>>790
そうか。俺も誤解してた。すまんかった。
>>791
なるほど。それで>769が読めそう……ですね
俺は少しのレス番のずれなど気にしないぜ!

それと、俺は>782,783,785,788,789だぜ。
実際厨学生だが。
(define-syntax map-in (syntax-rules (in)
            ((map-in arg in lst body)
             (map (lambda (arg) body) lst)))

これで
(map-in x in '(0 1 2 3 4)
 (+ x 10))
=> (10 11 12 13 14)
となる。PythonとかRubyのイテレータに似せてみた。
in が未束縛だが、手作りの「予約語」になってる。

む、この例だと意味薄いか?
r5rsマクロの「リテラル」はパタンマッチングの目印に使われるハズ。

あと、「学校で習った」だけの知識じゃマクロまで使えない学生も多いよ@灯台理情
好みでやりこんでるヤシが使うだけ。
>>793
うーん、Lispだとイテレータはいらないよねえ。リスト操作で済んじゃうから。

個人的な見解だけど、マクロの途中に出現する予約語って、普通に関数的にコードを
書くときには、あまり使い道がないと思う。cond の else だって #t と書いても
同じだし。

call/cc で新しい制御構造を作ったりするときに、真価を発揮するのだと思う。


あと、学校で習う人が全員マクロまでは行かないのは分かる。だけど自分で先に
進むとき、周囲の人に相談できるし、教官に質問もできるでしょう?図書館にいい
本もあるし。やっぱりネットと本だけを頼りに手探りで進むのとは違うよ。

声を大にして言いたいのは、Lisp を学びたいなら、絶対学生のうちにきっちりやった
ほうがいいということ。社会に出てからだと大変だもの。

私は学生の頃は Lisp をやろうなんて思わなかったんで、今、すごく後悔してる。
こういう基礎的な(応用に直接結びつかない)ものを学ぶ機会は、社会にはなかなか
ないんだもの。
> 私は学生の頃は Lisp をやろうなんて思わなかったんで、今、すごく後悔してる。
> こういう基礎的な(応用に直接結びつかない)ものを学ぶ機会は、社会にはなかなか
> ないんだもの。

社会に出てからだっていくらでも学べる。
こんなのはやる気がない奴の言訳。
それか本当に時間のない土方プログラマかどっちか。
後半だけ読むと「やる気がない奴の言い訳」のようにも読めるけど、
最初から読めば、>>794氏は「社会に出てから学んでいる、やる気
のある人」だと思うな。
私も同感です。ハックランするときは普通に2日は寝ないです。
噂によると本田技研の野郎の中にはまともに1週間寝ないで
設計する狂人がいるらしいけど。そういえばホンダはLispで
構築したシステム(たしか外注)持ってたよね。流石だよねぇ。
798797:04/07/12 21:08
某教授曰く

「あそこ(本田技研)に行けば確実に殺される」

らしい(実話)。
800デフォルトの名無しさん:04/07/12 21:33
800get
801794:04/07/12 22:04
なんか、煽られてるなあ。
別に愚痴を言いたかったんじゃなくて

「大学というのは Lisp を学ぶには恵まれた環境だから、学生の皆さん、どうか有効に
 活用してください」

と言いたかっただけなんだよ。これは Lisp だけじゃなくて、数学とか、経済学とか、
基礎的な学問なら全部に言えることだけど。

私は物理専攻で、その頃は Lisp にほとんど興味がなかった。うちの大学には Lisp の
有名な先生がいたんだけど。社会に出てから興味を持って「ああ、もったいなかったな」
と思ったんだよ。せっかくλ山のふもとにいたのに。
http://wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html

まあ、やる気がないとか、土方とかは、たぶん当たってます、ハイ。
やる気があろうが無かろうが、結局はその人のセンス次第
>>802
それを最大限にフォローしてくれるのが Lisp.
>>801
Mt.Lambda ワロタ

今度から京大をλ山と呼ばせていただきます.
λ山にはリスパが居ってさ。
nilってさ
>>805
うまい。続きを考えようとしたけど思いつかない…
Yってさ再帰ってさ
いまlambda山に棲息しているlisperって誰? 長谷川先生?
湯浅先生ご本人がちゃんといるよね。
http://www.yuasa.kuis.kyoto-u.ac.jp/%7Eyuasa/index_J.html

あとは誰かしら。現役の方の報告を希望。
ついでにλ山の歌の続きも希望。
gaucheに巣食う厨をどうにかしてくれ
ショボーン
C は男らしい言語だと思うが、
Lisp は女らしい言語だと思う。

この2つを組み合わせて使うと
まるで自分が天下無敵になったような
気分を味わえるな。
gaucheに巣食う厨ってのはどこにいるんだ?
>>813
作者
なるほど
shel(ry
>>810 >>813-816
がんばってる奴を何もしない奴が叩いてんじゃねーよ。ヴォケが。
シロウ、無理しないでね
な・・・ん・・・で・・・・・あ・・・・・れ・・・て・・・る・・・・・の・・・・・・orz

                     /  ○/  ○             
_   _ __  \_   |_ ○\   |    /\         
|○| /○| ○ | ○_| ○_|  _| _|  _|   _| ̄|○   
 ̄    ̄    ̄                                 
>>819
それはあなたを表しています。時節柄ご自愛ください。
http://www.paulgraham.com/carl.html

Orbitz って CMUCL も使ってるの?
"On Lisp" 21章目を訳し終えました.
verbatim回りのミスを訂正しました.
ご指摘をいただいた方にお礼を申し上げます.
また何かあったらぜひご指摘をよろしくおねがいします > ALL

最近,さすがに内容が難しくて,適当な訳をすることが多いです.
注意して読んで下さい.

ペースもひどく遅いですが,訳了まで気長にお待ち下さい.
>>822
乙カレー!
http://user.ecc.u-tokyo.ac.jp/~g340299/

つうかアナタ、名前が以前と違ってるぞ。>>747は一発ギャグだと思っていたのに。
正式に改名するんですか?(笑)
>>822
tnx!
それにしても東大は大変だよねえ。受験が終わってからのほうがもっとキツい
競争なんだから。

まあ、気を楽にして行こうよ。いざとなったらλ山があなたを待ってるぞ。
実際、そういう人はかなり多かったぞ。

そのあとで待っているのは、「京都の一乗寺あたりに住む職業不定の怪しい人物」
という輝かしき人生だが……(泣)。
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/essay/kyodaitodai
825デフォルトの名無しさん:04/07/15 14:58
Lispばっかりやってると本当にそうなったりして… :-P
鵺の中の人なんてリアルにそんな感じだし(失礼)。
マイクロ・カーネルをSchemeで実装したら凄そうだよね。
またKL1みたいなプロジェクトが発足したらいいのになぁ。

>>822
がんがれ!!
shiroさんが遂に業を煮やして動きだした
ワショーイ
もうその話はいいよ。ウォチなら他のスレ or 板でやってくれ。
win native でちゃんと動く Gauche が出てきたという意味で言ったのであって他意は無いですよ。いやホント
私は Petite Chez Scheme (Win)を愛しているのだが、
Gauche が出たら…乗り換えちゃうかなあ?
少なくとも試しはするだろうなあ。
>>822
すばらしい!

お返しというわけではないですが
SICP原書
ttp://mitpress.mit.edu/sicp/full-text/book/book.html
>>831
もしや831が翻訳予定で?
>>832
そりゃすばらしすぎる!
正直、今の邦訳は、私には英文のほうがまだ読みやすい。
特に苦もなく読める人もいるそうだけど、それはたいへんうらやましい。
ところで、>>812
> C は男らしい言語だと思うが、
> Lisp は女らしい言語だと思う。
というコメントがあったけど、皆さんにとって Lisp ってどんな言語?

ここに、いろんな著名人の Lisp についてのコメントがあるんだけど、
http://www.paulgraham.com/quotes.html

この中では、Alan Kay の
「 Lisp は言語じゃない。(それを)構築する材料だ」という言葉がいちばん
私にはしっくりする。
邦訳といえば、サイエンス社の「島内剛一」が有名。なにしろヤシのせいで
クヌース教授の名著が迷著になってしまったんだからね。それだけに止まらず
ヤシはクヌース教授の「日本語版への序」よりも前に「監訳のことば」として
頁を飾ってるんだから。とんでもない妄想基地外野郎だ。もっとも最近は
改訳されたのが出版されてるけどね。そういえば(クヌース教授の)他著にも
「排中律」を「三段論法」と誤訳されていた(ヒルベルトの名言を)。
かわいそうなクヌース教授…
通報しますた
「島内剛一」で検索して、こんなページを見つけた。
http://www.math.tohoku.ac.jp/~kuroki/keijiban/e0015.html#e20020215142205
> Subject: Re: 本物のハッカーって、日本に居たのでしょうか?
> 「いま、いるか?」ではなくて、「かつて、いたか?」ですね。、
> 島内剛一、和田英一竹内郁雄、… (敬称略)

日本を代表するハッカーだったんですね。全然知りませんですた。

こんなのも見つけた。
http://godel.m78.com/diggression.html#simauti
アセンブラの天才だったみたいですね。すでにご存命ではないのか。

しかし、島内氏の経歴をまとめたページが見つからない。なんだか、一生好きなことを
やり散らかした人らしいので、まとまった業績がないのかもしれない。FSS を設立しな
かった RMS みたいな存在なんだろうか。


まあ、それはそれとして。
島○先生といい、和○先生といい、ハッカーに翻訳をさせてはいけないのかもしれない。
訂正。× FSS ○ FSF

竹○先生の翻訳ってどうなの?いくつか出ているけど、読んだことない。
> (`∀´)「アセンブラを使わないのが悪いのよ!」

ド変態がいるね
まあ私は英語が読めるからいいけどさ(かなり努力したますた)。
英語が読めてemacsでM-x infoすると感動すると思います。若い人は
本気になればある程度はすぐに読めるようになると思います。この夏に
挑戦してみては?一気に中学生からの再復習がお勧めですよ。
SICPって、自由に翻訳、発表していいの?
日本語版の出版社が翻訳権を持ってるんじゃない?
SICPって、何て読むの?
えすあいしーぴー
いつも「シックピー?」って読んでしまう...
病気かしらん。
t
>>842
それ、最悪。邪魔すぎ。
出版社に掛け合ってshiroさんに翻訳しなおしてもらおう。
>>842
海賊出版でなければ、翻訳権持っているはずですな。
>>847
Shiroさんにはよいコードを量産してもらったほうが有意義かと.
Roger CormanからCorman Common Lisp買ってくれヨ!のメール来た香具師他にも居る?
漏れは当然シカトを決め込むわけですが、Corman Lispのウリって何なのよ?評価期間に
ちらっと使った限りじゃカネ払ってまで使いたいとは思わなかったんで。
Cormanくらいの値段でACLが手に入るんならLinux/Windows/MacOSXと持っているホストの
種類だけライセンス買っちゃうんだけどね。
Cormanって名前恥ずかスィ…
このスレもラスト 150 レスを切ったので、次スレの準備。
テンプレの過去スレ集にこれも入れて下さい。

CommonLisp初心者スレ
http://pc5.2ch.net/test/read.cgi/tech/1075464728/

; CMUCL/Darwin のソースが CVS にマージされ始めましたね。
>>851
ACL はランタイムライセンスが馬鹿高いので、安く exe や dll 作るなら
Corman でもいいんじゃない?WinAPI ガシガシとかインラインアセンブラとか
は便利だった気がする。
☆ チン     マチクタビレター
  ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヽ ___\(\・∀・)< M$製のVisualLISP.net、マダ〜?
      \_/⊂ ⊂_)_ \___________
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
   |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
F#で我慢
翻訳権て独占されるものなのか?
SICPの翻訳権はサスマンかMITに掛け合えばもらえるんじゃないのか?
日本のピアソンとか和田先生は関係ないかと。
契約内容によるだろ
つか、翻訳したならWebに載せるんじゃなくて本にして欲しい。
翻訳権は独占されるものです。
逆に Hackers and Painters はどういう扱いになるのかな。
出版社が翻訳版を出したかったら・・・?
>>849
面白そうな物サンクス。
cond の分岐を [] で表すの初めて見たけど、良くやるの?
>>855
.NETフレームワークの対応予定言語にschemeが入っていたハズだぞ
期待しないで待て!
あれはMS社が開発環境を提供するという意味ではなく,
「サードパーティがこれこれの言語について開発環境を準備してるっぽいです」
「みんなの人気者.NET!」
という宣伝なのでは...
>>864
きっとサードパーティーでもうっかり人気がでればその会社ごとMSが買うだろうから。




ありえねぇな
kludges ワラタ。

ポール・グラハムといい、Common な方の Lisp は愛憎半ばする言語なのかな。
昔の Lisp を知らないので、何処がそうなのか分からないけど。elisp とかやれば
分かりますか?
>>962
[ ] は cond に限らず、対応するカッコを強調したいときに使う。
例: ([lambda (x) (* x x)] 3)
『Little Schemer』でも、同じ表記を使っている。

ちなみに、Chez Scheme はこの表記をサポートしている。
括弧の対応が分かりやすくなるので、個人的にはとても気に入っているが、
見苦しいと思う人もいるかもしれない。
Gauche はたしか、もっと多くの種類のカッコをサポートしていたとおもう。

なお、同じ[ ]で「超括弧」と呼ばれるものを表す処理系もあるそうだ。
----------------------------------------------------------
http://plaza10.mbn.or.jp/~lisp/intro.htm

・超括弧

 通常の括弧 ( ) に対して、超括弧 [ ] の使用が可能です。[ ] は、右括弧 ) 数が
ミスマッチ(少ない方に)の場合でも、強制的にマッチングをとります。

例:(A (B C (D] → (A (B C (D)))

 (A (B [C (D] )) → (A (B (C (D))))
中村正三郎のホットコーナーにこの前あったFranzのCommon Lispセミナーに関する
感想が書いてあります。
http://www.asahi-net.or.jp/~ki4s-nkmr/

Shiroさんの正規表現ライブラリについて。
>ほとんどPerl互換の正規表現ライブラリを、フロントエンド+ダミーバックエンドで
>テストスイートを通すまでに2週間、フロントエンド最適化に2週間、仮想マ
>シンバックエンド実装と最適化に2週間だもん。仕事、早い!
ほんと、速いね。他の仕事とかけもちでやってこれかな。
>その他、湯淺先生は、「Perlは遅いね。コードを読んだことがあるけど、ど
>うしたらあんな遅いコードが書けるか不思議くらい」などとおっしゃって、さ
>すが世界的ハッカーの湯淺先生からいわれたら、返す言葉はないよなあと、こ
>ちらはうなずくばかり。

CGIのようなIOの多い用途でもCommonLispは有効ですか?
Gaucheは現状"[]"と"{}"が、"()"と同様に扱われる。
けど、マニュアルにその旨記述がないはずだから、これはunofficialだね。
>>867,870
thanx!
Smalltalk 風と言うべきか Arc 風と言うべきか。でも、[] で括るなら lambda は省きたい
気になってきますね。{} はちょっと読み辛い感じがしますね。
>>866
私も昔を知らないけど、中村正三郎『電脳騒乱節』には、古いタイプのLispがいくつか
紹介されていて、それを見たときの感想は、「今の Common Lisp の方がずっといいや」
というものだった。

Guy Steele は多分、Common Lisp より先に作った Scheme を気に入っているのじゃ
ないかな。


>>869
使えるはずだよ。ポール・グレアムは Common Lispで書いたWeb アプリケーションで
財を成したから。

普通のやつらの上を行け
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
萩谷先生も Common Lisp には愛憎半ばしているようだ。
古いLispにあった夢ってなんだろう?
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/essay/zoku_omoide
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/inchiki

Scheme は好きらしい。
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/tensai
俺樣のための俺樣Lispスペシャルを走らせるための
軽量インタープリターを俺樣が書く。
ちょちょいと書く。

Common Lisp にはない世界
875デフォルトの名無しさん:04/07/22 07:26
古き良き時代の香りが残ってるとかじゃない。NIL とか。
話し言葉にもなった -p 記法とか。あと性能の追求とか。
俺様のための俺様スペシャルを走らせるためのコンパイラを俺様が書く。
ちょちょいと書く。Scheme には無い世界。
ttp://en.wikipedia.org/wiki/Robert_Tappan_Morris,_Jr.  の抄訳

Robert Tappan Morris, Jr. はコンピュータプログラマで,現在はMITに勤めています.
彼は1988年にコンピュータウイルスMorris Wormを放流したことで悪名高いですが,
これはインターネットで猛威をふるった最初のウイルスでした.

Wormについて: モリスは「実験的に作ったものがエラーのせいで流出したんだ」と主張しました.
彼は初めて「コンピュータ濫用法」によって起訴された人物になり,
1990年に,3年の懲役と400時間の公共奉仕と罰金120万円を言い渡されました.

Viawebについて: モリスはPaul Grahamと共に
オンラインストアを作るツールのためのベンチャー企業 Viaweb を立ち上げました.
Viawebのツールが革新的だった点は2つ: 初の「webアプリケーション」であり,
またほとんどがLispで書かれていました.
モリスはCで書かれた注文システム(DBなどのバックエンドか?)に携わりました.

MITについて: モリスは現在MITのassistant professorをしており,
並列・分散OSのグループで研究をしています.

ttp://www.pdos.lcs.mit.edu/~rtm/  こいつ
877876:04/07/22 08:23
:s/3年の懲役/3年の執行猶予/
878デフォルトの名無しさん:04/07/22 15:27
LISPってさ、メルヘンだよね
メンヘルじゃなくて

括弧がレインボーアイランドつーかさ、
コード書いてると楽しくなってくるよ
コードがデータで
データがコード?
あひゃ、こりゃ麻薬だね
Schemeほど洗練された高級言語はみたことないぜ
quoteの発明がなかったらここまで信仰しなかったが
MITの魔術師本の、Instructors Manualって方を持ってる人いる?
Exerciseの答えとかも載ってるのかな。
>>874-875
なるほど、古き良き時代とは、なんでも手作りできた自由な時代のことですか。
萩谷先生も、自分はCプログラマであり、本物の言語はCのみだと言っていたけど、
そういう時代への懐古を込めていると考えれば納得がいくなあ。
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/7bits/saredo

湯浅先生の『入門 Scheme』によると、湯浅先生の周りでは
? を「ピー」と発音しているそうな。
例)zero? --> ゼロピー
>>879
どの Lisp にも quote はあると思うが、なぜ Scheme だけを名指しするのだ?
Scheme の他の Lispと比べて良いところは、何といっても名前空間と継続だと
思うが。
883881:04/07/22 22:06
訂正 湯浅先生の本は
× 『入門 Scheme』
〇 『Scheme 入門』
継続ベースのウェブアプリケーションサーバって流行ってるの?
Kahua や UnCommon Web は既出だけど、他にもいっぱい。

Seaside (Smalltalk)
http://www.beta4.com/seaside2/

UnCommon Web (CL)
http://www.common-lisp.net/project/ucw/

Kahua (Scheme)
http://www.kahua.org

Cocoon (JavaScript)
http://wiki.apache.org/cocoon/WhatIsFlow

Chris Double の Weblog のまとめ。
http://radio.weblogs.com/0102385/2003/08/30.html

Perl, Python, Ruby にもありそう。
886デフォルトの名無しさん:04/07/26 18:50
(car member)などでリストの要素を呼び出した時に
自分がリストの何番目にいるのかを簡単に知る方法はないでしょうか?
(define (foo hoge member) (- (length member) (length (memq hoge member))))
>887
thx!
片側リストだからしょうがないけどmember/assoc系って効率悪いよね。
それでもscheme使ってるうちに>>887の様なコード見てもだいぶ平気になったよ。
連想配列は標準で入れて欲しいなあ。
> 片側リストだからしょうがないけどmember/assoc系って効率悪いよね。
「片側リスト」じゃなかったらどう効率良くなるんですか?
しばらくやってりゃ、要素数が少ないときの実行・開発効率は
member/assoc系で十分採算が取れていると気付く罠。
ベンチとったことあるが、要素数がせいぜい10個くらいなら
assocの方が速かったな。漏れのハッシュの実装がタコだった
だけかもしれんが。
(激しく既出かもしれませんが。。)
なぜ Common Lisp は関数と変数とは名前空間が違うのでしょうか?
Scheme の様に同じだとシンプルだとおもうんですけど、
実用上の利点があるのですか?
宗派が違うから
いまさら引き返せないから
昔の Bit に『名前空間が同じだと、定義した関数を一瞬で失う危険性がある、同じにすると simple になるのだが…』とかなんとかそういう文が載っていた記憶が…
一瞬で失うだと!!!??
意味分らん
コンソールからぽちぽちと直に定義した関数を間違って消しちゃう危険性か?
だとしたらやっぱり尻尾のような仕様だな。
この点に関してはCommonLispはサル。
Common Lispは、関数、変数、クラス、パッケージ、型、リスタート、メソッド
などを別の名前空間(symbolからobjectへの関連を集めたもの)を使って管理して
いるけど、Schemerから見ると、これらを全て1つの名前空間で管理するのがいいと思う?
全部一緒にしちゃうのはやりすぎだけど、関数と変数くらいは一緒であって欲しい。
>>899
リスタートってこの文脈では聞いたことないんですが何ですか?

>>900
関数と変数だけ一緒で他は別々がいいってことだと
「シンプルに統一された美しいルール」にはならないけどいいの?
902デフォルトの名無しさん:04/07/28 10:53
現在AI関係ではばをきかせているのはCommonLisp? Scheme? ほかの方言? それとも、まったくほかの言語?
>>901
リスタートはコンディション機構に用意されている機能。
名前と関数群(主処理、説明表示、ユーザとの対話)を動的に結びつけるマクロrestart-bind
が基本機能。よくあるのはrestart-caseマクロで、名前やいくつかの機能が付いた大域ジャンプの
着地点として使う場合。

デバッガに入ったときに、
"変数fooの値としてcons型が期待されていたのに、1が入っていますた。
次の選択肢から選んでね。
1: fooに値を入れ直す(store-value)。
2: 無視して進む(continue)。
3: トップレベルに戻る(abort)。"
なんて、メニューがでるでしょう。これは、そのときアクティブなリスタートを
検索して、それぞれの説明表示関数を呼び出して、動的に生成されたメニューだったり
します。各選択肢が1つのリスタートによって実現されているのね。そんで、
ある選択肢が選ばれたら、そのリスタートの対話用関数が呼ばれると。


名前空間が別に用意されているのは、あと、method-combinationもそうだね。


>>902
日本では、人工知能といえばPrologが有力だと聞きました。ICOTも並列Prolog
を開発していたよね。現在のAI関連のことは知らないけど。
私は >>899 あたりは全部一緒にしちゃいたいな。
なるべく統一したい。
CommonLispの仕様って今後変わったりするの?
いままで仕様変更ってあった?
ANSI X3.226-1994 が最初かつ最新
>>899
symbol から object へ対応させるとき、object の種類による複数の対応はいらないけど、
symbol から object への対応表は複数あってもよいと思う。
簡単に言えば、モジュールとかパッケージシステムのようなもののこと。
(assoc :key alist) の cdr を取るの マンドクサ
plistなら?
assocdr でも作っとけ。
cdassoc
912デフォルトの名無しさん:04/07/29 18:16
独習LISPとかでないかなーw
nil
#f
*** ERROR: unbound variable: 独習LISP
(define (独習LISP) (独習LISP))
Paul Graham の "ANSI Common Lisp" は「独習 Lisp」みたいな感じじゃないか。
nil
名前空間に付いて興味深い話が聞けたんで避けてたけど、CMUCL Mac OS X 版がマージされますた。
これで世代別 GC の (非 SPARC) RISC CPU への移植 --> (SBCL で) スレッドの実装と行くと嬉しいな。
920デフォルトの名無しさん:04/07/30 09:22
>>917
amazonの書評では2人とも「入門向きではない」的なことを書いているけど。。。。
>>907
>symbol から object への対応表は複数あってもよいと思う。
>簡単に言えば、モジュールとかパッケージシステムのようなもののこと。
Common Lispのパッケージシステムは、文字列からシンボルへの複数の対応表を
扱う仕組みだけど、Schemeのモジュールはシンボルからオブジェクトへの複数の
対応表を扱う仕組みとして理解していい?

つまり、シンボルのバリューセルがモジュール毎に切り替わるということかな。
Emacsのバッファローカル変数みたいな感じかな。
Schemeにはまだ標準となるモジュールシステムがありませんよね
R6RSにはモジュールが入るとか入らないとかいう噂があったな。SRFIにはなってるの?
あと既存の処理系が独自に実装しているモジュールシステムはあるよね。
924デフォルトの名無しさん:04/07/30 19:39
(新しいエッセイの翻訳が来ましたage)
>>921
Scheme の symbol 自体には value cell は無いと考えた方がいい。
モジュールというか「環境」は、symbol をキーとし object を値とするハッシュテーブルのようなもの。
変数なんかないんだ。環境だけがある。
Schemeのマクロよく知らないんですけど、再帰的にマクロ定義するにはどうしたらいいんでしょう。
とりあえず macroexpand使ったらできたんですけど、CommonLispならそんなことしなくても
いいんですよね。
Schemeのsymbol自体にvalue cellがないというのはR5RSから導かれること?
Hyper Static Environmentなら確かにvalue cellは完全に不要だけど、
R5RSのあいまいなtop levelの定義ではどうも混乱してしまう。
http://c2.com/cgi/wiki?HyperStaticGlobalEnvironment
>>920
確かにあの本だけで入門は難しいかも。最初に読んだ Common Lisp 本が ANSI Common Lisp
だったけど、その時は既に CLHS とか CLtL とか知ってたからなぁ。
>>920 >>929
私はANSI Common Lispで入門しましたが、あれでよかったと思っています
(さすがにあれでCommon Lispを第一言語とするのは無理でしょうけど)。
Lispで何ができるのかを教えてもらったので、
今では必要に応じてHyperSpecを調べれば何とかなるようになりました。
;; と言っても学生なのでリアルの「仕事」をしたことはないし、
;; そもそもまだレベルの低いプログラムしか書いたことがありませんが...

でも、その後に学んだ関数型言語の知識も大きいかも知れません。
やはり純粋な関数型言語は(マルチパラダイムのLispと違って)前面に押し出す特徴があるから、
「ここは関数的に書くべきだな」という感覚とか、イディオムなんかはそっちの方が学びやすかったです。
;; もちろん、マルチパラダイムで柔軟なLispだからこそそういう知識が役立つんですが。


Grahamの新しいエッセイ、考えさせられることが多くてためになります。
ttp://www.shiro.dreamhost.com/scheme/trans/gh-j.html
> 私が思い付く全ての偉大なプログラマのうち、進んでJavaを書いている人物は一人しかいない。
Goslingのことかぁぁぁ!?
Steele でしょ。Richard P Gabriel も Sun に居たと思ったけど。
932デフォルトの名無しさん:04/07/31 06:03
XPでSLIMWを使おうとするとどういう方法がありますか?
いろいろやったができないよ。
>>930
エッセイっていうか、OSCON 2004 の基調講演だよね。
言ってることはわからなくもないけど、ちょっと電波飛ばしてねーか? と
思ってしまった俺は、きっとハッカーではないのだろう。
>ちょっと電波飛ばしてねーか?
どの辺?
>>934
すごいハッカーになることが、人生の勝者であるかのように語っているところ。

確かにそういう面もあるかもしれないけど、そのハッカーってのはかなり特殊な
人種なわけで、彼等の特殊性は as is のまま、周囲が彼等に合わせるべき、
理解すべきとしている論調がちょっとね。

> 実際、CobolやJavaが最も人気ある言語だというような統計は誤解のもとでさえ
> ある。 何が最高の道具かを知りたいなら、我々が見なければならないのは、
> ハッカーが自由に選べる際に、つまり、彼ら自身のプロジェクトに、 何を選ぶ
> かということだ。この質問をしてみれば、既にオープンソースのOSが 圧倒的
> なシェアを占めており、一番の言語はたぶんPerlだということに気づくだろう。

こんな馬鹿げたことを書いてるのにもゲンナリした。最高だろうが最低だろうが、
道具は道具に過ぎない。問題は何を作るか、だと思うんだけどねぇ...
一番のOS アセンブラで作った自作のOS
一番の言語 アセンブラで作った自作の言語
「うんうん、そうだ」と自己満足的に共感するか、
「あっそう」で済ませてほっぽりだすかの
二通りしか感想のでてこない文章だな。
>>935
論点そのものを否定してどうするw

ま、言いたいことは分かるけどね。
だいたいハッカーってのは

「手段のためなら目的を選ばないという、どうしようもない奴」

が多いからな。何を作るかなんて眼中に無いのよ。
強いて言えば「手段=道具」を作りてえなとなるわけで。
人気のない言語を使ってるor作ってる奴の自己弁護なだけでは?
手段の目的化、それ即ち趣味なり
>>935
>すごいハッカーになることが、人生の勝者であるかのように語っているところ。
実際Paul Grahamにとってはそうなのだと思う。

ttp://www.blog.net/nerds-jp.htm
ここでもオタクのが偉い、みたいなこと言ってるけど、実際アメリカに住んでたら、
そういう価値観持って胸張ってないとやってけなかったのかも。
942デフォルトの名無しさん:04/07/31 14:30
>>938
そうだよね。それでも喰って行けるくらい飛び抜けていればいいんじゃない?

Lispじゃ喰って行けないっていうけど、実際はshiroさんや黒田さんみたいに仕事にでき
ちゃう人もいる。大学勤めならどんな言語をつかって研究しようが教えようが誰にも文句は
言われない(言わせない)しね。ふふ。
>>942 研究の方はまだ大丈夫だけど、教える方は就職率という錦の御旗で…。
>>942
>誰にも文句は言われない(言わせない)しね。

そしてある日、それは単なる自分の思い過ごしだった事に
気づかされる日が来るんだよね。ふふ。
お、日本でも出版されるみたいだね。

>なお、書籍版"Hackers and Painters"の邦訳はオーム社より刊行予定。

>>944
気付かなかった振りではダメですか?
>>945
まじっすか!
なんだよshiroさん。あなうんすshiroよ。
947デフォルトの名無しさん:04/07/31 23:51
CMU CL の19aリリースのアナウンスってないのでしょうか?
ディレクトリ下にブツはあるようですが・・・
ftp://ftp.common-lisp.net/pub/project/cmucl/release/19a/
なぜ S 山 euske というお方の日記には,変わった用語が使われているのでしょうか.
Lisp で悟るとあのような日記を自然と書くことができますか?
コンピュータサイエンスの教授にはなぜあのような人が多いのでしょうか?
>>947
7/31 ころアナウンスするよって書いてあった気がするけど、まだみたいね。
バイナリはそれでオケなはず。
AS/400なんて、モノとしては非常に素晴らしい製品なのに、
なぜ悪い道具というレッテルを貼られてしまっているのだろう。

単に、自分たちが慣れ親しんでいるUNIX Like OSと似ていないから
というだけ?
http://www.cons.org/cmucl/news/index.html にアナウンス出てますね。
もうすぐ次スレか。

【普通のやつらの】CommonLisp Scheme Part11【上を逝け】

でどうよ。
変なコメント付けて厨臭くしなくてもいいよ
>>952
かっこ悪すぎ。
>>950
自分で底の底までいじれないからじゃない?
AS/400の中の人になれば別なんだろうけどさ。
MacもPCに比べればクローズドだよな。

やっぱりあれだよ。70年代からコンピュータに
どっぷり浸かってた人ならIBMをよく思うのは無理だろ。
またIBMがLinux担いだところで、その魂胆の方が先に見えて
しまうんだろうな。
【普通のスレの】CommonLisp Scheme Part11【上を逝け】
Lisp Scheme Part11
>>957
かっこ悪すぎ。
11traP emehcS psiL
(thread '((common lisp) (scheme)) :part 11)
>>961
あー、先を越されてしまったが、もっとシンプルに
'(Lisp Scheme Part11)
common-lisp-&-scheme-part-11
Revised^11 Thread on Scheme
'(thread (Lisp . Scheme) (part . 11))
CommonLisp Scheme Part11でいいんじゃないの?スレタイは式じゃなくて文字列じゃん。
;;「キターっ」て、>>947のこと?
次スレ
CommonLisp Scheme Part11
http://pc5.2ch.net/test/read.cgi/tech/1091456033/
clisp の win32 版を,日本語ディレクトリ以下で使う方法を教えてくだされ.
ext:cd とか load ができないのだよ.
OS は WindozeXP.いちおう lisp で書いとけば
環境に依存しないだろうと思ったのに,
windoze で日本語ユーザー名で My DQNments しか使えないので...
>>968 文字コードの設定はちゃんとしている?
Graham氏はJavaに対して対抗意識剥き出しにしてるが、
CommonLispやSchemeの普及を阻害してるのは、本当は
PerlやPythonだと思う。現代版Cobolに対してLispの
優位性をアピールすることにどんだけの意味があるのか。
>>970
それがねぇ。Scheme教えようとしても、「就職に役立つのはJava」なんて
言われちゃう世の中なんですよ。
>>971
最強の言語というのがあって,それは使っている人が多いはずで,
それさえ身に付ければ十分,という伝説のせいでしょうか.
Javaは平均的プログラマー向けにデザインされた言語。
そうゴスたんが言ってたよ。
>>974
すげ…書いてあることがサッパリ理解できんが
何か格好良い事だけはわかった
これが Lisper の考えるレベルかしら…おれには無理かしら
UFFI が clisp に対応していないとは,一体どういうことかね?
>>971
就職の面接で「Scheme使えますよ」と言ってみたら
「Lispみたいなやつだっけ?」ぐらいの反応しか帰ってきませんでした。orz
>>977
その答えが返ってくるだけまだよい方では・・・
>>976 「clispのFFIがUFFIよりもっと抽象化されているから」という答えをclispの
作者がしていました。
が、clisp と UFFI でぐぐるとたしかpascalさんという人が書きかけたclisp用UFFIが
あったとおもう。
>>979
( ・∀・)つ〃∩ヘェーヘェーヘェー.サンクスコ.
埋まる前に落ちそうだね。

(call/cc (lambda (c)
(http://pc5.2ch.net/test/read.cgi/tech/1091456033 c)))
むしろ新スレの方が落ちそう。
埋め質問。
Scheme(Gauche)でCのsizeof相当の処理は可能ですか?
表面的にはchar/short/long/多倍長の違いが見えないので難しそうですが。
何の size のことなのか?
それをどう使おうというのか?
>>983 意味と意図がボクもよく分からない。

とりあえず Gauche での扱いを説明しておくと、文字と小さな整数は即値。
文字は wchar だと思っとけばいい。小さな整数の範囲は、long の範囲より
若干狭い。

昔の scheme では、文字が整数だったけど、今は別。

(char? #\a) => #t (char? 100) => #f (char? 1000000000) => #f
(fixnum? #\a) => #f (fixnum? 100) => #t (fixnum? 1000000000) => #f
(exact? #\a) => #f (exact? 100) => #t (exact? 1000000000) => #t

もしかして、ユニフォームベクタ使いたいのかな?
ユニフォームベクタで解決しました。
ttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_207.html#SEC230
もろにこの部分。すんません、次からはちゃんとマニュアル内探します。