- 1 名前:デフォルトの名無しさん [2007/08/12(日) 21:38:15 ]
- 過去スレ
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/ Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
- 381 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 09:01:58 ]
- 高度に発達した黒板は現実と区別がつかない。
- 382 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 09:35:14 ]
- オーオー、お前等楽しそうじゃん#AA略
- 383 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:25:39 ]
- >>380はLisp>schemeって考えてんのか?
- 384 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:28:45 ]
- 不等号キター!
- 385 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:50:05 ]
- schemeとLispはイスラム教とキリスト教の関係なのか?
- 386 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:57:37 ]
- >>383
コンピュータで動かすことを考えればね。 黒板上なら別にそんなことはないと思う。
- 387 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:47:26 ]
- >>383
中置記法か。お前Lisperじゃないな
- 388 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 12:12:42 ]
- なんかこういう
www.prescod.net/xml/sexprs.html 事を言っている人が居るみたいなんですが、 どうも的外れな気がするんですが… 皆さんどう思われますか?
- 389 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:28:54 ]
- CommonLispは土方専用だろ
洗練された知的階級の為のSchemeと同じスレで扱う事自体がおかしい
- 390 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:30:57 ]
- schemeはpythonとかと同じで教育用っつーかお試し用っつーかそういうもんだろ
- 391 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:33:41 ]
- ↑土方乙。しかもPythonすら理解できてないのかwwwww
- 392 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:36:58 ]
- Common Lisp: 土方歳三
Scheme: 原田左之助
- 393 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:38:58 ]
- 洗練された知的階級なんて言葉で自己言及した時点で洗練された知的階級じゃないよ!
ってことを身をもって明らかにするschemerならではの反面教師的教育なのです
- 394 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:40:05 ]
- 教育用の言語使ってる割には頭悪そうだな
- 395 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:43:36 ]
- これから教育を受ける段階にある奴ってことだからね。
- 396 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:45:45 ]
- 教育すら受けられない中卒Common Lisper
- 397 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:52:34 ]
- そもそも >>389 は Common Lisp も Scheme も使った事が無いんだから
放っといたら良いじゃん
- 398 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 15:13:52 ]
- つれないこというなよ
- 399 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 15:45:11 ]
- >383
仕様のサイズ的には合ってね?
- 400 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 15:49:15 ]
- SchemeはR6RSでかなり分厚くなったと聞いたが
- 401 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 16:51:33 ]
- それだけ不純になったのよ
- 402 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:19:43 ]
- >>388
斜め読みしただけだけど、やってることは S 式の標準的な書式の見た目を XML 文書と比較してるだけなのかな。 だとすると > XML is not S-Expressions このタイトルは不適切だな。
- 403 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:33:39 ]
- S式はCSVみたいにRFCに定義されたりしないの?
- 404 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:37:24 ]
- ISLISPがRFCになってなかったっけ?
- 405 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 17:59:10 ]
- ISLISPって全然はやってないんだなw
- 406 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 19:11:14 ]
- >>392
Mormon Lisp (Ruby): まつもと ゆきひろ
- 407 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:28:44 ]
- CommonLisp+末尾最適化+継続 = 大方のSchemerは文句いわない
Scheme - 末尾最適化 - 継続 = 粗大ゴミ
- 408 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:42:00 ]
- つまり素のLISPはゴミって事?
- 409 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:42:29 ]
- CL = RedHat Linux
Scheme = Plan9 てな感じ
- 410 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:44:23 ]
- 今となっては RHL はあんまりw
- 411 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:46:58 ]
- >>408
そりゃCommonLisp以前に戻るんだからしょうがないべよ その他大勢の方言の一つでしかないんだもの。
- 412 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:06:18 ]
- CommonLISPは分別ゴミ
- 413 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:11:16 ]
- >>408
素のLispはただの理論だからなぁ。 道具として便利であるためには、当然肉付けが必要になるよ。
- 414 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:26:50 ]
- クロージャすらないようではゴミと言われてもしかたあるまい
- 415 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:28:27 ]
- >>414
?
- 416 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:35:07 ]
- >>414
つ FUNARG
- 417 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:43:34 ]
- CL = スイスアーミーナイフ
Scheme = 肥後の守
- 418 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:49:56 ]
- Lispとかけてイケメンととく。
- 419 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:03:51 ]
- その心は、
「かっこが大変よろしゅうございますw」 とかヌカスつもりじゃないだろーな?
- 420 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:12:48 ]
- あーそれ俺が言おうと思ってたやつなのに・・・ひどい
- 421 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:23:18 ]
- むしろ「カッコばかりで中身がありません」じゃないのか?
- 422 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:25:16 ]
- でも簡単にペアになれるんだぜ?
- 423 名前:デフォルトの名無しさん [2007/10/08(月) 23:37:14 ]
- 少数点以下多数ある数値少数第1位までにして、切り上げして出力する方法ってある?
20.767841011743453→20.8 処理系はgaucheで。
- 424 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 00:09:52 ]
- ほんとにそれだけしたいなら(10進で)10倍してceiling(かな?)でいいんとちゃう?
単純でわかりやすいし。
- 425 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 00:29:55 ]
- >>422
うまいこと言うなあ
- 426 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:15:28 ]
- >>422
ウホッ
- 427 名前:デフォルトの名無しさん [2007/10/09(火) 23:32:08 ]
- >>424
ありがとうございます。出来ました。 もうひとつ同じような内容ですが、 例えば、-1.0という答えを-1.000という回答に小数点以下第3位まで出す場合はどうすればよろしいですか? やはりgaucheで
- 428 名前:デフォルトの名無しさん mailto:age [2007/10/10(水) 00:10:43 ]
- www.premiumtv.12gbfree.com/?RTV+4514/ChuckBraman/JazzPlayer
- 429 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:17:47 ]
- >>406
Moron Lispだと思った。
- 430 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:25:30 ]
- どうでもいいけど、S式でXML表現するときって名前空間はどうすんの?
- 431 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:27:11 ]
- >>429
それも正解。
- 432 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:49:07 ]
- >>427
かなり無理やりっぽいが… (define (hoge kazu keta) (let ((b (exact->inexact kazu)) (c (string-length (number->string (inexact->exact (round kazu)))))) (format #f "~v,,,'0,a" (+ c keta 1) b))) (hoge 1 3) もっとまっとうな方法がありそうな気がする
- 433 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:51:38 ]
- それってformatでパッとできないの?
- 434 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:18:31 ]
- >>430
コモンリスプならパッケージで桶
- 435 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:34:06 ]
- >>434
返信ありがとう。 URNとかも平気なのかな。 まあ、完全な同値変換はできないだろうけど。勉強してみる。
- 436 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 02:06:07 ]
- こんな表現にすればぁ
(tag :namespace (...) :attribute (...) :nodes (...))
- 437 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 05:10:29 ]
- >>430
A Lisp Based XML Parser ・LXML parse output format franz.com/support/documentation/8.0/doc/pxml.htm#lxml
- 438 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 05:14:27 ]
- 追加
opensource.franz.com/xmlutils/
- 439 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 12:19:10 ]
- このスレを見ている人はこんなスレも見ています。(ver 0.20)
Bart's PE Builder スレッド 5枚目 [Windows] 懲りずに騙されて花火板にまで飛ばされたわけだが3 [花火] 【CFNM】ちんちん見〜ちゃった☆Part14【えっ〜!】 [game12tr] uim スレッド 7 [Linux] 2ch特化型サーバ・ロケーション構築作戦 Part26 [2ch運用情報]
- 440 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 18:12:43 ]
- >>19
> Schemeで書かれた正規表現ライブラリ > ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html www.ccs.neu.edu/home/dorai/pregexp/pregexp.html
- 441 名前:デフォルトの名無しさん [2007/10/14(日) 21:19:32 ]
- gaucheのGauche-mingw-0.8.11+meadow使ってるんですが、日本語の扱いが上手くいきません。
(print "こんにちは") だと 縺薙s縺ォ縺。縺ッ って出てしまう。 どのようにすればよろしいでしょうか?
- 442 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 21:59:28 ]
- 文字コード
- 443 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 23:04:31 ]
- >>441
set-buffer-file-coding-systemとset-buffer-process-coding-systemで設定。 どっちかっていうとemacsの設定の話だな。
- 444 名前:デフォルトの名無しさん [2007/10/15(月) 18:23:55 ]
- 文字列が定義されてるとき、その文字列の組み合わせを列挙して、その数も表示する関数(com k seq)を作ってます。(setq abcd (list 'A 'B 'C 'D))として、たとえば(com 3 abcd)を評価すると、
(ABC) (ABD) (ACD) (BCD) 4 となります。 先頭を選んで残りからk-1個選ぶ。先頭を選ばず残りからk個選ぶ。というのを再帰で書けば出来そうというのは考えたんですが、うまくかけません。習ってるのはdefun cond if cons car cdr print list null setqとかで、これだけで書きたいです。 また要素のi番目を調べる関数(ith seq i)と、2つのリストを結合する関数(merg seq1 seq2)、リストに一つの要素を加える関数appは以前に作ってて、これは使えます。 どなたか教えてくれませんか?
- 445 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 20:27:47 ]
- >>444
Common Lisp 入門スレにヒントがでてたよ。どのくらいまで自力でできたの?
- 446 名前:デフォルトの名無しさん [2007/10/15(月) 21:44:49 ]
- うーん。いろいろ書いてみたんですが、うまく書けなくて…
- 447 名前:444 [2007/10/15(月) 23:46:07 ]
- (defun top (seq tmp)
(print (app tmp (car seq))) (cond ((null (cdr seq)) ) (T (top (cdr seq) tmp))) (setq tmp NIL) ) (defun comb (seq k) (cond ((= k 1) (top seq tmp) ) ((null (cdr seq)) ) (T (setq tmp (list (car seq))) (comb (cdr seq) (- k 1)) (comb (cdr seq) k) ))) >(comb abcd 2) (A B) (A C) (A D) (B C) (B D) (C D) K=2のときはうまくいくんですが、3以上のときがうまくいかなくて・・・ どうしたらいいのか・・・・
- 448 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:05:16 ]
- (defun comb (seq k)
(setq tmp NIL) (comb2 seq k tmp) ) (defun top (seq tmp) (print (app tmp (car seq))) (cond ((null (cdr seq)) ) (T (top (cdr seq) tmp))) ) (defun comb2 (seq k tmp) (cond ((= k 1) (top seq tmp) ) ((null (cdr seq)) ) (T (setq tmp (app tmp (car seq))) (comb2 (cdr seq) (- k 1) tmp) ))) こうしたら (ABC) (ABD)はでるようになりました。 先頭を選ばず残りからk個選ぶ部分がうまくできません。
- 449 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:22:15 ]
- (comb '(a b c d) 3)
=> ((a b c) (a b d) (a c d) (b c d)) みたいな関数を作って表示は別にしたほうがいいかもしれんね
- 450 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:26:24 ]
- >>449
一応表示は top関数で表示してます。 (defun comb (seq k) (setq tmp NIL) (comb2 seq k tmp) ) (defun top (seq tmp) (print (app tmp (car seq))) (cond ((null (cdr seq)) ) (T (top (cdr seq) tmp))) ) (defun comb2 (seq k tmp) (cond ((= k 1) (top seq tmp) ) ((null (cdr seq)) ) (T (setq tmp (app tmp (car seq))) (comb2 (cdr seq) (- k 1) tmp) (comb2 (cdr seq) k NIL) )) としました。
- 451 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:26:55 ]
- 結果は
[37]> (comb abcd 3) (A B C) (A B D) (C D) (B C D) T [38]> (comb abcde 3) (A B C) (A B D) (A B E) (C D) (C E) (D E) (B C D) (B C E) (D E) (C D E) T ここまでなんとかなりました。 あと先頭要素が加わってないやつに加えられれば良いんですが・・・・
- 452 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 00:27:48 ]
- comb2定義の最後の括弧が抜けました・・・
- 453 名前:デフォルトの名無しさん [2007/10/16(火) 00:44:01 ]
- >>449
読み違いました。そういう手もありですね。 しかしどうやるのか・・・
- 454 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:02:20 ]
- まず紙にでも書いて整理しろよ
頭で想像できてない事をプログラムできるわけないだろ
- 455 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:05:14 ]
- 紙にも書いてみましたが>>450のやつから進みません・・・
- 456 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:15:28 ]
- 紙に書いても判らんなら、もう一度単純ケースの把握からやってみれば?
ABC 2のケースとか。 あと、リスト処理と考えるより単純な集合の比較の問題って思った方がいいぞ。 carとかnullとかリストオペレーターをそのまま使うんじゃなくて 問題に適合するように抽象化してみるとか。
- 457 名前:デフォルトの名無しさん [2007/10/16(火) 01:28:25 ]
- ABC 2 だったら
A選ぶ場合 B選ぶ場合 AB B選ばない場合 AC A選ばない場合 B選ぶ場合 BC B選ばない場合 なし って感じですよね?でもプログラムだとうまくいかないんですよねぇ。
- 458 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:36:47 ]
- プログラム的に考えてみろよ
例えばビットの組み合わせ問題として解く 1) 記号が3種類なので3ビットで表す A 001 B 010 C 100 2) 重複に注目しながら全パターンを列挙してみる AB 011 AC 101 BA 011 x 重複 BC 110 CA 101 x 重複 CB 110 x 重複 答え 110 101 110 すなわち AB AC BC
- 459 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:44:52 ]
- ごめん
答え011 101 110 すなわち AB AC BC ね。 ABCD 3のケースならビット1が3つあるパターン A 0001 B 0010 C 0100 D 1000 ならば ACD 1101 ABD 1011 ABC 0111 BCD 1110
- 460 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 03:10:09 ]
- >>450
再帰関数についてもうちょっと勉強しないと… (defun comb (seq k) (top (comb2 seq k)) ) としておいて、comb2は、 kが0でなければ、 seqから一つxを抜き出して、 (comb2 (seqからxを除いたもの) (- k 1))の先頭にxを付け足すしたリスト を全てのxに対して行って、皆listして返す。 k=0ならNILを返す。 k-1の時の結果から、kの時の結果を作り出す部分と k=0の時の結果から再帰関数を構成する。
- 461 名前:デフォルトの名無しさん [2007/10/16(火) 08:10:19 ]
- >>458
それはわかるんですが。うーん >>460 先頭にxをつけ加えたリストをすべてのxに対して行うって言うのが書けないんです。正直、言うと誰か書いてもらいたいです。一旦答えわかったら理解できるかもしれないです
- 462 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 10:55:02 ]
- 再帰で書く。
(car seq)に対して行った結果を、(cdr seq)についてやった結果に付け加える。 nilになるまでやる。
- 463 名前:デフォルトの名無しさん [2007/10/16(火) 14:20:44 ]
- やっぱりできないんで、答えお願いしてもいいですか
- 464 名前:デフォルトの名無しさん [2007/10/16(火) 14:25:18 ]
- やっぱりできないんで、答えお願いしてもいいですか
- 465 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:31:04 ]
- >>258
r6rsでは、 > Characters are objects that represent Unicode scalar values. ちょっと困ったのが、stringはseqence of characterだから、 サロゲートペアを含めるには、stringじゃなくてbytevectorにしないと、 r6rs準拠にならない。
- 466 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:31:59 ]
- >>463>>464
宿題スレに行け。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 16:27:15 ]
- >>465
なんで? 文字を素直に UCS-4 にしてしまえばいいじゃないか。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:08:54 ]
- それじゃ「Unicode scalar values」じゃなくなってしまう。
> (integer->char sv) procedure > > Sv must be a Unicode scalar value, > i.e., a non-negative exact integer object > in [0, #xD7FF] ∪ [#xE000, #x10FFFF].
- 469 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:31:53 ]
- いや、サロゲートペアなんてのが出てくるのは UTF-16 をそのまま 16bit 値として
扱った場合だけでしょ。 string の内部形式として UTF-32 を使ってればそもそも気にする必要はないし、 内部形式に UTF-16 を使っていたとしても、char アクセス時にそれなりに変換 すればいい。 内部形式を UTF-16 にした string で、それをナイーブに char の配列として 実装しちゃいかんというだけのように読めるけどなあ。
- 470 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:05:26 ]
- UTF-16とかUTF-32とか関係ないです。
R6RSの文字は"Unicode scalar value"を表現します。 またR6RSに従うならそれしかできません。 "Unicode scalar value"はちゃんとした定義のある言葉です。
- 471 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 20:10:07 ]
- サロゲートペアってのは UTF-16 でしか使われないんだから、UTF-16 と無関係
なわけないじゃないか。 たとえば、U+2000B は UTF-16 で 0xD840 0xDC0B というサロゲートペアで 表されるけど、U+D840 や U+DC0B なんて文字があるわけではない。 あんたが (string (integer->char #xD840) (integer->char #xDC0B)) ができないって 言ってるみたいだから、俺は (string (integer->char #x2000B)) すればいいって 言ってるんだけど、何か勘違いしてる?
- 472 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 02:12:21 ]
- 468で既に自分が何言ってるのかわかってないことを暴露している奴に、
そんな親切につきあわなくても……。もはやスレ違い同然。
- 473 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:30:18 ]
- Schemeのリスト操作関数について質問です。
Webでサンプルコードとかを検索すると、n番目のリストを参照するための オペレーターとしてlist-refという名前の関数がよく使われてるっぽいんですが、 これに対応するlist-set!がみつかりませんでした。 ペアに対してのオペレーター(car cdr set-car! set-cdr!)は標準でありますが、 リストに対しては整備されてないんでしょうか。 ↓みたいなのがSRFIとかで定義されていればそれを使いたいのですが。 ;n番目以降の部分リストを返す (define (list-tail l n) (if (zero? n) l (list-tail (cdr l) (- n 1)))) ;n番目の要素を返す (define (list-ref l n) (car (list-tail l n))) ; 破壊版 set (define (list-set! l n obj) (set-car! (list-tail l n) obj) l) ; 非破壊版 set (list-replace?) (define (list-set l n obj) (let loop ((i 0) (x l) (r '())) (if (pair? x) (if (= i n) (loop (+ i 1) (cdr x) (cons obj r)) (loop (+ i 1) (cdr x) (cons (car x) r))) (reverse r))))
- 474 名前:473 mailto:sage [2007/10/17(水) 12:40:14 ]
- ちょっと今調べたらlist-tailとlist-refはR5RSにあるみたいですが
list-set!やlist-set相当はありませんでした。
- 475 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:01:40 ]
- そんな操作を使いまくるようならベクタを使う気がする。
- 476 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:55:25 ]
- 魔法言語リリカル☆Lispフリーウェア化
blog.bugyo.tk/lyrical/2007/10/post_40.html
- 477 名前:473 mailto:sage [2007/10/18(木) 00:18:00 ]
- 効率の話はともかくとして、list-setみたいなパターンはよく使うと思うんですが。
インターフェースを揃えておく利点として、他のコンテナに簡単に移行できる という今更語るまでもなくCLや他の言語でも証明されてる事ですし。 takeやdropはSRFIで定義されてるのに不思議ですね。
- 478 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 00:23:43 ]
- 欲しいと思ったことないけどな。
ランダムアクセスするなら >>475 の言うようにベクタを使うべきなんじゃないの?
- 479 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:17:33 ]
- >>478
〜するべき、とかの話はおいといて、 例えばプロトタイピグとかでコンテナをいちいち決めたくないと思いませんか。 list-set相当の処理は入るけど大部分が副作用なしのリスト処理の場合とか。
- 480 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:22:37 ]
- 正直言って思わない。1分で作れるし。
- 481 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:23:49 ]
- setfみたいのならいいけど、
〜-set!が、コンテナの数だけあるのも、なんだかな。 やっぱOOが必要なんだろうけど、 プログラミング業界で一番OOに盛り上がりがないからな。 CLOSの頃と違って。
|

|