Common Lisp, Scheme Part 14
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/11/18(金) 10:02:06Part1: 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://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: http://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: http://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part11: http://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part12: http://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part13: http://pc8.2ch.net/test/read.cgi/tech/1115901841/
0357デフォルトの名無しさん
2006/01/19(木) 16:18:33つ http://members.at.infoseek.co.jp/maruheso/aadic/ta.html#tu
0358デフォルトの名無しさん
2006/01/19(木) 16:21:020359デフォルトの名無しさん
2006/01/19(木) 17:00:000360デフォルトの名無しさん
2006/01/22(日) 18:00:18みなさんどうしてますか。
今のところ scheme-mode + run-scheme なのですが、
- 関数のeldocぽい表示 and/or info参照
- 動的補完
が欲しいなあと。
Common Lisp用のSLIME並に快適便利なのがあると言うことなしですけど。
0361デフォルトの名無しさん
2006/01/22(日) 21:05:48http://lambda.s55.xrea.com/Scheme.html
0362デフォルトの名無しさん
2006/01/24(火) 22:19:53どっかに continuation の各種実装方式あたりを集めてあるサイト
ありませんかぁ???
0363デフォルトの名無しさん
2006/01/24(火) 23:01:400364デフォルトの名無しさん
2006/01/24(火) 23:29:07こことか。
http://library.readscheme.org/page6.html
Smalltalk にも継続があるのは知らなかった...
http://en.wikipedia.org/wiki/Continuation
0365デフォルトの名無しさん
2006/01/25(水) 01:36:43実装に興味あるならこことか。
http://www.shiro.dreamhost.com/scheme/stack-j.html
0366デフォルトの名無しさん
2006/01/25(水) 03:49:44http://www.franz.com/products/allegrocl/
常々思うのですがパンピーに買える値段なんですかね。
Lispworks 5.0が2Qにでるってことだったがあてになんないよなぁ...
0367デフォルトの名無しさん
2006/01/25(水) 08:12:49ありがと.
0368デフォルトの名無しさん
2006/01/27(金) 00:53:11知らなかった。
わかりやすいページでつね。THX
0369デフォルトの名無しさん
2006/01/28(土) 23:33:10会社を騙して買わせる。これ。
0370デフォルトの名無しさん
2006/01/29(日) 10:47:530371デフォルトの名無しさん
2006/01/29(日) 11:38:570372デフォルトの名無しさん
2006/01/29(日) 11:50:570.10.0 が出る頃には Linux 以外でもネイティブスレッドが使えるようになると良いね。
0373デフォルトの名無しさん
2006/02/01(水) 21:21:34http://alcor.concordia.ca/~smw/home/telnet_song.html
0374デフォルトの名無しさん
2006/02/01(水) 21:44:33曲のタイトル見てRMSを彷彿とさせる物を感じた俺はチキンかもしれない。
0375デフォルトの名無しさん
2006/02/04(土) 17:05:46(define (new-counter)
(let ((count 0))
(lambda ()
(begin
(set! count (+ count 1))
count))))
この(new-counter)手続きは評価されるたびにその回数を返すらしいのですが、それはどうしてですか?
0376デフォルトの名無しさん
2006/02/04(土) 17:21:420377デフォルトの名無しさん
2006/02/04(土) 17:27:46詳しく言うと、
(define counter (new-counter))
(counter) ; 1が返ってくる
(counter) ; 2が返ってくる
ということ。
countという変数(正確にはcountの束縛)はnew-counterが呼ばれるごとに新しい物が作られる。しかし内側の(lambda () ...)が参照する限り削除されない。
0378デフォルトの名無しさん
2006/02/05(日) 03:45:48>375-377 を読んで感動しました。
関数を作る関数を書けるなんて!
0379デフォルトの名無しさん
2006/02/05(日) 07:46:43実装レイヤでは関数を毎回コンパイルして機械語にしている訳ではないからね.
「環境」だけが毎回新しく作られる.
環境ってのは,naiveに言えば変数名をキーとしたハッシュ表ね.
まぁSICPでも嫁.
0380378
2006/02/05(日) 09:43:310381デフォルトの名無しさん
2006/02/05(日) 12:17:34環境(少なくともローカル)はハッシュじゃないんじゃないの?
引数フレームのリンクリストみたいな感じで。
SECDマシンの LD命令みたいに深さとインデックスでアクセスできる。
トップレベルはハッシュでもいいけど。
勉強でScheme の処理系を作ってるんですが、GCについてよい論文はあるでしょうか?
全オブジェクトの数に比例する Mark and sweepよりも
生きているオブジェクトの数だけに比例する Copyingの方がいいとか
Mark and sweepはインクリメンタルにできるからいいとか
Generational GCで新世代は Copying、旧世代は Mark and sweepがいいとか
そこら辺が知りたいです。
0382デフォルトの名無しさん
2006/02/05(日) 13:45:49画面で読んで分かるほど短い本ではないんだなこれが.
>>381
まぅまぅ,難しいことは抜きで.
http://www.logos.t.u-tokyo.ac.jp/~endo/gc/ で物足りないなら挙げられてる参考文献を.
Wilsonのものは無料で読める:
http://citeseer.ist.psu.edu/wilson92uniprocessor.html
0383デフォルトの名無しさん
2006/02/06(月) 11:19:490384デフォルトの名無しさん
2006/02/06(月) 23:02:02Hello, world が 20MB...
% ./src/runtime/sbcl --core output/sbcl.core
This is SBCL 0.9.9.16, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (save-lisp-and-die "hello" :executable t
:toplevel (lambda ()
(princ "Hello, world!") (terpri) (quit)))
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into /path/to/sbcl/hello:
writing 1584 bytes from the read-only space at 0x10000000
writing 1328 bytes from the static space at 0x30000000
writing 22577152 bytes from the dynamic space at 0x48000000
done]
% ./hello --noinform
Hello, world!
% ls -l hello
-rwxr-xr-x 1 nobody nobody 22921228 2 6 22:51 hello
0385デフォルトの名無しさん
2006/02/07(火) 02:13:590386デフォルトの名無しさん
2006/02/07(火) 02:43:46| 実装レイヤでは関数を毎回コンパイルして機械語にしている訳ではないからね.
それってSchemeだから?
手元のAllegroだとコンパイル済みの函数ジェネレータが返してくるのは
やはりコンパイル済みの函数オブジェクトになってるけど。compiled-function-pでtね。
詳細知ってる人の降臨希望。
0387デフォルトの名無しさん
2006/02/07(火) 02:55:55コンパイル済みの函数ジェネレータならコンパイル済みの函数を返すのが普通。
Schemeの場合、lambda式を評価した時点で中間コードなどにコンパイルする処理系が
多いが、このとき中にネストしたlambda式があればこれも含めてコンパイルする。
Common Lispの場合はリストのまま持っていてコンパイルしたときに中の関数も含めて
コンパイルする処理系が多いと思う。
0388デフォルトの名無しさん
2006/02/07(火) 03:25:01機械語コードはクロージャを生成するごとに変化するわけではない。
0389デフォルトの名無しさん
2006/02/07(火) 07:49:34typedef struct { 何かの関数 func; 何かの構造体 *env; } lambda_t;
typedef struct { int count; } new_counter_t;
#define FUNCALL(lambda) (lambda->func(lambda->env))
static int counter ( new_counter_t *up ) {
up->counter += 1;
return up->counter;
}
lambda_t *new_counter () {
lambda_t lambda;
new_counter_t *nc = GC_malloc ( sizeof(new_counter_t) );
nc->count = 0;
lambda.func = counter;
lambda.env = nc;
return lambda;
}
void func () {
lambda_t lambda = new_counter ();
FUNCALL(lambda); /* => 1 */
FUNCALL(lambda); /* => 2 */
}
GC_mallocで返されてるのがいわゆる環境というやつ。
0390デフォルトの名無しさん
2006/02/07(火) 14:06:03Mac と Win もできると思う。
他の OS でも os_get_runtime_executable_path() を実装するだけでいけるはず。
0391デフォルトの名無しさん
2006/02/07(火) 22:30:23many thanks!!
Mach-O だから Mac は後回しかなぁと思ってたけど、ソース見たらちゃんと有るね。
リリースされたら試してみます。
0392デフォルトの名無しさん
2006/02/08(水) 01:39:49EUC/JIS/SJIS/Unicodeなどを相互変換する
ライブラリはどこで見つかりますか?
Googleしてみても、見つけられなかったのです。
0393デフォルトの名無しさん
2006/02/08(水) 02:34:11CLISP.
ライブラリってより処理系そのものだけど。SchemeならGauche.
金持ちならAllegroCL. これもライブラリではないな(w
どこで見付かるかって話ならc.l.l.読むとかCLikiとかcommon-lisp.netとか。
0394392
2006/02/08(水) 03:07:14CLISPだと
http://clisp.cons.org/impnotes/encoding.html#charset
に使えるエンコーディングの一覧がありました。
また、ライブラリとしてはGNU iconvが使えるようです。
http://www.cliki.net/iconv
これで日本語処理もなんとかなりそうです。
ありがとうございました。
0395393
2006/02/08(水) 03:18:45直接iconvを叩かないで済むからエンコーディングまわりいじるには便利だよ。
0396デフォルトの名無しさん
2006/02/08(水) 03:29:510397デフォルトの名無しさん
2006/02/08(水) 23:55:09SBCL のエンコーディングサポートはほぼ Common Lisp だよ。
0398デフォルトの名無しさん
2006/02/09(木) 00:24:29条件を絞れば難しいもんじゃないし、練習がてら自分で書いてみては?
0399デフォルトの名無しさん
2006/02/09(木) 11:24:07LISPとかFortranだったら、C言語では実現できないアルゴリズムとかもあるのでしょうか?
Javaはアルゴリズムのライブラリがあるらしいですけど
0400デフォルトの名無しさん
2006/02/09(木) 11:48:10ヒント:チューリング完全
0401デフォルトの名無しさん
2006/02/09(木) 11:54:46日本語でおk
0402デフォルトの名無しさん
2006/02/09(木) 11:55:39http://pc8.2ch.net/test/read.cgi/tech/1104066264/l50
0403デフォルトの名無しさん
2006/02/09(木) 11:57:34http://pc8.2ch.net/test/read.cgi/tech/1104066264/648
http://pc8.2ch.net/test/read.cgi/tech/1104066264/649
0404デフォルトの名無しさん
2006/02/09(木) 12:01:18プログラミングなんてちょっと頑張りゃ誰でも出来る
設計は馴れるしかない
ソフトウェア工学みたいな変なのもあるしな
0405デフォルトの名無しさん
2006/02/10(金) 08:16:150406デフォルトの名無しさん
2006/02/10(金) 11:08:46CやFORTRANでもできなくはないだろうけど、苦労するんじゃないか?
>400 も言ってるように、チューリングマシン的にはどの言語も等価だから
「Aに書けてBに書けないもの」はなさげ。
0407デフォルトの名無しさん
2006/02/10(金) 11:13:30アセンブラよりCが使いやすいように、
Lisp使ってる人にはCよかLispのが使いやすい。
0408デフォルトの名無しさん
2006/02/10(金) 12:22:01Lisp初心者は、まず「グリーンスパンの第10法則」を知っておきましょう。
Greenspun's Tenth Rule of Programming
http://www.practical-scheme.net/wiliki/wiliki.cgi/Lisp:GreenspunsTenthRule
"Any sufficiently complicated C or Fortran program contains
an ad-hoc, informally-specified bug-ridden slow implementation
of half of Common Lisp."
0409デフォルトの名無しさん
2006/02/10(金) 20:39:36訳してみた
「クンニの時間はフェラの時間の半分とすべし」
0410デフォルトの名無しさん
2006/02/10(金) 21:06:55>>406-408
皆さん。レス有難うございます。
とても為になりましたです。
>>408
リンク先をお気に入りへ追加させて頂きました。
0411デフォルトの名無しさん
2006/02/11(土) 00:22:49http://list.cs.brown.edu/pipermail/plt-scheme/2006-January/011364.html
JITのschemeって初かな?
0412デフォルトの名無しさん
2006/02/11(土) 01:40:13ちょっと良いかも。ベンチマークきぼんぬ。
0413デフォルトの名無しさん
2006/02/11(土) 01:57:33リンクしたら著作権表示が必要とかなって、
調べるといろんなライセンスのライブラリ使ってて
わけわからなくなるし。
まあ、GPLで公開しちゃえば楽なんだが。
0414デフォルトの名無しさん
2006/02/11(土) 03:17:20本当は Scheme 版の CMUCL みたいなのがあると良いんだけどね。
チョッパヤのコンパイラで、リベラルなライセンスで、クロスプラットフォームなのが。
0415デフォルトの名無しさん
2006/02/11(土) 03:38:00怪しいとは思ってたけど、最初にスーフィーって読んじゃってからはスーフィズムのイメージ
と相まってずっとスーフィーと読んでたよ...
CL 版 SRFI の CLRFI はクラリファイ (clarify) って読んでるけど、こっちは寂れてるなぁ。
0416デフォルトの名無しさん
2006/02/11(土) 03:45:37SRFIはサーフィと読んでたが、CLRFIのほうは知らなかった。w
サンクス。というわけでリンク貼っとく。 http://clrfi.alu.org/
0417デフォルトの名無しさん
2006/02/11(土) 08:49:51ところでなんでPerforceのバナーがはってあるんだろ
0418デフォルトの名無しさん
2006/02/11(土) 22:34:18Editor の趣味だろう。Nick Levine とか Perforce 用インターフェースを公開
してくらいだしね。
0419デフォルトの名無しさん
2006/02/12(日) 13:07:050420デフォルトの名無しさん
2006/02/12(日) 13:37:10これはこれでよいな。
(define s "abc")
(string-set! s 0 #\A)
s
=> "Abc"
0421デフォルトの名無しさん
2006/02/12(日) 15:12:060422デフォルトの名無しさん
2006/02/13(月) 02:54:190423デフォルトの名無しさん
2006/02/13(月) 03:46:370424デフォルトの名無しさん
2006/02/13(月) 12:03:07また戻ってくるかもしれないけど、
とりあえず、さばらじゃ!
0425デフォルトの名無しさん
2006/02/13(月) 21:42:040426デフォルトの名無しさん
2006/02/13(月) 22:32:420427デフォルトの名無しさん
2006/02/13(月) 22:43:120428デフォルトの名無しさん
2006/02/13(月) 23:35:210429デフォルトの名無しさん
2006/02/14(火) 00:51:58M で終ってるじゃねぇか。やはり Lisp といえばあのお方しかいない。
どうみても McCarthy 先生です。本当にありがとうございます。
アレ Minsky 先生か?
0430デフォルトの名無しさん
2006/02/14(火) 03:59:00リチャード・M・ストールマン
0431デフォルトの名無しさん
2006/02/14(火) 08:05:00松井秀喜?
0432デフォルトの名無しさん
2006/02/14(火) 08:05:460433デフォルトの名無しさん
2006/02/14(火) 13:28:32トップはたぶんrationalize
0434デフォルトの名無しさん
2006/02/14(火) 15:30:150435デフォルトの名無しさん
2006/02/14(火) 20:23:18授業なんかで、前から使ってた。
0436デフォルトの名無しさん
2006/02/14(火) 23:08:070437デフォルトの名無しさん
2006/02/14(火) 23:09:12確かに使ったことない。・・・たぶん
0438デフォルトの名無しさん
2006/02/15(水) 00:40:220439デフォルトの名無しさん
2006/02/15(水) 01:54:020440デフォルトの名無しさん
2006/02/15(水) 17:13:520441デフォルトの名無しさん
2006/02/15(水) 21:27:26別にどうでも良いよな
0442デフォルトの名無しさん
2006/02/15(水) 21:32:550443デフォルトの名無しさん
2006/02/15(水) 22:36:05http://pc8.2ch.net/test/read.cgi/tech/1106587515/
0444デフォルトの名無しさん
2006/02/15(水) 22:55:58何気に良スレだったんで、次スレが立っても良いかなと思った。
Common Lisp だけでも、それなりに一スレ使い尽くせるもんだね。
0445デフォルトの名無しさん
2006/02/16(木) 00:06:27【入門】CommonLispその2【質問よろず】
http://pc8.2ch.net/test/read.cgi/tech/1140012484/
0446デフォルトの名無しさん
2006/02/16(木) 00:11:22ここにちょっとだけ載ってる。
http://en.wikipedia.org/wiki/Continuation
0447デフォルトの名無しさん
2006/02/17(金) 13:28:58ところで継続って作ったスレッドと別のスレッドでも普通に使えるものなの?
0448デフォルトの名無しさん
2006/02/17(金) 16:01:32スレッド自体が継続を使って作られてるならもちろん使える。
スレッド毎にスタックを持ってて、スタックそのままコピーして
保存してるならたぶん無理。
0449デフォルトの名無しさん
2006/02/17(金) 22:30:57外へ戻る脱出はわかるけど、外→内の継続が使えて便利なことってある?
0450デフォルトの名無しさん
2006/02/17(金) 23:09:27まぁ君の人生と違ってやり直しがきくってことだね。
0451デフォルトの名無しさん
2006/02/17(金) 23:35:59コルーチン。
やったことないけど。
0452デフォルトの名無しさん
2006/02/18(土) 03:25:500453デフォルトの名無しさん
2006/02/18(土) 05:49:35普段のプログラミングで多用するものではないが、新しい言語機能を
実験したい時に便利。ユーザレベルスレッドとか、ジェネレータとか、
デバッガとか。
>>452
レキシカル変数の値は復元される、というか、クロージャが環境を
保持するのと同じように、継続もその時点で見えている環境を保持する。
0454デフォルトの名無しさん
2006/02/18(土) 08:34:56call/cc以後の処理をクロージャにして継続として渡してやればいいわけだが、
それにはcall/cc出現までの呼び出し階層が全てCPSで書かれてないとダメかな?
foo -> bar -> baz というように関数を呼び出して、bazの中でcall/ccと同等の
ことをしたい(続く処理をクロージャにして継続渡ししたい)とする。
そうするとfoo, barが末尾呼び出しであるか、それらも継続渡しでbar, bazを
呼んでないとダメだよね?
0455デフォルトの名無しさん
2006/02/18(土) 10:29:430456デフォルトの名無しさん
2006/02/21(火) 18:55:39以下のように書くべきだったのですが
(define hoge
(lambda (a lst)
(cond ((null? lst) #f)
((atom? (car lst))
(cond ((eq? (car lst) a) #t)
(else (hoge a (cdr lst)))))
(else (or (hoge a (car lst)) ;A
(hoge a (cdr lst)))))));B
> (hoge 'a '((a)))
#t
or を思い付くことができず、Aの部分で
(else (hoge ...
と書いてしまい、以下のようになりました。
> (hoge 'a '((a)))
#f
A、Bの再帰をたどった場合、Aの結果は#t、Bの結果は#fに
なると思うのですが、全体の結果が#fとなる理由を教えて
いただいてもよろしいでしょうか。
■ このスレッドは過去ログ倉庫に格納されています