LISP Scheme Part9

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
□参考リンク□

日本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・マッカーシーのページだそうです。

お隣りのプログラマ板のLISPスレのログです。(dat落ち)
http://mentai.2ch.net/prog/kako/963/963134110.html
□仕様書関係□

Common Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。

アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
日本語訳はここ以外にもあるそうです。

Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/

Scheme Frequently Asked Questions (英語)
http://www.schemers.org/Documents/FAQ/
□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行の実装
Scheme 処理系に追加( Scheme 処理系を自作したい人向け)。

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 処理系
http://www.lispme.de/lispme/

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 用のコードを吐けるようになったらしい
リスパー伊藤
http://www.ishizuka.net/ei/
S式RPC-Sexy RPC-を布教というか呼び込みをしよう!

________ _ ____ __/ __ ¥/ __ ¥/ ____/
/ ___/ _ ¥| |/_/ / / / /_/ / /_/ / /
(__ ) __/> </ /_/ / _, _/ ____/ /___
/____/¥___/_/|_|¥__, /_/ |_/_/ ¥____/
S-expression /____/Remote Procedure Call
v0.1.0

http://sexyrpc.sourceforge.net/
>>13
微妙にS式としての使い方が間違ってる気がする。
というか、S式というよりはただ括弧で囲んだだけって感じだが。
多分作者は実際にLISP触ったこと無いんじゃないかな。
それよりRPCって需要あるの?
lisp.org にある、Common Lisp 処理系のリスト
http://www.lisp.org/table/systems.htm
このスレ的には日本語が通るかどうかが重要。試して教えてくれ。
よろずや: 主に CMU CL な人?
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/index.html

面白いトピックが色々あるので、たまにチェックしてます。
そこ見て IMHO 入れようとしたけど動かなかったよ(´・ω・`)ショボーン
>>前スレ 996
> + を2項演算子として
> 前置記法
> + + + + + + + + 1 2 3 4 5 6 7 8 9
> 後置記法
> 1 2 3 4 5 6 7 8 9 + + + + + + + +

上の前置記法と等価な後置記法は正しくは
1 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +
21前スレ966:03/11/24 11:35

前スレの 
>>971
>>980

>evalから見たら、いきなりリスト化された構文木が手元にあると思っていい。

カッコの中の一つ一つが構文木の葉?ということでしょうか。
なんかカッコの意義がわかったような気が。
lispをわかってないので、他の言語だと隠蔽される部分に生で触れる
利点がよくわかりませんけど、それがlispのパワーにつながるのかな?
ただ単に、言語の処理系自体に言語のパーサーがバンドルされているって
だけではなく、evalを再帰的に処理して動的なプログラミングができる?
やっぱりよくわかんないや。

んー、lisperの人たちが頭よさげだということはなんとなくわかりましたが
yacc+lexの初心者本を3冊ほど購入してほんの入り口のところで挫折した
経験のある私としては、生の構文木に触れるということが難易度が高そうに
思えて悟るにはスゲー時間かかりそうです。

>>978
>そういう姿勢でいる限りおまいは何も得ることはできない
。・゚・(ノД`)・゚・。
学習対象の情報収集するのダメ?

>>967
>マスターしないと教えてもわかんないよ。ガンガレよ。
難易度高そうなんで、気長にガンガリまふ。
SICPに再挑戦するもあえなく敗退。これほど読む人の知能の高さが
問われる本はないんじゃないかと思えてくる。
23規格厨:03/11/24 12:51
ANSI Common Lisp Standard(アメリカ工業規格の規格書)にEditorだった
KMP(Kent M. Pitman)さんが夜なべして色々な概念の参照リンクを貼りまくった
「Common Lisp HyperSpec」。英語だけど。

アメリカでは、めちゃ有名。
cmucl, clispなどのフリーな処理系を使っている人が、何が「正しい」動作
なのかを確かめるときに、お勧め。
規格書の割には読みやすい。
Emacs上でCommon Lisp開発するときに使うilispパッケージでは、関数、マクロ
などの名前をミニバッファで補完機能付きで指定すると、Webブラウザに指令が
送られHyperSpecの当該関数の定義ページが表示されるといったことができる。

一括ダウンロード可能。
http://www.lispworks.com/downloads/index.html

がんがれLisper/Schemer。

トリビア Common LispはANSIで規格制定された言語の中で、いちばん最初に
オブジェクト指向を直接サポートした言語です。
2423:03/11/24 13:18
ここを紹介したほうがよかったな。
http://www.lispworks.com/reference/HyperSpec/index.html
ちなみに、HTML文書です。WWW経由でも全文書を見れます。
>>21
> ただ単に、言語の処理系自体に言語のパーサーがバンドルされているって
>だけではなく
Common Lispは言語処理系自体に開発環境がすべて含まれているとも言えるかもしれない。

read関数はパーサー(yacc & lex)で、カスタマイズ可能。
break関数はブレークポイントを表し、デバッガが呼び出される。
compile関数は引数として受け取った関数をコンパイルする。
コンパイラへのスイッチに相当するものとして、optimize宣言がある。
compilation-speed、debug、safety、space、speed、これらの値を0〜3までの値で指定する。各関数内で細かく宣言できる。

ディスアセンブラまでdisassemble関数として用意されている。

以上で述べたものは、すべてANSI Common Lisp規格として規定されているので全てのCommon Lisp処理系でサポートされているはずだ。
(ただこまかい動作は規格内でも処理系まかせになっている部分も多い)

makeおよびMakefile相当のものは規格では定められていないが、defsystemとしていくつかの実装がある。
Makefile相当のファイルはLispで記述する。
規格化されていないもので重要そうなのは、ネットワーク関連、multi processing(スレッド)関連など。

つまりCommon LispはOSになりたいのだと思う。
だからUnixやWindowsなどのOS上で開発したアプリケーションを配るときに配布ファイルがでかくなる(C++アプリをC++のIDEごと
配布するのを想像してくれ)というきらいがある。

cmuclは最近バイナリファイルの生成機能が付いたと聞いたけどその大きさはどうなのだろう。

配布ファイルからいらない機能を削るtree shaking機能がそなわっている処理系もあるってきいたけど。
ifをひとつだけ使う簡単な関数をS式で書くと

(defun kaijo (i)
 (if (< i 1)
   1
  (* i (kaijo (- i 1)))))

内部的な構文木の構造を図解すると

[o][o]-[o][o]-[o][o]-[o][x]
 |   |   |   |
 defun kaijo [o][x] [o][o]-[o][o]---------------[o][o]-[o][x]
        |   |   |          |   |
        i   if  [o][o]-[o][o]-[o][x] 1   [o][o]-[o][o]-[o][x]
               |   |   |       |   |   |
               <   i   1       *   i   [o][o]-[o][o]-[o][x]
                                    |   |   |
                                    -   i   1

こっちを書くときは人間プロセッサという気分になった

2726:03/11/24 15:45
navi2chだとずれないがブラウザだとずれた。ウトゥ。
前スレ966はw3mだろうからまあいいや。
英語

□Common Lisp入門□
 Successful Lisp: How to Understand and Use Common Lisp
David B. Lamkins
 http://psg.com/~dlamkins/sl/cover.html

 Common Lisp: A Gentle Introduction to Symbolic Computation 
David S. Touretzky
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html

□その他□
 Lisp Style
 http://www.cs.northwestern.edu/academics/courses/325/readings/lisp-style.html

 Lisp to C vs machine level
 http://xarch.tu-graz.ac.at/autocad/lisp/FAQ-link/msg00413.html

CLOStrophobia
http://home.pipeline.com/~hbaker1/CLOStrophobia.html

Modernizing Common Lisp: Recommended Extensions
http://lists.tunes.org/archives/tunes/2001-February/003058.html

Lisp as an Alternative to Java
http://www.flownet.com/gat/papers/lisp-java.pdf

The Association of Lisp Users
http://www.lisp.org/table/contents.htm
単なる情報の羅列ならそれなりにまとまってるサイトを見に行けばいいんで、
あるページが優れてよいとか、今だったらS式が構文木である点のメリットにつ
いて述べているものとか、意味のあるものを紹介してくれ。

単にリンクだけずらずら並べられても、入門ページの紹介を求めてるヤシがいる
わけでもないのに、正直、邪魔。ここに貼るよりもwebページを作ってそっちで
やるか、貼った情報の要約などのネタ振って下さいな。


という意見もあるので >>18 なんかも
"CMUCL で EUC なシンボルを通す Tips、CMUCL の Multiprocessing パッケージの情報"
みたいな具体的な紹介のほうが良い鴨。Gauche + rlwrap なんてネタもあるみたいだが。
Multiprocessing って CMUCL User Manual にも記述ねーんだよなぁ。
3128:03/11/24 16:47
>>29 ラジャー。

俺はEmacs Lispを学習したあとに、Common Lispがあるのを知った。
Emacs Lispで cl.elなどを使ったことがあったので単純な構文糖レベルのことは、
すでにCommon Lispを知っていたと言ってもいいかもしれない。
そんなときに、ネット上で何かCommon Lispの入門書がないかと思って見つけたのが、
 Successful Lisp: How to Understand and Use Common Lisp
David B. Lamkins
 http://psg.com/~dlamkins/sl/cover.html
だ。
これを読んでCLOSやstructureのことを知ったし、だいたいの入門レベルは
分かった気になった。その後、HyperSpecを一通り読んで、
あとはプログラミング時にHyperSpecを参照すれば大丈夫だという気になった。
ただし、俺の場合、C, C++, Perl, Emacs Lispなどを最初から知っていたので、
ほんとうの意味での初心者、つまり、プログラミング経験がゼロのヤシが読んで
理解できるか分からない。

こんなんでどうだろ。
>前スレ991
そのプラットフォームの中にWindowsが含まれてないってのがね、
もうアホかと。馬鹿かと。さっさと対応しる!
つーかね、ここまでくると嫌がらせとしか思えないね。cmuclしかり。
Win な開発者が居ないんじゃねーの?つかそんなに欲しけりゃメーリングリストで
Windows 版欲しいって逝ってこいよ。待ってるだけじゃなくて欲しいと言わなきゃ始
まらないぞ。
ウイソ版がホスイと一言書き込んだら、ボコボコに叩かれる罠・・・は無いか?
>>34
>ウイソ版がホスイと一言書き込んだら、ボコボコに叩かれる罠・・・は無いか?
cmucl開発者のメーリングリストを購読していたことがある者ですが、みなさん大人です。
以前「windows版が欲しいな」ってポストがあったんですが、
「がんばれよっ!」という反応だったと思います。
気力と技術がある人なら、メーリングリストで質問しながらやっても
相談相手になってくれるのではないでしょうか。

これはおぼろげな記憶ですが、cmuclはメモリの扱いでUnix特有のAPIを
使っているため、Windowsへのポートが楽ではないと聞いたような気がします。

しかし、cmuclって最初はmachで動いていたのを神様みたいなボランティアが
linuxに移植してくれたと思うのですが、そこらへんどうなのかな....
36これは?:03/11/24 18:15
http://www.cons.org/cmucl/projects.html

win32 port: a few people investigated the possibility of using the
POSIX emulation layer provided by the cygwin32 tools to port CMUCL to
win32. Given the problems with memory management facilities provided
by this library, as well as licencing issues, a native port would be
more useful. The primary issues to resolve are memory management and
signal handling.
>>32
Windowsを選択しているのは他でもなくお前自身なのだが。
自分の選択を棚に上げて、開発者を恨むとは無礼千万だな。
3832:03/11/24 18:55
>>37
今の時代Unix使ってる奴の方が少数派。
おまえのようなロートルはこれからのLisp界に必要なし。
今の時代LISP使ってる奴の方が少数派なんだから仲良くシロや
40デフォルトの名無しさん:03/11/24 18:59
使いたかったら自分で移植するか作ればいいじゃん>>32
>>38
( ´_ゝ`)
>>31
和訳の出た ANSI Common Lisp と比べて、どう?
私も似たようなもので、そんなときに和訳が出たのでそっちで覚えたんですが。
Successful Lispにloopマクロの説明があれば読んでみたいかも。
4337:03/11/24 19:55
>>38
>今の時代Unix使ってる奴の方が少数派。

まったく反論になっていない。
UNIXを使うのが少数派であれ多数派であれ、
>Windowsを選択しているのは他でもなくお前自身なのだが。
という事実はまったく変わらない。
一般人にはデスクトップ用のOSとしてはウイソが一番使い易いからね。
Unixはコンピュータマニアの作ったマニアの為のOS。
>>42
> Successful Lispにloopマクロの説明があれば読んでみたいかも。
loop の l の字も出てこないから読まなくていいよ。
4637:03/11/24 20:56
>>44の言葉を借りると>>32の行動は

マニアがUNIX上でアプリ(例えばSBCL)を開発しているところに
Windowsサイドからいきなり
"お前らWindowsに対応しろ。少数派の分際で生意気にWindowsを無視しやがって。お前らアホ&馬鹿だろ。"
と殴りこみをかけて来るに等しいのだが。


これがWindowsユーザの日常的行動なのであれば、俺はWindowsユーザとは付き合いたくない。
47デフォルトの名無しさん:03/11/24 20:57
一般人はLispを使わない。>>44
Lisp使うためならOS替えてもいいやっていうくらいじゃないとねえ…
>>44
それがどうかしましたか?
>>46-48
そゆこと言ってるから >>32 にロートルなんて言われるですよ。
Lispも開放政策を取らないといかんです。Lisp.NET とかね。w

Scheme.NET はあったっけ? Schemeのが開放的で砂。
>>49
「開放政策」とやらの結果、>>32のような輩が増えるのであれば、そんなもんイラネ
http://www.bagley.org/~doug/shootout/craps.shtml?xcpu=0&xmem=1

CMUCL がメモリのスコアが低いのって、スタンドアローンの実行バイナリ吐けなかった
からなのか。プログラムの配布もイメージごとなの?
SBCL は sb-executable パッケージが付属しているみたいだけど、スタンドアローン
バイナリ作れるの? 単純な Hello World でどのくらいのサイズになるのだろう。

って、自分で試せって?
>>50
ロートルな考え方ですね。w
トロールは巣穴におかえりください。
CMUCL の移植って Lisp の知識がなくても出来まつか?
>>50 というか、32 はただの荒らしだろ…。だって Windows で
使える Lisp コンパイラをすべて無視して UNIX 用の Lisp コンパイラ
に Windows に対応してないとかいちゃもんをつけてくるあたり、正気とは思えん。
Windows で使える Lisp コンパイラでお勧めは何でしょ?
57デフォルトの名無しさん:03/11/24 22:56
>>56
Allegro Common Lisp
とりあえずtrial版使ってみたらどうでしょう?
使えるメモリ量に制限があるだけで,コンパイラや開発環境もちゃんと使えるし。
Common-Lispの勉強をするという人なら十分だと思う。
58デフォルトの名無しさん:03/11/24 23:05
>>49
そりゃまあ、SchemeとCommon-Lispを比べるとSchemeの方が処理系を作りやすいしね。
ISLispくらいでよければもう少しなんとかなるんじゃないのかな。
現にTISLはWindows用の処理系もあるみたいだし。
http://www.ito.ecei.tohoku.ac.jp/TISL/
>>57
ACLは使ってますが・・・
WindowsでLispコンパイラーの選択肢は少ないですね。

>>32 じゃ無いけど CMUCL を移植しろやゴルァ!!と言いたい。
CMUCL バイナリの配布には,数々のプラットフォームが用意されているんですね.
本日,大いに感動いたしました.
これで quota があるシステムに入れて使うことができます.

序盤からレスがすごいと思ったら嵐...
でも python や ruby と比べ,ポータビリティが悪いのは確かです.
早く Windows ライフ (強制されているんですYO) のお供が欲しいところ.

......................................................「がんがれ」ですか.
>>17
何を持って日本語が通るとするのか不明だけど、SBCL もこれ↓で
日本語シンボルはオケだったよ。

ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0012
仲良くしようよ
>>59
暗いと不平を言うよりも、すすんであかりをつけましょう
で、Cygwinでって選択肢はないの?>Winだ〜〜〜な人
CMUCL はスタンドアローンなバイナリ作れないのか。残念。
http://www.cons.org/cmucl/FAQ.html
http://www.sbcl.org/manual/implementation.html

起動時に大量にメモリをアロケートするって書いてあるけど、400MB 近くも
取る必要あるのかよ! と思いまスタ。
たった400MBくらいいいじゃん
>>42
>Successful Lispにloopマクロの説明があれば読んでみたいかも。
>>45
>loop の l の字も出てこないから読まなくていいよ。

extended loop のことだと仮定します。
Chapter 32 - Dark Corners and Curiosities
としてちょっと触れられているだけです。文法に関する詳しい説明はありません。
「複雑すぎる使い方にならないように用心しろや。」って感じかな。
私はextended loopはEmacs Lispのcl.elの説明(info)で学習しました。
Paulタソの ANSI Common Lisp がどのように、extended loop を説明しているか
読んだことないので比較はできませんが、cl.elの説明は分かりやすいと
感じました。実際、いっとき loop熱にかかって、なんでもループはloopで
書いたこともあります。
Windows上でCommon Lispを触ってみる環境として、
Meadow + ilisp + clisp + hyperspec => ウマー!
ということにはならないのかな。
わけあって、手元にあるのがWindowsだけになってしまったので、
上記の環境を構築しようかと思っているんだけど、誰か構築した人いませんか。
ハマリ所などがあれば教えていただきたいです。
>>49
> Lispも開放政策を取らないといかんです。Lisp.NET とかね。
> Scheme.NET はあったっけ? Schemeのが開放的で砂。
コンピューティング(プログラミング)の歴史はどれだけ抽象化を推し進められるか
だと思うので、最近の仮想機械(Java VM, .NETのVM, Perlのparrot)の流行は
気になっています。

個人的にはPerlのparrotが優秀なものになってそれにLispを乗っける勇者が
あらわれるのを望みます。
>>54
>CMUCL の移植って Lisp の知識がなくても出来まつか?
何が起こるかわからないのがこの世の中だし、若い芽を摘みたくないので悩むところだが、
ロートルから言わせてもらえば、それは無茶だ。
最低限、Lispの知識がある人がそばにいてくれなければ、すくなくとも動作テストするの
だってこまるだろう。とくにcmuclはほとんどすべてをLispで記述してある処理系だ。
これが、Cで実装された他の処理系ならまだ考える余地もあるだろうが。

「自動車作る人が運転できなくてもいいか?」という問いを考えてみてくれ。
っていうと、「免許もってなくて自動車を作ってますが何か?」という人もいる
のだろうな。

そういう訳で、54よ、がんがれ。
>>60 Allegro, LispWorks という 2 大コンパイラが Windows に対応してるじゃねーか.
…まぁ,がんがれ.漏れ Win 環境ないから逆立ちしたって移植できねーもん.
>>60
> でも python や ruby と比べ,ポータビリティが悪いのは確かです.

python や rubyと比べるときは、GNU CLISPと比べるのが筋なのでは?
ネイティブコードコンパイル と インタープリタという意味で。
CLISPは various Unix, DOS, OS/2, Windows, Amiga, Acorn, Mac 対応している
みたいだし。

Python や Ruby のインタープリタを実装する手間とCommon Lispの
インタープリタを実装する手間はほとんど同じなのでは?
あとはCommon Lispで定められている膨大(とかつては言われた)ライブラリ的
な関数、マクロ群も今となってはかわいいものだと思う。
>>72
高すぎ
そんな金あったら、LispやめてVS.net買った方が、後々ためになる
MS製品の"後々"と, Lispから得た悟りの"後々"では
ずいぶん期限が違いそうだけど.
76xanalysワショーイ:03/11/25 12:32
>>74
> 高すぎ
> そんな金あったら、LispやめてVS.net買った方が、後々ためになる
LispWorks Professional for commercial users
Windows, Linux, Mac OS X, UNIX用がある。
999 US$ http://www.lispworks.com/buy/index.html
GUIとして CLIM 2.0 (Common Lisp界で実質的な標準GUI)が付いている。
アプリケーションを配布するときのroyaltyは無料。

日本語を通すかどうかは....
FAQより  http://www.lispworks.com/support/lww-faq.html#S1Q16
Q. Is LWW available in languages other than English?
A. LWW is only available in English but it does provide full support for the development of internationalized applications. Other languages may be supported in future releases
正確な意味がとれないな。Unicodeあたりでもサポートしているんだろうか。

統合開発環境(IDE)の画面写真を見たい人はここ。
http://www.lispworks.com/products/ide.html

Personal edition というお試しあり。試してみよっと。
Windows me + LispWorks personal edition Version 4.3
起動直後のSplash screenが表示されたところで、DOS窓に以下のような表示。
日本語でも喰って、ゲロッたか?

...
User
Error: In a call to SEQ::%SET-ACCESS-ARRAY: #\U+65E2 is not of type BASE-CHAR.
1 (abort) Abort initialization.

Type :b for backtrace, :c <option number> to proceed, or :? for other options

CL-USER 1 : 1 > :b

Call to (SETF AREF)
Call to (METHOD STREAM:STREAM-WRITE-STRING (STREAM:BUFFERED-STREAM T))
Call to WRITE
Call to IO:RECURSIVE-FORMAT
Call to FORMAT
Call to COMMON-LISP::MAIN
Call to MEMORY-MANAGER::INIT-WORLD

CL-USER 2 : 1 >

7837:03/11/25 17:45
>>65
http://www.cons.org/cmucl/news/index.html

次バージョンで出来るようになるみたいだぞ。
で、一体ACLはいくらなんだ
またその話かよ。てめぇで勝手に調べろ。
>>79
ビジネスモデルの違いだろうが、Xanalysと違ってFranzのウェブサイトに分かりやすい
製品の値段表というものは無い。すべては、交渉によって決まってくるということだろう。

個人的にはWindows用ACLのGUIエディタを使って2ちゃんねるブラウザを作って
配るといったことが、ACLの体験版で出来ればなかなか面白いだろうと思う。

あとはAllegroStoreというMOPを使って実装された永続オブジェクト技術を使って
機械翻訳ソフトをオープンソースで作るというのもLispの威力を示すのによいと思う。
ようするに、exeが作れれば良いんですね?
>>42 loop の使い方が勉強したいの?loop の実装が知りたいの?
loopなんて、マクロオタのエゴのためにある存在だよ
>>78
これの事だよね。

  http://article.gmane.org/gmane.lisp.cmucl.devel/3029/

一つのファイルにまとめられますっていうのは嬉しいけど、結局はランタイムと
メモリダンプも一緒に配布される訳で、微妙な感じ。tree shaking が出来るよう
になったら使い出もあるんだけどな。
逆に共有メモリを使用しないなど、マイナス面も大きいね。

OCAML とかはどうやってるのかな。
コア積んでてもいいけど、ミニマムセットつーか、
小型の構成にしてどうにか1M以下って感じにならないの?
>>58 それは良く聞く話なんだけどさ、本当にそうなのかなぁ? R5RS 準拠
までなら圧倒的に CL より小さいけどさ、実用的にはパッケージや OO システムは
必須だよね?で、SRFI で定義されてなきゃ独自拡張するしかないじゃん?
さらにコンパイラにしようと思ったら、コンパイラへの指示とかって標準あるの?
>>84
そーゆう頭ごなしの否定はいくないな。LOOP って ZetaLisp 方面から来たんだっけ?
わりと由緒正しいし、場面によっては間違いなく簡潔にかけるし、効率も問題ない
んだけど、何が気に入らないの?…熱烈 do 信者で loop vs do のフレームってのは勘弁だけどさ。
実用的って物差しで見たらネトとかアセンブラとかで結局は
非互換な部分が出てくると思うけど。
>>88
loopはS式として間違った方向に向かっていたよ。
間違いなく。
簡潔さや効率とかは問題にしていない。
翻せばLOOPマクロはS式を否定する存在と言える。
そこまでS式から離れるなら、いっそ初めからMLで書いたらどうだ?
という勢いだろ。LOOPの場違い感は。
>>89 標準でカバーされてる範囲が広いほうが楽では?って事ですた。
サブセットからだんだん標準を目指す感じですかね。
まぁ、CL のファイルシステム周りは抽象化し過ぎって感じはありますが…。
S 式中の位置とキーワードで意味が認識されるんだからそんなに S 式を
否定してないと思うんだけどなぁ…。すると、
(cond0 ---> action0
cond1 ---> action1
cond2 ---> action2)
みたいな表記も S 式らしくないって事っすか?括弧が足りないとか?
((cond0 action0) (cond1 action1) (cond2 action2))
じゃないと駄目ってこと?
別に駄目じゃないよ。
結局俺が嫌いってだけだからねえ。
まあ言い過ぎたけど、condの=>ぐらいはありだと思うよ。
同一シーケンス上のトークンで複数の意味が出来るものとかが嫌い。
関係ないけどdoは括弧大杉。
SRFIのcut/cute程度なら可愛げもある
> 同一シーケンス上のトークンで複数の意味が出来るものとかが嫌い。
他の言語から流れてきた漏れからすると、この辺を具体的に聞きたいな。
loop のが普通っぽいけど、do のが lisp っぽく見えるのも事実。
あと cond の => って何?
>>71
>だってこまるだろう。とくにcmuclはほとんどすべてをLispで記述してある処理系だ。

Cで実装されたプリミティブな部分だけ移植すれば良いので、ほとんど全てをCで
実装している処理系より楽なのでは?

Lispで記述してある部分は移植の必要は無いですよね?
アセンブラとかシステムコール呼び出しとかLISPじゃないか
lisp, scheme は面白いんだけど、
個人的には emacs lisp 以外に実用的な使い道ないな。
時々きまぐれに簡単なスクリプトを
perl で書くかわりに guile で書いたりするけど、
lisp の優位性が感じられるほど複雑なものは書かないせいか、
結局 perl の方が楽だったりする。
おれのプログラミングの用途(素人の日曜プログラマ)では
こんな結果になるんだろうけど、
みなさんは lisp ならでは、という使い方してます?
>>98
> Cで実装されたプリミティブな部分だけ移植すれば良いので、ほとんど全てをCで
> 実装している処理系より楽なのでは?
cmuclをいじったのはちょっと昔なので、うろ覚えになっているけど、
cmuclの実装でC言語は使っていなかった気がするけどどうだっけ?

大雑把にいうとLispで抽象化したアセンブラ層がコアで、残りの部分がLispで
記述してあってという感じだったような。だからブートストラップがちょっと
めんどくさいということになっていて、それを自分で自分の脳みその手術を
しているという形容をする人もいたりして、それはどうだろ? と考えた人が
The SBCL Project - Steel Bank Common Lisp
を始めたのでは?

まじレス希望。
102Common Lisper:03/11/26 08:13
>>100
> みなさんは lisp ならでは、という使い方してます?
ある言語が人気を得るにはハックする対象が明確になければならないってなことを
言っている人がいました。つまりその言語が実力を一番発揮できる特定の分野が
存在していて、なおかつその分野が時代の流れの中で重要なものであるときに、
その言語に人気がでるということですね。

C Unix自体の記述、システムプログラミングから、汎用高級アセンブラへ成仏。
Perl 一行ハック、テキストハックから身をおこして、CGIでブレーク。
Pascal 教育用。つまりプログラミング初心者の頭脳をハック。

この伝でいけば、
Scheme その高度に抽象化された性格とミニマリスト的な視点から、アルゴリズム
記述用、プログラミング初心者用、から現在のスクリプト言語的な用途へ。
Lisp もともとは言語自体がハックの対象。そこからOSが記述され、それもハックの対象に、
Common Lispとして実務的な力仕事全般をこなす言語に収斂、別の言い方をすれば
「大きくてバカなもの」へと成仏。同様の分野を狙っているC++, Javaに比べて人気はいまいち。
ただ、言語ハック用としての特徴やプロトタイピングが得意なことから、かつてのAIなど
「何をどうやったらいいか」すら決まっていないようなプロジェクトには威力を発揮する余地がある。

個人的には機械翻訳ソフトは私的には「何をどうやったらいいのかわからない」分野なので、
Common Lispで機械翻訳ソフトをプロトタイピングしたみたいと思っています。
>>100 例えば、大数の法則を説明する時に、サイコロを大量に振ってみたくなったとする。
で、10^7 程度の反復でもスクリプト言語だとけっこうモタツク。

↓みたいなのを手元の環境でやると、Lisp 3 秒、Perl 18 秒。型指定もな〜んも無しでも結構差がでる。
(defun try ()
(let ((times (loop for n from 2 to 7 collect (expt 10 n))))
(dolist (n times)
(let ((result (make-list 6 :initial-element 0)))
(loop repeat n
do (incf (nth (random 6) result)))
(format t "~10D: ~{~10D~}~%" n result)))))
計算の他にも OpenGL でカコヨク表示するとか Perl だとキツくない?
>>94
> S 式中の位置とキーワードで意味が認識されるんだからそんなに S 式を
> 否定してないと思うんだけどなぁ…。すると、
私が最初にLispを学んだとき、
(operator arg1 arg2 arg3 ...)
というS式の解釈が、「引数群を一度評価してからoperatorを呼び出します。」
「Lispの構文の基本的な解釈の方法はこれだけですよ。」という説明を読んだ
とき、C言語の演算子の優先順位や結合則を覚えるのに苦労していた私としては、
嘘のように美しく感じたものでした。

だから後で、letやifなどのスペシャルフォームやマクロの説明を読んだときは、
正直、かなり落胆しました。今はなれましたけど。
>>97
>あと cond の => って何?
schemeに存在するcondの書式のひとつ。R5RSを参照のこと。
>>103
> >>100 例えば、大数の法則を説明する時に、サイコロを大量に振ってみたくなったとする。
> で、10^7 程度の反復でもスクリプト言語だとけっこうモタツク。
スレ違いだけど、手元にLispがないのでgoogleで調べたら次のところを見つけました。
ブラウザのJavaをオンにしておくと大数の法則の実験ができます。
http://www.kwansei.ac.jp/hs/z90010/sugakuc/toukei/taisuu/taisuu.htm

> ↓みたいなのを手元の環境でやると、Lisp 3 秒、Perl 18 秒。型指定もな〜んも無しでも結構差がでる。
Lispはネイティブコードコンパイルしてあるんですよね?
Lispの利点を説明するときに、ネイティブコードコンパイルを散々やってきた歴史って強みになるのかな。
Perlのらくだ本の目次にコンパイラという言葉があったのをこのまえ訳者の近藤さんのサイトで見たんだけど、
性能や使い勝手はどんな具合かな。
guileでdefine-syntax, syntax-rulesで定義した構文が
展開される様子をみたいのだけど、できないの?
Schemeの継続、call/ccの応用例として、
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-15.html
で、C言語のsetjmp/longjmpのような大域脱出、木構造のleaf generator、coroutine、
といったもののコーディングを読んだのだけど、他の応用例みたいなのはあるかな?
協調的なマルチタスクとか?

Shiroさんの「なんでも継続」
ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
イテレータの反転(予定:もっと複雑なcall/ccの使用例 (coroutine, interator反転))
というのを読んでみたいな。「イテレータ反転」ってgoogleではこれ以外に引っかからないし。

>>4
> CPS(継続渡しスタイル)の説明
> http://www.csl.sony.co.jp/person/masui/Forum/data/20011215023622/
Error 404です。

110108:03/11/26 14:36
>109 ありがとう。
内容的には、これを下敷きにしたうえで、今まで書かれた分の「なんでも継続」
があるのかなと思いました。
Scheme だったのですか。初めて知りました。Scheme 余計な機能は付けない主義だと
聞きましたが便利な拡張もあるんですね。例えばですけど,↓みたいなのは我慢なら
ないんですよね?
(?cond (pred1 x) -> (print "foo")
(pred2 x) -> (print "bar")
(print "bar2")
(pred3 x) -> (print "hoge"))
ML ライクってあんまり使い込んでないんですけど,
(?let x <- 10
y <- 20
in
(+ x y))
↑こんな感じでしょうか?
これでいいじゃん。Arcではこうなるって読んだような気がする。

(?cond (pred1 x) (print "foo")
(pred2 x) (begin (print "bar")
(print "bar2"))
(pred3 x) (print "hoge"))
http://www.paulgraham.com/arc.html
Arcってそのレベルでの「使いやすさ」を追求していたの?
ちょっとガクーリ。

それともわざと他のLispと互換性をなくすのが狙いのひとつ?

トリビア ArcはGNU CLISPの上で培養されている。(と思う)
114113:03/11/26 16:21
だからArc(≠ ほげほげ Lisp)という名前なのか...
>>112
え〜いいのかYO !! んじゃ一体 LOOP のどこがどう気にいらないのか教えてくれ。
Lisp 歴の浅い漏れにゃ LOOP は凄く自然に見えるのだが LOOP 嫌いな Lisper の
考えも知っておきたい。場合によっては DO 原理主義に走っても良い。
LOOP嫌いだからといってDOが好きになるわけないだろ。
117デフォルトの名無しさん:03/11/26 18:08
>>115
昔からあるCommonLISP第2版って本見りゃわかるが、
loopの説明がわざわざ章に独立させて30ページもある。
そういうとこが気に入らないね。
けっ
118デフォルトの名無しさん:03/11/26 18:11
(loop for i from 1 to (compute-top-value)
 while (not (unacceptable i))
 collect (square i)
 do (format t "Working on ~D now" i)
 when (evenp i)
  do (format t "~D is a non-odd number" i)
 finally (format t "About to exit!"))
ああ気持ち悪い。
115よ、118を見てどう感じたかを正直に書いてみてくれ。
俺はすでにLoopに感染しているので普通に読めてしまう。
>>118
うへえ、なんだこりゃ。
こんなだったらloopいらねーってのもわかるな。
つーかppでちゃんとインデントされるのか?
きっとloop専用のppあるんだろうな。
気持ち悪ー。
121デフォルトの名無しさん:03/11/26 18:54
ご期待に沿えてloopを解釈しないppで118をプリントした例
(loop
 for
 i
 from
 1
 to
 (compute-top-value)
 while
 (not (unacceptable i))
 collect
 (square i)
 do
 (format t "Working on ~D now" i)
 when
 (evenp i)
 do
 (format t "~D is a non-odd number" i)
 finally
 (format t "About to exit!"))
ああ気持ち悪い。
もういい。

loop使うやつはlisperじゃない。
ただのloop使い。
気持ち悪いを競ったらsetfがダントツのような気もするな。
>>118 そりゃ再帰だって反復だって汚く書こうと思えば書けるだろう。
LOOP がイイって思える時って例えば複数の条件で数えたいときとか
(loop for e in lst
count (pred1 e) into v1
count (pred2 e) into v2
finally (return (list v1 v2)))))
配列の要素を振りわけたいとか
(loop for e across array
collect (pred1 e) into v1
collect (pred2 e) into v2
finally (return (list v1 v2)))
ただ一定回数繰りかえしたいとか
(loop repeat 100 do (hoge))
一定範囲の数値のリストを作りたい
(loop for i from x to y collect i)
とかじゃない?
>>124
汚く書こうと思わない限り汚くならないよ。
loopはどう書いても気持ち悪い。

汚い、というより気持ち悪い。
>>123
setfも意見が割れそうだな。
>>122 なんで?
loopは内部の文脈によって大きく意味が違ってくるからね。
あと制御キーワードとして、単なるシンボルを使ってるから、
スペルミスで動作が変わったりする。
構文チェッカ的な意味では弱い。
そんなところですか。
元々loopがCommonLispに入ったのは
悪用マクロの反面教師的意味合いじゃなかったか?
俺の思い違いか?
>>128 スペルミスってキーワードエラーにならないか?
個人的には loop が大きすぎると嫌だが…
131ゲイ・ステーノレ:03/11/26 19:33
は?
loopなんて使いたがる奴の神経を疑うね。
簡潔に書けるだって?
そりゃ括弧書くのが嫌なだけだろ。
お願いだ、他の言語使ってくれ。Ja○aがお勧めだよ。
CommonLispのloopはなかったことにしてください。
んじゃ LOOP 使わない派は 124 の例とかどう書くの?
漏れもあーゆうときは LOOP 使っちゃうけど.
loopなんかよりArcの話しろよ。
>>132
気持ち悪いので読みたくありません。
expand1してみれば?
>>101
ソースをダウソしてみますた。
大半がLispのコードで2割くらいがCのコードでアセンブラのは
CPUのアーキティクチャ毎に1つづつありますた。
loop も do もイラネ
named let が ス キ ♥

末尾再帰(;´Д`)ハァハァ
>>136
再帰で反復が表せるからといって、再帰で書けばすべて OK という
わけじゃないだろう。反復的な事柄は反復で書くのが自然でないかい?
…などと逝ってるから駄目なのかな。ちと Scheme に入門しなおすか…。
LOOP は置いといて、Lisp の歴史を考えれば、確実に括弧は減り、
より簡潔になってきているだろう?1974 年とかだと
(PROG NIL ((LABEL ATOMPRINT
(LAMBDA (RESTLIST)
(COND ((NOT RESTLIST) (RETURN 'DONE))
((ATOM (CAAR RESTLIST)) (MAPC 'PRIN1
(LIST '"ATOM:" (CAAR RESTLIST)
'"," 'DEPTH (CDAR RESTLIST)))
(TERPRI)
(ATOMPRINT (CDR RESTLIST)))
(T (ATOMPRINT (GRAFT (LIST (CONS (CAAAR RESTLIST) (ADD1 (CDAR RESTLIST))))
(AND (CDAAR RESTLIST) (LIST (CONS (CDAAR RESTLIST)
(CDAR RESTLIST))))
(CDR RESTLIST)))))))
(LIST (CONS (READ) 0))))
から
(defun atomprint (exp &optional (depth 0))
(if (atom exp)
(format ...)
(dolist (element exp)
(atomprint element (+ depth 1)))))
で括弧が減ったのは、みな括弧を書きたくかったし、わかりやすくしたかったからだろう?
前スレ、dat落ちしていたので、html化してもらいました。

LISP Scheme Part8
http://ruku.qp.tc/dat2ch/0311/26/1058263391.html

ただし、これはある個人が自分のサーバに置いているものであり、
将来も長く消されないという保証はないそうです。

過去スレッドの一覧としては、本来のスレッドも併記したほうが良いと思います。
http://pc2.2ch.net/test/read.cgi/tech/1058263391/
しかしMLスレッドの 〜 といいここの loop といい,どうしてみんなシンタックスに
こだわるのかなあ…
>>140
こだわりが無いならPerlでもRubyでもMLでもなんでも使ってるだろ
こだわる内容が瑣末すぎると思う。
(シンタクスに) こだわりまくって scheme ができたんじゃないかな。
逆にこだわらなさ過ぎて perl ができた、とか。
展開がキーワードに依存するって、やっぱり違和感あるな…
マクロにしても、できれば car と list の構造だけ見て展開してほしい、っていう。
でも、 backquote とかは便利かな、とは思うけど。

>>124 は、それぞれこんな感じかな?
> 複数の条件で数えたいとき
(let loop ((l lst) (v1 0) (v2 0))
(if (null? l) (list v1 v2)
(let* ((e (car l))
(new-v1 (if (pred1 e) (+ v1 1) v1))
(new-v2 (if (pred2 e) (+ v2 1) v2)))
(loop (cdr l) new-v1 new-v2))))
> 配列の要素を振りわけたい
(let loop ((l lst) (v1 ()) (v2 ()))
(if (null? l) (list v1 v2)
(let* ((e (car l))
(new-v1 (if (pred1 e) (append v1 (list e)) v1))
(new-v2 (if (pred2 e) (append v2 (list e)) v2)))
(loop (cdr l) new-v1 new-v2))))
> ただ一定回数繰りかえしたい
(let loop ((i 100))
(cond ((> i 0)
(hoge)
(loop (- i 1)))))
> 一定範囲の数値のリストを作りたい
(let loop ((i x) (lst ()))
(if (> i y) lst
(loop (+ i 1) (append lst (list i)))))
>>135
> >>101
> ソースをダウソしてみますた。
> 大半がLispのコードで2割くらいがCのコードでアセンブラのは
> CPUのアーキティクチャ毎に1つづつありますた。

俺もcmuclをちょっとのぞいて見た。
シグナル、メモリ周りの中心部分はC言語で記述。
コンパイラ自体はLispで記述。
コンパイラバックエンドにはVOPというLispで抽象化したアセンブラ層が存在。
> VOP stands for Virtual Operation, and is the basic unit of currency in the Compiler Backend. VOPs usually expand into assembly instructions.

コンパイラのブートストラップはCコンパラのみでは不可能。cmucl自身が必要だとおもう。
sbclだと他のCommon Lisp処理系も使える。

ということで、Winの人たちよ、メモリとシグナルを制覇すれば移殖できるかも。
> コンパイラのブートストラップはCコンパラのみでは不可能。cmucl自身が必要だとおもう。
> sbclだと他のCommon Lisp処理系も使える。
これがマンドクサさのミソ。
ネタにマジレスですが…
>>129
> 元々loopがCommonLispに入ったのは
> 悪用マクロの反面教師的意味合いじゃなかったか?

漢なら、そういう陰険なことはせずに、きれいな代替案を提案してほしかった。
> ということで、Winの人たちよ、メモリとシグナルを制覇すれば移殖できるかも。
まじ?
149145:03/11/27 09:17
>>148
>まじ?
ごめん。煽ってみただけだ。SBCLのサイトで読んだと思ったけど、Winへのポートを一人でやるとして、
「自分が何をやっているか分かっている人」なら1ヶ月から1年くらいのプロジェクトじゃないかな?
と書いてありました。

Learn by doing 方式の人はそれプラス、対象領域の学習時間ね。
150デフォルトの名無しさん:03/11/27 11:33
>>147
ガセネタに反応するなよ…。反復で使われる一般的な操作(集める、数える、引数にする等々)
を標準化しただけだろが。規格書読め。

>>148
再難関はそこだからな。そこが突破できれば移植の目途がつくだろ。MacOS X への移植だって
一人で作業してんだから Windows もがんがれ。
>>150
MacOS XはUnix系ですよね。だからメモリ、シグナル関連のAPIも
仮に現在はダメだとしても将来は正規の動作になるのを期待できると。
Windows NT系はたしかPOSIX層が用意されてたと思ったけどどうなのかな。

SBCLのメーリングリストをみてもPOSIXという言葉が結構でてくるみたいだし、
いくら「タコ」、「ダメ」、「あいまい」とか言われても規格って結構大切だ
と思う。

Common LispのLoopが嫌いな人も、自分が納得がいくループ構文を開発しておけば
将来、それが採用される可能性もあるよね。あるいはみんなに配って実質的な標準を
目指すとか。
>>151
>>144 とかはキーワードに依存する展開が嫌っていってるからなぁ。=> とかも嫌いな
のかな?ちなみ 124 の例ででてきてる配列を振りわける、は再帰で書くと配列と
インデックスと振りわけ先のリストで引数が 4 つになってダル〜。再帰とか反復とかより
一段上の抽象的な操作だと思って便利に使わせてもらってるんだが控えたほうがいいかなぁ。
リスト以外の配列や文字列やハッシュといった基本的なデータ構造を走査するときに便利なんだがなぁ。

再帰に展開するようにすれば再帰主義者は満足するかもしれないけど、展開方法が気
にいらないという人を納得させるのは不可能な予感。Symbolics が LOOP を導入した
ときはどうだったんだろうね?やっぱ反発があったのかな?
>>152 ちなみにcmuclについてくるLOOPのコードは、MIT->Symbolics->CMU と流れたみたい。
154なんとなく named let:03/11/27 14:55
(defmacro nlet (fst snd &body body)
(if (not (symbolp fst))
`(let ,fst ,snd ,@body)
`(labels ((,fst ,(mapcar #'car snd)
,@(mapcar #'(lambda (exp)
(if (eq (car exp) fst)
`(,fst ,@(cdr exp))
exp))
body)))
(,fst ,@(mapcar #'cadr snd)))))
155なんとなく named let:03/11/27 15:11
;; あ... 変なことしてた... これでいいのか...?
(defmacro nlet (fst snd &body body)
(if (not (symbolp fst))
`(let ,fst ,snd ,@body)
`(labels ((,fst ,(mapcar #'car snd)
,@body))
(,fst ,@(mapcar #'cadr snd)))))
そんなに LOOP が嫌かねぇ…そこで >>144 や反復嫌い厨を満足させるべく
*キーワード依存* *反復* といった問題点(?)を解決したネタ構文を考えてみた。
これで named let で名前を考える手間が解決できるぜ!! どうよ?

(defmacro rec (args init next end? result &body body)
(let (($fun (gensym "FUN")))
`(labels ((,$fun ,args
(cond (,end? ,result)
(t ,@body (,$fun ,@next)))))
(,$fun ,@init))))
;; 使用例
(defun fib (n)
(rec (a b n) (0 1 n) (b (+ a b) (1- n)) (= n 1) b))
;; 数える
(rec (l v1 v2) (lst 0 0)
((cdr l) (if (pred1 (car l)) (1+ v1) v1) (if (pred2 (car l)) (1+ v2) v2))
(null l) (list v1 v2))
;; 集める
(rec (l v1 v2) (lst 0 0)
((cdr l) (if (oddp (car l)) (cons (car l) v1) v1) (if (evenp (car l)) (cons (car l) v2) v2))
(null l) (list (nreverse v1) (nreverse v2)))
;; 繰り返す
(rec (i) (100) ((1- i)) (= i 0) nil (hoge))

変数の宣言と初期化はセットにしたら激しく do っぽくなったので仕方なくこんな風になってます
>>156( ´_ゝ`)たいへんよくできました。

ただ、doから縦のものを横になおしたような....まぁ、カッコは減ってるけど。
156さんのことじゃないけど、マクロを展開した後の形にまでこだわる人って...生きるのがたいへんそう...
再帰は強力だけど末尾再帰に書き直すのがマンドクサイ時は、
最初から反復で書いた方が良い。
と、ANSI Common Lisp に書いてあった気がする・・・。
じゃあ、その ANSI Common Lisp は間違ってる。
>>159 もう少し生産的な物の言い方はできんのか? *再帰で書かなければならない*
と主張したいの? Scheme は知らんが少くとも CL では違うと思うのだが…
再帰だとか反復とか、156 は最初から主義によって動作を変更できるようにすべきだった
(defvar *recursive-p* t)
(defmacro rec (args ends &body body)
(if *recursive-p*
(rec-recursive args ends body)
(rec-iterative args ends body)))
(defun rec-recursive (args ends body)
(let (($fun (gensym "FUN")) ($vars (mapcar #'first args)) ($inits (mapcar #'second args))
($next (mapcar (lambda (e) (if (= (length e) 3) (third e) (car e))) args))
($end (first ends)) ($result (rest ends)))
`(labels ((,$fun ,$vars (cond (,$end ,$result) (t ,@body (,$fun ,@$next)))))
(,$fun ,@$inits))))
(defun rec-iterative (args ends body) `(do ,args ,ends ,body))
;; (let ((*recursive-p* t)) (macroexpand '(rec ((a 0 b) (b 1 (+ a b)) (n 20 (1- n))) ((= n 1) b))))
;; (let ((*recursive-p* nil)) (macroexpand '(rec ((a 0 b) (b 1 (+ a b)) (n 20 (1- n))) ((= n 1) b))))

Common Lisp では末尾再帰の最適化は仕様で保証されてないので、
簡単に反復に展開できるなら反復を使わないほうが変。
だが大抵のコンパイラは最適化してくれるだろ。自分の使ってるコンパイラが最適化
してくれるとわかれば再帰だけで済ませたくなるんじゃないのか…再帰主義者じゃな
いので想像で言ってるが。
>>162
末尾再帰が最適化されない処理系なんぞを使う香具師はまずいないだろ。
一番最初に考えるべきは、map 等の高階関数で書けるかどうか、だろ
16660:03/11/27 22:29
遅レスです.
>>60 の「ポータビリティ」と言ってしまいましたが,
「より多くのプラットフォームで同じ lisp プログラムを使えるか」
といった意味なのでした.ごめんなさい.

はい.ただ Windows でも Linux でも動く GUI プログラムを作りたいだけです.
よし Java バイトコードにコンパイルしよう!
>>165 …そんな話だったのか? >>124 の例とか map 系で書くのか?

>>166 PLT Scheme でどーよ。え、日本語?忘れてくれ…。
>>167
Java VMで動くLISPもSchemeもたくさんあるようです。
http://grunge.cs.tu-berlin.de/%7Etolk/vmlanguages.html
>>169
cmuclのメーリングリストで、きょう読んだんだけど、
「Common Lispは.netに載る予定はありますか?」
「予定は、cmuclでも他の処理系でもないみたい。理由は、Common Lispの良さである
ダイナミックな性格が失われてしまうから。ILへのコンパイルもどうだろ...
くわしくはcomp.lang.lispのRoger cormanの最近の記事を見てみれば?」
というやりとりがありますた。元の記事をすでに削除してしまったので、正しい引用ができなくてスマソ。
>>169
>Jatha is a Java library that implements a fairly large subset of Common LISP,
>including most of the datatypes (e.g. packages, bignums) and their associated methods.
これは初めて知りました。調べてみよっと。情報ありがとう。
Schemeについては、Kawa、Biglooあたりしか知らなかったけど、こんなに増殖していたとは。
Adaまであるの...
JRuby、Jythonなんか言語規格書ないのに動作テストどうやっているんだろう。
>>171
jatha はマクロが無かった気がする.作者はよい実装方法が見つからない&必要性を感じない
とのことで,今後も実装するつもりはないらしい.
>>172 packageがあるって聞いて、「おっ、やる気か?」と思ったけど、
CLOSも無いような感じですね。まだ第一印象だけど。
作者が言及しているエキスパートシステムを移植するのに必要な機能だけ実装したのかな...
マクロもないのか...
「a fairly large subset of Common LISP」って...世の中きびしいのぉ。
174デフォルトの名無しさん:03/11/28 09:35
>>166
>「より多くのプラットフォームで同じ lisp プログラムを使えるか」
このとき、われわれ言語ユーザ側の武器になるのが「規格」や
「誰でも入手可能でどんな処理系でも動く実質的な標準」だよね。

> はい.ただ Windows でも Linux でも動く GUI プログラムを作りたいだけです.
一応、Common Lispのベンダー間での合意がとれている標準GUIはCLIM version2だと
思うけど(オープンソースプロジェクトもあるし http://clim.mikemac.com/)。
「the Common Lisp Interface Manager」というだけあってgtkやQtなどの普通の
GUIよりも仕様が抽象化されていて、ヤな感じもするという噂を聞きました。
使ったことないけど。仕様書は流し読みしたていどです。

GUIといってもいろいろあるけど、俺だったらまずWebアプリとして記述できないかを
考えます。これだったらプラットフォーム依存のGUIツールキットを頼らずに、
なおかつ、ユーザーはいつも使っているブラウザを使うことが出来てウマー!
たしかに複雑なGUIはwebでは無理だけどね。

複雑なGUIはMozillaのXULみたいな方向にちょっと期待かな。
面白いアプローチだよね。たしかアプリもすでに結構あるし。
Common Lispが他の言語とお話する方法を定めたFFI(Foreign Function Interface)
の標準がないので(標準化じたいが難しい領域)、C, C++で書かれていることが
多いクロスプラットフォームGUIツールキットとのやりとりが難しい。

各種Common Lisp処理系でクロスプラットフォームGUI toolkitプロジェクト
wxLisp (wxWindows) http://www.wxlisp.org/ まだ計画だんかい。
CL-GTK (gtk) http://tenkan.org/clgtk/ CL-GTK has not yet officially been released.
FFI非互換もんだいの解決策としてRPC(Remote Procedure Call)を使う?

GNU CLISP + Garnet http://mirrors.usc.edu/pub/gnu/clisp/packages/
これはLinux、Windowsで実際に動くのかな? 見た目はどうかな?
>>170
> くわしくはcomp.lang.lispのRoger cormanの最近の記事を見てみれば?」
http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&oe=UTF-8&frame=right&th=b155ce5236e61a0e
このスレッドかな。かいつまむとJava VMはJavaのために存在するのだし、.Net VMはC#のために存在する。
それだったら俺はネイティブコードコンパイルで実物のCPUを相手にするぜって感じかな。

関係ないけど、最近、Erik NaggumさんがUsenetから引退してしまったと聞いて残念です。
Naggumさんは人を罵倒する癖があったけど非常にするどい意見を言ったりするので
喧嘩をしていないときだけ注目していました。

でもgoogleでいつでも彼の過去の記事を読めるので過去の発言は無駄にはなりませんね。
>>175
UFFI
gtkはクロスで実際使うメリットってあんまない気がするんですが。
winでまともに動かないし。外観もあんまりよくないし・・。
クロスプラットフォームでGUIまでサポートする環境というと、
squeakみたいなSmalltalk一派の手法が一番楽というか堅いんじゃないかな。
CLX って日本語表示/入力とか XShape 拡張とか使えるのかしらん。
180デフォルトの名無しさん:03/11/29 13:22
>>177 UFFIって初耳でした。調べてみます。
>>178 gtkは、バージョン2では設計段階から、LinuxとWindowsを動作環境として考えていたと思います。
外観や動きはどうかな?
> squeakみたいなSmalltalk一派の手法が一番楽というか堅いんじゃないかな。
これは賛成。
Scieneer(TM) Common Lispって知っている人いました? 感想希望。
http://www.scieneer.com/scl/index.html
>> Innovative multi-threading support for multi-processor systems.
>> Support for 64 bit platforms.
...
64 bit Platforms
> SPARC Solaris
> HPPA HPUX 11
> IA64 HPUX 11
> AMD64 Linux
32 bit Platforms
> SPARC Solaris
> HPPA HPUX 11
> x86 Linux
>>181
Douglas Crosherさんというcmucl関連の偉人ですね。
そういえば「SMPサポートを開発しているけど、有料にするからね」と
メーリングリストで仁義を切っていたような... 会社を興したのか。

> Douglas was a key developer in the porting of this implementation
> to the x86 architecture, developed a generational garbage collector
> which is critical for memory management in large high performance applications,
> developed the multi-processing support, and contributed to numerous enhancements.

ようしっ、cmuclをWindowsに移植して会社を興しちゃえ >> Winな人。
しかし、なんでこうまでWin版って作られないかね。
そんなにシステムコールのエミュレートが大変なのかな。
>>183
それもあるかもしれないが、「Windows で使いたい」とう動機を持ちつつ、「移植に
必要な技術力」を兼ねそなえた人間が居ないだけだろ。例えば SUN 使いな開発者は
sparc 用のコード生成を改良したりはするが、Windows への移植をしたりはしない。
開発者も暇じゃないんで自分で使いもしないものを作ったりしないわけで。
>>183 Douglasさんの会社に限った話だと、SMPや64bitサポートといい、
かなりサーバーとしての使用を意識しているというか、そこで勝負を
かけるつもりで、サーバとしてはWindows移植に手間かけるだけの引き
がないと判断したのでは?
>>182
有料にするならまったく話は別だろ。
Lispworksとかaclとかと争わなくてはならないぞ。
cmucl のアプリケーションを入手して、自分のイメージに取り込んで使う、という
使い方はコンパイルして、実行ファイルを作って、という文化に慣れると異質に見える
んじゃないかな…となんとなく思う漏れ。

現にこのスレでも実行形式を出力できてもサイズがデカイのは嫌って意見も出てたし。
開発環境がセットだからユーザーが好きにいじれたり拡張できるわけだが、それが
デカイから嫌、という評価を受けるわけで…
>>187
できないよりはマシ。
ましてや、CLISPのバイトコードコンパイルなど(ry
>>187
私は >>65 および >>85 ですが、別に嫌って訳ではないですよ。UNIX 及びインターネット下
ではリソース使用量やプログラム配布の面で面倒だなと思っただけです。コンパイラも必要な
人が入手できるようになっていれば良い訳ですし。
単にファイルサイズの大きさが嫌というよりは、メモリなどを大盤振る舞いで使ってしまう
方が辛いですね。C にトランスレートする処理系は一つの解かなとは思いますが、使い辛そう。
OCAML の FFI がもう少し良い感じだったら良かったんですけどね。

ただ、それらを補って余りあるだけ Lisp には魅力があると思っております。
CトランスレートだとLISPの色んな利点が死ぬよ
そもそもCにする必然性なんて無いし
cmucl は日本語が使えまつか?
192182:03/11/30 12:30
>> 186
> 有料にするならまったく話は別だろ。
> Lispworksとかaclとかと争わなくてはならないぞ。
すみません、ふざけてみただけです。その点はわかっていながら書きました。
こういうおふざけってどれくらい有害なのかな...

ただおふざけついでに言ってみれば、日本独自の視点として、Tronの超漢字みたいに、
異常に文字に強いCommon Lisp処理系なども面白いのでは?
>>191
> cmucl は日本語が使えまつか?
最近の過去ログがもしかしたら参考になるかもしれません。
もうすこし、具体的な質問のほうが、答えを期待できるような気がします。

よろずや
http://www.geocities.co.jp/SiliconValley-SanJose/7474/LispDevelopEnvironment.html
でEmacs上でのLisp開発環境として、ilispと張り合えそうなSLIMEという
ものが紹介されています。なんかよさそうな雰囲気。
知らなかった。こういうもののアナウンスはどこでやっているのだろう?
comp.lang.lispかな? 最近はあまりみていないけどまた購読してみるか。

>>190
>CトランスレートだとLISPの色んな利点が死ぬよ
Kyoto Common Lisp系列の処理系(GCL, ECL)を少しいじったことがあるのですが、
一つの切り口としては面白いなと思いました。あるていどは、動的なコンパイルも
できるし。C言語のコンパイラの最新技術が使えるという点で。

ECLのトランスレータは確か型宣言をみてLisp値のunbox化もしていたような気がします。
>>193
> ECLのトランスレータは確か型宣言をみてLisp値のunbox化もしていたような気がします。
卑近な例をあげてみると、
(dotimes (i 10) (hoge))

for (i = 0; i < 10; i++) { hoge(); }
的な変換がされて、Lisp valueとしてはタグ付きで表現されているfixnumのタグ
をとる操作をトランスレート時に行ってしまうため、実行時にビットシフトする
速度的なペナルティーがなくなるという話。

これを推し進めていけば、うまくするとC++と速度的にはいい勝負になりそうな予感。
他の言語にトランスレートすると関数をデータとして扱う部分が辛いと思う。
>>195
ん? クロージャは関数ポインタと環境のペアでいいし、
evalはどっちにせよコンパイラ走らしてダイナミックリンクするか
インタプリタで評価するかしか無いんだから、あんまり問題に
ならなさそうだけどなあ。
>>195 よろしければ、もうすこし具体的な例を教えていただけますか?
>>194 タグを取る操作ってのがわからんな。タグ 2 ビットだとループ変数の
インクリメントは
add %eax, 4
とかいうコード吐かないか?で、比較部分も
cmpl %eax, 40
となるけど、これが inc と cmp 10 との比較になるとそんなに
嬉しいんでしょーか?
片方が定数ならね。
* (defun f (n)
(declare (optimize (speed 3) (safety 0) (space 0)))
(let ((sum 0))
(declare (fixnum n sum))
(dotimes (i n sum)
(declare (fixnum i n sum))
(setq sum (the fixnum (+ (the fixnum i) (the fixnum sum)))))))

* (disassemble 'f)
48196370: .entry f(n) ; (function (t) fixnum)
88: pop dword ptr [ebp-8]
8B: lea esp, [ebp-32]
8E: xor eax, eax ; No-arg-parsing entry point
90: xor ecx, ecx
92: jmp L1
94: L0: lea ebx, [ecx+eax]
97: mov eax, ebx
99: add ecx, 4
9C: L1: mov ebx, edx
9E: cmp ecx, ebx
A0: jl L0
A2: mov edx, eax
A4: mov ecx, [ebp-8]
A7: mov eax, [ebp-4]
AA: add ecx, 2
AD: mov esp, ebp
AF: mov ebp, eax
B1: jmp ecx

…変数でもそうなるが。
201194:03/11/30 17:05
>>198 考えて書かずに、脊髄反射でECLのInfoに書いてあった例だと思うのですが、
それを思い出しながら書いてしまったため、もしかしたら、「もともと存在しない問題」
を解いていたのかもしれません。
>200
fixnumってわかってればね。
>>202 fixnum の最適化の話じゃないの?
そうなの?

今、Guy Steele Jr.のGrowing a LanguageのPDFを入手できるところありませんか?
>>204 どーゆう話だと思ってたの?型宣言による最適化の話で、fixnum の例が
でてそれについての話だと思ってたのだが、間違ってれば指摘してくれ。
関係ないけど最後の

>B1:jmp ecx

これの飛び先はどこでしょうか?
次の継続ってやつでしょうか?
call ret使わないのってカッコイイね。
>206
194読んでなかったごめんね。
スレの流れと関係ないけど、次は >>2 にこれも加えて欲しいな。rakup.html もあるけど、
CL よりの初心者ページもあった方が嬉しい。

Common Lisp 入門
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp.html#abcllisp
判りやすい Common Lisp 入門サイト
>>201 おかげで ECL に興味がでた。Quake II に組み込んでる人とか居るのか。
なんか楽しそうだな。
>>211 名前は度忘れしましたが、現在無料で公開されている、サイボーグがレーザー
打ちまくりみたいなアクションゲームで、たしかDebianでパッケージにもなっていると
おもいますが、それも開発言語にLispを採用していたとおもいます。名前わすれちゃった...
年かな...
Quakeに代表されるアクションゲームでLispを使うときに気になるのが、
ガベージコレクションによる画面の一時凍結問題ですね。

むかし、むかし、ある人が大学の計算機の面倒をみるお仕事をしていました。
みんなに使ってもらっているEmacsエディタの設定でガベージコレクション中は
「ガベージコレクション中です。」というメッセージがでるように設定しておきました。
そうしたら、みんなから「Emacsは遅い」、「Emacsのガベージコレクションは遅くてむかつく」という
文句がかなり出てきました。少し考えたあげくその人は、ガベージコレクション中の
メッセージが表示されないように設定を変更してみました。すると、不思議なことに
Emacsが遅いと文句を言ってくる人はいなくなりました。

これは、めでたしめでたしという話なのでしょうか? それとも問題はそれを表す言葉
がなければ明確に指摘できなくなるという話でしょうか?
がーびっじ これくしょん
>>215 「がーびっじ」はどれなの? はっきり言わなければわからないよ。
1. マターリ待つ
2. GC しないようにメモリを使う

…やったことないから知らんけど、そんなに止まるのか?
3. 性能のよい GC をつかう
219212:03/12/01 13:36
>> 217
件のアクションゲームではまったく気になりませんでした。
ただ、Quakeなどにハマっている人はかなり画面の動きに厳しい気がします。
Emacsレベルの古いGCでは、すこし待たされる時間が気になるときもありますね。
これさえも、設定しだいで調整可能な気もしますが。
中村正三郎のホットコーナーでFranzのセミナー、Lisp、Prolog、Rubyについて
書かれています。
http://www.asahi-net.or.jp/~ki4s-nkmr/

> ところで、ぼく、何度もRubyをちょっとかじってはまた忘れてという状態な
> んですが、Rubyは、どうみてもLispですよね。\(^O^)/
> 作者のまつもとさんが、オブジェクト指向がちゃんとできるPerlだなんてい
> ってるけど、それは誤解の元だと断言しよう。
> おれに言わせると、AlgolシンタックスのLispですよ。
> いや、そっちのほうがわかる奴にはわかっても、誤解の元だと思うぜ。

おれはを触ったことがないのでRubyをすこし勉強してみるかという気に
なりました。
普通の言語
A「あぁ、偉大なる言語設計者様、この○○を書くのやメンテするのが激しく面倒なのですが…」
B「愚か者!! 言語にケチをつけるなど、一般ユーザーには出すぎたマネだ!! 言語の要素を駆使して解決せよ!!
△△と××を組みあわせてこれをこうすれば…(素人には考えつかないようなコードを示して)…ほら簡単ではないか」
A「はぁ、しかし、…そのようなハックはメンテも共有も不便でありますが…それに名前を付けて共有するのは…そのぅマクロとか…」
B「馬鹿者!! マクロは悪であるぞ!! そのようなけがらわしい名を口にするではない」
A「ははぁ!! 申し訳ありませんでした。以後気をつけます」

Scheme/Lisp
A「あ〜○○が楽に使いて〜マクロでも書くか」
B「ウェーハハッハいいねそれ」
C「そんなの駄目だ!! ポリシーが!! 括弧が!!」
D「OOP マンセー」
E「マクロ乱用は悪」
>>221 イイ! ワロタ!
LispとPythonの比較で、昔、俺が仕入れた知識だと、無名関数がすこし
制約があるという噂を聞きました。もう直したのかな?
最近の噂では、Schemeのようなマクロが実装されるという話もありましたよね?
Pythonianな人、よろしければ出てきて説明してくれませんか?
http://weitz.de/completions.html

よろずやから辿って CMUCL, SBCL, ACL でコマンドライン補完する方法を見つけた
のですが、ここにある !!!- で始まる関数ってどういう意味でしょうか。Google にも
CMUCL User's Manual にも書いてなかったもので・・・。一応、Hyperspec と
cltl2 も grep を掛けました。
>>223
俺の仕入れた昔の知識によれば、式が一個しか書けなかったような…
そもそも python は lambda はナシの方向なんじゃなかったか?高階関数+lambda
よりジェネレーターな方面に進んだと聞くが。このスレにも generator expression マンセー
みたいな誤爆がきてたろ。

>>224
もちつけ。!!!- で始まってるのは変数だ。let でバインドしてるだけだろ。
そのプログラムは要するに補完用のデータを作ってるだけだ。Edi Weitz タンは
無類の loop 好き lisper なので loop に慣れないと彼のコードは読みにくい…。
226224:03/12/01 18:16
>>225
うわ、済みません。本格的に Lisp を勉強しようと思ったのが昨日今日なもので。
スレ汚し失礼しました。
金鯛焼きマンセー
>>213
>Quakeに代表されるアクションゲームでLispを使うときに気になるのが、
>ガベージコレクションによる画面の一時凍結問題ですね。

ガベコレの種類にもよる。
pythonみたいな逐一のガベコレなら途中で止まったりはしないぞ。
そこらへんの事情はここでも見とけ。
http://www.is.s.u-tokyo.ac.jp/~vu/01/jugyo/processor/process/soft/compilerresume/gc/gc.html
参照カウント式はクソ。つーか広義の GC であって狭義の GC じゃないし。
んじゃ参照カウント + 他の GC はいかが?
Pythonって参照カウンタ方式?
ていうか参照カウンタってそんなに駄目なの?
java実装はmark&sweepだったはず。>Python
参照カウンタ式がダメな理由を解説汁!
よく言われるのは循環参照ですね
>>234
それはアルゴリズムの改良により解決済み、のはず
>>233
すぐに思いつくのは、
・参照する度に参照カウンタを修正する必要がある。
・1オブジェクト毎にカウンタ用の領域が必要。
・カウンタのオーバーフロー問題がある。
・プロトコルをちゃんと規定しないと簡単に誤動作する。

>>235
どんなアルゴリズム?
>>236
> ・プロトコルをちゃんと規定しないと簡単に誤動作する。
この文を少し解説していただけますか?
オブジェクトの循環参照によってゴミオブジェクト群が回収不可能になることですか?
すみません、スレの流れから逸れますが、個人的にあんまり面白かったので貼ります。

よく聞きやがれ、オープン・ソースのデベロッパーたち! Schemeベースの
スクリプティング言語を作るのはやめろ! 
http://www.hotwired.co.jp/webmonkey/99/19/index4a_page3.html

(…やっぱり人気ないんだなあ)
Lisp系の言語って一般に人気が出そうにないね…
単に慣れていないだけだと思うけどね
C風の文法ってそれほど素晴らしい物とは言えないけど慣れているが多いからあまり問題にならないだけでしょう?
拡張言語としてschemeが普及してくれば状況も変わるんじゃないかな
異文化にふれたときにみられる軽い拒絶感情なのでは?
実際にたどたどしいけど、プログラムは書いているのだし。
この人の場合、数式を前置記法にする点がムカついている原因なのでは?
これでさえ慣れれば、インデントで読みやすくするとか、
(+ 1 2 3 4 5)のほうが、1+2+3+4+5より簡潔に見えるという利点もある気がする。
> AppleScriptのような英語みたいな非構造化言語のほうが、本当に勉強しやすいんだぜ。一般のユーザーの作業には、ビジュアル言語(Prographなど)のほうがもっと向いているぞ。
こっちの方が気になるな。
>>241
Lispだ、いやRubyだ、C#だってなことを文字ベースの処理系でやっているうちに、
Visual系の処理系にしてやられるということはないのかな? GUI vs CUIみたいなね。
ありそうなのは、両者の融合だろうけど。
Lispのリスト表現ってある意味で慣れれば図に見えるからね。

Visual Programming Languages
http://www.cs.berkeley.edu/~maratb/cs263/paper/node11.html

Visual Programming with Prograph CPX
>Scott B. Steinman and Kevin G. Carver
>Out of Print
http://www.manning.com/Steinman/
Visual系Lisp(それが何かは知らないけど)くらいの衝撃を、Paul GrahamのArcには期待しているけど、それは無理筋かな?
>>243
LISPにもこんな感じのが出てほしい、ということでしょうか?
これ、すごく面白そうなんですよね。

CyberFramework
http://squab.no-ip.com:8080/wiki/804


>>238の記事はけっこう昔のだけど、今の最先端はどんな風になっているんだろう?
>>244 うぉー、何だか知らないけど血が騒ぐ、俺ってVisual系なのかな?(脳みそがですよ)
スレでも立てたい気分になってきた。
246デフォルトの名無しさん:03/12/02 15:40
>>241
ちゅーか数式の前置記法が嫌なら #$[ 1 + 2 + 3 + 4 ] みたいな中置記法マクロを使えば良いのになぁ。
前に出てきた ML 風味のシンタックスをかぶせたら満足してくれたりしないかねぇ…。
247デフォルトの名無しさん:03/12/02 15:48
>>246 それはそのとおり、ただgimpのscript-fu(やschemeって)ってreaderのカスタマイズ
できるの? もしかしてSchemeはSRFIで提案されているのかな?

ちなみに、gtkのWindowsでの見た目が気に入らない人へ、こんなの見つけました。
GTK-Wimp
http://gtk-wimp.sourceforge.net/screenshots/gfx/gimp-winxp.png
http://gtk-wimp.sourceforge.net/
248デフォルトの名無しさん:03/12/02 16:10
前置記法の利点。その1
> -3! confusing in algebraic languages, where you must learn whether
> it means (-3)! or -(3!). In Lisp, the parens would show you immediately
> that (factorial -3) or (- (factorial 3)) was intended.

Kent M. Pitman Answers On Lisp And Much More の質問1より。
http://interviews.slashdot.org/article.pl?sid=01/11/03/1726251&mode=thread&tid=156
>>247
Scheme に対する愚痴だったのか。元記事呼んでなかったからズレたこと言ってしまっ
た。でもScheme でも infix("1+2+3+4") と文字列ベースにするとか、infix(1 + 2) み
たいに明示的にスペース入れてもらうとかでなんとかなるんじゃねーの?中置記法で
書けさえすりゃ良いってわけでもないのかな。
>>237
参照カウンタの増減のタイミングの話。
例えばCOM系の初期カウント0方式を取る場合、

foo() {
 object obj = new object; //初期カウンタ0
 obj.addref(); //カウンタ+1
 obj.release(); //カウンタ-1 ==> delete
}
addrefを呼び忘れた時におかしくなる。
(release時にカウンタ<=0の条件でdeleteすればよいわけでもない)
これらをクライアントに守らせるという負担が発生する。



話を戻すけど、

>>235
どんなアルゴリズム?
251not 235:03/12/03 01:24
>>231 でちらっとでてるが、参照カウント + Mark & Sweep じゃなかったっけ?
いや、2.0 がどうのといってたふるい時代の知識でも申し訳ないけど。
Garbage Collection for Python, Neil Schemenauer
ttp://arctrix.com/nas/python/gc/
nasはpythonのGCをハックした人です。GC導入の動機は、
まさに、循環参照の問題を解決するためです。
Common Lisp処理系で製品になっているものでは、Generational GCが支配的かな?

スレ違いだけど、2chで見られる議論(口喧嘩)って、
A: ○なんてクソ!
B: なんで?
A: そんなことまで知らないお前もクソ!
B: ムッキー! お前のカアチャンでべそ!
的な不毛な議論が多いので、失望しました。ここは違うけど。
>>250
> 参照カウンタの増減のタイミングの話。
ありがとう。カウンタの増減を言語ユーザーがやるのなら、すでにGCとは呼べないような...
あっ、処理系を実装するときの話ですか。それなら納得。
>>250
「省メモリプログラミング(ttp://www.seshop.com/detail.asp?pid=3029)」に、
GCや参照カウントの話が載ってて、そこに論文の参照だけ(解説は無し)書いて
あった。すまんが本自体はおいらの手元にない。
256235:03/12/03 13:10
>どんなアルゴリズム?
昔、どこかで見た記憶が。。。↓かな? 違うような。。。
ttp://www.ipsj.or.jp/members/SIGNotes/Jpn/22/1993/070/article003.html
ttp://www.ipsj.or.jp/members/SIGNotes/Jpn/22/1995/002/article003.html
>>256 残念ながら「Authorization Required」ではねられて読めませんでした。
この手の人畜無害だと思われる情報は積極的に野に放てと言いたい。

循環参照オブジェクトの問題が解決したのなら、この手の逐次方式GCって
リアルタイムシステムなどと相性がよさそうですね。
GCって言語処理系の実装の奥深くにまで根を張っていて、簡単にGCシステムを
切り替えることって、できないような気がするけど、どうなのかな?
http://arctrix.com/nas/python/gc/
によるとPythonはなんか幾つかGCの種類がありそうな感じだけど。
大学の工学部の図書館になら置いてるんじゃないかな。>IPSJ's article
259235:03/12/03 14:16
260235:03/12/03 14:48
>循環参照を取り扱えるよう拡張された循環参照カウント方式が提案されているが
Rafael D. Lins さんの "Cyclic Reference Counting" (CRC) のことですね。
>>260
>>255で言ってるのもそれだったかと。
ググるといっぱい引っかかりますね。dX.
>>260
> "Cyclic Reference Counting" (CRC)
キター!!
しかしキーワードって大切だな。「循環参照カウント」でググったら約10件だって。
>>253
失望するのは勝手だが頓珍漢な事を言うと煽られるのは 2ch の常だろ。煽りとブチ
切れは 2ch の華ですから。でも粘着だけは勘弁な。

>>257
GC の移行期なんかはコンパイル時のオプションで変更できるのが普通なのでは?
cmucl とかも Generational GC にするかどうか選べるし、他の処理系でも選べる場
合があるだろう。
>>253
スレ違いだが

議論パターン
http://homepage1.nifty.com/fujiwo/develop/oo/dscsnptn.html

不毛な議論をしないためにも読んで(ませて)おきたい
>>264
素晴らしい!
>>253氏が指摘したパターンも、ちゃんと載っている!
>>264 某スレの彼がパターンにすっかりハマってて笑えた。
思考パターンがはまってるな。
SICPの演習の解答載せてるサイトありませんか?
テンプレのサイトは404だったり途中までしかなかったりで・・・。
よし、ここにモマエの解答なり考えを貼り付けてみろ。
親切な香具師が教えてくれるかもしれないぞ。
MITでのSICPを使った教育って消防士の放水ホースで水を飲ませられるようなものって
例えた人がいたよな。単位を取得した後のMITの新入生ってどれだけ「分かった」と
思っているのかな?
だいたいLispとSchemeをある程度は習得している香具師が読んでみて、
驚くほどのことが書いているか? > SICP

まぁ、だからコンピューティングに関する入門書ということなんだろうけど。
SICPを読もうにも初っ端から、Newton法の立方根の近似式はなんで
そうなるんだとか、黄金比はなんで√5が出てくるんだとか、
Ackermann関数ってなんだよとか、いちいちつっかえてしまってぜ
んぜん読み進めません。
>>271
Schemeについては必要最低限な機能しか使われていない
ただのプログラミングの道具扱い
だけど扱っている内容は知らないと驚くようなことばかり
274271:03/12/04 13:07
>>273 舌足らずだったね。俺は読んだことあるんだけど、「噂ほど」驚かなかったという話。
SICPは2回挑戦したが2回とも3章に入る前に挫折したぜ
じゃあ、3章からやれば?
>>271
お前個人がどう感じたかなんてどうでもいいんだよ。
世間一般ではSICP読んで無茶苦茶ビクーリしたあげく、
ノイローゼになったり学校辞めたりって事になるんだよ。
自慢気に「俺は驚かなかったぜ!」で得られるレスなんて高が知れてるだろ。
わざわざ数字コテで粘着しても「はあ、そうですか。」これで終わりだ。
そいつらと比較すると、俺は世間一般では親切な部類に入るわけだが、
別に感謝してもらわなくてもかまわないぞ?
まあ、落ち着いたら>>264のリンク先でも参考にして、
これからも精進してください。
>>270
何人かMITのCSでコース取った友人はいるけど、
TAとかのサポートがかなりしっかりしていて
フォローしてくれるそうだ。
でも、それがなけりゃ半分位の学生はついてけないだろうと
一人は言っていた。
279271じゃないが:03/12/04 18:50
粘着?誰が?
みなさん、何をムキになっておられるのですか?
驚かなかった、なんて誰だって言えるだろ
理解できたのかよ
この程度理解できないやつがプログラムなんて書けるわけねーだろ。
やっぱSICPは3冊ぐらい保存しておくべきですね。
>>278 は四郎さん
SICP うpキボンヌw
>> 278
> 何人かMITのCSでコース取った友人はいるけど、
> TAとかのサポートがかなりしっかりしていて
> フォローしてくれるそうだ。
なるほど。日本とは少し事情が違うのかな。日本でSICPを使っている学校はあるのかな?

> でも、それがなけりゃ半分位の学生はついてけないだろうと
> 一人は言っていた。
やはりそうですか。放水ホースじゃ水は飲めませんか。

>>285
> SICP うpキボンヌw
日本語版のことは知らないけど、英語版ならネットからダウソできるよ。
SICPの読書会って日本でもやっていたよね。
「計算機プログラムの構造と解釈 第二版」を読む会について
http://www.javaopen.org/jfriends/sicp.html
なんでJavaつながり?
>>286
> なるほど。日本とは少し事情が違うのかな。日本でSICPを使っている学校はあるのかな?

http://mitpress.mit.edu/sicp/adopt-list.html
これ見た限りだと、東大では使っている(いた?)みたいだけど……
でも古い情報だなあ。年次とかの詳細もわからないし。
邦訳の『計算機プログラムの構造と解釈』
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/249-2401405-4944320

訳があまり良くないとは聞いていたが、正直、驚いた。
英語の原文と照らし合わせないと、私には意味の取れない文が多くて。

読書会をやっている人たち、翻訳会もしてくれないかなあ。
flatline ◆r6EONKKhcc 氏の『On Lisp』並みの翻訳なら最高なんだけど。
http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf
(最終更新日 2003.12.03)

と思って、久しぶりにアクセスしたら、更新されてた。お疲れ様です。
翻訳は15章4節から進んでないのが少し残念。
>>290
調子が硬いというのはあるけど、普通に読める日本語だと思うが。
英語で読めよ。
日本人の訳す英語なんて中学生の英文和訳レベルで読んでられん。
SICP日本語版って読む価値がありまつか?
あるとおもいますが、自分で読んで判断したらいかがですか。
僕は正直「計算機プログラムの構造と解釈」は辛くて読む気になれなかった。
内容を理解する前に気色悪い日本語に挫折するのは確実だったので原書で読みました。
アレを普通に読めると言い切る291はすごいと思う。心が広いんだろうな。
たとえばどんな文章が気色わるい?
アマゾンの日本語版SICPレビューより。
> 彼らの文書を洗練したり読みやすくするのに力を貸したのが、ジェラルド・ジェイ・サスマンの妻のジュリー・サスマンである。
日本語への翻訳でも、技術的に正しい翻訳かという視点とともに、日本語として読みやすいのか
という視点を入れて欲しいと思う。日本語として生硬だとはっきり言って読む気が萎えることが多い。
ベテラン技術翻訳者+専門家による監訳者というタッグ構成を推したい。両者が同一人物ならなお良い。
SICPってどんなもんなんだろうと思ってパラパラと眺めてみただけだけど、
"解釈系"、"翻訳系"という言葉が一瞬なんのことかわからんかった覚えが。
これって普通に使われる言葉なんですか?
おれの守護霊に聞いてみた、あんまりあてにしないで聞いてくれ。
解釈系はinterpreterのこと。
翻訳系はcompilerのこと。
SICPの日本語版は読んだことがない。
300299:03/12/06 09:01
初めて聞いたような、すでに聞いたことがあるような、あいまいな感じを受ける言葉だ。
漏れの場合、こういう類の本って著者が何を言わんとしているかを考えながら読んじゃうので、
翻訳された日本語が多少変でも読めてしまう。
だから日本語の善し悪しより正確性があった方が嬉しい。
こういうのは少数派だろうけど。
なんだキショイってその程度なのか。
前スレのレキシカルスコープを字句的スコープと訳すのと同じレベルね。

IBMのマニュアルに慣れていれば無問題だな。
>>302
解釈系,翻訳系はキモイだろ
SICPの日本語版は読んだことないけど、一般的に。単語の訳語の問題じゃなく
て文章としてキショイ。英語に逆翻訳できるくらい超直訳が多すぎる。そういう日
本語を平気で読める奴もきっと同じような訳を書くんだろう。
>>303
適用業務(=アプリケーション)のような翻訳と直訳がてんこ盛りの
IBMのマニュアルに比べれば(ry

今まで読んだマニュアルで最低なのはアポーのインサイド・マッキントッシュ(旧版)だな。
SICP初版の訳は良い。
SICP2版の訳は翻訳としては最低レベル。
日本語の態をなしていない文が多すぎ。
具体的にどの文章がダメで原文はどうなのか書いてくれ。
カタい文章だとは思うが、解釈系だって最初に「解釈系(interpreter)」とでてく
るわけで、最初っから読んでけば意味がわからないって事もないと思うのだが…。
カタカナにすると er を ー と延ばすかどうかでアレだし(自分の趣味とあわないとそ
れこそ気になる)、interpreter とかそのままでてこられてもナニなので、これはこ
れで良いと思う。
手続きって言われると市役所とかに行かなきゃならんのかと思ってしまう。
>>309
昔も今も主流は市役所の計算機課に長蛇の列ですよw
初めて見たときは プロセデューア でしたが.
>>309
なんと訳してほしかったのですか?ひょっとして日本語そのものの否定派ですか?
どうせケチつけるなら改善案も出したほうが建設的ですよ。
>>311 どうせ読むなら美しい日本語がいいのに,っていうことかな?
>>306が訳すとどうなるんだ?
1節でも例を示してみろ
なんで具体例も、美しい日本語の例も示さないの?いい加減ウンザリ。
>>312 も 311 にレスしておきながらその辺は見事にスルーとは…
何か粘着君も出てきたし、Lisp とは直接関係ない話なので続きは他所でやってくれ。
nth, elt, aref,svref -> defmethod使えるんだから統一しろよと言いたい
自らの理解力のなさを訳のせいにしたいだけなので気にしないでやって下さい
とりあえずSICPを買って読んで見よう・・・

これって第2版ですよね。
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/ref=pd_bxgy_text_1/250-0170725-0347471

レビューに誤訳が多いと書いてるのが気になるが。
英語ができるなら原著を買え
>>320
原書なら買わなくても公開されてまつが。
http://mitpress.mit.edu/sicp/full-text/book/book.html
>>316
ところがどっこい
なんだこの流れは…。>>322 が何を言いたいのかさっぱりわからん。
漏れの理解力不足か?

>>316 Common Lisp の設計思想には「実行効率」がありますからね。
効率を気にしないならば defmethod でやってもいいんじゃないですか。
効率を気にする人もいるわけで。というわけで、統一しないでくれ、と言いたい。

ちゅーかね、やっぱ C とか目の前に転がってる以上、その気になれば効率も
追求できる、じゃなきゃぁ面白くないじゃん。
>>323
そうそれそれ
On Lisp の翻訳,第16章まで進みました.(毎回知らせに来るわけじゃありません)
今回,実験的にカタカナ表記を多く採用してみました.次は原語表記を試すつもり.
>>290
更新日時はトップページに書いているので,HTTPヘッダで判断するのは止めて下さいね.
(trivialな訂正であることが多いので期待外れになるでしょう)

それから(立ち読みしたことがある)SICP日本語版について一言.
(立場上キツいことは言えませんが)あれほど読みづらい訳は滅多にありません.困ったものです.
正確なら美文じゃなくとも... とかいう問題ではありません.修飾語の係り方,構文の捉え方,訳語の当て方.
まずい訳は,それ自身が誤っていなくとも読み手の誤解を招きやすいです.
326290:03/12/07 08:27
> On Lisp の翻訳,第16章まで進みました.
おお!お忙しいところ、わざわざすみません。ありがとうございます。

> HTTPヘッダで判断するのは止めて下さいね.
実はもっと愚直にやりました。pdfをダウンロードして、最終ページを見ました…。


> 更新日時はトップページに書いているので,

http://user.ecc.u-tokyo.ac.jp/~g340299/
そのトップページですけれど、こんな表示になってしまうのは私だけ?
環境は IE6 / Win2000 です。
ちなみにリロードすると、以下のレスポンスも返って来ず、何も表示されません。


XML ページを表示できません
スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。


--------------------------------------------------------------------------------

使用する前にパラメータ エンティティを定義しなければなりません。リソース 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd' の実行エラーです。ライン 85、位置 2

%xhtml-prefw-redecl.mod;
-^
次は SICP の翻訳を期待して良いのだな。w
> エラーを訂正してください。
ワラタ
どっちにエラーがあるのやら
具体的にどこがダメなのか書いてよ。
>>329
東○大学 和○英○タソ?
このスレから新たな翻訳者が出るって本当ですか?
>>323
>効率を気にする人もいるわけで。というわけで、統一しないでくれ、と言いたい。

まともな処理系なら
多重定義してもコンパイル時には(C++みたいに)
別物の関数として静的に扱われるわけだし、ボトルネックは発生しないんじゃないかね。

C++でもvirtual関数を使えば遅くなるが、静的に決まっていればスピード上の問題は発生しない。

>>316
ついでに
=, equalも統一しろ。
>>332
え〜型指定マンドクサ…。というか nth, aref, svref を統一したものが elt なんじゃないの?

まぁ defmethod で統一したけりゃ自分で統一すりゃいいじゃないか。満足の行くも
のができたら公開してくれ。実物を見て気にいったら漏れも宗旨がえするYO!! CLOS
に ML 風型推論付きコンパイラ/エラーチェッカを備えたやつとかいいねぇ。
>>331
教授の不始末なんだから学内で落とし前を付けて貰おう。
>>333
>え〜型指定マンドクサ…。
お前勘違いしすぎ。
型指定をするのは「関数の方」であって、ユーザーは型とは「何の関係も」ない。
そんな必要はまったく無し。
ユーザーから見ると一つの関数にみえるが「実際にはsvref,aref.....」があるのと同じと言うこと(名前が統一されているので一つの関数にみえるだけ)。

型指定しないと毎回 generic function 経由でアクセスする羽目になるんじゃねーの?
generic function にした場合のメソッドディスパッチのコストが嫌だなぁ。
つーか、最初から気になってるんだが、そもそも elt ではなんで満足できないんだ?
>>336
>generic function にした場合のメソッドディスパッチのコストが嫌だなぁ。
キャッシュ。

>つーか、最初から気になってるんだが、そもそも elt ではなんで満足できないんだ?

俺が話してるのはANSI Common lispの仕様について。
CLOSを仕様に含めたんだから何個も名前つける必要ないだろってこと。
Common Lisp が 0 から設計された言語ならそういう批判はアリだろうね。
でも、そうじゃなくて、当時の各種 Lisp 方言の公倍数的に設計されてるんだから、
同じようなことをするのに複数のやり方があるのはしょうがないんじゃない?
組込みで使うときは CLOS とかつかわねーんだけど…。CLOS オンリーにされてもヤダナァ。
漏れイイ方法を思いついたよ。>>337 よ defmethod でアクセス関数を定義して nth と
か aref を忘れちゃうってのはどうよ?で、次世代の Lisp の規格に期待すると。

…末尾再帰の最適化を示すオプションホスィとかならともかく、defmethod オンリーに
汁って話はあんまり受けなさそうだから、あまり期待しないほうがいいかもね。
Common Lisp でそんなこと気にしてたらキリが無いだろうに
>>329
Mozilla 使え
>>340
関数の数にはキリがあるのだから、そんなことはないぞ。
>>337
キャッシュって、何がくるかわからない変数に対してできるもんなの?
>>342
自作関数を COMMON-LISP パッケージに突っ込むのか…?
気にする必要ねーだろうが。なんのためのパッケージ機構だよ。

むしろ scheme のほうが SRFI まで考えるとマンドクサ。
関数名くらい気楽に決めてーよ。R6RS ではパッケージキボンヌ。
実際どうなの?入りそうなの?
>>344
>自作関数を COMMON-LISP パッケージに突っ込むのか…?
coreを変えれば何の問題も無し
346345:03/12/08 18:32
>>345
CMUCLでの話ね
>>345
いきなり出てきたCMUCLの中身なんて誰もが知ってることじゃないのに・・
せめてどういう理屈で問題無いのか説明しろよ。
名前がもったいない -> パッケージがあるじゃん
この流れで CORE を分ければ問題ないって?意味がわからん。
345 は流れを勘違いしてないか?
340 から 342 の流れでパッケージの話をはじめる 344 の方がむしろ
>自作関数を COMMON-LISP パッケージに突っ込むのか…?
|
| 俺はむしろこの流れが良く分らん。
|
>気にする必要ねーだろうが。なんのためのパッケージ機構だよ。

パッケージ機構って多重定義と全然関係ないんじゃないか?
知ったかぶりをしたい年頃なので気にしないで下さい
hemlock って使っている人います? portable hemlock なんてあったから
試してみようかと思いました。取りあえず日本語は期待しない。

http://www.stud.uni-karlsruhe.de/~unk6/hemlock/
http://bauhh.dyndns.org:8000/hemlock-manual/
353デフォルトの名無しさん:03/12/09 00:50
技術系の教科書なんて技術文書の一種なんだから文の美しさを求めてもねえ…
論理的な誤りがなければ語彙なんてささいな問題では? 例えば最初に
(define 翻訳系 compiler)
と書いてあると思えばLisp屋なら抵抗無く読めるんじゃないの?

ちなみに「翻訳系」「解釈系」「算法」「算譜」といった言葉は1970年代に計算機科学
者の間ではよく使われていたようで,当時の論文やbitの記事にはこういう言葉がよくで
てくるよ。
語彙が少なくても美しい文ってのはあるけどな。
`let' ってなまえはどこからきたのでしょうか?
>>352
なんか面白そうなので昔使ってみたことがありますが、
やっぱりしりめつれつでも emacs でいいやって思いました。
>>355
数学の証明で「aを2とすると」といった表現を使うと思うけれども
英語では「let a be 2」となる。
BASIC でも LET A=A+1 のような構文があった気がする
let it be (古っ!
>>353
> 技術系の教科書なんて技術文書の一種なんだから文の美しさを求めてもねえ…
技術者は文学的な美しさを求めているのではなくて、理解のしやすさを求めているのでは?

> 論理的な誤りがなければ語彙なんてささいな問題では? 例えば最初に
> (define 翻訳系 compiler)
> と書いてあると思えばLisp屋なら抵抗無く読めるんじゃないの?
訳語があまりにもとんでもないモノ(個人によって違いがあるでしょう)
でないかぎりこれはそのとおりだと思う。

> ちなみに「翻訳系」「解釈系」「算法」「算譜」といった言葉は1970年代に計算機科学
> 者の間ではよく使われていたようで,当時の論文やbitの記事にはこういう言葉がよくで
> てくるよ。
なにか、ガキのころによく行った駄菓子屋を訪ねたみたいな、懐かしさがありますね。
今の若い人はどう感じるのかな?

ちなみにLispをリスプと表記している文章には今までお目にかかったことは
ないと思う。
ilisp + clisp on Meadow(Windows) が ilisp + cmucl on Linuxと比べて劇重。
いくらなんでも、これは遅すぎるような気がする。
プロセス間での通信が信じられないくらい重い気がする。
>>361
Win は NT系? 9x系だとしょうがない気が…
363361:03/12/09 13:38
> Win は NT系? 9x系だとしょうがない気が…
9x系です。ilispの(sit-for 0)を(sit-for 0 1 t)に置き換えるというミニハックの
情報はWebで仕入れたのですが、それでも遅い気がします。とりあえず、遊ぶのには十分ですが。
話を蒸し返すようで悪いのだが、
>>316の言うことを真面目に考えてみたり。
仮のメソッド名をaccとしておくと

(acc number list) ; nth
(acc number array) ; aref
(acc number simple-vector) ; svref
(acc number sequence) ; elt(呼び出されることはほとんどないがsequenceの派生クラスにたいしてgetを提供しておくため)
(acc number string) ; char
(acc number simple-string) ; schar
(acc number bit-array) ; bit
(acc number simple-bit-array); sbit
(acc vector) ; fill-pointer
(acc key hash-table) ; gethash
(acc slot instance) ; slot-value

構造体のアクセッサは個人的にあまり変えたくないが、一応作っておいて
(acc field structure) ; structure-field

連想リストとか属性リストはクラスがlistと同じなので無理。
新たにクラスを作るという手もあるが。

C/C++派の言う「型のない言語はバグが多い」という意見を乗り越えるために
どんな型でも統一的な操作を提供するというのはおもしろそう。
(object number)
興味から聞くんだけど、どーゆうバグが減るの?これ。
漏れが初心者だからかもしれないけど、想定している問題がわからない。
ちょっと具体的に説明してくれると助かるな。
リス (プ
>>364
「どんな型でも統一的な操作を提供」しても実行時にエラーにならないだけで、
もっとわかりにくいロジカルなエラーになると思う。だって list を期待して
る場面で string が渡されたら... そりゃきっとだめだろ。エラーになってく
れたほうがマシ。

「C/C++派の言う「型のない言語はバグが多い」という意見を乗り越える」
ためにその方法をとるのは全然見当違いだと思う。で、型推論とかそういう方
向にもっていったらどうかな?
http://www.ipa.go.jp/ipa/press/15FY/20030926.html

ちょと古いけど、Gauche の川合さんの名前があるね。あと Squeak の大島さんも。
スレの流れと関係なくてスマソ。

>>364
>どんな型でも統一的な操作を提供するというのはおもしろそう。
これが嬉しい局面はエラーを減らす事より、抽象度を高められる事じゃないかな。
で、記述性が増すと。
>369
どちらもipaに応募したのは28歳以下ってことだよね。
みんな意外に若いね。
>>364
> >どんな型でも統一的な操作を提供するというのはおもしろそう。
> これが嬉しい局面はエラーを減らす事より、抽象度を高められる事じゃないかな。
> で、記述性が増すと。
エラーを減らす事には、あんまり役立ちそうにないというのは賛成ですが、
記述性が増すというのは、具体的に言うとどんなことを指しているのですか?
>>flatline 氏
http://user.ecc.u-tokyo.ac.jp/~g340299/

何か対応していただいたみたいなのですが、IE6/win2k だと、今度は xmlの
ソースが表示されるようになってしまいました。
これもIEのバグなのだろうけど。

で、xmlソースとは言え、一応読めるので、初めてトップページを読んだのですが

「あんた、まだ教養部の学生だったんかい!!」

参りました。てっきり院生あたりかと思っていました。
まあ山形浩生なんかも高校ぐらいから翻訳やってたというから、そういう人も一定の
割合で存在するんだろうけど。

しかし、これだけ優秀なのに、「Fourier変換がまだ分からない」とか書いてあるのは
なんと言うかシュールだ。
CGIにcommonlispが使えるレンタルサーバってないですか?
>>372 彼の「分かる」は一般で言う「分かる」とは違うのでしょう...

>>373 大学 w
>>371
>記述性が増すというのは、具体的に言うとどんなことを指しているのですか?

型によって分岐をさせなくちゃいけない局面が減るし、コードが読みやすくなるでしょ。
例えば、short int では足し算記号を s+, long int では l+ と書かなくてはいけなかったりすると
面倒じゃない?
>>375
C/C++だと暗黙の型変換があるからね。
その例じゃ数値同士の範疇でしかないから、
ぶっちゃけるとC言語の暗黙の型変換を使いたいだけじゃないの?とも取れる。
じゃあそれでは、と文字列やらリストに対しても+を使えるようにした
としても意味が付いていかないでしょ。
適用できそうなのはせいぜいシーケンスの様な同じ構成のコンテナの類で、
そういうのは既にCommonLispにあるし。
実質的に演算子が存在しないLISPで色々やっても
あまり旨みが無いんじゃないかと。
いわゆる「総称」の話をしているのではなかったのか?
同じ事だよ。
総称化できる物を具体的に列挙してったらわかるよ。
「総称」ってオペレータのoverloadという意味でとっていいのかな?
つまり、同じ名前のオペレータを使っても、引数の型によって別のオペレータが
実際には呼び出されると言う。それとも、総称 = overload + polymophism?

>総称化できる物を具体的に列挙してったらわかるよ。
数(integer, ratio, float, ...)、シーケンス(list, vector, ...)、
あと何があるかな?
380379:03/12/11 07:46
あ、総称=genericということですね。多分。
>>flatline氏
http://user.ecc.u-tokyo.ac.jp/~g340299/
ついに普通に見られるようになりました!(IE6 / Win2k 環境)
お忙しいところ、お手数おかけしました。

御礼ができるほどスキルが無いんで、ヒマネタを提供。

東京大学教育用計算機センター (ECC) の裏パスワード
http://homepage1.nifty.com/zepto/misc/ura_pass.htm

進振り、満足できる結果になるよう、お祈りしています。
>>381
> 東京大学教育用計算機センター (ECC) の裏パスワード
> http://homepage1.nifty.com/zepto/misc/ura_pass.htm
おもろい…
>>376
それ以前にさ >>332 とかの統一しろって逝ってる香具師、自分で全然試してない上
に CLOS の知識もあんまりなくないか?そもそも >>333 ででてるように型情報を使
えばすれば defmethod のほうが性能的に有利な場合すらあるというのに「勘違いし
すぎ」とか言ってるし…。性能の問題に言及しといてそりゃねーだろ。多重定義とい
う単語が出てきてた時点で嫌な予感はしてたけどさ…
だれか論点を整理していただけませんか?
385332:03/12/11 16:36
>>383
おいおい。
俺は>>333
"eltがどんなシーケンスにも使える汎用的な関数であること(eltは一つの関数)"

"svref,aref,nth....といったそれぞれの型に特化した関数を
defmethodを使って一つの名前(例えばelt)にまとめること(eltは数種類のメソッド)"
の違いを分っていないようだったから
「勘違いしすぎ」と言ったまでだ。
>性能の問題に言及しといてそりゃねーだろ。
とのことだが、お前は俺が何に対して「勘違いしすぎ」と言ったと思ったんだ?

>そもそも >>333 ででてるように型情報を使えばすれば defmethod のほうが性能的に有利な場合すらある
>>333の言う「型指定」ってのはmethodのユーザー側から見た型指定のことではなくって?
# >>333がCommonlispの実装者なら話は別だけど
少なくとも「型指定」をする必要はない(=しなくても使える)という俺の発言は当を得ていると思うが。
もちろん型指定をすれば性能は向上するだろうが、少なくとも
>え〜型指定マンドクサ…。
というような型指定をしなくてはいけないムードな発言は勘違いと言わざるを得ないだろう。
つーか相手をバカに見すぎだろ…。ML 風味の型推論が欲しいとか言ってる事からし
て、「普通の関数と同じ(もしくはそれ以上)の性能を出すために必要な」型指定が
マンドクサって言ってるのかもしれんだろ。ひょとしたらメソッドの定義でやる型指定の
事かもしれんが,どっちにしろいきなり「勘違いしすぎ」は逝きすぎでは。

まぁ、最初にシーケンスの例しか出さなかったら elt で良いじゃんとしか思われな
くて仕方ないんじゃねーのか…。ただ defmethod 言いたいだけちゃうんかと。
387332:03/12/11 18:06
>>386
>「普通の関数と同じ(もしくはそれ以上)の性能を出すために必要な」型指定
はCLOSがあろうがなかろうが行なわれていると思うが。
それはdefmthod関係ない。

>まぁ、最初にシーケンスの例しか出さなかったら elt で良いじゃんとしか思われな
>くて仕方ないんじゃねーのか…。
>>316と俺は別なんで。(というか当の>>316はどっかで発言してるのか?)

>ただ defmethod 言いたいだけちゃうんかと。
ただ突っこみたいだけちゃうんかと。


まあ、>>316の一行レスを勝手に解釈して先走った俺が悪かった
スマソ
ということでOK?
まあなんか論点が良くわからない話題だし、続けても不毛かと。
でさ、今回のいざこざみたいな、CLOS関係の最適化の具合辺りを
理解させるって、素人に向けては酷な事なんじゃないかと。
下手に話合わせると妙な方向に飛ぶし。
んでそういうのには、こういう出力コードができるから効率的には
あまり問題ないんだよとか言ってチョンすれば早い気がする。
出力が判れば処理系が何してんのかは漠然とでも想像できるだろうし。
関心があるのは結局どんなコード吐くの?って事なんじゃないかな。
↓新たな話題ドゾー

..と言ってもAAが出て来そうな予感がするので、とりあえず話題を振ってみる。

ACLの問題3.5はニュースグループでも話題になったのだが、
2chのlisper的にみてどうよ。

本持ってない人のために問題の内容を説明しておくと

(pos+ '(4 5 3 1 2))
==> (4 6 5 4 6)

みたいにリストの要素に位置を示す数を付け加えて戻す関数を定義せよ、というようなやつ。
つまり、
(4+0 5+1 3+2 1+3 2+4)
==> (4 6 5 4 6)
ということ。反復か再帰かmapcarを使えとのこと。

とりあえず俺が考えたやつ

(defun pos+ (lst)
(if (null lst)
nil
(cons (car lst)
(pos+ (mapcar #'(lambda (x) (+ x 1)) (cdr lst))))))

既出のはこことか
http://www.geocities.co.jp/SiliconValley-SanJose/7474/cllMemo.html
>>387 >>316 と別人だと気づかなかった漏れも悪かった。スマソ。

defmethod だと引数の型が declare よりも信用できるから
(型が違ったらそのメソッドは呼ばれないわけだし)メソッド
ではより積極的な最適化ができるわけだし。

基本的な最適化ならそんなに理解できなくも無いんじゃないかな?
- デフォルトメソッドのみ -> 普通の関数と同じ
- メソッドが一つしかない場合 -> 型チェックの手間のみ
- 一つの引数だけ特定化する場合 -> メソッドと型のテーブルの検索で済む
- マルチメソッド -> 複数の型で検索するしかない
くらいを意識しとけば良いとは思う。メソッドキャッシュとか
スロットキャッシュもあるし〜。
(define (pos+ lst)
 (let loop ((lst (reverse lst)) (r '()))
  (if (null? lst) r
    (loop (cdr lst) (cons (+ (car lst) (length (cdr lst))) r)))))
scheme の promise ってどういうときに使うもんなんでしょ
とりあえず loop 向きだし
(loop for pos from 0
for elem in lst
collect (+ pos elem))
396390:03/12/11 20:35
>>391
なんだあったのか。
まあ気にしないでマターリ逝こうぜ。

do バージョン
(defun pos+ (lst)
(let ((len (length lst)))
(do ((i 0 (+ i 1)))
((= i len) lst)
(setf (nth i lst) (+ (nth i lst) i)))))

全然美しくないな。
やっぱり反復は嫌い。
(defun pos+ (lst)
(do ((lst lst (cdr lst))
(n 0 (+ n 1))
(r '() (cons (+ (car lst) n) r)))
((null lst) (reverse r))))
(defun pos+ (lis)
(let ((n -1) r)
(dolist (x lis) (push (+ (incf n) x) r))
(nreverse r)))
(defun pos+ (lst)
(maplist (lambda (x) (+ (car x) (- (length lst) (length x)))) lst))
length 使うと効率悪いよ。
(defun pos+ (lst)
(labels ((a (f g l ll)
(if (null l) ll
(a #'(lambda (n) (funcall g (funcall f n))) g (cdr l)
(cons (funcall f (car l)) ll)))))
(a #'(lambda (n) (+ n 1)) #'(lambda (n) (+ n 1)) lst '())))
(defun pos+ (lst)
(let ((a (lambda (f l ll) (if (null l) (reverse ll)
(funcall a `(lambda (n) (+ 1 (,f n))) (cdr l)
(cons (funcall f (car l)) ll))))))
(funcall a (lambda (x) x) lst '())))
403デフォルトの名無しさん:03/12/12 01:24
個人的には>>395がいいと思うけど、素直に再帰でかいてみる。

(defun pos++ (x xs) (if (null xs) nil (cons (+ x (car xs)) (pos++ (1+ x) (cdr xs)))))
(defun pos+ (xs) (pos++ 0 xs))

とりあえず無駄なconsはないけどスタックは使うなあ…
関数が2つになっちゃったけどこれはlabels使えばいいよね。
じゃあ継続版
(defun pos+ (lst)
(labels ((a (f g l c)
(if (null l) (reverse (cdr (funcall c l)))
(a #'(lambda (n) (funcall g (funcall f n))) g (cdr l)
#'(lambda (ll) (cons ll (funcall c (funcall f (car l)))))))))
(a #'(lambda (n) n) #'(lambda (n) (+ n 1))
lst (lambda (n) (list n)))))
405403:03/12/12 01:36
末尾再帰にしてみた。
自分で作ったリストだからnreverseでもいいよね。

(defun pos++ (x xs a) (if (null xs) (nreverse a) (pos++ (1+ x) (cdr xs) (cons (+ x (car xs)) a))))
406403:03/12/12 01:49
実は>>403はこんな具合に考えた。

1. 要求仕様(?)
(pos+ xs) = (mapcar #'+ xs '(0 1 2 3 ...))
2. 一般化
(pos++ n xs) = (mapcar #'+ xs '(n n+1 n+2 n+3 ...))
3. xsで場合わけ
3-1 nilの場合
(pos++ n ()) = ()
3-2 consの場合
(pos++ n (x . xs))
= (mapcar #'+ (x . xs) (n n+1 n+2 ...))
= (cons (+ x n) (mapcar #'+ xs (n+1 n+2 n+3 ...)))
= (cons (+ x n) (pos++ n+1 xs))

という具合に,ごく簡単なunfold/foldで導ける。
(defun pos+ (lst) (mapcar #'apply (foldr
(lambda (x y) (cons x (mapcar (lambda (x) (lambda () (+ 1 (funcall x))) y)))
'() (mapcar (lambda (x) (lambda () x)) lst))))
>>392
それはcaller側の最適化って理解していいのかな。
コンパイルした後でメソッドが足された時はどうするんだろう。

圧縮ディスパッチテーブルを使ってる場合はテーブルの再計算で
いいけど、メソッドがひとつしかないからって普通の関数呼び出しに
しちゃったらまずくない?

それとも富豪的に、メソッドが足されたら全部再コンパイルとか。
過去スレ、全部html化していました。
次スレ立てる人、テンプレはこっちでお願いします。

Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://pc2.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: http://pc2.2ch.net/tech/kako/1058/10582/1058263391.html


こちらはdat落ちしたときにhtml化してもらったもの。
もう本物がhtml化したから、無くても良いんだけど、
・スレッド内の>>が効く
・外部リンクがime.nuを中継しない
ttp://〜と書かれたリンクも、直リンになっている
などの理由で、本物より便利だったりして(と言うか本物もこうなってほしい)。

Part7: http://ruku.qp.tc/dat2ch/0311/20/1042167213.html
Part8: http://ruku.qp.tc/dat2ch/0311/26/1058263391.html
あと、テンプレのリンク先のうち、国内リンクは
http://〜 の h を取って ttp://〜 にしてあるけど、そうする必要はないんじゃ
ないかと思う。直リンクでいいんじゃないの?

まじめなスレッドだから、リンク先がリファラを見てサイトを閉鎖、というのも
考えにくいし。ネットウォッチ板じゃないんだから。

いちいちコピペするのは面倒くさい。
まあ、直リンクのime.nu経由もうっとうしいのだけど。
ありがたいけど、
次スレ立てる段階で言わないとまた忘れられそうな気が(w

>>410
かちゅーしゃとか2chブラウザで見ればコピペ不用ですよ。
CMUCLをWindowsへポートする人にお金を出そうと言う人が出現しました。
気になる人はcmucl-impをチェック。
>>412
アーカイブは公開されてないの?
>>413
http://news.gmane.org/gmane.lisp.cmucl.devel
>From: Michael Naunton <michael <at> naunton.us>
>Subject: Windows XP port
>Newsgroups: gmane.lisp.cmucl.devel
>Date: Wed, 10 Dec 2003 21:42:26 +0000
>
>Is anyone interested in doing a Windows/x86 port of CMUCL? I think I
>could arrange financing for the effort if there are takers.
>
>Ideally, this would be native and public domain (e.g. no Cygwin,) and
>remain part of the CMUCL source tree (i.e. not a fork.)
>
>Feel free to mail me if you have questions/suggestions (I also lurk in
>cmucl-imp.)
>-- Michael Naunton.
ime.nu経由のほうが落ちてた時の手間考えると面倒。
w3m なら ttpのほうが `:'でリンクにできるし。
2ch browserなら hの有無関係無いし。
>>361
Windows9x+Meadow+ilispでGNU CLISPを使う場合、CLISPはWindowsネイティブ版よりも、Cygwin版の方が
高速に動作する気がする。
417390:03/12/12 17:45
>>390なんだがみんな反復好き&cons嫌いな感じだね。
俺は遅くても
(defun foo (list)
(cons (car lst) (foo (cdr lst))

みたいな形式の再帰を好む。
それは末尾再帰じゃないからきらい。
419390:03/12/12 18:10
>>418
末尾再帰は本質的には反復だから嫌い。
list の cdr 側処理するのにスタック消費するコード書く奴きらい。
スタックけちるために末尾再帰で葉っぱ数える奴きらい。
422デフォルトの名無しさん:03/12/12 18:56
schemeでの再帰関数について質問させていただきます.
再帰関数はラムダ式だけでは書けないので,以下の例のように関数名を参照する必要がありますよね.
(define length
(lambda (lst)
(if (null? lst)
0
(+ 1 (length (cdr lst))))))

次にlengthの別名を定義したとします.
(define length-clone length)

その後lengthを書き換えます.
(define length
(lambda (lst)
(display lst)
(newline)))

そうするとlength-cloneは再帰せずに,書き換わった関数lengthを呼んでしまいます.
(trace length-clone)
(length-clone '(a b c))
> |(length-clone (a b c))
|(length (a b c))
| (length (b c))
(b c)
| #<void>
Error in +: #<void> is not a number.

length-cloneが再帰であり続けるようにする方法はありませんか?
OOPLのselfやthisみたいのがあるといいんですが.
(define length
(lambda (lst)
(let loop ((lst lst))
(if (null? lst)
0
(+ 1 (loop (cdr lst)))))))
(define (length lst)
((lambda (length lst)
(length length lst))
(lambda (length lst)
(if (null? lst)
0
(+ 1 (length length (cdr lst)))))
lst))
(define length
(letrec ((length (lambda (lst)
(if (null? lst)
0
(+ 1 (length (cdr lst)))))))
length))
426422:03/12/12 21:46
>>423-425
なるほど.
どうもありがとうございます.

423はnamed-letを使って再帰的にlexical-scoopを作って処理する方法
425はletrecを使って名前を初期化時に用いる方法
424は…423のletをlambdaで置き換えた方法でしょうか?

いろいろ方法はあるようですが,どうも素人目にはあまり美しくないように思えるのですが.
関数という閉じたオブジェクトに名前を付けたいというか…
しかもその関数の中での一時的名前の利用は極力避けたいのですね.
(define length
(lambda (lst)
(if (null? lst)
0
(+ 1 (#self (cdr lst))))))
こんなのってどうでしょう?
マクロ使えば作れますか?

lambdaだけで回すテクでも使いなさい(過去ログ参照)
つーか>>424がそれじゃんかよ
defineのlengthと中のlengthは違うんだが、気付くかねえ
わかりやすく>>424の名前と一部変えただもの
(define length (lambda (lst)
((lambda (self lst) (self self lst))
(lambda (self lst) (if (null? lst) 0 (+ 1 (self self (cdr lst))))) lst)))
美しいじゃないか
そもそも、
>>422
> 再帰関数はラムダ式だけでは書けないので
が間違っているということを理解してないような
>>390
(define (pos+ lst)
(or (and (null? lst)
lst)
(cons (car lst)
(delay (pos+ (map (lambda (x) (+ x 1)) (cdr lst)))))))
432422:03/12/12 22:08
>>430
すんません.関数型プログラミング初心者なもんで…

>>429
恥ずかしながら正直さぱーりわかりません.
出直してきます.というかなんとか今日中に理解しなくては…
これをあげよう。
(defmacro (defrec var . body)
(let ((name (if (pair? var) (car var) var)))
`(define ,name
(letrec ((,name
,(if (pair? var) `(lambda ,(cdr var) ,@body)
(car body))))
,name))))
434422:03/12/12 22:39
>>429
じーっくり眺めて,やっと理解できました.(笑)
関数を引数に取る関数を定義し,
その定義した関数をそれ自身を引数に渡し評価する,
というところがミソですね.
なるほど.確かに美しいかも…見た目はちょっとキモイけどw
なんかちょっとしか感動を味わいました.
つーかこんなのパッと見てパッとわかるもんですか?
サクッと書けちゃうもんですか?
すげーです.尊敬します.
(defmacro (lambda>>426 . body)
`(letrec ((#self (lambda ,@body))) #self))
alambda
lambdaだけで回すコードは、カンの鋭い人なら、相互的な再帰処理を
書いている内に自然と気付くかもしれない
結局は、以下のより単純にした式
((lambda(x)(x x))(lambda(x)(x x)))
この式の応用だから
最初に習う。
誰に習うんだよ
カリーおじさん
オレだよオレ
インド人だ、インド人だ。
SICPの問題にも出てた様な
R5RSにlet等のlambdaによる定義例があるんだが
letrecは大変そうだな
>>444
最終的にset!使うやつでしょ

>>445
過去ログにletrecのlambdaのみ版があるよ
Part6の300辺りね
皆反復好きだねって意見があったが、絶対再帰好きの方が多い予感。
漏れも Scheme 信者だった頃は反復的な操作まで「末尾再帰なら透過だ!」
といって再帰しまくってたもんだ。
皆S式が好きなんだよ。
皆sexpが好きなんだよ。
>>451
(sexp 漏れ)
*** - EVAL: too few arguments given to sexp: (sexp 漏れ)

(sexp 漏れ ♀)
NIL

_| ̄|○
(or (sexp 漏れ ♀) (sexp 漏れ ♂))

でよかんべ。
>>448
恥ずかしながら、car, cdrの語源を初めて知った。ありがとう!
俺がラムダ式だけで再帰関数を書く方法を最初に勉強したのは「Little Schemer」だった。
http://www.amazon.com/exec/obidos/tg/detail/-/0262560992/qid=1071287756//ref=sr_8_xs_ap_i0_xgl14/002-4582839-2238467?v=glance&s=books&n=507846
(christmas 漏れ ♀)
山下達郎♪

_| ̄|○
>>456

       ○    
       ノ|)  
  _| ̄|○ <し 
>>431
promiseはこういう使い方をするもんなの?
http://aglaia.c.u-tokyo.ac.jp/~yamamoto/diary/?200201c#200201310

今日は,田中研のS君の発表.
「参照」についての話.その中で型チェックは通っても実行が終わらないようなものの話をしていて,階乗が例に出た.
それ自体はまあ,いいのだが….

S君「では,階乗をとりあえず自然言語で書きますと…」
(defun fact (x)
  (cond
    (....

いつからそれは自然言語になったんだ?
S君の頭の中はsexpでいっぱいなんだろ。若いんだからしょーがない。
(define length
((lambda (f x) (lambda (y) (x (f f x) y)))
(lambda (f x) (lambda (y) (x (f f x) y)))
(lambda (length lst)
(if (null? lst) 0
(+ 1 (length (cdr lst)))))))
Lispスレの住人へ

近頃、関数型言語スレでAransk,ヒーロー勇気と名乗るものが暴れていますので、
速やかに透明あぼーんするなどして、現れても決して反応しないようにおねがいします。
反応する人が増えればたぶんLispスレは壊滅....
今、462が良い仕事した
465422:03/12/13 23:55
>>462
凄いです… もしかして関数の引数にその関数自体を渡す事って多いんじゃないですか?
そうなると構文糖が欲しくなってきます.(多分マクロで一発なんでしょうけど)

変数名変えたらわかりやすくなるかと思ってやってみたら余計わかんなくなりますね.
# C系の言語と違って
(define length
((lambda (self length) (lambda (lst) (length (self self length) lst)))
(lambda (self length) (lambda (lst) (length (self self length) lst)))
(lambda (length lst) (if (null? lst) 0 (+ 1 (length (cdr lst)))))))
>>462
全然話についてけないよ。
解説してくれない?
467422:03/12/14 00:07
>>465 自己レス
いや,そうでもないか.
やっぱこっちの方がわかりやすいですね.
異なる変数に同じ名前が付いていたとしても,ある程度慣れてる人なら一瞬でスコープわかるし.
468422:03/12/14 00:09
>>466 422からの流れです.
たった数行のコードが読めん。。。
あーあ、最初の loop でいきなりファイナルアンサーかと思いきゃ、
皆ホントに再帰好きだねぇ…。念のため聞くけど、loop を再帰や
lambda に展開するようにしても loop を認めてはくれないんだよね?

(define length
((lambda (rec f) (lambda (x) (f (rec rec f) x 0)))
(lambda (rec f) (lambda (x y) (f (rec rec f) x y)))
(lambda (length lst n)
(if (null? lst)
n
(length (cdr lst) (+ n 1))))))
大学の課題として出題されたのですが、3日間苦闘しても出来ません。
助けて下さいませんか?
========================
;「おつりの出し方に何種類くらいあるか調べてみる」
; データとしてコインの種類をcoinsに用意する。

(define coins '(500 100 50 10 5 1))
(define (count-change amount)
(cc amount coins))
(define (cc amount coins)
(if (null? coins) △
(if (= amount 0) □
(if (< amount 0) ☆
(+ (cc amount ◎)
(cc (- amount ○) coins))))))

===================
上の□,△,◎,○に何か(一文字とは限らない)を入れれば完成らしいです。
どうか、解答をご教授頂けませんか? ヒントだけでも構いません。
<( _ _ ;)>オネガイシマス
472追記:03/12/14 00:59
>>471
>上の□,△,◎,○に何か(一文字とは限らない)を入れれば完成らしいです。
     ↑
     ☆が抜けていました。失礼しました。
473470:03/12/14 01:00
とおもったら、作ってるの length じゃねーか。422 から話題が
変わってるのにも気づかないなんてもうダメポ。吊ってくる。
>>472 なかなか良い根性してるね。将来が楽しみだ。よし、おじさんが教えてあげよう。
0 1 0 (cdr coins) (car coins)
だよ。信じるかどうかは君次第だが。ニヤニヤ。
>>474
即レス&解答アリガトウございます!!
上手く行きました!
上手くいった瞬間、気が遠くなりそうでした!
3日間の苦労が嘘みたいに晴れましたよ!
本当にアリガトウございます!
>>446
確かあれ、変数とか破壊的な操作とかに弱かったと思う。
関数だけで、破壊的な操作がなければ、それらしく動くんだけど…

>>462
前に出てたのとはまた違った方法だね。
おもしろいから、相互再帰も書いてみた。

(define my-odd
((lambda (f g odd even) (lambda (n) (odd (f f g odd even) (g f g odd even) n)))
(lambda (f g a b) (lambda (n) (a (f f g a b) (g f g a b) n)))
(lambda (f g a b) (lambda (n) (b (f f g a b) (g f g a b) n)))
(lambda (odd even n) (if (= 0 n) #f (even (- n 1))))
(lambda (odd even n) (if (= 0 n) #t (odd (- n 1))))))

ちょっと短くなったかな?
これ、ボケ防止に良いかもな・・
再帰のボラックホール
わけわかんないので後でじっくり読む予定のレスが
どんどん増えて収拾がつかなくなりそうだ。
479デフォルトの名無しさん:03/12/14 03:36
(define (time L)
(if (null? L) 0
(* (car L)
(time (cdr L)))))

こう書くと、どうやっても"0"と出てきてしまうのは何故だろう?
掛け算の法則というか、なんというか・・
仮に'(1 2 3 4)というリストを与えると
(time '(1 2 3 4)) => (* 1 (* 2 (* 3 (* 4 0)))) => 0

(* (car L)

(list '* (car L)
に置き返るとよく判るんでは
>>480-481
なるほど〜。
わがままだと思うけど、普通に計算出来て、
かつ配列が空(null)の時、"0"を返すようにするにはどうしたら良いかな?
>>482
「1個以上」という条件を加えればよいかと。

(define (time L)
(if (null? L) 0
(if (null? (cdr L)) (car L) ;; 1個以上
(* (car L)
(time (cdr L))))))
>>483
    ∩
    ( ⌒)     ∩_ _
   /,. ノ      i .,,E)
  ./ /"      / /"
  ./ / _、_   / ノ'
 / / ,_ノ` )/ /
(       /  good job!
 ヽ     |
  \    \
>>482
(time '()) は 1 になるべきじゃないのか?
乗算で「単位」となるのは 1 なんだから
それだったら
(define (time L) (apply * L))
lambdaの嵐にしくはくしている人へ。
http://www.loveruby.net/ja/misc/ycombinator.html
おいおい time って掛け算のつもりかよ。。。

timesなら許せる?
http://lecture.ecc.u-tokyo.ac.jp/~kawai/pub/is/isis2-note.html
> 不動点演算子はひとつではない.Turingの不動点演算子を示す.
> Y'=(X' X') ここで
> X'=λxλy(y ((x x) y )) すると
> (Y' f)=((X' X') f)⇒( f (( X' X') F ))=(f (Y' f))

Combinatory Logicの不動点演算子から作るとおもしろいと思う。
私は挫折したけど。
(define (time L)
(if (null? L) 0
(apply * L)))
>>462 の length って、ちょうど >>490 の Y' に length 渡してる形だよね。
>>476 のを Y' 風に書いてみると…

(define (my-odd n)
((lambda (X f g)
((lambda (Y)
((lambda (odd even) (odd n))
(Y f g) (Y g f)))
(lambda (a b) (X X a b))))
(lambda (f a b) (lambda (c) (a (f f a b) (f f b a) c)))
(lambda (odd even n) (if (< n 1) #f (even (- n 1))))
(lambda (even odd n) (if (< n 1) #t (odd (- n 1))))))

…あんまり変わんないね。
currying のない言語で作った Y の相互再帰対応版ってだけかな。
(define my-odd
(Y (lambda (odd)
((lambda (even) (lambda (n) (if (< n 1) #f (even (- n 1)))))
(lambda (n) (if (< n 1) #t (odd (- n 1))))))))
話の腰を折る様で恐縮なのですが… # というかスレ違いな気もしてますが

gauche-gl を Mac OS X(Panther)にインストールするのに難儀しております
コンパイル自体は問題なく行えているようなのですが、実行しようとすると

gosh> (use gl)
*** ERROR: failed to link "libgauche-math3d" dynamically: dlcompat: dyld: gosh U
ndefined symbols:
_atan2f
_cosf
_sinf
_sqrt

fとなってしまいます
libgauche-math3d が読み込めないようですが
Mac OS X(or BSD)に全然慣れていないのでよくわからないでいます

どなたか問題を解決する為の指針をご教授願えないでしょうか

インストールしているバージョンは Gauche-0.7.2, Gauche-gl-0.3, dlcompat-20030629
コンパイラは gcc version 3.3 20030304 (Apple Computer, Inc. build 1495) です
>>494
メーリングリストに投げた方がレスが来ると思う。
Shiroさんも筆マメだし。
http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
http://lists.sourceforge.net/lists/listinfo/gauche-devel
>>494
もうML投げちゃいましたかね?
とりあえずレス

Gauche-glのソースを見てもらえばわかりますが、
それはCの関数で、doubleじゃなくてfloatを取る奴です。
けど /usr/include/architecture/ppc/math.h (-lmで参照される奴のヘッダ) を参照する限り、
sinfとかに始まる...fの関数は定義されていません。
なので、Gauche-gl-xxx/src/math3d-lib.c (xxxはバージョン) の中の該当の関数を、
fのついてないものに変えれば回避出来ます。
あるいはメイクファイルのリンクの設定に、-lstdc++を追記してもOKです。
(defun count-change2 (amount)
(labels ((cc (amount coins r)
(cond ((null coins) nil)
((= amount 0) (list r))
((< amount 0) nil)
(t (append (cc amount (cdr coins) r)
(cc (- amount (car coins)) coins
(cons (car coins) r)))))))
(cc amount coins '())))

* (count-change2 10)
((1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 5) (5 5) (10))
498494:03/12/15 23:44
>495,496
ありがとうございます
当該MLは開発等を議論する為のものと認識していましたので
このような厨房質問は適切さを欠いていると判断していました(現在もその認識にあります)

で >496様の御教授に従い、make check & gear.scm, mandelbrot.scm
をクリアすることが出来、私も無事 Gauche-gl で (*´Д`)ハァハァ 出来るようになりました
御教授・御示唆に深く感謝します

引き続き、御議論をお続け下さいます様お願い申し上げます
499デフォルトの名無しさん:03/12/15 23:52
Aranskと申します。よろしこ〜(^<>^
>>498
そういうplatform依存の話はMLに投げてfeedbackするのが正しい姿
(define (count-change2 amount)
(let loop ((coins '(500 100 50 10 5 1))
(r '())
(f (lambda (x) x)))
(cond ((= (apply + r) amount) (f (list r)))
((or (null? coins) (> (apply + r) amount)) (f '()))
(else (loop (cdr coins) r
(lambda (x) (loop coins (cons (car coins) r)
(lambda (y) (f (append x y))))))))))
Lisp/Schemeでネイティブコードコンパイルした関数のコードは、メモリ上の
ヒープ領域に置かれると思うのですが、ヒープ領域のメモリページは、
実行可能属性が付いているのでしょうか?
もしかしてページに実行可能属性なんて存在しない?
>>502
付いてるかどうか意識した事ないけど、何か設定必要なの?
例えばmallocで確保したメモリにコードをコピーして呼び出しても実行できるよね。
これはmallocが実行可能属性を暗黙に設定してるからかな?
mmap(2) には PROT_EXEC という属性があって、マップするページが実行可能
かどうかを指定できる。cmucl はこれを使ってるし、他もそうだと思う。
ただ、CPU アーキテクチャによっては、ページ毎に実行可能かどうかを指定できない。
そういったアーキテクチャ (x86 等) だと、PROT_EXEC を付けずにマップしたページ
でも実行できちゃう場合がある。
505502:03/12/16 08:58
>>503-504 情報ありがとうございました。
Linux関連で、Stack領域のページには実行可能属性が付いていてそれを利用する
Virusがあってという話題が昔あったので、Lisp/Schemeが利用するヒープは
どうなんだろうと思っておききしました。
x86にも実行属性あるよ
ページ単位だかセグメント単位だか忘れたが
インテルのia32のマニュアル第二巻の3.7.6を見れば直ぐ分るけど、
ページディレクトリエントリ、ページテーブルエントリどちらにも
実行属性を設定するところはないみたいね。つまりセグメントの
タイプフィールド(4bit)だけかな。
カーネル領域へのかってなジャンプの禁止はどうやってしてるの?
>>508
普通はカーネル領域への「ジャンプ」はできない。「ジャンプ」先が無いのだから。
>>508
仮想記憶と境界レジスタと割り込み機構
(define (count-change2 amount)
(let ((record '()))
(let loop ((coins '(500 100 50 10 5 1))
(amount amount)
(f (lambda (x) x)))
(cond ((= amount 0) (f '(())))
((or (null? coins) (< amount 0)) (f '()))
((assoc (list coins amount) record) => (lambda (x) (f (cdr x))))
(else (loop (cdr coins) amount
(lambda (x) (loop coins (- amount (car coins))
(lambda (y) (let ((tmp (append x (map (lambda (x) (cons (car coins) x)) y))))
(set! record (cons (cons (list coins amount) tmp) record))
(f tmp)))))))))))
(define (count-change2 amount)
(let loop ((coins '(500 100 50 10 5 1))
(amount amount)
(record '())
(f (lambda (x record) x)))
(cond ((= amount 0) (f '(()) record))
((or (null? coins) (< amount 0)) (f '() record))
((assoc (list coins amount) record) => (lambda (x) (f (cdr x) record)))
(else (loop (cdr coins) amount record
(lambda (x record) (loop coins (- amount (car coins)) record
(lambda (y record) (loop coins amount
(cons (cons (list coins amount) (append x (map (lambda (x) (cons (car coins) x)) y))) record) f)))))))))
Gauche 0.7.3 が release されてたよ。
514デフォルトの名無しさん:03/12/18 06:28
CommonLispで、普通のコマンドを作りたいのですが、やりかたがよくわかりま
せん。
とりあえずclispでは#!行を書いて普通にスクリプトファイルとして実行できる
のはわかったのですが、2つほどわからないことがあります。

1. コマンドライン引数を調べるにはどうすればいいのでしょうか?
Cのargvに相当するものが知りたいのですが、HyperSpecを探してもわかりません。
aproposを色々試して、clispだと*ARGS*に入っていることがわかったのですが、
cmuclや、標準的にはどうすることになっているのでしょうか?

2. CommonLispで書いたプログラムを普通のコマンドのように実行できるように
するにはどうすればいいのでしょう? clispでは#!行をつけてスクリプトファイ
ルにできますが、cmuclではどうすればいいのでしょうか。
>>514
書かないよりましだと思うので、うろ覚えのことを書きます。
詳しい人は必要な訂正、補充をお願いします。

1: コマンドライン引数という概念はCommon Lisp規格には存在しないと思います。
したがって、それぞれの処理系が独自にインプリメントしているのでしょう。
2: cmuclをLinuxで使う場合、Kernelにファイルタイプとそれを実行するための
プログラムを登録する手段があるはずです。これはもしかして外しているかな...
517516:03/12/18 10:18
CLikiの方のこれも参考に。

> Adding commandline switches
>
> Certain implementations such as CLISP have a -c commandline switch
> that allows you to invoke the file compiler from the shell. CMUCL's
> commandline switches are user-extensible, so you can emulate this
> behaviour with code such as the following, in your site-init.lisp or
> ~/.cmucl-init initialization files.
ついでにお聞きしたいのですが、
いままでPerlで書いてきたスクリプト群を除々にCommon Lispへと移行しようかな
と考えています。理由はPerlはversion 6で文法が変わってしまうらしいからです。
当然、version5とのコンパチモードも用意されるでしょうけど、なんとなく
言語仕様がゴロッと変わってしまうものはどうも...

現在考えているのは、GNU CLISP + CL-PPCRE で移植性を確保しておこうかな
と思っています。スクリプティングにCLを利用している方の感想が聞きたいです。
とくに、RubyやPythonなどとの使い心地の比較が気になります。

スクリプティング用途には、Common Lisp規格で規定されていない部分、
たとえば、OSとのやりとりやネットなどを主に利用しそうなので、
規格化されている旨みが他のスクリプト言語とくらべてあまりないかなと
考えています。
Perl からの移行は厳しいんじゃないかな…。clisp + cl-ppcre じゃ速度的に満足できなさそうな予感。
かといって、昔もちょっと話題になったけどスクリプト毎に処理系を走らせるスタイルは CMUCL とかには
厳しそうだしね。

スクリプティングなら Gauche なんか良いんじゃないか?と思って 0.7.1 のままだったのを 0.7.3 に
アップグレードしようと思ったら…あれれ普通に configure, make しただけなんだけどなんか忘れてる
のかな? FreeBSD 4.9 RELEASE なんだけど注意点とかある?

gcc -DHAVE_CONFIG_H -I. -I../../src -I../../gc/include -g -O2 -fPIC -c auxsys_head.c
gcc -DHAVE_CONFIG_H -I. -I../../src -I../../gc/include -g -O2 -fPIC -c auxsys.c
../..//src/gosh -ftest genstub auxsyslib.stub
*** ERROR: unbound variable: %autoload
Stack Trace:
_______________________________________
0 (%require feature)
At line 52 of "../../src/gauche-init.scm"
Error in initialization file.
*** ERROR: unbound variable: module-name->path
Stack Trace:
_______________________________________
0 (module-name->path module)
At line 66 of "../../src/gauche-init.scm"
gmake[2]: *** [auxsyslib.c] エラー 70
古いのが残って悪さしてるのかも。古いlibgauche.soを消すかリネームするかして
試したらどうなる? >>519
522519:03/12/18 16:28
…スバリそれですた。アリガトー。皆インスコ前に古いのはリネームしてるもんなの?
漏れ今迄なーんも考えずにビルドしてたけど今後は気をつけよう。
>>519
>Perl からの移行は厳しいんじゃないかな…。clisp + cl-ppcre じゃ速度的に満足できなさそうな予感。
私もそう思っていたんですが、
http://www.weitz.de/cl-ppcre/
>It is fast. If compiled with CMUCL it outperforms Perl's highly optimized
>regex engine (written in C) which to my knowledge is faster than most other
>regex engines around. If compiled with CLISP it is still comparable to
> CLISP's own regex implementation which is also written in C.
という宣伝文句にコロっといきました。万が一、親バカ的な発言で
あったとしても試してみる価値はあるかなと。
まぁPerlはスピードに敏感な人が開発しているようですからね。

>スクリプティングなら Gauche なんか良いんじゃないか?
Common Lispの馬鹿でかさに惹かれているので、SchemeにするならRubyかPython
もしくは、Perlのままかなという感じです。ただGaucheって結構対応ライブラリが
増えてきていますよね。あなどれない感じですね。

>スクリプト毎に処理系を走らせるスタイルは CMUCL とかには厳しそうだしね。
CMUCLの場合、1プロセスをサーバとして走らせて、特定ポートをlistenしておいて、
アクセスがきたらLisp lisnerをスレッドで割り当ててあげるという使い方はできないのかな?
524516:03/12/18 16:41
>>523
> >スクリプト毎に処理系を走らせるスタイルは CMUCL とかには厳しそうだしね。
> CMUCLの場合、1プロセスをサーバとして走らせて、特定ポートをlistenしておいて、
> アクセスがきたらLisp lisnerをスレッドで割り当ててあげるという使い方はできないのかな?

http://www.cons.org/cmucl/doc/lispserver.html
>>523
CMUCL のようなコンパイラなら速いけど,CLISP の場合は…。漏れは CL 厨だけど
UNIX でのスクリプティングは Gauche が イイ!! 日本語周りもしっかいしてるし
起動も速いし CLOS ライクなオブジェクトシステム(これが個人的にマンセー)もあるし。
まぁ Perl hacker に無理に乗りかえは勧めないですが。

> CMUCLの場合、1プロセスをサーバとして走らせて、特定ポートをlistenしておいて、
> アクセスがきたらLisp lisnerをスレッドで割り当ててあげるという使い方はできないのかな?

CMUCL のスレッドは i386 only な上 ドキュメント無し, LISP レベルスレッド なので
性能も使い勝手も期待できない。Linux なら SBCL がネイティブスレッド対応らしいけど。
ACL なら telnet-server というサンプルが acl62/examples/tserver.cl にある。
漏れも日本語使いやすいのでPerlからGaucheに異色中
Perl厨の世界でLispブームの兆し?
529514:03/12/18 19:36
ありがとうございます。大変参考になりました。
http://www.geocities.co.jp/SiliconValley-SanJose/7474/ScriptingWithLisp.html
のものではコマンドラインの解釈がUNIXの通常の流儀とかなり違って
しまうようなので、次のようなものを使うことにしました。
*args*はclispのものにあわせています。オプションの解釈は次の課題。
clispでスクリプトファイルの名前(argv[0]みたいなの)を調べる方法も知りたい……。

#!/bin/sh
PREFIX=/usr/local
LISP=$PREFIX/bin/lisp
CORE=$PREFIX/lib/cmucl/lib/user.core
EXP1=`cat<<EOF
(set-dispatch-macro-character
#\# #\!
(lambda (stream bang number)
(declare (ignore bang number))
(read-line stream)
t))
(defvar *args*
(cddr (member "-args" *command-line-strings* :test #'string-equal)))
EOF
`
if [ -x $LISP ]; then
[ -e $CORE ] && COREOPT="-core $CORE" || COREOPT=""
echo $LISP $COREOPT -quiet -noinit -batch -eval "$EXP1" -load $1 -eval '(quit)' -args "$@"
else
echo "$0: could not find a Lisp I know how to call."
fi
>>524

% telnet 127.0.0.1 6789
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Enter password: MYPASSWD
Connection closed by foreign host.
%

な、なぜ?
なんでスクリプトの話でpythonがでてこないの?
1.強力なモジュール化
2.windowsでも動く
3.日本語

pythonスレにあった例だけど、こんなこと出来るらしいよ。

>>> unicode("こんにちは", "euc-jp").find(unicode("海", "euc-jp"))
-1
だってここLispスレ
不覚にもワラタ
例になってない例にワラタ
文字の集合とエンコーディングを分けて考えるとして、ぐだぐだ書きます。
まちがってたら突っ込み希望。
文字集合について。
Unicodeをサポートしているもの。
Allegro Common Lisp, LispWorks(たぶん), GNU CLISP, Python, Perl, ...

文字集合としてJISX0201(ascii相当)+JISX0208(いわゆるJIS漢字)+JISX0212(補助漢字)
いや今はJISX0213でJISX0208+JISX0212を置き換えるのかな?
Ruby, Gauche, ...

以上の処理系ではエンコーディングとして多分、Shift-JIS, EUC-JP, ISO2022-JP-X
くらいは対応しているのかな。対応の程度があるだろうけど。

(grep "毛沢東" stream)として漢字圏テキストを扱いたいおいらは、
Unicodeサポートが欲しい。そんでエンコーディングは漢字に不利でもUTF-8でいいや。

そんなわけで、GNU CLISPでしばらく逝ってみます...日本語扱わせる情報を希望。
>>535
http://clisp.cons.org/impnotes.html#encoding
この辺参考になるかな。

ファイルや端末からの入力は、デフォルトで LANG に応じて内部コードの
Unicode に変換されるので、こんな感じ。
(position #\海 "こんにちは")
=> NIL
(position #\ち "こんにちは")
=> 3

これで cmucl 並に速ければなあ…
comp.lang.lispからのネタ。

Javaで書かれた多言語IDE基盤Eclipse上にLisp用Plugin出現中。
画面写真あり。
http://www.czempin.de/nicolai/blog/archives/000197.php
http://lemonodor.com/archives/000218.html
>>535
GaucheはUnicodeいけるよ。
asdfインストールの自動化。cmucl用
例) [コマンド] /path/to/cl-ncurses.asd ncurses
とやると
(require 'ncurses) で使えるようになる。rootでどうぞ

#!/bin/bash

# 各自で指定
CMUCLLIB="/path/to/cmucl/lib/"
ASDF_DIRECTORY="~/common-lisp/systems/" # .asdファイルを置くディレクトリ
CPU_ARCHITECTURE=x86f

if [ -z "$2" ]; then
echo usage: asdf-install [asdf-file-path] [asdf-load-name]
exit
fi

FILE_PATH=$1
LOAD_NAME=$2

ln -s $FILE_PATH $ASDF_DIRECTORY/$LOAD_NAME.asd
echo "(asdf:operate 'asdf:load-op '$LOAD_NAME)" > /tmp/$LOAD_NAME.lisp
echo "(asdf:operate 'asdf:load-op '$LOAD_NAME)
(compile-file \"/tmp/$LOAD_NAME.lisp\")(quit)" | lisp
mv /tmp/$LOAD_NAME.$CPU_ARCHITECTURE $CMUCLLIB/subsystems/$LOAD_NAME-library.$CPU_ARCHITECTURE
Scheme で以下を評価すると
(let ((else #f))
(cond (else 'hoge)))

Guile: hoge
Gauche: #<undef>
MIT Scheme: ;Unspecified return value
SCM: #<unspecified>

else に束縛されてる値に左右されるのって変だと思うんだけど。
>>540的にはどういう挙動になってほしいの?
else の値にかかわらず hoge を返して欲しい。
R5RS には else clause で else が評価されるなんて書いてないし。
elseなんて使わず#tを使え。
R5RS 的には
(let ((else #f)) (cond (else 'hoge)))

(let ((else #f) (if (else 'hoge))))
に展開されますね。
括弧の位置がちがった…
(let ((else #f)) (if (else 'hoge)))
>>544
え? R5RS 的には
(let ((else #f) (begin 'hoge)))
に展開されるんじゃ?

ちなみに自作処理系の cond はこんな感じ。
(define-macro (cond . clauses)
(if (null? clauses) #f
(let ((test (caar clauses)) (results (cdar clauses)))
(if (eq? 'else test) `(begin ,@results)
(let ((test-value (gensym)))
`(let ((,test-value ,test))
(if ,test-value ,(if (null? results) test-value
(if (eq? '=> (car results))
`(,(cadr results) ,test-value)
`(begin ,@results)))
(cond ,@(cdr clauses)))))))))
括弧の位置がちがった…
(let ((else #f)) (begin 'hoge))
guile 以外が hygienic macro を実装しているから。

(let ((else #f)) (cond (else 'hoge)))
は結局
((lambda (else) (if else (begin 'hoge))) #f)
になる。これが下と同じになる。
((lambda (huga) (if huga (begin 'hoge))) #f)

# hygienic macro はアイデアが変だと思う。
>>535
リーダやデータ型を自由にカスタマイズ出来るのが Lisp の利点だって聞いていたけど、
マルチバイト化はやっぱり大変なのかな。
>>548
もう少し詳しく教えて。
(define (a else) (cond (else 'hoge)))
とすると、guile 以外では
(a 1) => hoge
(a #f) => #undef
になるんだけど、これって、マクロの展開がコンパイル時ではなく実行時
ということなの?
だとすると、cond での else なんて使ってられなくて、>>543 の言う通り
#t で書いた方が確実だよね。何故 else が導入されたんだろう。
結局Guileが正解(condの節にあるelseはただのキーワード)だけど、
(define else #t)
としてしまっている処理系は昔の奴では良く見かけたな。

>>550
Gaucheはreplの段階でマクロも展開されてVMコードに
コンパイルされる筈だから、原因は別の所にあるんじゃないかと。
552551:03/12/20 01:11
あ、hygienicが絡むと妙な事になる気がするな。
>>551は撤回。
condの展開が先か、hygienicの展開が先かで、
処理系毎に依存するってことか?

・・変じゃないか?
553551:03/12/20 01:14
わかった。
condをhygienicで実装すれば解決する。
つまりhygienicと>>546の様なdefine-macroは両立できないって事だ。

それか、define-macroで定義する場合にkeywordとして使うシンボルを
hygienic側に伝える手段が必要なのでは?
>>500
展開はいつでもいいんだけど、束縛変数の名前をスコープの中で全部
変更していると考えることになっている。

(lambda (else) (cond (else 'hoge)))
があった場合、ここの else は (gensym "else") の結果に置換されて、
(lambda (else-*gensym*-21) (cond (else-*gensym*-21 'hoge)))
のようになっている。
555551:03/12/20 01:17
define-macro → hygienicという順序で展開すれば、
とりあえずこの問題は起らなさそうだが。
556551:03/12/20 01:19
で、結局>>551の主張

>condの節にあるelseはただのキーワード

は正しい。
hygienic側でkeyword指定されたシンボルはcondで隠される筈。
557551:03/12/20 01:25
というわけで、>>540

>Gauche: #<undef>
>MIT Scheme: ;Unspecified return value
>SCM: #<unspecified>

こいつらは全部間違っている。
恐らく検証も何もしてないんだろうな。
R^5RS をちゃんと読んでくれないかなぁ。

マクロが束縛を導入するときにはリネームすることになっている。
マクロ以外、つまり人間が束縛を導入する場合は、リネームする
かどうかは書いてない。これを受けて最近の処理系は束縛が導入
されるときは、いつでもリネームするものが多い。

let と cond のからみは R^5RS に類例があって、
(let ((=> #f)) (cond (#t => 'ok))) は
で cond の中の => は変数とみなし、ok を返すと書いてある。
>>557
ひとりでもり上がってるとこわるいが、正しいのはGuile以外
>>558-559 の勝ち、だな。にしても hygienic マクロの実装って面倒臭そう。
いまさらだけど、
Scheme(たくらみ)→Guile(わるだくみ)
というのは、面白いネーミングだなあと思う。

何がどのように悪いのでしょうか?
Guileユーザの方、教えてください。
562535:03/12/20 14:49
>>538
> GaucheはUnicodeいけるよ。
ほんとだ、すみませんでした。
http://www.shiro.dreamhost.com/scheme/gauche/features-j.html
>マルチバイト文字列: 文字列はマルチバイト形式で扱っています。ネイティブのエンコーディングとして、
>EUC-JP, UTF-8, Shift JISあるいはマルチバイトを使わないという選択がconfigure時に 可能です。
>各種コード変換機能はportを通じて提供されます。 [詳しくは、実装メモ「文字列について」参照]。
ネイティブのエンコーディングとしてEUC-JP、Shift JISがあるところが、日本人がしびれるところかな?

RubyもUnicodeはライブラリでいけるみたいですね。こりゃ、とんだデマを書いてしまいましてすみませんでした。
>>549
> リーダやデータ型を自由にカスタマイズ出来るのが Lisp の利点だって聞いていたけど、
> マルチバイト化はやっぱり大変なのかな。
CMUCLにUnicodeなどの多バイト長文字をうまい具合に後付けしてあげることってできないの
かな? extended-charとしてLispレベルで綺麗にできそうな気がするけど。
現在はたしか1文字=1バイト固定でしょ? だからEUC-JPで(length "いろは")=>6だよね?
>>563
unicode対応パッチをマージした奴が配布されてるぞ。
cmucl.cons.orgがつながらないのでミラー
ftp://ftp.averillpark.net/cmucl/experimental

メンテしてる人いるのか知らないけど
565563:03/12/20 15:46
>>564 情報ありがとうございます。
ホストが見つからないとエラーがでるので、今は調べられないけど、あとで見てみます。
ところでこのパッチはなんで本家にマージされないのだろう...
文字関連って日本人が活躍できそうな分野なので、どうにかしたいですね。
>>550
やっぱり keyword なんて捨てよう、とか言ってみる。
car だけ見てれば悩まなくて済むよ〜
>>565 どれか一つくらいはつながるんじゃない?
ミラー
ftp://ftp.linux.org.uk/pub/lisp/cmucl/experimental/
http://www.pmsf.de/pub/cmucl/experimental/
http://www.pmsf.net/cmucl/experimental/
ftp://ftp.cn.freebsd.org/pub/cmucl/experimental/

そういえば18eのソースにはi18nディレクトリがついてたけど(空っぽ)、
前CVSからダウソしたら消えてた。
入力から空白区切りで読み込みたいのですが,
read では評価してしまうため,1.00 が 1.0 とされてしまいます.
とりあえず文字列にしておいて欲しいのです.
read-line では,後で区切る必要があるわけですが,
CL には elisp の split-string が無いので,気軽にできません.

タブ区切りのデータ列を処理するときの常套手段はどんなもんでしょうか?
; bourne shell でもいいんですが,気になってしまったので...
read-line で読んでから区切るのが嫌なら read-char で読んでって区切る。
それも嫌なら cl-ppcre の split ツカエ。
>>568
http://www.ccs.neu.edu/home/dorai/pregexp/pregexp.html
の pregexp-split を使えばよいんでは。

ACL には excl:split-regexp ていう関数がある。
* (defvar str (format nil "~A~A~A~A~A~A" "foo" #\tab #\tab "bar" #\tab "baz"))
STR
* str
"foobarbaz"
* (split-sequence:split-sequence #\tab str)
("foo" "" "bar" "baz")
12
*
572568:03/12/20 22:21
>>569-570
みなさんありがとう.

pregexp-split を見てみました.
split-string って,こんなに長いことをしているんですね.
低機能でも,もっと短い方法は無いものでしょうか.

そのようなコードがありましたら,ぜひ見てみたいです.
573568:03/12/20 22:27
あれっ?タブでうまく切れない.とりあえず寝ます..._| ̄|○
命名規則の情報を希望します。
とりあえず、言いだしっぺから、以下はネットで仕入れた知識です。

Common-Lisp
グローバル変数は*ではさむ。: *user-id*
定数は+ではさむ: +max-entry+
システム依存の名前には%を先頭につける: %open-file-id
Predicateが1wordの場合は、pをつける。: testp, sickp
Predicateが2word以上の場合は、-pをつける。: really-tired-p, she-loves-me-p
破壊的な操作にはnを前か後ろにつける。: nconc, mapcan, mapcon

Scheme(あまり自信ない)
Predicateの最後に?をつける。
破壊的な操作の後には!をつける。: set!
あとはよろしく…
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi
Scheme:なぜSchemeにはreturnが無いのか

なんてのが登場してるね。いつもカッコつけて話してる Claude ワラタ。
>>575
深みにはまる Alice がいいね
でも俺も継続はちゃんと理解できてないんだよな...
>>576 おぅ、おめぇさんもか。おれっちもよく分かってねぇ香具師の一人なんだけどよ、
Web とかで継続ベースだと綺麗に作れるとか言ってる香具師いるけどよぅ、継続だと
資源を掴みすぎじゃねぇかなって心配になるわけよ。そこんとこどうなんだろうな?
あとスレッドとかも継続ベースの実用的なスレッドシステムとかってあるの?
継続がどういうものなのかは分かってはいるけどイマイチ使いどころが分からない
Emacs Lisp -> Common Lisp -> Scheme という流れで勉強した俺からすると、
継続の「脱出」はなじみがあるけど、「突入」それも「なんども再突入」という
使い方がいまいちなじみがない。木構造のLeaf generatorやcoroutineはふーん
という感じで読めば理解できるけど、自分から気の利いた使い方を何かを作りだす
ことはまだ出来ない感じ。

Shiroさんの何でもシリーズは日本語で読める貴重な文献だよね。

>>577
>Web とかで継続ベースだと綺麗に作れるとか言ってる香具師いるけどよぅ、継続だと
この議論は最近、comp.lang.lispでもあったような気がする。

>>574
ほぼ同じ機能で、並列動作と順序動作の2種類があるときは、
並列動作にp(arallel)をつける。: setq <-> psetq, setf <-> psetf
ところで、nconc なんかのnって何の略?
ガイシュツかもしれませんが、、
今、ほとんどの変数が double-float である数値計算をガリガリやってます。
計算対象は fortran や c で実行すると一つの計算に 1 日〜1週間かかることもあるような
多くて大変なモノで、プログラムも数万ステップぐらいあってかなり複雑になってます。
でも、最近ではコンピュータはかなり速いですから、
少しぐらいなら実行速度が犠牲になってもガマンできます。
まず、複雑になってきてるプログラムを
出来ればもっとちゃんとした言語に変更したいと思いました。
少し前から clisp で書いてるのですが、コレって適してるのかな?と疑問を持っています。
lisp ではどの処理系が適しているのでしょうか?
脊髄反射レベルでの答えは、遅いと感じるなら、ネイティブコードコンパイラを
備えた処理系に変えてみる。
Unix系でFreeならCMUCL系、有料ならACL、LispWorks
Windowsで有料ならACL、LispWorks、CormanLisp
Macで有料ならMCL、無料ならOpenMCL...もっとあるよなMac用
有料ものでもお試し品があって、それで間に合ってしまうかもしれません。

ただ、GNU CLISPはGNUの数値演算ライブラリを使用しているはずなので、それほど
遅いということはないと思うのだがどうでしょう、みなさん。
数値計算に使うなら、いかにしてコンパイラに最適化させて
型チェックやboxing/unboxingを避けるかが大事、らしい。
昔のACLなんかだと、flonumを直接渡すんでなくて型付きのarrayに
入れて渡すといいコードが出たらしい (伝聞)。
最近のACLは知らない。
最適化のクセは処理系によって違うと思うから、
それぞれの処理系のメーリングリストなんかで質問してみたら。
583580:03/12/22 09:18
>>581-582 あ〜。とってもありがとうございます。

今、速度は 1.5 番目と考えてます。
プログラム中には必ずボトルネックがあるので、
そこだけは既存の高速な c コードライブラリを呼び出したりできるといいな〜。
と思ってます。
ベースの部分はそこそこ速ければ文句はいいません。
もちろん、ネイティブコードコンパイラがあれば問題ないです。
584580:03/12/22 09:19
文法上ですこし疑問なのが「型」のことで、、
使ってるのはほとんど double-float か fixnum なのにいつも
実行時に型判定をしてるのはオーバヘッドが大きいんじゃないかと。。
コンパイルすれば型は決まってるから問題なくなるのでしょうか?
もうひとつ、今、clisp で全ての変数に対して型宣言を行ってるのですが、
コードが少し込み入っているように見えます。他の処理系でもそんなモノなのでしょうか?
585580:03/12/22 09:21
って、>>582 さんをちゃんと読むと、、
それぞれのメーリングリストですか。。
>>584
型宣言をすれば、プログラマがコンパイラへの助言(保証)を与えていることになり、
コンパイラがそれを信じて、型チェックをしなくなるということが起こりえる
でしょう。その結果、速度が上がると。

しかし、型宣言をしすぎたLispのコードは激しく読みにくいと私は感じます。

賢いコンパイラなら、コードのデータフロー解析をしてくれて、型宣言が
無くても、よしこのデータはdouble-floatに決まりだなと確信がもてれば、
型チェックをしなくなります。よって型宣言がある場合と同じ速度がでます。

>もうひとつ、今、clisp で全ての変数に対して型宣言を行ってるのですが、
>コードが少し込み入っているように見えます。他の処理系でもそんなモノなのでしょうか?
私のコーディング上の心得として、最初は型宣言をしないでおいて、
速度に問題があったり、型宣言したほうが有利だと判明した時点で
(コンパイラは型宣言を無視して型チェックしたりできる)、必要最小限の宣言を入れます。

とりあえず、今のままCLISPを使うなら、型宣言が無駄になっていないのを確認したほうが
よいのでは?
587580:03/12/22 09:54
>586 ふむふむ。。ありがと〜。

>しかし、型宣言をしすぎたLispのコードは激しく読みにくいと私は感じます。
そうですよね〜。それが少し困りモノなのです。
型宣言する事自身はいいのですが、可読性が下がると困るのです。

>私のコーディング上の心得として、最初は型宣言をしないでおいて、
>速度に問題があったり、型宣言したほうが有利だと判明した時点で
>(コンパイラは型宣言を無視して型チェックしたりできる)、必要最小限の宣言を入れます。

なるほど。それはそうですね。
後でちゃんとプロファイリングをしてどこが遅いか調べればいいわけですよね。
その後で変更すると。。
>>579
>ところで、nconc なんかのnって何の略?
no-consing の n だった気がします。

>>587
>>しかし、型宣言をしすぎたLispのコードは激しく読みにくいと私は感じます。
>そうですよね〜。それが少し困りモノなのです。
>型宣言する事自身はいいのですが、可読性が下がると困るのです。
本当に大量に必要、となったら、リーダマクロで何とか。
型宣言したコードと差分をとってパッチを作っておくというのは(リリースするときだけ当てる)どうだろう。
ML系みたく、型を別個に書けると良いな。
(型推論は別にして)
591デフォルトの名無しさん:03/12/23 00:57
静的な型を入れる上でLispのconsは邪魔だよね。
592580(長文スマソ):03/12/23 04:38
Fortran には型宣言として、各関数の先頭に
implicit double precision (a-h,o-z)
って書く方法があります。
これを書くと、その関数内ではa-h, o-z の頭文字で始まる変数については double で、
その他は特別な宣言をしない限り、int と自動的に解釈され、
変数一個一個についての型宣言を省く事ができます。
配列の宣言は別にする必要があるのですが、それでもやっぱり頭文字で型は指定されます。

マクロってかなり有用なものと聞いてます。
私はマクロの勉強をちょうど今日からするつもりなのですが、
上と同様の特殊化を割合と困難なくできるのでしょうか?
そして出来たとして意味のあることなのでしょうか?
(let/implicit-type ((i 0) (a 1.0) (b 3.14)) ...)
これを、
(let ((i 0) (a 1.0) (b 3.14))
(declare (fixnum i))
(declare (float a b))
...)
こんなふうに展開するマクロはさして難しくないだろうね。
意味があるかどうかは、アプリによるんじゃない?
それって 592 が求めているのとちょっと違う気がするんだが…条件にマッチ
する変数名の型を勝手に指定して欲しいんだろ?きっと。

(macroexpand-1 '(with-fortran-like-type ((double-float fortran-like-pred)) (* a h (+ i j k x y z))))
=> (progn (declare (type double-float z y x h a)) (* a h (+ i j k x y z)))

(defun fortran-like-pred (sym)
(and (symbolp sym)
(let ((x (char (symbol-name sym) 0)))
(or (and (char>= x #\A) (char<= x #\H))
(and (char>= x #\O) (char<= x #\Z))))))

(defun find-variables (pred body &aux (var-list nil))
(labels ((search (tree)
(cond ((null tree))
((atom tree) (when (funcall pred tree) (push tree var-list)))
((consp tree) (unless (eq (car tree) 'quote) (mapcar #'search (cdr tree)))))))
(mapcar #'search body)
var-list))

(defmacro with-fortran-like-type (type-specifiers &body body)
(let ((lst (mapcar (lambda (x)
(let ((type (first x)) (pred (second x)))
`(declare (type ,type ,@(find-variables pred body)))))
type-specifiers)))
`(progn ,@lst ,@body)))

こんな感じのが欲しいんじゃねーの?難しくはないかもしれんが意味があるかどうかは知らん。
with-type みたいに式の調整や the 宣言まで入れないとあんま役に立たないかもね。
595580(ありがと〜。):03/12/23 09:01
うお〜!! ありがとうございます。。 とりあえずコピーしました。
macroexpand-1 と defmacro の内容には頭が追い付いてないですが、
これからのマクロの勉強に弾みがつきます。

式の評価部分では、
すべての変数が適切に double-float か fixnum に評価されているのでしたら
明示的な the の宣言などはもう不要なのかなと誤解してました。
ひょっとして、、例えば (/ double double) であっても、その演算結果は
自動的に double などになるということはなくて、明示的な the を付けない限りは期待できないのかな。。
それだとめんどくさいですね。

でも、型宣言が簡単に出来るのでしたらそれだけでやっぱり有効だと思います。
それ以上、やっぱり速さが気になるようだったらその時点でまた考えれば良いかな。。
と思う事にしました。。
with-typeってCLOCC(the Common Lisp Open Code Collection)にあるね。
http://cvs.sourceforge.net/viewcvs.py/clocc/clocc/src/cllib/withtype.lisp?rev=1.6&view=markup
>>591
>静的な型を入れる上でLispのconsは邪魔だよね。
もうすこし、具体的に教えていただけますか?
cons(リスト)のデータ構造は組み合わせがなんでもありだからじゃない?
>>598
(declare (type (cons fixnum (cons float null)) var))という宣言はできるよね?
はずしてる?
600デフォルトの名無しさん:03/12/24 01:53
>>599
全部それやって回るのはちょっとやだなあ…
この際consをなくして,全部defstructみたいなもので(型を明示した)構造体にすれば
いいのでは? でもそんなことするくらいなら最初からML使うけど。
cliki を使おうとしましたが,別のディレクトリにある
package を使えるようにする方法が分からず,鬱になっております.

merge-pathnames や *load-pathname* など,なんだか複雑です.

どうか cliki を使う方法を教えてください.
>>601
マニュアルを詠む
;;フィボナッチ数列
(defun fib (n)
(cond ((= n 0) 1)
((= n 1) 1)
(t (+ (fib (- n 1)) (fib (- n 2))))))

驚愕的な遅さのこの関数をエレガントと思ってしまう俺は異常ですか?

コンパイルしても使い物にならない遅さ(せいぜいn=50まで)。
そうだtabはダメなんだった
(defun fib (n)
(cond ((= n 0) 1)
((= n 1) 1)
(t (+ (fib (- n 1)) (fib (- n 2))))))
>>603-604
その再帰的プロセスだと (fib 50)=20365011074 と同じくらいステップ数が必要になるが
反復的プロセスで書けば50ステップですむ。

手元にSchemeしかなかったんでSchemeで
(define (fib n)
  (define (iter r0 r1 i)
    (if (= i n)
        r0
        (iter (+ r0 r1) r0 (+ i 1))))
  (if (or (= n 0) (= n 1))
      1
      (iter 1 1 1)))
遅いのがエレガントなのか、定義そのものがエレガントだと思うのか
どっちだ?前者なら異常じゃないかなぁ。定義が好きなだけなら
↓の defmemoize でもどーぞ。
http://clocc.sourceforge.net/clocc/src/onlisp/onlisp-util.lisp
(defun fibo (n)
(defun iter (p q a b n)
(cond ((= n 0) b)
((= (mod n 2) 0) (iter (+ (* p p) (* 2 p q)) (+ (* p p) (* q q)) a b (/ n 2)))
(t (iter p q (+ (* (+ p q) a) (* p b)) (+ (* p a) (* q b)) (- n 1)))))
(iter 1 0 1 0 n))
(define (fib n)
(let loop ((i 1)
(x 1)
(xp 1))
(if (< i n)
(loop (+ i 1)
(+ x xp)
x)
x)))

(fib 1000)
=> 70330367711422815821835254877183549770181269836358732742604905087154537118196933579742249494562611733487750449241765991088186363265450223647106012053374121273867339111198139373125598767690091902245245323403501
末尾再帰の実装の仕方って何個もあるんですか?
>>609
いくらでもあるよ
思いついた実装を書いてごらんなさい
>>605さんみたいにインデントされたコードはどうやったら書き込めるのですか?

>>610 自己末尾再帰はループで置き換えるのしか思い浮かびません。
相互末尾再帰はどうするのだろう? 思い切ってジャンプするのかな?
>>606
定義だよ定義。
>>611
半角スペースを&nbsp;に置き換える
かちゅーしゃの場合だと半角空白2文字→全角空白の方が嬉しい
かちゅーじゃなないので後者はまったくありがたくない。
全角スペース+半角スペース
半角スペース+全角スペース
をAAとしてあぼ〜んする人もいる品
>>611
実装として一番楽だと思ったのはmini-schemeやtiny-schemeの方法
末尾式の検出は不用で、
環境のフレーム同士をリストで繋いで放置。
(使わなくなったフレームはGCで勝手に回収される)
(display "> ")
(define hoge (read))
(display hoge)(newline)

って内容のファイルを作って
$ gosh hoge.scm
と実行すると、いきなり入力待ちになって、例えばhogeと入力するとその後に
> hoge
と出てきます。
$ guile -s hoge.scm
だと期待通りに
>
と出て入力待ちになります。
これってバグってるのはGauche?それともおれ?
OSはDebian sidでGaucheはDebian公式パッケージでバージョンは0.7.3です。
バッファリングじゃない?
(display "> ") の後に (flush) してみそ。
621618:03/12/27 17:22
>>619-620
どうもです。

(flush)ってGauche固有の手続きですよね。
あんまり実装に固有のものって使いたくないんですが仕方ないっすね。
R6RSに期待… っていつになるか分からんが
slib使ったら? 処理系固有のslib.initでそのへんが
吸収されてるはず。バッファのフラッシュはforce-outputだっけ。
んじゃ OO やパッケージやネットワークや正規表現とかも駄目なのか?
純粋主義者は大変だなぁ…。
>>624
批判したいなら、暗に言うのではなく堂々と言ったらどうだ?

俺は>>622ではないが、処理系固有のものを使いたいとは思わないね。
正規表現もネットワークもパッケージも駄目。

ポータブルな外注ライブラリ(言い方が変だが)があれば断然そっちの方を使う。
なければ他の実装と比較しながら依存しないように使う。
正規表現ならpregexp、OOならyasosのようなポータブルな解もあるよ。
パッケージはソースをプリプロセスすれば何とかなる?
でもネットワークはバイナリでサポートされてないときついね。
>>625
ただの感想なんだが、やや煽り気味にも読めるな。スマソ。まぁ、R5RS とか SRFI
以外の機能はなるべく使いたくないって人の気持ちもわからんではないので別に
批判する気はないんだけどね…。Gauche+pregexp+yasosって人も居るのかもしれないし。

漏れは目的によっては処理系固有の機能を使ってもまったく良心の呵責を感じない
んでね。例えば PLT Scheme で少なくとも現在他の処理系にはない GUI ライブラリ
を使っても全く悪いとは思わない。便利だアヒャヒャって感じ。
実用的なものが作りたいならCommonLispを使えばいいのでは
っていう思い込みは間違ってますか?SchemeはCやPerlのような
言語とは違う気がする。
>>628
処理系によって違うだろう
「実用的」がどの程度のものなのかにもよるし
http://www.shiro.dreamhost.com/scheme/docs/schemersway-j.html

> しかし、Schemeでプロダクションコードを書こうとするなら、処理系間の移植
> という問題は基本的に忘れるべきだと思う。かわりに、自分の解こうとしてい
> る問題領域にいちばん適した処理系を選び、あとはその処理系が提供するあら
> ゆる拡張機能を使うべきだ。最初から移植を考えて最大公約数的な機能しか使
> わないというのはばかげている。
>>630
と、一番独自機能の多い実装の作者が言っております(<-あてにならん)。
>最初から移植を考えて最大公約数的な機能しか使わないというのはばかげている。

と言っているが、>>626のポータブルな解を意図的に無視しているとしか思えん。
この方は外部のライブラリは使ってはいけないとでも考えているのか?
>>628
漏れは Perl の代わりに使ってるよ。まぁコンパイラ周りの仕様まで考えたら
CommonLisp のほうが実用的ってのはそうかもしれないけど。

>>632
漏れも比較的ポータビリティ重視派なんだけど、>>630 を流石に外部ライブラリ
を使ってはいけないと読むのはひねくれ杉だろ…。プロダクションコードを書こうと
するなら〜って話だしさ。そりゃ性能を激しく必要とする場面でも組み込み正規表現
じゃなくて pregexp 使うって人も居るのかもしれないけど。

などと書いてから思ったんだが、 CommonLisp の cl-ppcre とかはかなりがんがってると
聞くしひょっとして pregexp ってむっちゃ速かったりするの? > 使ってる人
634632:03/12/28 14:38
>>633
>>>630 を流石に外部ライブラリを使ってはいけないと読むのはひねくれ杉だろ…。

スマソ。ちょいやり過ぎだな。

ところで、俺は完全にCommonlisp派。規格で出来るだけ多くのことを決めておいた方が、独自拡張に悩む分野が少なくなるから。
それを重視するならJavaが一番いいのかも知れんが、あくまでLispの中でということ。

時代の流れからいって、ANSIはそろそろ
1.ネットワーク関連(自然なのはTCP&UDPのbinary&string streamかな)
2.マルチスレッド
3.正規表現(stringだけじゃなくてS式全般に)
あたりに手を出してもいいんじゃないかな。

まあ、"ポータブルなライブラリがあれば充分じゃないか"というのも一理あるけど。
635632:03/12/28 14:40
>>633
追記
cl-ppcreは速いです。実験して比べてみたわけではないから絶対的な速さでしか言えないけど。
636632:03/12/28 14:50
>>633
ベンチマークを発見。
全体的に見るとperlに勝ってるような気がする。
http://www.weitz.de/cl-ppcre/#bench
perlとかrubyの形態は見方を変えると、
言語以前に1つの処理系としての実装なわけだよ。
もしperlやrubyで最小の仕様を決めてしまい、
別の人らがそれに沿ってそれぞれの目的に合った処理系を作ったとすると、
今のLISPの様な状況に陥るとは思わないかね?
CommonLISPの様な、込み込みの規格で縛っていっても、
無駄に大きくなる一方だ。


>>633
pregexpの速度は動作させる処理系に依存するよ。
pregexpに正規表現を掛けると状態が一旦リストになるから、
あとはそのリスト処理の速度次第。
>>637
>CommonLISPの様な、込み込みの規格で縛っていっても、無駄に大きくなる一方だ。
何が無駄なの?
>>637 が使わない物 = 無駄な物 だと思われ
>>636
> ベンチマークを発見。
> 全体的に見るとperlに勝ってるような気がする。
cl-ppcreすごいんだね。ある意味CMUCLのコンパイラがすごいともいえるが。

トリビア CMUCLのコンパイラの名前はPython
>>640
>トリビア CMUCLのコンパイラの名前はPython
そういえば、pythonよりもCMUCLの方が歴史が古いんだったな。
ところで最近encyCMUCLopedia更新されてないね。
http://www.ljosa.com/~ljosa/doc/encycmuclopedia/index.html
どうしたのかな。
「Scheme 過去・現在・未来」読んでみたい。
いまいちネタがつながらないな。
で、ひまつぶしにレスをカウントしてみる。
2001/4/13〜2002/4/12 3278レス   9.0レス/日
2002/4/13〜2003/4/12 3122レス 8.6レス/日
2003/4/13〜2003/12/30 2243レス 8.6レス/日
変わらずか。今年は10レス/日目指そうぜ。
糞レスばかりじゃ本末転倒だけど。

弱者と比較してみる
Haskellスレ
2001/7/26〜2002/7/25 1313レス 3.6レス/日
2002/7/26〜2003/7/25 418レス 1.1レス/日

Dylanスレ
2001/10/28〜2002/10/27 78レス 0.2レス/日
2002/10/28〜2003/10/27 162レス 0.4レス/日

MLは前スレがdat落ちで不明
emacs lispはUNIX板が中心なので比較はたぶん無理。
645601:03/12/30 20:00
>>602
うーん.HyperSpec でそれらしいところを探し周りました.
どこがズバリなのか分からないのです.
cliki は仕様を熟知しないと使えない wiki なんでしょうか...
tutorial キボンヌですよぅ (´・ω・`)
646デフォルトの名無しさん:03/12/30 20:37
Clikiって日本語使えますか?
>>645 よ…。本当にオマエは *CLikiが* 使えないのか?そもそも導入できた
パッケージはあるんか? Aranedia が設定できて cliki が導入できない
というケースは信じられないので、そもそも Araneida からして
セットアップできてねーんんじゃねーのか?そもそも lisp はどれくらい
読めるんだ? HyperSpec が読めてパッケージがインスコできんというのも
ある意味凄いが…。とりあえず使ってる処理系のマニュアルとか asdf を読んでみろ。
648601:03/12/30 22:12
>>647
ごめんなさい.INSTALL.asdf を読んでいませんでした.
>>647 さんのおかげで導入の順番が分かりました.ありがとうございます.

しかし,clisp にて,
[1]> (require 'asdf)
;; Loading file /...../asdf.lisp ...
;; Loaded file /...../asdf.lisp
T
[2]> (asdf:operate 'asdf:load-op "araneida")
; loading system definition from araneida.asd into #<PACKAGE ASDF930>
;; Loading file araneida.asd ...
; registering #<SYSTEM ARANEIDA #x19D0D051> as ARANEIDA
;; Loaded file araneida.asd
*** - Condition of type ASDF:MISSING-DEPENDENCY.
1. Bread [3]>

araneida を入れることさえできませんでした.(遠くの端末で
作業しているため,上のメッセージは手書きです)
ググりましたが,FAQ では無いようで...(´Д`)
大きな lisp プログラム (define-* が多数なやつ) は読んだことがない
程度なので,年内に asdf.lisp を読み切れなさそうです.
「lisp で wiki 生活」は無理なのでしょうか.
ちゅーか CLISP かYO! Aranedia が依存してるパッケージがねYOって
言われてるんだろ。 コード以前に Araneida のドキュメントとか読ん
でるか?あれは基本的に SBCL 用だぞ…。よくしらねーが CLISP じゃ
Araneida がアテにしてるソケットすら無いんじゃねーの?

漏れなんか Aranedia つーと SBCL のネイティブスレッドと組み合わせて
こそって感じだが、そもそもなんで cliki に興味もったんだ?lisp で
普通に wiki 生活したけりゃ素直に WiLiKi でも使うかさもなきゃ自作汁。
CL で作ってる香具師もどっかにいるだろ?
>>648
clispという時点で茨の道だということを覚悟せよ。
651601:03/12/31 16:42
>>649-650
すみません.挫折しました.
ちょっと wiki してみたいと思ったのですが,そんなヤシに使える
wiki は少ないようです.
ruby 製の小さなやつで満足します.
こんなベンチがあった。
http://www.bagley.org/~doug/shootout/craps.shtml
mlが2,3位とか信頼性は微妙だが、CMUCL速いな。
メモリ消費が微妙だけど。
653デフォルトの名無しさん:04/01/01 23:18
clisp-2.32キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
Scheme 処理系を作りたくて、R5RS と minischeme のソースを読んでいるのですが、
処理系実装の Tips とかの情報源は無いでしょうか。
継続の実装の仕方とか、cons セルの表現方法とか、色々流派があると思うのですが、
まとまった物がありましたら教えて下さい。
>>654
多分ソースが一番近道かと
Python 用の Lisp フロントエンド。www.lemonodor.com 経由。

  ttp://www.caddr.com/code/lython/

Lisp で Python と言えば、CMUCL な訳だけど。。。
(プログラミング言語の)pythonは(CMUCLのコンパイラの)pythonに比べて遅いし、
メリットないと思う。

逆なら面白いかもしれないけど。


java2lisp なんてのもあるよ。これも同じ所経由。lemonodor は結構面白いです。

  ttp://www.setf.de/code.html
>>657
メリットないってのは速度的にはそうだろうが Python 並みのライブラリを
使いたい Lisper にはメリットあるだろう。漏れは Python で Lisp したい
とは思わない人間なのであんま興味ないけど。
>>655
やっぱりそうですよね。>>7 あたりから始めてみます。
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
>>659
pythonにあるライブラリはほとんどCにあるからFFIでCのを呼び出せばOKじゃないの?
read で読みこんだオブジェクトを lambdaにくるんで evalすることはできるでしょうか。
環境を汚されたくないのですが。
衛生的なマクロって何でしょう?
sanitary healthy 健康的等々でググってみましたが、分かりませんでした。

ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html
>>665
たぶん「健全なマクロ」のことだと思う
ttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_37.html
衛生的ってのは初めて聞いたな
あ、副作用が無いマクロって事かな?
>>666
なる程。どうもありがとうございます。
hygienicの訳語か?
flatline氏の『On Lisp』翻訳が進んでますた。お疲れ様です。
http://user.ecc.u-tokyo.ac.jp/~g340299/

翻訳終了 :17章まで
最終更新日:2004-01-04
>>670
flatlineって何?
symbol の場合,symbol-name と symbol-package が同じなら
eq で T になるんですか?

(setf hoge (intern "FOO")) ===> FOO
(symbol-name hoge) ===> "FOO"
(symbol-package hoge) ===> #<PACKAGE COMMON-LISP-USER>

一方,

(symbol-name 'foo) ===> "FOO"
(symbol-package 'foo) ===> #<PACKAGE COMMON-LISP-USER>

で,めでたく (eq hoge 'foo) ===> T でした.symbol には他に
value やら function があるようですが,この辺は複雑ですね.
assoc でマッチさせたいときはキーに :foo と書きまくればよい?
つうか、symbolの実体はパッケージと名前で特定できるから、
symbol-name と symbol-package が同じなら同じ実体を
指しているわけで、他のスロットは関係ないじゃん。
eqでTになるってことは全く同じ実体を見てるってことでそ。
あえて話を複雑にしてみると、シンボルがホームパッケージを持たない(symbol-package symbol) => nil の場合は、
(and (string= (symbol-name symbol1) (symbol-name symbol2))
     (eq (symbol-package symbol1) (symbol-package symbol2))
     (not (eq symbol1 symbol2))) => t
というsymbol1とsymbol2はありえるよね。あたりまえか、スマソ。

シンボルの同一性を考えるとき、名前とホームパッケージが同じだから…と考えるより、
直接eqで比較して同一だから…と考えるほうが自然な気がする。
675672:04/01/06 09:34
ありがとうございます.だんだん整理されて来ました.

>>673
既にパッケージの中にある名前なのに intern を使うと,
多値の 2 番目で教えてくれるんですね.

>>674
symbol が評価されるのは (symbol-value 'symbol) と等価なんですね.

> 直接eqで比較して同一だから…と考えるほうが自然な気がする。

eq で T にならない時を把握しておこうと思いました.
http://www-2.cs.cmu.edu/Groups/AI/html/cltl/clm/node112.html

乗り遅れた気もするけれど、気にかかってるのはこの辺のことかな?
URL エンコードされたやつをデコードするところで困っています.
pegexp もあることだし perl の BBS プログラムを参考にしようとしましたが,
pack(H2,$1) でアッという間に終わらせてやがります.

lisp でも高階関数でアアッとするコードにならないものでしょうか.
schemeだと、
(eq? 'abc (string->symbol "abc"))
は #t、#f どちらになるのが正しいの?
R5RS の例だと #f になるみたいだけど、Gauche や Guile だと #t になる。
>>678
実装依存。正確には、実装がシンボル名のcase foldingをどうするかによる。
R5RSの例ってのはどれを指してるのかな? 6.3.3の"bitBlt"の例なら、
#fになるのはcase sensitivityの問題ね。
680677:04/01/06 22:34
byte なんて関数があるんですね.ldb や dpb (これ謎)...
マルチバイトかどうかなんて %.. からは分からないので,
機械的にバイト列にするしか無さそう...?

しかもそういう列を格納する type が分からず.
character も何バイトか決められていませんよね.
ファイルに write-byte の後 read-line しないと日本語にできません.
こういうので処理系に依存しない方法はあるのでしょうか.

perl は厳密に文字が 8 bits かな?あ,処理系 1 個しかないよ.
>>670
はじめてホームページ見たけど優秀そうな学生さんだね。
もうちょっと時給高いバイトすればいいのに。
関数的プログラミングにお詳しいみなさまに伺いたいのですが
ストリームI/Oをするプログラムを書くときって関数的にならなくなってしまいません?
ストリームI/Oってグローバル変数への副作用そのものでは?
LR(1)パーザを勉強しているんですが,
どうしてもテストスタブでごまかしながらトップダウンプログラミングをする破目に...
信頼できる小さな関数を自在に組み合わせて行うLispプログラミングとはかけ離れていて欝だ
でも呼び出された状況が分からないとどう動作すべきなのかはっきり言えないし... < へたれ
ストリームI/Oを行う関数を呼び出す方から順につくっていけばいいのでしょうか?
もっと具体的にコードでも書いてくれないとよくわからん。
一個先読みして最後に戻す。
>>682
確かに副作用ありなんだけど、CPSっぽく書けば関数的に書けると思う
(Haskellがモナドで実現してることと同じ)。
>>679
> 実装がシンボル名のcase foldingをどうするかによる。

このあたりがよく理解できていないんだけど、
実装の default case が lower case の場合は、
(and (eq? 'abc (string->symbol "abc"))
(eq? 'ABC (string->symbol "abc"))
(not (eq? 'ABC (string->symbol "ABC"))))
=> #t
になるってこと?
expr ::= term ('+' term)*, term ::= fac ('*' fac)*, fac ::= num | '(' expr ')' とかあったら,
expr() { ...  }
term() { ...  }
factor() {
 if (lookahead == '(') { match('('); expr(); factorAction1(); match(')'); }
 else if (lookahead == NUMBER) { match(NUMBER); factorAction2(); }
 else error("Syntax Error");
}
match(token) { ...  }
みたいに定義して,parser()からこれらを呼び出すのが最終目的になりましょう.
Lispの流儀では,例えば一番下請けのmatch()やexprAction()を(きちんと)定義してから
それらを部品と見て上の階層に属するfactor()やparser()を定義しますよね? ボトムアップに.
ところが,これらはgetchar()(に依存するlexer())に依存するmatch()に依存してるので,
全部副作用に依存して働く関数じゃありませんか. 他に概出識別子表などグローバルな変数も使うし.
これらをLisp的にうれしい(関数的)プログラムにするにはどうすれば,と...
というかまずfactor()(やfactorAction1())とparse()のどっちを書けばいいのか.
factor()らしきものをまず書いてみたところでそれが合っているのかどうか分からない
(一連の呼び出しの途中で働くはずのものだから単体では動作確認ができない).
結局,factor()やmatch()を全部実装するまで正しい動作の見込めないparse()を,
適当にprintf()埋め込んで「ここに後でfactor()を持ってくれば」とか呟きながら書くことになりません?
  
>>685
いきなり難しいことを言われて戸惑っていますが...(継続も怪しいし,Haskellに至っては知識ゼロ)
例のモナドってのはやはりその辺を意識したものだったのですね.心に留めておきます.
関数的プログラミングってのはそういう概念を掴んで初めて有効な手法なのかな...?

長文スマソ.Javaの授業の課題なんですけどね(ぉ
matchが副作用ありの汚い関数でもそれで他がすっきりかけるんなら、それでいいと思うけど。
この場合はparseからfactorまで全部少しだけ書くよ。
parseはexprを呼び出すだけ、exprはtermを呼び出すだけ、
termはfactorを呼び出すだけ、factorは数字を読み込むだけ。
あとで少しずつ付け足す。掛け算の処理とか。
>>677
CPSっぽく書くっていのうは、この場合ならmatchを呼び出す時に
その後で行う処理をクロージャで渡してやるって感じ。matchは
末尾呼び出しになる。Schemeならこうな。

(define (factor token state)
(case (token-type token)
((#\() (match token state
(lambda (state)
(expr (next-token) state
...))))
...))

(define (match token state cont)
...
(cont state))

機械的にCPSにしちゃうとlambdaが多くなり過ぎるけれど、文法によっては
ローカル関数の相互再帰でわりと綺麗に書けることも多いよ。

もうひとつの手は、直接再帰下降のフローを書き下すんじゃなくて、
parser combinator使って高階関数の中に状態の流れを隠す方法かな。

いっぺん、関数的に書いてあるパーザを読んで見るのが近道と思われ。
すぐにどれがいいってのは思いつかないんだけども。
>ストリームI/Oってグローバル変数への副作用そのものでは?
でもさ、それを言うならsetf.defunなんかだって副作用が中心だし、あんまり気にすることはないんじゃないかな。
691デフォルトの名無しさん:04/01/07 17:44
WiLikiをインストールしてみたんだけど、データベースがないと言われてしまいます。
確かにインストールしたてでデータベースのディレクトリは空なんですが、こういう
ときには何も作ってくれないんでしょうか?
試しに test という空のファイルをディレクトリに置いて、wiliki.cgi?test とやってみ
たけどこれもダメです。何かまだ設定しなければいけないことがあるのでしょうか?

ちなみにdbはGauche-0.7.3, Wiliki-0.4, fsdbmで、dbディレクトリのパーミションは
どうすればいいのかよくわからないので777にしています.OSはMac OS 10.3.2です。
693デフォルトの名無しさん:04/01/07 18:07
>>692
もちろんこの通りやっているつもりなんですが…
まあもう少し調べてみます。
694691:04/01/07 18:39
ソースをながめていたら解決しました。
db-pathを/var/wilikiにしてlog-fileを設定していたのですが、ログファイルを/var/wilikiと
同じ階層、つまり/varに書こうとして失敗していたようです。db-pathを/var/wiliki/Hoge
のようにすると,データベースをHoge以下に、ログファイルを/var/wikiに作るようになって
ちゃんと動きました。

お騒がせしました。
695デフォルトの名無しさん:04/01/09 10:17
cmuclインストール記念age

gaucheを使用していらっしゃる方は、開発環境は何をお使いですか?
私はilispから使用しようと思っているのですが、ilispを使用している方は
.ilispにどんな設定をしていますか? defdialectで定義が必要なのかな?
SECDR-Scheme って Web で見つからないなーと思ってたら、ありました。
thx!! > Link の先の人。

SECDR-Scheme を読む
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu

話は変わって、、、KSM Scheme って使っている人いらっしゃいますか?
FFI と C-like syntax が便利そうなので、Linux 以外でも動かないかなぁ。
CMUCL系やGNU CLISPで利用できるGUIツールキットの選択肢が、Ruby, Perl, Rythonなどの
いわゆるスクリプト言語と比べると少ないのは、純粋に作業をする人がいないためですか?
それともこれらLisp処理系のFFI(Foreign Function Interface)が使いにくいからとか、他に理由は
ありますか?

>>695 gaucheを使用していらっしゃる方は、開発環境は何をお使いですか?
Perlなどのように、エディタのschemeモードでスクリプトを書いて、それを端末で実行という
開発サイクルをとっている人が多いのかな?
少ないことは確かだけど、困るほどではないかな。
とりあえず遊べそうな奴
clx(x11 binding)
CMUCLとかSBCLとかCLISPに付属
clm(motif binding)
CMUCLとかSBCLに付属
garnet
http://garnetlisp.sourceforge.net/
Mcclim(climのフリー実装)
http://clim.mikemac.com/
Morphicl
http://www.tunes.org/~eihrul/
ecfh-gui
http://vengeance.et.tudelft.nl/ecfh/ecfh-gui.php3
Picasso
http://s2k-ftp.cs.berkeley.edu:8000/
gcl-tk
GCLに付属
lgtk(gtk binding)
http://www.common-lisp.net/project/lgtk/
cl-gtk(gtk binding)
http://tenkan.org/clgtk/

完成度の面ではclx,clm,garnetあたりが良いと思う。Mcclimは正式リリース間もないし微妙。

>純粋に作業をする人がいないためですか?
だろうね。dylan,ml,haskellよりはマシだけど。
699698:04/01/12 16:35
GUIじゃないけど
cl-sdl
http://cl-sdl.sourceforge.net/
とか。

FFIならUFFIが使われてるかな
http://uffi.b9.com/
700しつもん:04/01/12 19:22
STLに関するスレッドがなかったんで,こっちに質問です.
mapクラスって二分木で構成されてますよね?で,

itr = Database.begin();
itrEnd = Database.end();

for( ; itr != itrEnd ; itr++ )
{
pszKey = (char*)itr->first.data();
pszData = (char*)itr->second.data();

//キーでソートされた状態がファイルに書き出される
File.Write( pszKey, sizeKey);
File.Write( pszData, sizeData);
}
んな感じでmapのキーとデータをファイルに保持してます.
このファイルのデータからmapの2分木を再構築しようと思うと,
キーでソートされてるので,木は2分木ではなく1方向分岐になってしまい
O(n)でmapの特徴がいかされません.どなたか良い解決策あればお教えください.
なぜSTLのことをLisp/Schemeスレに?

【C++】template 統合スレ -- Part3
http://pc2.2ch.net/test/read.cgi/tech/1066493064/l50
>>700
hash-tableを使えば完全解決。
>>700
すれ違いにレスすまそ。
STLに2色木(赤黒木)があるからそれ使えば?
http://www.geocities.co.jp/SiliconValley-Oakland/1680/clisp/clispb03.html
某スレのC++厨の嫌がらせだな
705697:04/01/13 08:21
>>698 レスありがとうございます。
>lgtk(gtk binding)
これは初めて知りました。まだ生まれたばかりのプロジェクトみたいですね。
Windowsのことはスッパリあきらめて、Unix系で、CMUCL or SBCLとGTK binding
が成熟すれば幸せになれそうですね。

個人的にはVisual BasicやDelphiレベルのGUI Builderがあればもう言うことなし
です。これは、Glade bindingに期待といったところかな。Gladeは書き直すとか言って
たけど。

スレ違いだけど、Javaって最近のバージョンでtemplate相当の機能を入れたみたいですね。
あと、C#でunboxing機能がどうのと言っているのを聞いたけど、これはLispで言うところの
unboxingのことかな?
C#
boxing: class -> struct
unboxing: struct -> class

Java
boxing: class -> primitive
unboxing: primitive -> class

Java1.5でauto boxing/unboxingされるようになった.
Lispは知らねw
Boxing and unboxing in C#
http://www.programmersheaven.com/articles/arun/boxing.htm
> With Boxing and unboxing one can link between value-types and
> reference-types by allowing any value of a value-type to be converted
> to and from type object.

Lispの数字のboxing (Explain boxing)
http://www.franz.com/support/documentation/6.1/doc/compiling.htm#explain-box-2
>A number is boxed when it is converted from its machine representation to the Lisp representation.
これは数字のboxingについてだけど、文字や他のオブジェクトについても広義のboxing,
unboxingって考えられるよね? 正規のLisp valueとしての表現に対してよりprimitiveな表現と。
boxingってのはポインタ(リファレンス)で表現すること。
unboxing ってのはdereferenceすること。

ポリモルフィズム、実行時の型判定のある言語では、それを実現するために、
ポインタで表現してある(boxed type)。しかしそうすると、
当然実行時にunboxingするコストがかかるので、コンパイル時の最適化で、
多相性が必要ないとわかる時は、あらかじめunboxed typeを用いるように
するのが望ましい。

>>706は意味不明だが、多分Javaコンパイラが賢くなったということだろう。
>>708
> boxingってのはポインタ(リファレンス)で表現すること。
> unboxing ってのはdereferenceすること。
基本的にはそうだと思いますけど、fixnumやcharacterなどのように、
イカサマ・ポインタとして表現することが多いオブジェクトもありますよね。
まぁ、そういうののunboxingも広義のdereferenceと言えなくもないですが。
>>709
そうだね。

>>708につけくわえよう:
上記ポインタおよびリファレンスの定義は、当該言語で規定されたポインタないし
リファレンス、あるいはさらに低レベルのポインタ等とは必ずしも一致しない。
非常に一般的な意味で解釈する際には、日常言語の意味で理解することがより
適切である。

…とか。
lambda-calculusの入門を読めるサイトでお薦めの所を教えてください。
できればLispとの関係についての平易な説明も希望します。
Peter NorvigのParadigms of Artificial Intelligence Programmingを読んだ方いらっしゃいますか?

質問だらけの所、さらに質問を重ねるのは気が引けつつ…

任意精度実数計算の機能もしくはライブラリの実装がなされているscheme処理系ってありますか?
現在schemeを勉強している所なのですが、少し仕事の役に立ててみたく思いまして
>>714
SISCは実数計算の精度を任意の値に指定できるよ。
http://sisc.sourceforge.net/
>>712 レスありがとうございます。
読んでみたのですが、私のレベルを超えているようであまり理解できません。
もうすこし初心者向けのものをご存知でしたら、紹介していただけないでしょうか。

>>713
読んだ事はないのですが、Paradigms of Artificial Intelligence Programmingは
古典的なAIのアルゴリズムの勉強に良いと噂を聞いたことがあります。
lambdaの何が知りたいんだよ。
一般教養としてのlambda calculusと言ったところでしょうか。

lambda calculusはLispの理論的な基礎となっていると聞いたので、
どんな感じのものなのかを知りたいなと考えています。

けっこう昔にChurchという人が打ちたてた理論だとか、
数さえも関数として表すとか、ポツリ、ポツリとした
知識は入ってくるのですが、系統的に勉強したことが
ないので、自分なりの全体像がまだ作れません。
>715
ありがとうございます
後で時間を見つけて見てみたいと思います
>>716
Paradigms of Artificial Intelligence Programming読んでいるのですが
どうもぽつぽつ意味のわからないところがあるので翻訳してるとこないかなっと・・・
>>720
漏れも読んでるけどまだそんなに難しいところには逝ってないな.
つーか勝手に翻訳して公開なんてあるわけないと思われ.どこで
困ってるんだ?
>>718
「Lispの理論的な基礎」って構えるほどのこともないような。
確かに計算モデルの基盤ではあるけれど、それを言ったら
Turing Machineだって同じ。

ちゃんとした説明は >>712 に出てるけど、感じを知りたいだけなら
wikipediaの「ラムダ計算」の項とか:
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E7%AE%97%E6%B3%95

Church Numeralを動かしてみたいならこことか:
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/lambda.html

あとはこのへんのキーワードをもとにぐぐれ。
>>721
12章です。コードみてなんとなくわからないでもないんですが・・・
ソースコード(http://www.norvig.com/paip/README.html)も下のようなエラーがでて動かなくて困っています。
Error: attempt to call `top-level-query/0' which is an undefined function.
[condition type: undefined-function]
処理系はACLです
724デフォルトの名無しさん:04/01/15 17:08
>715
少し触ってみたのですが、JVM上の実装ということでいろんな意味で面白そうな処理系ですね
まだ精度を任意に設定する方法を理解していない(Java Propertyって何?のレベル)のですが ('A`)
lambdaって不完全性定理(原始再帰関数に限らず)、
その下敷きの述語論理の完全性定理までは簡単にでも
分ってないと、理解出来ないって言われました。
そんなことはない
>>725
その場合、むしろquoteの方が重要
天才じゃない人が sheme を始めるとしたら、どういった本からやるといいですか?
菊と刀
まずはSchemeと書けるようになってからかな?
ワロタ
>>728
The Little Schemer
http://www.amazon.co.jp/exec/obidos/ASIN/0262560992/250-6433142-1849861
価格: ¥2,437
この本はプログラミング経験があることを前提としてはいないと思う。

scheme入門じゃないけど、こんなの出てたんだね。
Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
http://www.amazon.co.jp/exec/obidos/ASIN/0262692201/ref=pd_sim_dp_1/250-6433142-1849861
しーみー最強

Dybvig の「プログラム言語scheme」はどうだろう。
>>733
わかりやすいですよ。英語版はwebで読めます(平易な英語です)。
私はwebでこれを読んで覚えました。最後のサンプルの章以外はすらすら
読めるし分量もそれほどないので、サンプルの章は気が向いたらでいいと思います。

和訳は訳が正確でないとかの指摘が出版当時ありました。

いきなり高度な例題が出てくるので中々すらすら読めなかったのですが…
途中からの構文や関数のリファレンスっぽくなっている部分は好きです

邦訳版はRevised^5 Reportも考慮されているようです
あと巻末付録にRevised^5 Reportの和訳が載っています
The Little Schemer から読み始めてみます。
737デフォルトの名無しさん:04/01/16 17:30
>715
結局Java System PropertyのminFloatPrecisionの変更が出来ませんでした
(sisc.propertiesの内容を反映させられなかった)
ソースを見ると確かにPropertyを見ているのですが、そこで面倒になり
ソースの中のデフォルトの設定を直接変更して対応しました ('A`)

あと予想はしていましたが、組み込み算術関数は任意精度には対応してません
でしたので、自分で作らねばなりません…なかなか道は険しいですね ('A`)

しかしながら任意精度計算は(自分で実装せずに)使えるようになりましたので
取り合えず満足です (´∀` )

ありがとうございました
>>723
> 12章です。コードみてなんとなくわからないでもないんですが・・・

あちゃー漏れまだ 11 章のプログラム動かして遊んでるところだ。

> Error: attempt to call `top-level-query/0' which is an undefined function.
> [condition type: undefined-function]

なんか定義し忘れてんじゃないの?まぁここまで読んできたんなら自分で修正くらい
できるだろ…といいつつ試してみた。貧乏人なので CLISP 2.32 だけ必要なものを
順にコンパイルしてロードするだけで動いたよん↓。

[8]> (<- (like jim paren))
[9]> (<- (like sum paren))
[10]> (<- (like jim lambda))
[11]> (<- (lisper ?WHO) (like ?WHO paren) (like ?WHO lambda))
[12]> (?- (lisper ?WHO))
?WHO = JIM;
>>738
どうも親切にありがとうございます。
もいっかいちゃんとやってみます。
自分もCLISPで試してみます。
なんと! ACL があるのに CLISP で試すというのか! なんとなく
責任を感じるのでなるべく元のソースに手を入れない手順を紹介しとこうか。
paip% mkdir bin
paip% clisp
[1]> (setf (ext:package-lock '("LISP" "CLOS")) nil)
NIL
[2]> (compile-file "auxfns")
[3]> (load "auxfns")
[4]> (compile-file "patmatch")
[5]> (load "patmatch")
;; C-z とかで中断して patmatch.fas を bin フォルダにコピー
[6]> (compile-file "unify")
[7]> (load "unify")
;; unify.fas を bin フォルダにコピー
[8]> (compile-file "prolog")
[9]> (load "prolog")
;; prolog.fas を bin に
[10]> (compile-file "prologc")
[11]> (load "prologc")
>>738 へ。
>>740
重ね重ね丁寧にありがとうございます。
おかげで動きました。色々遊んでみて精進します。
CへトランスレートするLisp処理系において関数呼出しでCのスタックを利用する場合、
デバッガに入ったときにコールスタックのバックトレースを表示できるように
するには、ISO Cの範囲内でやるとしたら、呼出しのフレーム情報を記録しておいてから、
指定された関数を呼び出すfuncallの変形みたいなものを、すべての関数呼出しに
1回かませるという実装しかないでしょうか?

(car list) が make_frame_and_call(cl_car, var_list); みたいな感じです。

ちなみにCへトランスレートする処理系であるECLでは、Cへコンパイルした関数の
バックトレース情報は、コンパイラのdebug指定を最大にしても、デバッガから
見えなくなってしまいます。
他の言語にトランスレートする形式のコンパイラは大体デバッグがやりにくいと決まってるからな。
f2c(fortran to c)でデバッグに苦戦した記憶がある。

>ちなみにCへトランスレートする処理系であるECLでは、Cへコンパイルした関数の
>バックトレース情報は、コンパイラのdebug指定を最大にしても、デバッガから
>見えなくなってしまいます。

ってのも、KCLファミリーの宿命じゃないかと...って全然建設的なこと言ってないな、俺w
環境変数を取得する方法は,HyperSpec には決められていないんですね.
clisp では ext:getenv,gcl では si:getenv でした.
どちらでも,もっと欲を言えば,どこでも動くコードにするには
どう書けばよいでしょうか.

特定されそうですが,私が使えるところのシステムには
gcl と gcl.exe という変な名前のファイルがあり,
lisp ファイルを評価するように実行するには ``gcl.exe -f" とします.
鬱な環境です.defpackage 無いよ!?

しかし,頼めば入れてもらえそうです.
安定を求めるならどの処理系がおすすめですか?
http://clocc.sourceforge.net/dist/port.html

(in-package :port)
(getenv "HOME")
746744:04/01/20 07:23
>>745
おお!面白そうなやつがいっぱいですね.ありがとうございます.
さすがに defpackage は無さそうですが w
747744:04/01/20 07:50
translate-logical-pathname を実装していず撃沈.
>>747
> translate-logical-pathname を実装していず撃沈.
これってgclのことだよね? clispはclocc側でサポート対象として考慮に
入れられているみたいだから、正しく動くよね? 自分で確認してなくて
悪いけど。しかしこういうCLOCCの努力って頭がさがります。

こういう移植性を向上させるコードが増えると、clispでスクリプティング
しておいてある程度規模がでかくなってきたら複数スクリプトをシステム
としてまとめてcmuclで稼働させるという俺の妄想が現実の物となってきて
いる感じ。

話を戻してgclは準拠対象をCommon Lisp The Language 1st editionから
ANSI Common Lispへと移行している最中みたいだから、
こういうときはちょっと厳しいかも。もともとgclで動いていた
Macsymaという数式処理ソフトもcmuclやclispを土台にするように
変更したみたいだし。

>>743
> 他の言語にトランスレートする形式のコンパイラは大体デバッグがやりにくいと決まってるからな。
> f2c(fortran to c)でデバッグに苦戦した記憶がある。
そうなんですか...Cへのトランスレートって結構冴えたやりかたかなと思って
いたんですけどね、難しいですね。でもネイティブコードコンパイルする場合
にデバッグ情報を扱う苦労とCで前述のような苦労をするのとそれほどどれくらい
差があるのか、いまいちピンときません。自分で書いて体験してみるしかないで
しょうね。(長文スマソ)
>>747
ファイル、ディレクトリ操作関連はCLOCCにはなかったっけ。
とりあえず、実装非依存のライブラリってことなら、こんなのが使われてるかと。

FFIなら
UFFI(Universal Foreign Function Interface)
http://uffi.b9.com/
外部ライブラリを扱ったりする。

OSI(Operating System Interface)なら
osicat
http://common-lisp.net/project/osicat/
ファイル、ディレクトリ操作関連はこれでいけると思う。

既に出たCLOCCのportも結構いろいろなものが詰まってる。

GUIなら>>698とか
EncyCMUCLopediaの2001年06月17日以降のものを持っている人いますか?

HTMLファイルにCommon Lispコードを埋め込んでおいて、それを処理して
通常のHTMLファイルを生成するアプリケーションでおすすめはありますか?
つまりPHPのCommon Lisp版みたいなのです。

CLHP (the Common Lisp Hypertext Preprocessor)
http://www.common-lisp.net/project/clhp/
これはみつけました。
>>750
>EncyCMUCLopediaの2001年06月17日以降のものを持っている人いますか?
それ最新かと思われ。

>HTMLファイルにCommon Lispコードを埋め込んでおいて、それを処理して
>通常のHTMLファイルを生成するアプリケーションでおすすめはありますか?
どういう意味合いでいっているのか分からんが、
サーバサイドで処理させるということなら、SSIを使えばCommonLispのコードを埋め込める。

HTML に Common Lisp コードを埋め込むという条件だと CHLP 以外では
Lisp Server Page とかかなぁ。Portable Allegro Serve 関連で見かけ
た気がするが。

IMHO みたいに HTML テンプレートに CLOS オブジェクトを関連付ける
ってのは微妙に要望と違いそうだしなぁ。
>>751-752 レスありがとうございました。
もうちょっと自分でいろいろ調べてみます。漠然としすぎた説明ですみませんでした。
自分の管理しているウェブページがあるISPのサイトへFTPでアップロードするまえに、
複数HTMLページ内で固定的なヘッダやフッタの一括自動埋め込み処理をしたいと
思っていました。すでにHTMLファイルが結構あるのでLispコードの埋め込みでと思いました。
>>753
サーバサイドでごにょごにょするわけじゃないんですね。
そういう用途だったら escm が手軽でいいかも。scheme になっちゃうけれど。
ttp://www.shiro.dreamhost.com/scheme/vault/escm.html
ttp://sourceforge.net/projects/escm/
>>753
.htaccess じゃ駄目?
>>753
> 自分の管理しているウェブページがあるISPのサイトへFTPでアップロードするまえに、

「まえに」なのにサーバーサイド? 状況が分からないよぅ(´・ω・`)
私は emacs で html を書いているので elisp でやってます.
日付けとか署名とか,章番号とか.
>>754 情報ありがとうございます。たぶん私のやりたい事はこれでできると
おもいます。もうすこし調べてみたいと思います。

>>756
>「まえに」なのにサーバーサイド? 状況が分からないよぅ(´・ω・`)
説明が下手ですみません。サーバはISPが管理しているので、
サーバーサイドでの処理は一切、何もすることはできません。
CGIでPerlが使えますが...

すべての処理を自分のマシンでおこなって、完成したhtmlファイル群を
ISPのサイトへ転送するだけです。

単純に、lispy-html_processorというコマンドがあるとして、
lispy-html_processor index.lispy-html >index.html
みたいに*.lispy-htmlファイルに対して処理をするというイメージです。

>私は emacs で html を書いているので elisp でやってます.
>日付けとか署名とか,章番号とか.
たぶん、この作業が私がしたいことに近いと思います。
よろしければ、使っているパッケージを教えていただけますか? 自作かな?

現状でやりたいことを考えれば、sed、awkレベルでできることなのですが、
将来を考えるともうすこしパワフルなものをと思っています。
>>755 レスありがとう。
>>757
こんなんでどうかな? これにファイルとかのインターフェースを追加すれば。
(defvar *emb-lisp-start* "<?")
(defvar *emb-lisp-end* "?>")
(defun parse-emb-lisp (string)
(with-output-to-string (out)
(loop
(multiple-value-bind (prev code next) (divide-lisp-code string 0 (length string))
(unless prev
(write-string string out)
(return))
(write-string prev out)
(princ (eval (read-from-string code)) out)
(setq string next)))))
(defun divide-lisp-code (string start end)
(let ((c-start (search *emb-lisp-start* string :start2 start :end2 end)))
(when c-start
(let ((c-end (search *emb-lisp-end* string :start2 c-start :end2 end)))
(when c-end
(values (subseq string start c-start)
(subseq string (+ c-start (length *emb-lisp-start*)) c-end)
(subseq string (+ c-end (length *emb-lisp-end*)) end)))))))

(parse-emb-lisp "<html><? (if (zerop (random 2)) \"hello\" \"bye\") ?></html>")
=> "<html>hello</html>" or "<html>bye</html>"
760デフォルトの名無しさん:04/01/23 15:43
Lisp厨モードon

2chへの1回の書き込みくらいの分量のコードで、かなり実用的なアプリケーション
のそこそこに動く雛型ができる。ここまでなら、他のScript言語でも同様だが、
さらにこの雛型を作り込んでいくことで、実行速度を追求していったり、
またEmacs Lispとして記述すれば手軽に操作できる強力なGUIがまるまる手に入る
(>>759はcl使ったelispかと思ったよ)。そんなLisp系言語を君も1つはマスターしてみないか?
Lisp厨モードoff

ここで、こんな口上をまくしたてても意味無いか...
スクリプト言語もネイティブコードコンパイラをだれかが書けばいいのだし。
そういえばPerl6の基盤となる仮想機械のメーリングリストでJITコンパイラが
どうとか言ってたな。

EmacsもGraphicalかと問い詰められれば、Text based GUIですと苦しいこと言わなきゃ
ならんかな...
761デフォルトの名無しさん:04/01/23 15:50
    ハ,,ハ
   (・o・,,),,)〜 jpgってなんですか?nyってなに?

お願いします。教えてください
初心者の為、どのスレで質問すればよいのかわからないので
ここで教えてください









>>761
ここで質問すれば良いです
http://pc2.2ch.net/pcqa/

さようなら
763デフォルトの名無しさん:04/01/23 16:10
λ式をコンビネータに変換する方法を教えてください
LISPで
うかつにあげたおれがバカだったな。
バカだな。
766759:04/01/23 17:51
まちがえた、こうしないとまずかった。
(defvar *emb-lisp-start* "<?")
(defvar *emb-lisp-end* "?>")
(defun concat (&rest strings)
(apply #'concatenate 'string strings))
(defun eval-emb-lisp (string)
(eval (read-from-string (parse-emb-lisp string))))
(defun parse-emb-lisp (string)
(with-output-to-string (out)
(write-string "(progn " out)
(loop
(multiple-value-bind (prev code next) (divide-lisp-code string 0 (length string))
(unless prev
(write-string (concat "(write-string " (format nil "~S" string) ")") out)
(return))
(write-string (concat "(write-string " (format nil "~S" prev) ")") out)
(princ code out)
(setq string next)))
(write-string "t)" out)))
(defun divide-lisp-code (string start end)
(let ((c-start (search *emb-lisp-start* string :start2 start :end2 end)))
(when c-start
(let ((c-end (search *emb-lisp-end* string :start2 c-start :end2 end)))
(when c-end
(values (subseq string start c-start)
(subseq string (+ c-start (length *emb-lisp-start*)) c-end)
(subseq string (+ c-end (length *emb-lisp-end*)) end)))))))

(eval-emb-lisp "<html><? (dotimes (i 10) ?>hello<? ) ?></html>")
=> <html>hellohellohellohellohellohellohellohellohellohello</html>
>>760 これくらいなら eval のある言語なら何でもできるんじゃないの?
>>766
あんま本質とは関係ないけど、
>(eval-emb-lisp "<html><? (dotimes (i 10) ?>hello<? ) ?></html>")
S式の中で?> <?とか許すとread一発で読めないから不便じゃない?

(eval-emb-lisp #<<END
<html>
<?(dotimes (i 10) (echo "hello"))?>
</html>
END
)
みたいなのじゃだめなのかと。
上のだと<?が着た時点で(read)呼んで?>チェックするだけで済む。
CLHPもそんな無茶なことしてないみたいだし。
769756:04/01/24 00:30
>>757 emacs lisp でスレ汚ししちゃいます.すみません.
しかも,もっといい方法が定着してそうなネタですが,練習のつもりで
探さないで書いちゃいました.コードは恥ずかしいので,仕様だけ.

ファイル 0header には
<lisp>(set (make-local-variable 'section-counter) (make-vector 7 0))</lisp>
などバッファローカル変数を書いておいて,
<lisp>(insert-file "0header"></lisp>
<h2><lisp>(MY-html-h 2)</lisp> はじめに</h2>
みたいに使います.この MY-html-h はマクロにしてます.
関数 insert をマクロに含めるかはお好みで.
脚注を書きやすくするマクロとかも作りました.
<lisp> というタグが自分の html にあるだけで幸せになりました.

難点は,上から単純に一度しか走査しないので相互参照的なことはできないこと,
メタ的なこともできないことです.メジャー更新とマイナー更新で
日付を併記したいのに,方法が分からないんです.
>>768
> >>766
> あんま本質とは関係ないけど、
> >(eval-emb-lisp "<html><? (dotimes (i 10) ?>hello<? ) ?></html>")
> S式の中で?> <?とか許すとread一発で読めないから不便じゃない?

766 ではないのですが。escm が同じ仕様ですね。
確かに read 一発で読めないのは不自然といえば不自然な印象があるけれど、
たとえば、ファイルの先頭に let やら flet やらを置いて、全体なりセクションなりを
囲んじゃいたい、ていうことはそれなりにあり得そうな気がします。
あとは <?(when cond ?>...long description...<?)?> みたいにしたいときとか、
元からあった文章をあまりいじらずに使いまわしたい、というときには便利かなーと。
>>767
> >>760 これくらいなら eval のある言語なら何でもできるんじゃないの?
おっしゃるとおりです。Cとかを念頭に置いて書きました。比べる物が反則ですね。
たしかevalはLispが本元ですよね。Lispには便利な機能がつまってますね。

現在のLispにおいて、eval, GC, マクロ, generic function,
standard method combination, ... などのような便利な機能を
見つけていく実験的なこころみはまだ続いているのでしょうか?

私はML, Haskell方面に疎いんですが、これらの言語でも件のLispコードくらいの
ものをササッと書けるような、記述性はあるのでしょうか? 型宣言をするのが
面倒とかにならないのかな? すれ違いぎみかな。
Rubyのevalはストリングを実行できるけど、プログラムそのものをストリングと同様に扱う構造になっていないから中途半端だし、
LISP系のevalが一番好きだな。
というか自分で eval が簡単に作れるからな。S 式なんで簡単に特定用途のインタプリタやコンパイラが
作れてマンセー。かつて愛用していたハズの lex だの yacc はもう忘れちまった…といきたいが S 式に
変換するのに使うハメに。鬱だ。Lisp 用のパーサジェネレーターっていまいちイイのが無いんだよな〜。
パーサジェネレーターって昔はLispで書かれたものも含めて本当に数えきれないほどあったらしいね。
だからYet Another ccと名付けたと。
へぇーへぇーへぇー
>>773 なにしろ良いのが無いといってる漏れのディスクにも Lisp 製のやつ
だけで 3-4 個転がってるしな…。↓のようにどれ用だったか忘れて自分でも
使えないコードまである。これ何用だったかなぁ。性能的に C/C++ 製のやつ使っちゃうからなぁ。

(defparameter syntax-A
'((program --> statement program (lambda (s p) (cons s p))
:eof (lambda () nil))
(statement --> LABEL (lambda (l) (list :label l))
compound_statement (lambda (s) s)
selection_statement (lambda (s) (cons :selection s))
iteration_statement (lambda (s) (cons :while s))
expression SEMI (lambda (e s) (declare (ignore s)) (cons :expr e))
command SEMI (lambda (e s) (declare (ignore s)) (list :command e))
command argument_expression_list SEMI (lambda (e a s) (declare (ignore s)) (cons :command (cons e a)))) (primary_expression --> IDENTIFIER (lambda (id) id)
CONSTANT (lambda (const) const)
STRING (lambda (string) string)
LPAR expression RPAR (lambda (l e r) (declare (ignore l r)) e))
...))
>>776
> 使えないコードまである。これ何用だったかなぁ。性能的に C/C++ 製のやつ使っちゃうからなぁ。
この場合の「性能」というとたぶん実行速度ですよね?
やはり仕様が固まったら、Cで書き直すのが漢ですかね。

Lisp界隈の先生もそんなことをおっしゃっていたし。
その発言の年代を考えろ。昔はそうだろうが今は Lisp コンパイラの性能も良いからねー。
そもそも計算性能の向上で Lisp で 3D が楽々できる時代だし。
(↑Lisp マシンの時代からグラフィックスはあったけどさ個人で気軽にって話ね)
コンパイラをチューニング、GC まで用途に応じてカスタマイズしたら漢だと思う。
>>778
> その発言の年代を考えろ。昔はそうだろうが今は Lisp コンパイラの性能も良いからねー。
そんで、ネイティブコードコンパイラもイラネというスクリプト言語の隆盛を見るにつけて、
時代がLispに追いついたのかな。

Lispをネイティブ言語としたOSを書くというツワモノの現れてきているし、Lispウォッチャー
としては楽しみです。
http://www.common-lisp.net/project/movitz/
これいじった人いますか? コンパイラももう一応のものは書いてあるみたいなんだよね。
コンパイラの性能が上がったのか、マシンの性能が上がったのか
>>779
どうせBASICインタプリタ程度だろうと思って見たら
なんかかなり気合入ってますね。
>>780 どっちも上がってるだろ。Lisp マシンとちがってコンパイラが
がんがらなきゃならないのに結構な性能なんだから。まぁ、どっちかっ
つーとマシンの性能向上のほうがおおきいだろうけどさ。
ぐぐってたら CLISP で使える Weblog ツールを発見しますた。でも厨なので
動かし方がわかりません。とりあえずコンパイルしてロードしたけどダメポ…。
↓Windows だと簡単に使えるような事が書いてあるんだけど。教えてエロイ人!
ttp://cgi.at.infoseek.co.jp/lambda_list/cgi-bin/lambda.cgi?name=CommonLisp
>>783
ごめん。俺エロくないから教えらんないや。
>>783
そこのWin版、98SEじゃ起動しなかった。
kernel32.dllになんとかLink関数がないんだと。
つーか何に使うんだ?これ。
786デフォルトの名無しさん :04/01/25 05:02
あの、質問なんですが

>java -file-name.class

みたいに、コンパイルしたLISPファイルを実行させることって出来ない
ですか?環境はCLISP使ってます。
まずCLISPのマニュアルを読んでくれよな。
CLISPのマニュアルは何ででかいhtmlファイルが1つという構成なんだろうな?
俺の非力なマシンではページが表示されるまですこし時間がかかるんだよね。
マニュアルをブラウザの検索機能で一気に検索できるようにかな?
789783:04/01/25 13:14
>>785 そうでつか…。自分は FreeBSD なんですけど,一応起動はしてるみたい
なんですがブラウザで繋いでもなにもおこりません。blog.lisp 以外にも何か
要るのかなぁ。

> つーか何に使うんだ?これ。
Weblog ツールを探してたんですがちょっと Lisp に興味があったんです。
でたばっかりというのも新しもの好き心をくすぐったんですが、動かないんじゃなぁ。
まぁ blosxom でいいかぁ。お手数をおかけしますた。
>789 初心者あつかいして失礼かもしれないけどブラウザで"http://localhost/"じゃなくて"http://localhost:8080/"を見てるよね?
>>789
Windows meでは>>785と同じエラーでclispが実行不可能。
Linuxでは、
(ext:convert-string-from-bytes buf 'charset:iso-8859-1)
でエラーとなり、
(ext:convert-string-from-bytes buf charset:iso-8859-1)
と直してコンパイル、ロード、実行、ブラウズ、ウマー!!

起動手順を書いとくよ。
foo$ export LANG=en_US.ISO-8859-1 #bashね
foo$ clisp
[1]> (compile-file "blog")
...
[2]> (load "blog")
...
[3]> (blog:serve 8080)
server port: 8080
GET / HTTP/1.1
GET /file/default.css HTTP/1.1
Blogってアメリカではすごい流行っているみたいだね。
自分が使っているLispやSchemeで書かれたBlogシステムの感想をできれば、おながいします。
すこし興味があるので。
793783:04/01/25 15:26
>>791 Windows 用 zip をダウソしたら原因がわかりました blog.lisp 以外にも weblog
フォルダ内のファイルが必要(テンプレートとかスタイルシート)のようです。
なんとか動かす事ができました。どうやらまだ基本機能も揃ってない段階のようですね…。
想定してるのは Weblog + ネタ別のページ みたいなサイトなのかなぁ?

>>792 んではスレ汚しのお詫びに自分が調べた限りの事を。Lisp/Scheme の Blog に使えそうな
ツールというと他には(Wiki で blog というのも考慮すると)

* blog 用
- BlogMax : Emacs 用の blog ツール。(HTML)
* 改造すれば…
- EmacsWiki : Emacs 用の Wiki ツール。(HTML + iki + Lisp といろいろ)
- howm : メモツール。カスタマイズすれば使える。(いろいろ?)
- WiLiKi : 基本的に Wiki だけど blog 用にカスタマイズ可。(wiki)
- CLiki : がんがれば使えるかも…。(HTML + 独自の省略系)

でしょうか。
CLiki は動かすのマンドクサ。実質 SBCL 用なのかなぁ.
>>791 おかげで動かせた!! ウマー。まだこの wiki の使い方がよくわからないけど
とりあえず plugin フォルダあたりをのぞきつつ遊んでみまつ。
フリーの Common Lisp ってスレッドサポートしていないのが多いね。
サーバアプリとか作る時、皆さんはどうしてるのですか?
GNU CLISPくらい軽いのなら、子プロセスをその都度、立ち上げるというやりかたは無し?
Apache1ってそうじゃなかった? CLISPにforkはあるのかな?
つーか、スレッドがOSに存在しなかったときは、そのやり方が定石だったような。
selectはないの?

あ〜、だんだん思いだしてきた。Asynchronous IOということで、
aio_read, aio_writeもUnixにはあったよね。

今まであがったやつのどれかがLispレベルで抽象化されていれば話が早い。
>>796
select で足りないならスレッドサポート有りの SBCL を使う.それでも
ダメなら金を出して Allegro か LispWorks でも使うさ.

>>799
少なくとも CMUCL にはある.
>>796
ここの奴らは何も探そうとしないのか?
スレッドなんてCMUCLにもSBCLにもECLにもあるし、まさかこれらの実装をチェックしなかったとは言うなよ。

--以後の奴らに進言--
"○○はないの?"とかいう前にせめて
http://www.cliki.net/
くらい調べとこうぜ。こういう質問はここを当たれば一発で見つかるようなものが大半。
そしてここにないものは探してもないと思った方がいい。
clikiに載ってない情報はないの?
804795:04/01/28 19:12
blog.lisp を調べた結果をレポート

1 設定は blog.lisp の defclass <weblog> の :initform を書き換えるしかないっぽい。
2 テキストは *, **, *** が見出し -, --, --- がリスト {{{ から }}} までが <pre> ... </pre> に。
3 HTML の元になるファイルは data/days/, data/pages/ 以下にあるが、動作中に書き換えても表示は変更されないみたい
ソース読んだ限りでは data/files/ 以下のファイル拡張子に応じた Content-type で表示されるっぽい .png なら image/png とか
4 リンクは _(リンク) という形式
5 http://localhost:8080/publish にアクセスすると index.html にリダイレクトされつつ data フォルダ内に
静的な HTML ファイルが生成される。生成されるフォルダの指定方法は不明。
6 /(index :days) ←日記一覧を表示 みたいなコマンドは plugin フォルダ内の コマンド名.lisp で定義されている
7 /(search "Lisp") で "Lisp" という単語を含むページへのリンクが作れる。これで作った検索ページは
静的な HTML 生成時も生成されるっぽい。この例だと search_all+Lisp.html ってページができてた。
8 weblog 機能というのはどうやら /(weblog 3) とかやると 3 日分の日記ページが表示されるだけで
トラックバックとかアクセス解析とかコメント機能とかは無いっぽい。
9 文字コードとか改行コードを考慮している気配ナシ。

weblog というよりは wiki だと思う。CLISP で動くというのが貴重だな。
>>802
たしかに CL なら↓くらいチェックしたほうがいいよな。でもまぁ 2ch なんだしいいじゃないか。
http://www.cliki.net/
http://alu.cliki.net/
http://www.common-lisp.net/
>>804 ほほぅ。ちょっと試してみるかな。インストール以来初 clisp かも。
>>797-802
レスどうもありがとうございます。
やはり select や folk を使うのが一般的なのですね。Lisp ならではの hacky なやり方
がもしかしたらあるのかなと思っていました(Scheme の継続を使ったやり方みたい
な感じです)。

>>802
CMUCL, SBCL のスレッドサポートは x86 Linux 版のみのサポートと記憶しています。
Mac なら Open MCL はスレッドが使えます。これらを踏まえての >>796 だったので
すが、サポートしていないは言い過ぎでした。済みません。

Lisp は環境起動のコストが高いので、スレッドの需要は多いのではないかなと思って
いました。
808801:04/01/28 22:34
なんでそーゆう結論になるんだ?漏れは趣味なら select で十分だけど、
どーしても性能が必要だとか仕事なら商用の処理系使うっていってるんだYO!!
Apache + mod_lisp + cl-modlisp ならバックエンドの処理系は切り替えられる
からな。そもそもスレッドと継続ベース云々ってあんまり関係ないだろう。

あと >>807 CMUCL スレッドは Lisp レベルのスレッドなので x86 なら
Linux 以外でも使えるぞ。現に漏れは FreeBSD で使っている。
だいたい(推定)シェア No.1 な AllegroServe を見れは自明な話だと思われ。
>>808
ごめんなさい。フリーなってのが頭の中にあったもので。趣味の範囲でです。
それと Scheme のテキストに継続を使ったスレッディングの実装が載っていた
ので、Common Lisp も似た様な技があるのかなぁと思った次第です。
私は SPARC 使いなので、x86 版については間違っておりました。
継続でスレッドが実装できるからといって、処理系がスレッドを継続で
実装しなきゃいけないわけじゃないからな。CMUCL みたいに他の方法で
実装したり SBCL みたいに OS が提供してるスレッド機能を使ったりし
ても別に罰は当たるめぇ。Scheme 処理系だって継続ベースのスレッド
だけじゃないだろう。

まぁ継続と Common Lisp という話なら継続ベースの Web 開発しようとしてる
らしい UnCommonWeb あたりを調べればどうか。漏れは触った事ないが。
継続は、コンテキストを保存できるという意味でスレッド的に利用できる、というだけで
同時実行というスレッドの別の側面とは全く関係が無い
www.kahua.org/cgi-bin/kahua.cgi/kahua-web/
814デフォルトの名無しさん:04/01/29 14:21
WINでSCHEMEをやる場合、DR.SCHEMEをお奨めの方が
多い。しかし重い、かつ日本語も通らないとの不満も
聞かれます。そこで
ttp://www.scheme.com/petitecs.html
これと
ttp://www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/
この組み合わせは結構軽いし、日本語もOKです!
初心者には丁度良いと思いますが、如何でしょうか?
windows版のgclでコンパイルしたのって
exe形式に出来ないんですか?
Lispは基本的にはスタンドアローンで動かす言語じゃないような。
その意味ではpythonやperlと同類。

スタンドアローンバイナリを吐けるのは
[非フリー]
lispworks(たぶんProfessional以上)
ACL(Enterprise以上だし、配布のためにはflanzとの相談が必要なので非現実的)

[フリー]
CMUCLが実装中(CVSの方で一応手に入るが実用的になるのはもう少しかかりそう)

ということでPOSIX環境な漏れはCMUCLに期待。
ところで、KCLファミリー(GCL,ECLなど)はCにトランスレートできるということはスタンドアローンのバイナリが作れるってことなの?

#>>815の"exe形式"をスタンドアローンと解してレスしたが的を得ているのか自身がない
最近はやりの py... 言語 や r... 言語には
...2exe プロジェクトがあっていいですね.
>>816
多分cmuclはelfバイナリを一から作る構想なんだろうけど
Windowsならリソース使えばexe簡単に作れるよ
819816:04/01/29 20:10
>>818
そうなんだ。
Windowsの使用経験無し。
WCL がスタンドアローンバイナリを吐けるって聞いた様な気がする。
触ったことが無いので、実際どうかは分からないが。
> 最近はやりの py... 言語 や r... 言語には
> ...2exe プロジェクトがあっていいですね.

それらと競合するのはスクリプティング用途の Gauche とかだよね.
Gauche ってそもそも Windows じゃネイティブで動かないからなぁ.

>818
それって,まさかスクリプトをリソースに仕込んで実行してスタンドアロンマンセー
とかって話?それくれーなら CLISP あたりでプログラムをイメージに取り込んじゃえば
似たようなもんでは…まぁ CLISP じゃスクリプティングに使えねーか.
>>821
イメージをファイルの代わりにリソースから読むってだけだよ。
exe作成の仕方は、自身の複製を作ってリソースを書き換えるだけ。
どうせコアないと動かないし、VMベースならこれで十分じゃないかと。
SIODはリソースは使わないけどこれと似た様な方法。
本体 + イメージファイルに比べると exe + DLL の配布物のほうが Windows ユーザー
には好印象なんだろうな。すると例えば CLISP がスクリプティング機能の充実に走っ
たとしても勝ち目はなさそうだな。コンパイラ + イメージで配布したって使うだけ
のユーザーからすりゃ全然嬉しくないだろうしナー。
ちなみにSIODは既成のexeの後ろにイメージをゴミの様に付着させる方法。
イメージの開始地点は、exeにあらかじめ用意してあるマジックナンバー
から辿っていく。

LinuxとかUNIX系OSだとリソースって概念がないから、elfヘッダを弄る
以外はこの方法しかない。でもこれは実行時に自分自身のパスが
わからないとだめ(whichコマンドで探すなど)なので、あまり実用的
とはいえないかも。

Windowsではリソースを使えばそれを読むだけだし、
自身のパスはAPIで知ることができるので、この方法が簡単。
イメージをリソースに置いておけばUPXで後付け圧縮も問題なくできる。
↑判りにくい文章になったけど、SIODの方法ではUPXでの圧縮は無理。

それと、リソースの書き換え自体はAPIで行えるけど、
書き換えAPIはw9xだとunicode関係の問題で動かないので、
unicows.dllというファイルをMSサイトから取ってきて入れる必要がある。
826815:04/01/29 21:47
>>816
なにやら高度な話に発展してるところを水を差すようで恐縮すが、
聞いた話ではgclだと一度c言語に変換してからmingwinで
コンパイルしてるらしいので、リンクの仕方によってはdllとかexeに
できるのかなーと思ったんです。
つーか、Cにコンバートするの前提ならどうにだってできるだろ
CLISPに色々なアドオンライブラリを足した環境ってスクリプティングに向いている
気がするけどな〜。スクリプティングのためのドキュメントが不足気味なだけなのでは?

Windows環境におけるスクリプティングで、イメージファイルがDLLじゃなきゃイヤって
言い分は何かが違う気がする。
スクリプティングの話なんてしてたか?
夕べね。
>>823
あたりの話かな?
> コンパイラ + イメージで配布したって使うだけのユーザーからすりゃ全然嬉しくない
DLL とかよりこの辺が結論なのでは。exe 化ってのはこれで完成品ですよ〜という主
張なのであって使うだけのユーザーからすればコンパイラなんて無駄なものに見える
のではないでしょうか。

まぁ clisp はスクリプティング向け機能不足しすぎですよね。そもそも clisp 使った
スクリプトとかアプリケーションなんて見たことないですし。
> clisp はスクリプティング向け機能不足しすぎですよね。
以下は煽りじゃないですよ。
時間があったら具体的に不足している機能をちょっと思いつくまま
リストアップしてみてくれる?

俺が足りない分を書くから、って言ってしまうとウソになるけど。
んじゃ 831 じゃないけど御言葉に甘えて.

キラーアプリ(なんでもいいから),活発なユーザーコミュニティ(できれば日本語の),
便利なスクリプト,豊富なサンプル,充実したドキュメント,日本語ドキュメント,スレッド,
COM サーバー/クライアント,Perl 互換の正規表現ライブラリ(絶対標準にして!!オプションじゃ駄目),
HTML/XML パーサー,データベースアクセスライブラリ,もっと高水準なネットワーク API
(プロトコルレベルのサポート),GUI ライブラリ,CUI ライブラリ,Lisp で Web アプリ開発したい
んだよ,S 式を cons ツリーの EPS 図に出力する,Windows ユーザーに受け入れられるために必要な
インストーラー(開発環境とかも付いてくると嬉しい),Emacs + SLIME on Windows で CLISP が
使えるようにして,いいかげん gcc で CLISP のバイトコードをコンパイルしたいってのを実現してくれ,

うーむ,微妙に願望が混ってるな.漏れもハカー目指して努力はするけどさぁ.
> 活発なユーザーコミュニティ(できれば日本語の)
これがあれば、後は自然と解消されそうな課題だよね。
どうやって、人を集めるかだけど、Field of Dreamsじゃ
ないけど、だれかが土台となる十分な大きさの遊び場を
一人もしくは少人数で作り上げれば自然と人が集まって
くるかな?

だれかがPythonのユーザーを昔だったらLispにはまって
いたはずの人々の集まりって呼んでたけど、面白いね。
〜が使いたいから、Lisp って人が居ないのもアレなので是非 >>832 には
キラーアプリを頼みたい。今のところ Emacs か Maxima あたりかね?
どっちも一般受けしなさそうだ。Scheme で何かないかなぁ?
>>835
Emacsは既に一般受けしてるような。
i18nとかは16バイト文字圏の人間としてがんばりたいけど、Lisp本体をいじるほどにスキルがないのが漏れの悲しい現状です。

>>833
POSIX環境の漏れとしては
活発なユーザーコミュニティ(できれば日本語の) -> このスレじゃだめ?
充実したドキュメント -> 現状で十分だと思う
日本語ドキュメント -> これは少ないかも
スレッド -> ある
COM サーバー/クライアント -> 当然いらない
Perl 互換の正規表現ライブラリ(絶対標準にして!!オプションじゃ駄目)
-> cl-ppcreが事実上標準かな。
HTML/XML パーサー
-> http://www.cliki.net/XMLにたくさんある
データベースアクセスライブラリ
-> http://www.cliki.net/Databaseにたくさんある
もっと高水準なネットワーク API
-> 高水準がどの程度か知らんがhttp://www.cliki.net/Networkingにたくさんある
GUI ライブラリ -> http://www.cliki.net/Graphics%20Toolkitにたくさんある
CUI ライブラリ -> cl-ncursesぐらいしかない
Lisp で Web アプリ開発したい -> 先ほど話題になりましたね
インストーラー
-> Windowsユーザが望むインストーラがどんなものか知らないけどautomakeはだめなの?
Emacs + SLIME で CLISP が使えるようにして
-> Emacs + SLIME + CMUCL,SBCL,ECL......などなどほとんど全部OK
gcc で CLISP のバイトコードをコンパイルしたいってのを実現
-> CMUCL.SBCLなどの移植を期待する方が現実的だと思う。CLISPはネイティブコードを使うつもりはなさそうだし。
837836:04/01/30 17:19
あ、>>816です。Windowsに関して無知識ですみません
Window managerはSawfish(librep)。画像処理はGimp(Script-Fu)、
エディタはEmacs(elisp)、代数システムはMaxima(cl)、
CADはAutoCAD(autolisp?)、楽譜エディタはなんだっけな。
それにこれからのGNUのアプリのマクロ言語としてはguileが使われるし、
Lisp/Schemeってわりといろいろな所に顔をだしているもんだよね。
>>836
>automakeはだめなの?
これ、ソース媒体での配布しか前提にしてないから、
全く前提が異なる一般のWindowsユーザーには不向き。
>>833が言ってるのはsetup.exeで起動する様なものだろう。
この辺Windows知らないなら下手に語らない方が無難。
荒れるからね・・(w
Windowsの場合はFFI使えれば結構どうにでもなるので、
DLLやAPI叩ける様な入り口だけ用意してあげればいい気がする。

>>838
>それにこれからのGNUのアプリのマクロ言語としてはguileが使われるし、
実際そうなのか・・・?
なんか目立たないよねこれ。
そういや、gccの中間言語もLISPモドキだね。
GNUはLISP好きだな。

あと、AutoLispはまだ現役なのかなあ。
RolandのCakewalkもLISPだった。もう変わっちゃったか?
guileは遅いし、core以外のモジュールでGPL縛りがきつくて、
guileを使ったものは他で同様のものが作られたときに互換にならない予感。
ガーソ!! Windows 環境のつもりだった…でも CLISP の話だよな?
Windows 界でインストーラーといったら必要なもん全部セットで
ダブルクリック一発インスコこれ常識。あとから CLOCC とかダウソして
自力インスコとか言ってたらだれも使ってくれないよ…。

> 充実したドキュメント -> 現状で十分だと思う
CLISP のドキュメント?十分か?Python あたりのドキュメントと比べてみろ。

> COM サーバー/クライアント -> 当然いらない
Windows でこれがなきゃ WSH (標準でついてくるスクリプティング環境)以下なんだよ…。
UNIX しか考えなくて良いって幸せな人なら無くてもまったく不自由しないだろうけどさ。

> 高水準がどの程度か知らんがhttp://www.cliki.net/Networkingにたくさんある
ほほう。CLISP で使える HTTP や FTP すら見あたらないが。CLOCC の URI ライブラリとか
微妙に処理系によって使えないしな。現状ネットワークはソケットレベルのしか(フリーな
環境では)標準がないんじゃない?

> スレッド -> ある
あれ? CLISP に有るんだっけ?

> cl-ppcreが事実上標準かな。
それを CLISP で動かした事あるか?速度を測ってみたか?
GUI ライブラリも (tk 呼ぶ奴を除くと) どれ一つ CLISP + Windows では動かないし。

# UNIX 環境だと俺は GUI は OpenGL で済ませてる。McCLIM ってまだまだ実用段階
# じゃないっぽいし。
842836:04/01/30 19:59
>>841
あれ?CLISP限定の話だったの?
漏れは"POSIXの上で使えるLisp環境"について話したつもりだったんだけど。

>CLISP のドキュメント?十分か?Python あたりのドキュメントと比べてみろ。
一応cmuclのencyCLopediaとかは"十分"の名に値すると思うのだが井の中の蛙でしょうか。
http://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/

>ほほう。CLISP で使える HTTP や FTP すら見あたらないが。CLOCC の URI ライブラリとか
>微妙に処理系によって使えないしな。現状ネットワークはソケットレベルのしか(フリーな
>環境では)標準がないんじゃない?
>あれ? CLISP に有るんだっけ?
>> cl-ppcreが事実上標準かな。
>それを CLISP で動かした事あるか?速度を測ってみたか?
>GUI ライブラリも (tk 呼ぶ奴を除くと) どれ一つ CLISP + Windows では動かないし。
上の通りです。cmucl,sbclその他UNIX環境で一番良さそうな実装を使うということで。

あとcl-ppcreについては
CLISPは知らないけど、posix環境なら
http://www.weitz.de/cl-ppcre/#bench
という風になるので参考までに。
843836:04/01/30 20:07
"話の流れをつかんでいない"と言われそうなので言い訳しておくと、

Windows + CLISPに対する不満とか要求とか改善を図る案とか、WindowsのLisp環境に対する感想とか
を語っていたところに、posixのLisp環境なら....と口を挟んだというわけです。
841じゃないが、
おれはWindowsのexeとclispの話から伸びてきた話題だと思ってたが。
POSIXまるで関係ないし。
845836:04/01/30 20:09
>>842の訂正
× CLISPは知らないけど、posix環境なら
○ CLISPは知らないけど、CMUCL環境なら
846836:04/01/30 20:15
>>844
>おれはWindowsのexeとclispの話から伸びてきた話題だと思ってたが。
>POSIXまるで関係ないし。
そうです。その通り。しかし、
"Windowsのexeとclispの話から伸びてきた話題"
に対して"じゃあ○○の環境ではどうよ"という話を持ち込むのは
問題があるとは思えないけどな。

そういうことで、一応"posix環境では"と付けてレスしたのだが、これだと"posixのclisp"と勘違いされる可能性があったから
posixのLisp環境とか書くべきだったな。スマソ。
WinNT 系は POSIX 環境でわないんだらうか。。
>>847
該当しない。
互換ならcmuclも動くだろうしな(w
>>839
exe の流れでてっきり CLISP でスクリプティングって話だと…どうやら
漏れが妙な勘違いしていたようでスマソ。

> 一応cmuclのencyCLopediaとかは"十分"の名に値すると思うのだが井の中の蛙でしょうか。
> http://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/

MP とか Gerd's PCL とか dynamic-extent とか callback とかの資料は結局ソース
と ML しかないしなぁ。読み易さ調べ易さという点ではイマイチな予感。結局あちこ
ちにドキュメントがちらばってて ドキュメント と CLiki と ML を探しまわらなきゃ
ならないし。

実は CLISP でスクリプティングを試みた時期もあったんだが cl-ppcre は速度的に
厳しかった。cmucl だと速かったんだが,起動ダルーだし挫折しちゃったわけ。
CLISP 向けのアプリケーションとかなんかないの? ACL2 と Maxima くらいしか聞か
ないんだけど…
結局cmucl(または、そのようなもの)をWindowsへ
移植するか作るかすりゃ話は簡単っぽいな。
システムコール云々の問題だけなら希望があるし、
ネイティブコンパイラとコア部分だけを目標でも移植する価値がある。
保守GCが問題ならとりあえずとっぱらってもいいし。
とりあえずソースを読む気になるかどうかだな。
>>847
あれをPOSIXというのは無理があると思う。
規格を直接読んだことはないけど、間接的に読む限りでは
POSIXというのはそもそもUNIX間の互換性を保つために生まれたもので、
UNIXコマンドのオプションからシステムコールまで細かく規定しているし、
少なくとも一般的なUNIXプログラムが動かない環境はPOSIX失格かと。
Gauche って Win32 への移植とか視野に入ってるのかな?期待薄?
継続ベースの Web とかは人気でそうなんだが。
>>850
CMUCLを弄れるようになるのが俺の永遠の夢だ。
gaucheと言えばこんなインタビューがあったな。
http://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html
>>852
一応Gaucheはcygwinで動いてるから、
システムコール依存部分をエミュレーションしつつ
mingwやVC向けに書き直すだけじゃないかな。
作者はやる気ないみたいだけど、
VCに移植する話題をwilikiで見かけた。
CLISP自体があんまり壮大なアプリケーションを作るようになっていないような気がする。
バイトコードコンパイルだし。
CLISPでMaximaってのもスピード的に言うとpythonで数式処理をやるようなものだし、体感速度もcmuclに比べてだるい。
Lispに関係ないけど、UNIX使ってると周りにUNIX使ってる奴らしか見えないんだよな。
googleで検索したりしても何故かUNIX系サイト以外引っかからなくなったり....(もちろんそう思えるだけ)

昔はマカだったんですがその時も同様でした。
そうか…作者さんが乗り気じゃないんかぁ。

んじゃ前に出てた CLISP で Wiki ってやつでものぞいてみるか。Win9x で動かねーっ
て逝ってた香具師ら,なんとか動かす方法みつからんかね?9x で動く CLISP 探すとか。
Win9x 見捨ててるようではちょっとやる気でないんだけど。Zope までとは行かんでも
簡単に Lisp でちょっとした Web が構築できると面白そうなんだが… CLISP だと遅いのかなぁ?
よーし、パパUNIXに移行しちゃうぞー、と本当に計画中。
このスレッド伸びの速さのむらが大きいな。
今日はこれで33レス目だ。
>>856
CLISP ってそんなに遅いの?なんか最速スクリプトスレで CLISP で参戦してる人が居たけど…。
そりゃネイティブコンパイラに比べたら遅いだろうけどさ、使えないってほどでもないんでしょ?
みんなnativeなCommonLISPが欲しいんだよ
わざわざCommonLISP使うってことは大規模なのが多いし
ところでJITみたいな構想ないの?>CLISP
JavaVMにするとか
kawaってかなり速いよ?
>>861
>そりゃネイティブコンパイラに比べたら遅いだろうけどさ、使えないってほどでもないんでしょ?
もちろんpythonやperlが使えるのと同じにclispも使えるさ。

>>862
>kawaってかなり速いよ?
少し前のものとは言え、御世辞にも速いとは言えないような気が。
http://www.etl.go.jp/~matsui/javalisp/performance.html
コンパイラの速さに関しては参考の程度にこことか
http://www.bagley.org/~doug/shootout/craps.shtml
CMUCLはともかくbiglooってのもちょっと興味が出てきた(Cトランスレートらしいけど)。
CLISP メンテナの Sam タンのページの
http://www.podval.org/~sds/software.html
Tasks には
Add multithreading capabilities to CLISP; (see multithread.txt and xthreads.d for more information).
Add a native compiler to CLISP, possibly via a CLISP-bytecode front end for GCC. A related task is compiling CLISP bytecodes to JVM bytecodes, a la Kawa
Replace the Emacs-Lisp with CLISP in Emacs.
と並んでるから興味がないわけじゃないらしい。
現状の CLISP は漏れの中では "ポータブルな Common Lisp (CLOS付)" だけどナー。
>Replace the Emacs-Lisp with CLISP in Emacs.
こっちの方がウレピー!
CMUCLはMaclispみたいな"ハッカーのためのLispって奴か?"
xyzzyじゃダメなのか?
動かすのにxyzzyが必要じゃないか
xyzzyは"commonlisp風"な程度であって、commonlispの実装と言うのは無理があると思う。
例えばポールグレアムのANSI Common Lispを横に置いて、xyzzyを使って本を読み進めていくと
CLOS関連とか出来ないところが盛り沢山だし。
CommonLisp初心者スレ
http://pc2.2ch.net/test/read.cgi/tech/1075464728/l50
>スレの目的としては、
>
>本家スレは高度過ぎて質問しずらい。
>LISPやりけど、何していいかわからん。
>他いろいろ。
>
>な、初級LISPスレにしていきたいなぁ。
>本家スレは高度過ぎて質問しずらい。
>LISPやりけど、何していいかわからん。
>他いろいろ。

過去ログではANSI common lispの1,2章あたりの話題だってたくさん出てるし、別に高度な話に
こだわる必要はないと思われ。

>>873移行の奴らへ
初心者スレができたからといって初心者の質問がこのスレに来ても叩いたりするなよ。
873858:04/01/31 13:46
>>872 ダメなんだ。たとえ機能的に問題なくても xyzzy では作ったアプリ
の配布に問題がある。なぜなら "CLISP is freely distributable" だが,
xyzzy はそうじゃないからな。アレは Lisp 処理系というよりエディタなわけで。
UNIX はテメェで処理系インスコ汁で終りだが Windows 文化ではそーもいかないんだ。

でも漏れ XP だから 9x で動かね〜って香具師に対応できん。せめて
作者に連絡するとかエラーメッセージをもっと詳細に書くとかしてくれ。
なんとかLink関数ではわからん…。
874872:04/01/31 14:44
>>873
へ?
>>873 え〜とね。blog.batをダブルクリックすると、
"プログラム開始エラー
LISP.EXEファイルが
リンクしているエクスポート KERNEL32.DLL:CreateHardLinkA は見つかりません。"
だって。

そんで、Cygwin版Clispをblogディレクトリでbashから起動して、
(load "start")したら、IE6が立ち上がって、表示できませんと
IE6がエラーを表示した。念のため、Mozillaで見たら、正常に表示
できました。うまく動いているみたい。

Windowsでは
(ext:convert-string-from-bytes buf 'charset:iso-8859-1)
のままでエラーは発生しなかったな。
>>873 スマソ。>>868 への誤爆だ。
>>875 うーむ CreateHardLink が Win9x で未サポートなのか。名前から
して NTFS 用っぽい API だもんな。漏れが試してるのは昨日ダウソした
やつだけど
$ strings lisp.exe |grep CreateHardLink
で何もヒットしないんでリンクしてるように見えないんだがなぁ。
877875:04/01/31 15:15
あっと、俺が試したのは、このスレで話題になったころのWindows用の配布ファイルね。
今の配布ファイルがどうかは、わからない。
878875:04/01/31 15:18
foo/blog$ strings lisp.exe |grep CreateHardLink
CreateHardLinkA
foo/blog$
作者さん直したのね。最新のもので調べればよかった。生まれてごめん。
>>878
>生まれてごめん。
おい、お前が居なかったら地球上のlisperが一人減ったんだぞ。
880858:04/01/31 15:52
>>878 気にするな。配布物に入ってる開発日記見てもそれらしい記述がないから
おそらく作者も直したつもりはないと思われ。今 clisp-2.32-win32.zip をダウソ
したところ base/lisp.exe と full/lisp.exe の二つがあって後者が CreateHardLink
をリンクしてるっぽい。で,最近のは前者が入ってるので平気なだけって事だ。

盛れは Windows は XP しか無いので Win9x が試せないんだよな〜 Web ブラウザが
起動できるなら HTML をインターフェースにして動きのないゲームくらい作れそうだが。
みた感じ blog.lisp にはセッション管理がないからその辺から作らないとだめかなぁ。
Scheme 初心者ですが、
((1 2 3) (4 5 6) (7 8 9)) => (12 15 18)
というように、各リストの要素毎の総和をリストで得る
いい方法ってありますか?

何回か試行錯誤して、今では
(let1 list '((1 2 3) (4 5 6) (7 8 9))
(fold (cut map + <> <>) (make-list (length (car list)) 0) list))
というような形になってますが、もっとシンプルにできないかと...
(apply map + '((1 2 3) (4 5 6) (7 8 9)))
>>882
あーなるほど! どうもありがとうございます。
基本的なことがわかってませんでした。
初心者スレを追い出されたのでここで。

シンボルが関数用と変数用の値を持ってるなら
レキシカルスコープはどうやってやるの?

実装をどうするのかって話なんですけど。
>>884
symbol-valueは主にグローバル変数を実現するためのもので、
レキシカルスコープによる局所変数を実現する方法は別にあります。
これは他の言語と同じ様な、スタックなどに確保されたローカル変数の
ための一時的なメモリ領域のことですが、LISPのレキシカルスコープを
理解するには、環境とフレームの仕組みをよく理解する必要があります。
フレームとはC言語などと同じく、関数毎にスタックで消費する一時計算用
の領域でですが、LISP(やScheme)ではこれにクロージャという概念が入り、
その一時的な領域を特別な処置なしにどこにでも持ちまわれるのが大きな
違いです。
このフレームの連なりをLISPでは環境と言い、環境はトップレベルを基点に、
関数を呼び出したりletで束縛することで末端で伸び縮みしていきます。
環境の実現方法は色々ありますが、概念的にはみな同じです。
一般的にリストでの表現が単純なので、これを使って説明します。
環境の構造はlambdaやletなどで作成したフレームを繋げたリストで、
各フレームの中には束縛(変数名と値のペア)が入ります。

束縛 (変数名 . 値)
フレーム (束縛 束縛 束縛 ...)
環境 (フレーム フレーム フレーム ...) → トップレベル

レキシカル変数の参照は、この環境を先頭からトップレベルに向けて
探していくことで行います。
実際の処理系では、フレームを配列にするなどして、コンパイラで
位置をあらかじめ特定しておき検索を省いたり、と効率の良い事を
やっています。

あとは、実際の処理系のソースとかSICPとか論文とか読んで。
レキシカルスコープでもsymbol-valueを見るだけで済む方法があるわけじゃないのね。
>>886
885の言ってる説明はdeep bindingって呼ばれてる方法ね。
他に、スコープが変わるたびにsymbol-valueの値をすげかえる
shallow bindingという方法もあった。dynamic scopeだと
環境リストは長くなりがちなんで、deep bindingよりshallow binding
の方が性能が良かったらしい。lexical scopeだったら環境リストの
どこを見れば良いかがコンパイル時に決定できるから、shallow binding
をやる意味はあんまりないかな。

http://citeseer.nj.nec.com/baker78shallow.html
888デフォルトの名無しさん:04/01/31 21:21
Scheme本探してたら Amazon でこんなん見つけたけど、読んだ事ある人いる?

「Exploring Computer Science With Scheme」
http://www.amazon.co.jp/exec/obidos/ASIN/0387948953/ref=sr_aps_eb_/249-8198805-4085925

「Programming and Meta-Programming in Scheme」
http://www.amazon.co.jp/exec/obidos/ASIN/0387983201/qid%3D1075551497/249-8198805-4085925

洋書だからさ、たぶん読むのにすんごい時間かかると思うんだよね。ってか途中で挫折する可能性の方が高いか(w
時間かけて読む価値あるならいいけど、ダメ本だったら...

読んだ人どんな感じだったか教えて欲しい。
教えて君で申し訳ないのですが、、
(let ((lsta '(a b c))
(lstb '(d e f)))
(setf (car lsta) (cadr lstb))
lsta)
を、car, cadr について一旦変数において、下のように処理したいのですが、
エラーとなり、上手くいきません。どのようにすればいいのでしょうか。。
(let ((lsta '(a b c))
(lstb '(d e f))
(opa #'car)
(opb #'cadr))
(setf (funcall opa lsta) (funcall opb lstb))
lsta)
>>889
setf はマクロだからね。

色々やりかたはあるだろうけど、
(let ((lsta '(a b c))
(lstb '(d e f))
(opa #'rplaca)
(opb #'cadr))
(funcall opa lsta (funcall opb lstb))
lsta)
漏れはこっちを押すぜ。setf nth を使って、opa をインデックスを
返すように仕様変更すれば何番目でも大丈夫ですよ。
(let ((lsta '(a b c))
(lstb '(d e f))
(opb #'cadr)
(opa #'(lambda (lst) (random (length lst)))))
(setf (nth (funcall opa lsta) lsta)
(funcall opb lstb))
lsta)
>>891
(let ((lsta '(a b c))
(lstb '(d e f))
(opa #'(lambda (lst val) (setf (nth (random (length lst)) lst) val)))
(opb #'cadr))
(funcall opa lsta (funcall opb lstb))
lsta)
s/押す/推す/
>>890-892 ありがとうゴザイマス。出来ました。
>>890 仕様書によると、一般的な関数 f については、setf マクロの展開は以下の様になってました。
(setf funcall) ってのが評価できなくてエラーとなってたんですね。。
(setf (f a1 a2 a3 ...) val)
=>
(let ((#:t1 a1)
(#:t2 a2)
...
(#:t0 val))
(funcall (function (setf f)) #:t0 #:t1 #:t2 ...))
895デフォルトの名無しさん:04/02/01 10:50
HyperSpecに書いてあるけど、関数(setf f)を呼ぶのは、defsetf, define-setf-expanderを
使ったsetf expanderの定義がないときだよね。

(setf f)関数を定義することで自分のやりたいことが実現できるなら、気にする必要はないけど。

でも、関数の"名前"が(setf f)って何か違和感があるな。
初心者スレで CL はスクリプティングに向いてねー。という話が
でてるけど、俺の見るところでは CL はスクリプティング用途として
は正規表現、ネットワーク、GUI 等が「気軽に」揃わない時点でダメポ。
インスコ一発とかできるじゃんとか、処理系毎にあるじゃんとか、そーゆ
うんじゃねぇんだ。スクリプト言語にはそれらは「標準で」あるべき
だと思うわけ。
>>896
> 俺の見るところでは CL はスクリプティング用途として
> は正規表現、ネットワーク、GUI 等が「気軽に」揃わない時点でダメポ。
ここでは「気軽に」が一番のキーワードということだよね?
つまり、だれかがパッケージングをやってくれればいいんだよね?
例えばDebianだと、色々なCL関連パッケージ(117種類!)が"cl-XXX"
みたいな名前で複数コンパイラに対してインストールから
コンパイルまで自動でやってくれるけど。apt-get install cl-pdf とか。

> スクリプト言語にはそれらは「標準で」あるべきだと思うわけ。
1言語=1実装ではないので、何を標準とするかで議論があるけど、
配布ファイルに含まれているかということだと、この議論は実は
Perlでもさんざんやられたものだよね。俺の使うパッケージを
最初から配布ファイルに入れてくれって。
>>897 そう。で、asdf-install だの apt だの ports だのなんでもいいけど、
追加しなきゃいけない時点で標準でついてくる、とはいえない。大抵のスクリプト
言語は必要な機能はついてくるだろ?こーゆうのはおもちゃについてくる電池みたいなもん。
Gauche みたいにこの辺意識した CL 処理系は(少なくとも今のところ)存在しないじゃん。
>>898
> こーゆうのはおもちゃについてくる電池みたいなもん。
たしかに、電池がついてれば便利だけど、電池が付いているかどうかで、
買うおもちゃを決めたりはしないでしょ?

ここらへんは、だれが土方しごとをするかみたいな話で、ユーザコミュニティ
が育ってくれば、自然とみんな楽したいから、いろいろ考えると思うよ。
だから、aptやasdfもあるんだし。
>>899
> ユーザコミュニティが育ってくれば
…お察しください

次スレ立てました

LISP Scheme Part10
http://pc2.2ch.net/test/read.cgi/tech/1065535118/2-




(gc)
>>901
次スレ乙
そして二度と来るな
よし、GNU CLISPに使えそうなライブラリをネットからダウンロードして
インストールしてくれるインストールスクリプトをCommonLispで書こう。
Windowsで動くといいかもね。Meadow2はネットインストーラがあるし、
ilispインストールスクリプトもついでに書いちゃうか。.ilispもつけよう。

....という神が1人いればいいのですね。
>>900
> > ユーザコミュニティが育ってくれば
> …お察しください
少なくともユーザが減っているとは思えないよ。いつを起点とするかによるけど。
神がいないんなら、みんなでやろう。
メジャーになったらLispじゃない
実はもうとっくにメジャーになっているという罠。AIバブルも経験したし。

英語はまったく分かりませんという人が、1〜10まで英語で数えられるし、
「はい」、「いいえ」も言えるようなもの。
メジャーになっていると言うか"メジャーになった時代があった"じゃないか?
>>896-898はある意味Lispの本質を突いてるような気がする。
つまり、perl,python,rubyなどとLispが決定的に違うところは
"仕様≠実装"って所なんだな。
前者は開発者のコミュニティが実装して行く中で仕様が出来てくるし、基本的には一つしか実装がない。
しかし、Lispの方はたくさんの実装があって、それらの統一性を図るためにANSIやISOの規格が出てくる。
その意味では、LispはC,fortranなどの言語に近い存在であって、スクリプティングをするために
作られたものではないことは確かだし、本来的に向いているとも思えない。

で、話が微妙に変わるが、
>asdf-install だの apt だの ports だのなんでもいいけど、追加しなきゃいけない時点で標準でついてくる、とはいえない。
ってのは俺は反対だな。標準かどうかの基準を"(インストールの)コマンドを1回入力するか2回入力するか"で決めるなんて馬鹿らしいと思わないか?
g++とlibg++.soが別々のパッケージになっていたら(現にほとんどのLinuxではそうなっている)、"LinuxでC++を使うと標準でstringも使えない"なんて言っても誰も相手にしないでしょ。

しかも、>>898の基準で標準を決めるとするとdebianの中に
#!/usr/bin/sh
apt-get install cmucl
apt-get install uffi
と書かれた.shファイルが入っていれば"uffiは標準"とみなされることになるわけだし、自分が変なことを言っていると思わないか?
>>910
なにか誤解があるようだな。少なくとも俺基準ではそれじゃ全然標準じゃない。
俺が言いたいのは、「どこの環境でもあると仮定しても大丈夫」というくらいで
なきゃ標準でないと言いたいのだ。apt-get なんちゃらで簡単に入るYO! と言ってる
香具師、そりゃお前らだけだって事。漏れは嫌々ながら Windows も触る機会が多いん
だが、あそこじゃ apt も ports も何もねぇ。自分が簡単にインストールできるから
他の人も簡単ってわけじゃねぇんだ。(結局スクリプティングには Python に頼ってる。
多言語サポートや Windows 向けの COM 周りのサポート等たいしたもんだ)
例えば Python なら正規表現の re モジュール、Gauche なら組込み正規表現は完全にアテにできる。
だが、Common Lisp でそこまでアテにできる正規表現パッケージは無い。同様の事がネットワーク関連
やファイルシステム関連にも言えるのでスクリプティングには向かないと言っているわけ。
スクリプトなんて自分が使えればいいじゃないか。
おっと、そーゆうつもりじゃないんだ。ただ初心者に〜みたいなスクリプト言語
より良いですよ、と勧めると後々その辺でガッカリさせるんじゃないかと心配なだけ。
CLISP 用とか環境決めうちでスクリプト用にチューニングとかも面白いかもね。
ディレクトリツリーへの操作用 API を用意するとかして。
>ただ初心者に〜みたいなスクリプト言語より良いですよ、と勧めると後々その辺でガッカリさせるんじゃないかと心配なだけ。
なんだ。自分の問題じゃないじゃん。逃げの手か?
>「どこの環境でもあると仮定しても大丈夫」というくらいでなきゃ標準でないと言いたいのだ。
じゃ、一般のディストリに含まれているかどうかが微妙な言語(=Lisp)は最初からダメじゃん。
>>915
Gauche さえ入れれば、とかなら他の言語と大して変わらん気がするが。

>>914
そもそも
> 初心者スレで CL はスクリプティングに向いてねー。という話が
という始まりだろ?無論個人的には使ってるよ。RSS 読ませたりとかメール
を整理したりとか。でも他人にオススメできるかというとねぇ。XML パーサー
一つとっても好みがあるだろうし。ソースも #+clisp #+cmu とかの乱発だし。
んじゃスクリプティングに向いてるところってどのへんよ?
それほど強固に主張する気もないので、あっさり宗旨替えするよ。
schemeユーザとして口を挟ませて頂くと"Gauche なら組込み正規表現は完全にアテにできるから標準"という主張は自己矛盾かと。
正規表現は「schemeのどこの環境でもあると仮定しても大丈夫」ではないし、gaucheで書いたスクリプトが別の環境(例えばbigloo)で動くかどうか考えてみたらどうだ?
918910:04/02/01 18:31
>んじゃスクリプティングに向いてるところってどのへんよ?
いつのまにやら、俺はLispがスクリプティングに向いていると主張しているになってしまったらしいw
>>910でLispはスクリプティングには向いていないと言っているぞ、俺は。

俺が変に思ったのは、
>追加しなきゃいけない時点で標準でついてくる、とはいえない。
というところなのだが。

だから Scheme と言わずにちゃんと Gauche って書いてるじゃん。
残念ながら CL にはそこまで割り切ったスクリプト用処理系がない
んだとも。Gauche みたいに組み込み正規表現だのネットワークだの
を備えた処理系があれば文句なくそれをオススメするとも。
誰がどの意見なのか他人にはわからないぞ。
これってUNIX限定の話ですか?
Windowsにはperlやpythonとか最初は何も入ってないけど、
大体setup.exe一発で入るよね。
で、そういった物でも、Web上に転がっている(主にUNIX向けに書かれた)
スクリプトを読ませても、プロセス関係に強く依存してない限りは動く。
ああいうスタンスの処理系が欲しいね。

しかし言語仕様に含めるとかなると今更な気もするし、異論反論でまったく
話が進展しない。多分俺らが生きてるうちは無理だろう。



結局、その辺は妥協して、UNIXとWindowsでそれなりに動作保証が
なされている、「特定の処理系」に落ち着くと思う。

この辺はLISP界ではまだまだ未開拓分野だから、早い者勝ちだぞ?
そのうち「スクリプティング用途のLISPといえば〜ー択だな」
と言われるかもしれない。
>>918 誤読スマソ。。。その辺は漏れがおかしいかもしれん。
処理系入れたら一緒についてくるやつ=標準でついてくるやつ
というのはひょっとしてあんまり一般的でないのか? Debian な方面では
apt-get するやつも標準って言うの?
>だから Scheme と言わずにちゃんと Gauche って書いてるじゃん。
>残念ながら CL にはそこまで割り切ったスクリプト用処理系がないんだとも。
じゃあ、結局のところ正規表現パッケージを追加して自分のパッケージを作れば解決する問題と。
ということは、俺がcmuclのcoreに(例えば)cl-ppcreを追加して2chclとか何とか名付けて配布すればOKですか。
>Debian な方面ではapt-get するやつも標準って言うの?
portsもrpmもtarballもdpkgもディストリビュータがisoイメージに含めてる奴は標準じゃないのかなあ。
SchemeではGaucheがその点良い感じだけど、
Windowsでのサポートがまだまだだ。
(バイナリの配布も無いし、cygwinでたまたま動いたというレベルだ)
ちゃんとWindowsもサポート視野に入れれば、
今のご時世では
「スクリプティング用途のSchemeといえばGauche一択だな」
ということもありえる。
スクリプティング用途のlispか。漏れはどちらかというとLispをC/C++,Javaあたりと同類と思っているので
考えたことがなかったな。
話をごっちゃにしてるやつがいるが、
apt-getなんてLinuxの、さらにDebianという、
狭いとこでしか流通してないし、
ここで議論すべき「標準」ってそういうことじゃないだろ。
とりあえずCommonLispに絞ろうよ。
で、どのレベルで正規表現とかをサポートしてれば
スクリプト言語として薦められるのかって話でしょ。

言語の規格でサポートしてればいいのか。
ある処理系には絶対あるからその処理系を使えばいいのか。
ポータブルなライブラリならあるから何とか入れて使えばいいのか。
処理系が限定されるライブラリを入れればいいのか。
>>924
そうか…なら俺がキティな妄言を吐いていたようだ。正直、スマン。
>>928
EmacsのelispをCommonLISPにreplaceすればいい。
というのは冗談としても、それぐらいのパワーはいるな。
とりあえず、そろそろ次スレ立てる時期でもあるので、
参考リンク関係で何か新しいのがあったら貼ってちょうだい。
>ある処理系には絶対あるからその処理系を使えばいいのか。
これフリーな CL には一個もないだろう。CLISP のモジュールは入ってたり入って
なかったりとアテにならんし。
>ポータブルなライブラリならあるから何とか入れて使えばいいのか。
で、ネイティブコード吐く処理系なら CL-PPCRE で全く問題ないけど、CLISP はダメポって話だろ。
だから Gauche なら勧められるが(今は) CL 系は全滅だと主張してる香具師がいると。
933923:04/02/01 19:05
>>932
>>923の俺の意見はどう思う?
アップロード時間を除けば10分とかからないぞ。(要するに標準じゃないってのはその程度の問題ってこと)
Schemer って Gauche の独自拡張とかどう思ってるの?
ひょっとして賛否両論あったりするわけ?

スクリプト用ならディレクトリへの操作なんかは
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/161542
みたいなジェネレータ(あるいは相当品)が欲しいよな〜。
Scheme とか CL で作れるかな?
932じゃないが、
cmuclはWindowsで動かない時点で「スクリプト標準」とは程遠いかと。
移植してくれるならともかく。
>cmuclはWindowsで動かない時点で「スクリプト標準」とは程遠いかと。
じゃUNIXのLispスクリプト標準ということにすれば問題無しと。
>>933
それを標準だと呼んで他人に勧められるとは思わないね。
Linux 用と銘打ったアプリケーションをダウソして CMUCL のイメージファイルが
出てきたとき、俺は全く嬉しく無かったとだけ言っておく。
そーゆうのは誰でも使える、とか標準、とかの前に「俺と同じ環境なら〜」
ってのを忘れてるんじゃないか?
ハハハ、UNIX厨とは会話にならないや
>>934 マンセー。はやく FFI つかないかなぁ。正直 Guile はちょっと。
Windowsユーザにしろ、UNIXユーザにしろ、自分の環境が当り前みたいな意識があるから
話が噛み合わないのかと。
>>937
じゃ、色々な環境用にcoreファイルをビルドすればOK?
>>941
どっちにしろWindowsじゃ...ってことになるんだよな。
で、CLISPを使うとcl-ppcreなんかが遅いと。
なんかLispの分野ではWindowsの方が不利なような。
今日はこれで51レスだな。Lispにしては人多杉。
括弧少那杉
他のスクリプト言語は仕様を後付けに出来る強みがある。
perl,python,ruby辺りはまず実装ありきだからな。
バージョン変わって何か変更しても「新しいの使え」の一言で済むし、
MLの意見ですぐに実装へ取り込む柔軟性も見逃せない。
だから>>921の言う「特定の処理系」に的を絞るのが一番近道なわけだ。

CLISPでもスクリプティング言語としては十分速い実装だし、
スクリプティングに必要であるべきモジュールを組み込みで
いくつか作ってけば一番早く形になる気はする。

何にしろ、CommonLISP処理系をメンテ出来る人間が必要だな。
>何にしろ、CommonLISP処理系をメンテ出来る人間が必要だな。
それが一番の問題だなw
オレニマカセロ!
でさ、なんに使えばいいんよ。OpenGLとか?
自分の道具は自分で磨け。
950だし貼っとくか。


次スレ
CommonLisp Scheme Part10
http://pc2.2ch.net/test/read.cgi/tech/1075630259/
CommonLISPを実際に使えるレベルまで作った香具師って
日本でどれぐらいいるかな。
xyzzyレベルでも結構な工数だよな。
中途半端な独自LISP作るぐらいならSchemeへ流れる、
って人が多いんじゃないだろうか。
処理系を乱立させずに、既存の処理系に手を入れていけばいいんでない?
次スレも含めると夢の"一日で100レス"まであと24レス、お前ら頑張れ。
>>952
俺無理。cmuclの国際化を志したが簡単に挫折した。
>>951
GNU Common Lisp(GCL)って日本製じゃないの?
>954
志は低くもて
xyzzyもウィンドウ開かないモードとかあれば、
スクリプト用として使えるんだけどなぁ…
今までパッケージインストールしてたんで気付かなかったけど、CLISP には
--with-threads=FLAVOR なんてコンフィグオプションがあったんだね。
(ビルド通らなかったけど・・・)
次スレに移動お願いします
LISP Scheme Part10
http://pc2.2ch.net/test/read.cgi/tech/1065535118/2-
何で急に書き込みの量が増えたの?
LISP Schemeスレの パート1〜8までのdatファイル
持ってる方 いただけませんでしょうか?
>>960
ログ嫁。

皆さんお疲れ様でした。
   _、_
.∩( ,_>`)
(ヨ )

また来いよ、待ってるぜ!
964961:04/02/01 23:18
datが欲しかったんですが・・
>>964
HTML2DAT
966デフォルトの名無しさん:04/02/02 01:23
2ch閉鎖したら、nifとかのBBS系サービスがまた台頭するかな。
ム板の様な技術的な話題なら、匿名性がないぶん、あっちの方が
まともな話し合いが期待できる。
>966の内容見た限りでは第二の2chが生まれるだけかもしれないけど。
1chが台頭する
Lisp & Scheme スレッド
http://1ch.tv/thread.php?th=663&ar=4&ca=1

2年以上前からスレ立ってるYO!!
>>969
人いねー
あと30回もカキコできないよ。誰か埋め立ててよ!
ワーニング
((call/cc call/cc) (call/cc call/cc))
>>973
無限ループ
てか解説よろ
これじゃ面白くないんですか((call/cc call/cc) (lambda (a) (a))
>>975
ごめんちゃい、これはどうですか
((call/cc call/cc) (lambda (a) (a a)))
((lambda (a) (a a)) (lambda (a) (a a)))
((call/cc (lambda (c) (print 1) (call/cc c)))
(call/cc (lambda (c) (print 2) (call/cc c))))
=>
1
1
1
1
...
1 2 1 2かとおもったよ。
((lambda (x y) x) 0 ((lambda (a) (a a)) (lambda (a) (a a))))
スレの要点をまとめててリンクとFAQもある(になる)wikiが欲しい…
と我がままを言ってみるテスト。
Common Lisp 用の日本語ライブラリって無いのかな。
>>981 その辺の話が微妙に新スレにあるね。
>>982 日本語ライブラリって?文字コード変換とか?
>>983
文字コード変換もそうですが、locale 見て aref とか length の挙動を変えてくれると
嬉しいです。