Lisp Scheme Part18
..
435:デフォルトの名無しさん
07/10/10 01:34:06
>>434
返信ありがとう。
URNとかも平気なのかな。
まあ、完全な同値変換はできないだろうけど。勉強してみる。
436:デフォルトの名無しさん
07/10/10 02:06:07
こんな表現にすればぁ
(tag :namespace (...) :attribute (...) :nodes (...))
437:デフォルトの名無しさん
07/10/10 05:10:29
>>430
A Lisp Based XML Parser
・LXML parse output format
URLリンク(franz.com)
438:デフォルトの名無しさん
07/10/10 05:14:27
追加
URLリンク(opensource.franz.com)
439:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/11 18:12:43
>>19
> Schemeで書かれた正規表現ライブラリ
> URLリンク(www.cs.rice.edu)
URLリンク(www.ccs.neu.edu)
441:デフォルトの名無しさん
07/10/14 21:19:32
gaucheのGauche-mingw-0.8.11+meadow使ってるんですが、日本語の扱いが上手くいきません。
(print "こんにちは")
だと
縺薙s縺ォ縺。縺ッ
って出てしまう。
どのようにすればよろしいでしょうか?
442:デフォルトの名無しさん
07/10/14 21:59:28
文字コード
443:デフォルトの名無しさん
07/10/14 23:04:31
>>441
set-buffer-file-coding-systemとset-buffer-process-coding-systemで設定。
どっちかっていうとemacsの設定の話だな。
444:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/15 20:27:47
>>444
Common Lisp 入門スレにヒントがでてたよ。どのくらいまで自力でできたの?
446:デフォルトの名無しさん
07/10/15 21:44:49
うーん。いろいろ書いてみたんですが、うまく書けなくて…
447:444
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/16 00:22:15
(comb '(a b c d) 3)
=> ((a b c) (a b d) (a c d) (b c d))
みたいな関数を作って表示は別にしたほうがいいかもしれんね
450:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/16 00:27:48
comb2定義の最後の括弧が抜けました・・・
453:デフォルトの名無しさん
07/10/16 00:44:01
>>449
読み違いました。そういう手もありですね。
しかしどうやるのか・・・
454:デフォルトの名無しさん
07/10/16 01:02:20
まず紙にでも書いて整理しろよ
頭で想像できてない事をプログラムできるわけないだろ
455:デフォルトの名無しさん
07/10/16 01:05:14
紙にも書いてみましたが>>450のやつから進みません・・・
456:デフォルトの名無しさん
07/10/16 01:15:28
紙に書いても判らんなら、もう一度単純ケースの把握からやってみれば?
ABC 2のケースとか。
あと、リスト処理と考えるより単純な集合の比較の問題って思った方がいいぞ。
carとかnullとかリストオペレーターをそのまま使うんじゃなくて
問題に適合するように抽象化してみるとか。
457:デフォルトの名無しさん
07/10/16 01:28:25
ABC 2 だったら
A選ぶ場合
B選ぶ場合
AB
B選ばない場合
AC
A選ばない場合
B選ぶ場合
BC
B選ばない場合
なし
って感じですよね?でもプログラムだとうまくいかないんですよねぇ。
458:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/16 08:10:19
>>458
それはわかるんですが。うーん
>>460
先頭にxをつけ加えたリストをすべてのxに対して行うって言うのが書けないんです。正直、言うと誰か書いてもらいたいです。一旦答えわかったら理解できるかもしれないです
462:デフォルトの名無しさん
07/10/16 10:55:02
再帰で書く。
(car seq)に対して行った結果を、(cdr seq)についてやった結果に付け加える。
nilになるまでやる。
463:デフォルトの名無しさん
07/10/16 14:20:44
やっぱりできないんで、答えお願いしてもいいですか
464:デフォルトの名無しさん
07/10/16 14:25:18
やっぱりできないんで、答えお願いしてもいいですか
465:デフォルトの名無しさん
07/10/16 14:31:04
>>258
r6rsでは、
> Characters are objects that represent Unicode scalar values.
ちょっと困ったのが、stringはseqence of characterだから、
サロゲートペアを含めるには、stringじゃなくてbytevectorにしないと、
r6rs準拠にならない。
466:デフォルトの名無しさん
07/10/16 14:31:59
>>463>>464
宿題スレに行け。
467:デフォルトの名無しさん
07/10/16 16:27:15
>>465
なんで?
文字を素直に UCS-4 にしてしまえばいいじゃないか。
468:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/16 17:31:53
いや、サロゲートペアなんてのが出てくるのは UTF-16 をそのまま 16bit 値として
扱った場合だけでしょ。
string の内部形式として UTF-32 を使ってればそもそも気にする必要はないし、
内部形式に UTF-16 を使っていたとしても、char アクセス時にそれなりに変換
すればいい。
内部形式を UTF-16 にした string で、それをナイーブに char の配列として
実装しちゃいかんというだけのように読めるけどなあ。
470:デフォルトの名無しさん
07/10/16 18:05:26
UTF-16とかUTF-32とか関係ないです。
R6RSの文字は"Unicode scalar value"を表現します。
またR6RSに従うならそれしかできません。
"Unicode scalar value"はちゃんとした定義のある言葉です。
471:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/17 02:12:21
468で既に自分が何言ってるのかわかってないことを暴露している奴に、
そんな親切につきあわなくても……。もはやスレ違い同然。
473:デフォルトの名無しさん
07/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
07/10/17 12:40:14
ちょっと今調べたらlist-tailとlist-refはR5RSにあるみたいですが
list-set!やlist-set相当はありませんでした。
475:デフォルトの名無しさん
07/10/17 14:01:40
そんな操作を使いまくるようならベクタを使う気がする。
476:デフォルトの名無しさん
07/10/17 19:55:25
魔法言語リリカル☆Lispフリーウェア化
URLリンク(blog.bugyo.tk)
477:473
07/10/18 00:18:00
効率の話はともかくとして、list-setみたいなパターンはよく使うと思うんですが。
インターフェースを揃えておく利点として、他のコンテナに簡単に移行できる
という今更語るまでもなくCLや他の言語でも証明されてる事ですし。
takeやdropはSRFIで定義されてるのに不思議ですね。
478:デフォルトの名無しさん
07/10/18 00:23:43
欲しいと思ったことないけどな。
ランダムアクセスするなら >>475 の言うようにベクタを使うべきなんじゃないの?
479:デフォルトの名無しさん
07/10/18 01:17:33
>>478
〜するべき、とかの話はおいといて、
例えばプロトタイピグとかでコンテナをいちいち決めたくないと思いませんか。
list-set相当の処理は入るけど大部分が副作用なしのリスト処理の場合とか。
480:デフォルトの名無しさん
07/10/18 01:22:37
正直言って思わない。1分で作れるし。
481:デフォルトの名無しさん
07/10/18 01:23:49
setfみたいのならいいけど、
〜-set!が、コンテナの数だけあるのも、なんだかな。
やっぱOOが必要なんだろうけど、
プログラミング業界で一番OOに盛り上がりがないからな。
CLOSの頃と違って。
482:デフォルトの名無しさん
07/10/18 01:29:42
とりあえずlist-set相当は無いらしいという事は判ったので
この話は終わりますね。
>>481
OOというよりイディオムとしてのインターフェースは統一した方が
判りやすいと考えてるんですが。(今のところOOは必要と思ったことないです)
483:デフォルトの名無しさん
07/10/18 01:32:39
>>480みたいな人が多くて、
方言上等!みたいなのがこの世界です。
484:デフォルトの名無しさん
07/10/18 04:11:35
君が思ってるほどよく使われるイディオムでは無いってこと。ベクタってものがあるから。
485:デフォルトの名無しさん
07/10/18 05:03:08
>>481
setf 的な set! だったら srfi にあるね。
URLリンク(srfi.schemers.org)
486:デフォルトの名無しさん
07/10/18 09:39:14
>>482
> (今のところOOは必要と思ったことないです)
今のところlist-set!は必要と思ったことないです
487:デフォルトの名無しさん
07/10/18 17:45:40
クラス作ってどうこうのOOじゃなくて、MP的な意味でのOOじゃだめなの?
488:デフォルトの名無しさん
07/10/18 17:53:16
MPってなんや
489:デフォルトの名無しさん
07/10/18 18:20:21
Meta Programmingちゃいまっか?
490:デフォルトの名無しさん
07/10/18 19:15:23
MP = Message Passing
491:デフォルトの名無しさん
07/10/18 19:46:49
Magic Point
492:デフォルトの名無しさん
07/10/18 20:33:35
もっとぷにぷにして
493:デフォルトの名無しさん
07/10/18 20:34:45
マッスルパワーだろ、常考
494:デフォルトの名無しさん
07/10/18 20:56:36
『みじめな ポインター』じゃねーの?
495:デフォルトの名無しさん
07/10/18 21:30:32
もぷー
496:デフォルトの名無しさん
07/10/18 21:38:49
お前ら何言ってるんだ。
「Mですか?」の略だろ。LISP的に考えて。
497:デフォルトの名無しさん
07/10/19 00:17:01
My Program?
498:oWlyiBCrkzVQNj
07/10/19 04:20:45
KXW9XK <a href="URLリンク(nycokewromgk.com) [url=URLリンク(bezgtedzkmkl.com) [link=URLリンク(ckqlcozchtel.com) URLリンク(mtedzghiaczp.com)
499:デフォルトの名無しさん
07/10/19 16:40:57
バカな流れになるとこれが沸いてくるのはなんでだ
500:デフォルトの名無しさん
07/10/19 21:58:19
偶然です
501:デフォルトの名無しさん
07/10/20 01:49:22
以前、このスレ(だっけ)でも話題になった、eclipse用のslimeの様なもの。
swank backend を使った、開発環境が、取り上げられています。
URLリンク(www.ibm.com)
screen shotを見る限りでは、現時点でも、ずいぶんイケてるっぽいです。
わたしは、eclipse環境を使ってないので、今すぐに試す気はしませんが、
補完候補が、GUIで縦に表示されるのを、そのうち味わってみたいです。
502:デフォルトの名無しさん
07/10/22 14:23:53
Schemeってなんか使いやすくないですか?
503:デフォルトの名無しさん
07/10/22 23:05:43
そうですね
504:デフォルトの名無しさん
07/10/22 23:49:33
だよね
505:デフォルトの名無しさん
07/10/23 00:30:44
やっぱりね
506:デフォルトの名無しさん
07/10/23 01:03:12
でもそんなの関係ねー
507:デフォルトの名無しさん
07/10/23 20:39:42
はい、おっぱっぴー
508:デフォルトの名無しさん
07/10/23 23:30:00
前にもそういう一発系のネタあったよね。
どんなだったか忘れちゃったけど。
LISPの永続性と真逆の関係だね。
509:デフォルトの名無しさん
07/10/24 22:16:11
YコンビネータってなんでY ?
「ワイはコンビネーターや」ってことかい?
510:デフォルトの名無しさん
07/10/24 23:57:15
そんなあほな
511:デフォルトの名無しさん
07/10/25 03:00:23
「ワイは猿や!コンビネーター猿や!」
「必殺、包み包み!」
512:デフォルトの名無しさん
07/10/25 12:20:54
なにゆうてまんねん
513:デフォルトの名無しさん
07/10/25 18:13:59
ポール・グレアムが耳だけ出した覆面かぶってるって話
514:デフォルトの名無しさん
07/10/26 01:41:26
>>513
それはポール大好きグラハム・ちゃっぷまん@世界の料理ショーじゃまいか?
515:デフォルトの名無しさん
07/10/26 13:57:51
グラハム・カー@世界の料理ショー
ビリー・グラハム@テレビ宣教師
516:デフォルトの名無しさん
07/10/26 15:37:32
このスレは勉強になります
517:デフォルトの名無しさん
07/10/28 11:46:07
うそをつかないでください
518:デフォルトの名無しさん
07/10/28 12:25:45
グラハム・ボネット@横山やすし
519:デフォルトの名無しさん
07/10/29 20:31:26
r6rsってスタンダードになれなさそうだよねぇ
後始末が面倒くさそう
520:デフォルトの名無しさん
07/10/29 22:28:03
Cltl3はまだですか?
521:デフォルトの名無しさん
07/10/30 00:05:28
君が書くんだ
522:デフォルトの名無しさん
07/10/30 07:33:45
電話帳なみにぶ厚い仕様書を頼む
523:デフォルトの名無しさん
07/10/30 10:32:29
黒板に書けば1枚でも分厚いよ
524:デフォルトの名無しさん
07/10/30 12:31:12
うちの村の電話帳は薄いよ
525:デフォルトの名無しさん
07/10/30 17:33:45
>>520
アレをかける人で執筆時間がとれる人いるんだろうか。
526:デフォルトの名無しさん
07/10/30 19:22:26
GLSを拉致して・・・
527:デフォルトの名無しさん
07/11/04 23:24:20
3冊ほどLisp本キボン
528:デフォルトの名無しさん
07/11/05 01:08:37
Common Lisp the Language, 2nd Edition
On Lisp
Practical Common Lisp
529:デフォルトの名無しさん
07/11/05 04:27:03
入門書がないのはナゼ。
530:デフォルトの名無しさん
07/11/05 07:48:55
始めるならschemeがいいよ
CLはつまんない制約ばっかりで最初は滅入るから
531:デフォルトの名無しさん
07/11/05 12:53:03
>>529
入門は一生に一度だけだから、比較的マイナーな分野だと言えよう
532:デフォルトの名無しさん
07/11/05 12:53:34
>>530
そんなこたあない
533:デフォルトの名無しさん
07/11/05 14:09:03
>>531
そんなこたあない
534:デフォルトの名無しさん
07/11/05 14:28:16
>>528
thx
>>534-
他の皆さんは?(・∀・ )っ/凵 ⌒☆チンチン
535:デフォルトの名無しさん
07/11/05 22:25:23
>>531
BSD類のインストーラに凝ったものが無い、というのと同じような気がする
536:デフォルトの名無しさん
07/11/05 23:23:43
URLリンク(www.hi-ho.ne.jp)
・マクロ(schemeインタプリタ)を実装
だって。
537:デフォルトの名無しさん
07/11/06 05:04:00
>>535
浦島かよ。
PC-BSDのインストーラはLinuxみたいに凝ってるし、
FreeBSDも7からGUIインストーラが用意される予定。
538:デフォルトの名無しさん
07/11/06 09:16:35
予定に過ぎないのであれば大筋合ってるじゃん
539:デフォルトの名無しさん
07/11/06 09:35:42
>>537
OpenBSDのインストーラは最後の砦だw
540:デフォルトの名無しさん
07/11/06 12:11:48
>>537
浦島かよ。
FreeBSDのGUIインストーラは7に入らないことが決定済み。
541:デフォルトの名無しさん
07/11/06 12:20:59
もまえら、Unix板に返れ。
542:デフォルトの名無しさん
07/11/06 16:33:01
もまえら、Unix板に変えれ。
543:デフォルトの名無しさん
07/11/06 22:29:14
SFUが.NETみたいに標準搭載になればいいのにねえ。
WinFXでWin32を順次置き換えていくらしいから、
もう既にWin32で囲い込みする必要もないだろうに。
サポートの手間がメンドクサイからまあ、なさそうだけど。
544:デフォルトの名無しさん
07/11/06 22:45:05
マイクロカーネルだって事を M$ 自身が忘れてしまっている
545:デフォルトの名無しさん
07/11/07 00:20:35
>>543
なぜこのスレで書いてるのか知らんが、Windows Vista では
Enterprise、Ultimate 版に SFU の後継である SUA が載ってるよ。
546:デフォルトの名無しさん
07/11/07 14:26:53
slime専用sbcl coreをmake一発で作りたいとおもい、
sbcl-core:
rm -f ${SBCL_CORE}
sbcl <<EOF
(load "${SRC_DIR}/${PACKAGE_NAME}/swank-loader.lisp")
(save-lisp-and-die "${SBCL_CORE}")
EOF
としてみたのですがうまくいきません
どうしたらよいでしょうか。
547:デフォルトの名無しさん
07/11/07 18:49:20
エラーメッセージは?
makeの継続行は最後に\
here documentでは必要ないが、
makeは一行で1 shell script。行継続しないと。ってことかな?
548:デフォルトの名無しさん
07/11/08 02:50:15
schemeで
common lispの
(let ((count 0))
(defun increment ..
(defun decrement ..
のような処理をしたい場合はどうすればいいのでしょうか?
549:デフォルトの名無しさん
07/11/08 04:32:17
>>548
(define inc #f)
(define dec #f)
(let ((count 0))
(set! inc (lambda ...))
(set! dec (lambda ...)))
550:デフォルトの名無しさん
07/11/08 20:42:17
>>549
schemeの理論をそれほどちゃんと理解しているわけじゃないが、
厳密に言えばincrementをlambdaに束縛するのがincrementを呼ぶ前に
行われるとは限らないんじゃないか?
551:デフォルトの名無しさん
07/11/08 21:52:25
(let ((count 0))
(define inc (lambda ...))
(define dec (lambda ...)))
ってできないの?
552:デフォルトの名無しさん
07/11/08 23:42:14
最近勉強始めたんだけどschemeで作るプログラムのアーキテクチャが全然想像できない
オブジェクト指向だったらMMVCとかあるけどschemeでオブジェクト指向やってもうれしくもなんともないし
553:デフォルトの名無しさん
07/11/09 01:06:31
うれしくなければやらなければいい。
>>551
r5rs - 5.2.2 Interanal Definition
554:デフォルトの名無しさん
07/11/09 01:12:47
初心者で質問なんだけど、手続きが可変長引数を取るとき、
その全てを引数として他の可変長引数を取る手続きに渡すにはどうすれば良い?
(define (f1 . x)
x)
(define (f2 . x)
(f1 x))
(f2 1 2 3 4 5 6) ; ((1 2 3 4 5 6))になっちゃう(1 2 3 4 5 6)にしたい
555:デフォルトの名無しさん
07/11/09 01:20:39
(apply f1 x)
556:デフォルトの名無しさん
07/11/09 01:24:09
>>555
ありがとー
557:デフォルトの名無しさん
07/11/09 01:27:48
>>552
scheme とか lisp には言語を自由に拡張できるマクロが...
なので
> プログラムのアーキテクチャ
てなものを考えてもしょうがないと思うけど...
「特定の言語とかモデルに捕らわれないで問題領域解決用の専用言語を作る」
のが lisp 系言語の流儀だと思う.
558:デフォルトの名無しさん
07/11/09 01:38:39
Lisp : 粘土
Java : 煉瓦
Ruby : 絵の具
559:デフォルトの名無しさん
07/11/09 01:42:26
俺言語とかDSLを作らなくても最終目的に向かう途中で実行系自体がDSLみたいな状態になる。
プログラムを作るというより実行系の環境を最終目的物に書き換えていくみたいな感じ。
粘土細工作るときの作業台全体みたいな物だと思ってるんだけどどうなんだろう。
560:デフォルトの名無しさん
07/11/09 01:42:57
うわ、くだらねぇもの書いている間にシンプルなお答えが orz
561:デフォルトの名無しさん
07/11/09 02:20:03
その点、haskellとかocamlとかどー考えてんだろ
562:デフォルトの名無しさん
07/11/09 02:44:35
Haskell 実行する前に問題解決
563:デフォルトの名無しさん
07/11/09 07:59:36
>>551
出来る
けど内部定義のdefineだから
グローバルな束縛にならない
一方set!なら可視な束縛の変更だから
グローバルな環境の変更もできる
553がシンプルな答えだけど
564:デフォルトの名無しさん
07/11/09 08:42:26
>>563 の言うようにset!がシンプルだけど,
let環境の値としてinc, dec(を含むリスト)を返し,それを外部でinc, decで束縛すれば...
(define tmp
(let1 count 0
(define (inc) ...)
(define (dec) ...)
(list inc dec)))
(define inc (car tmp))
(define dec (cadr tmp))
;; 自分では動くか試してない(ぉ
565:デフォルトの名無しさん
07/11/09 10:18:36
それなら、defineせんでも、lambda式返せばいい。
566:546
07/11/09 12:24:49
>547
ありがとうございます
make sbcl-core
rm -f /home/hoge/.sbcl/sbcl.core-with-slime
sbcl <<EOF
This is SBCL 0.9.17, an implementation of ANSI Common Lisp.
More information about SBCL is available at <URLリンク(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.
* (load "../src//slime-cvs/swank-loader.lisp")
load: not found
*** Error code 127
というメッセージが出ているので、makeの問題では無いと思うんですが…
567:デフォルトの名無しさん
07/11/09 12:35:36
Scheme も internal define なんて導入せず、それ以前の Lisp みたいに
define は top level をいじることにしとけばよかったのにな。
そうすれば begin の
5.1 Programs
> At the top level of a program (begin <form1> ...,) is equivalent
> to the sequence of expressions, definitions, and syntax
> definitions that form the body of the begin.
5.2.2 Internal definitions
> Wherever an internal definition may occur (begin <definition1>
> ...,) is equivalent to the sequence of definitions that form the
> body of the begin.
みたいな特別扱いも不要だし
(define x 10)
(define y x)
y => 10
(let ()
(define x 10)
(define y x)
y) --> error
なんてわかりづらいこともなくなったのに。
568:デフォルトの名無しさん
07/11/09 14:36:31
beginのその特別扱いってなんであるんだ?
処理系書くとき邪魔だよねえ。
しかしdefineで内部関数を書けるのは便利。
labelsとかfsetとかは醜い。書きづらいし読みづらい。
569:デフォルトの名無しさん
07/11/09 15:16:43
二つ目の方が、
(begin <form1> ...)じゃないから、
(begin (begin <definition1> ...))を機械的に、
<definition1> ...とsplicingするわけにいかないのがきつい…
こっちはR6RSではないんでしょ。
・Internal definitions are now defined in term of letrec*.
トップレベルの方はライブラリがらみでまた気にするところ増えたけど。
570:デフォルトの名無しさん
07/11/09 15:48:37
(begin (begin <definition1> ...))が
(begin <definition1> ...)になって、次は、
<definition1> ...でいいんじゃないのかなあ?
その辺り、R6RSの方が解釈しやすい書き方だけど。
<body> <library body> <top-level body>と、
構文上のノンターミナル使って定義してあるから。
R5RSは文章での説明が多くて理解するのに頭を使う。
571:デフォルトの名無しさん
07/11/09 21:44:17
The Little Shemerを簡単じゃないかと思衣ながら読んでいたら、
8章の途中から泣きそうになった(高階関数のあたり)。
何とか理屈はわかったけれど、身に付くかどうか・・・
がんばってみます。
572:デフォルトの名無しさん
07/11/09 23:47:21
>>571
おお仲間だ!
multiremberEcoとかcontinuationとか出てきたあたりで学習速度がすっごいダウンするよね
573:デフォルトの名無しさん
07/11/10 00:50:26
The Little Shemerは、
曖昧に理解せず、身に付けさせるための本だから、
ちゃんと読み終わったら身に付くよ。
574:デフォルトの名無しさん
07/11/10 00:56:59
seasonedとかreasonedはどうだった?
575:デフォルトの名無しさん
07/11/10 12:38:29
lisp で並列分散処理プログラムを実際に書いている人は居ます?
どういった処理系もしくはライブラリを使ってますか?
やっぱりほとんどいないのかな。。
576:デフォルトの名無しさん
07/11/10 12:57:24
3行目があるせいで釣りにしか見えん。
577:575
07/11/10 13:40:41
まじめに自分もその環境でコーディングしたいと考えています。
並列プログラミングの話ってほとんど語られていないと思ったんで。
578:デフォルトの名無しさん
07/11/10 14:08:27
Erlisp は期待してたんだけど、どうなったのだろう
579:デフォルトの名無しさん
07/11/10 14:09:17
cmlisp とか, *lispとかの話かい???
580:デフォルトの名無しさん
07/11/10 14:36:44
CL のライブラリだよ
581:デフォルトの名無しさん
07/11/10 22:16:14
アナルlisp?
582:デフォルトの名無しさん
07/11/11 00:04:04
Schemeの入門はLittle Schemerしかないのかな。
手習いや湯浅先生の入門本は入手しづらいし。
583:デフォルトの名無しさん
07/11/11 02:55:56
あなりすぷ・・・
584:デフォルトの名無しさん
07/11/11 12:23:59
(cons 'ちんぽ 'アナル)
585:デフォルトの名無しさん
07/11/12 07:54:12
`(ちんぽ . アナル)
586:デフォルトの名無しさん
07/11/12 09:50:01
Python実装だけど並列処理の記述はLispでやる予定の俺がいますよ
587:デフォルトの名無しさん
07/11/12 22:13:04
みんなschemeの処理系なに使ってんの?
みんな自作?
588:デフォルトの名無しさん
07/11/12 22:21:59
ごうしゅをつかってまつ
589:デフォルトの名無しさん
07/11/12 22:49:07
Gauche 時々 MIT
590:デフォルトの名無しさん
07/11/12 23:10:25
587 じゃないけど...
MIT 使ってる人は初めてだ。もし良かったら、
どんな時に Gauche じゃなくて MIT を使うか
教えて下さい。
591:デフォルトの名無しさん
07/11/12 23:26:12
MITしか入ってない環境で作業するとき・・・。
592:591
07/11/12 23:50:57
職場で借りてるファイルサーバになぜか入ってて時々使ってるって程度の話ね。
593:デフォルトの名無しさん
07/11/12 23:58:55
多くのディストリとかcygwinに、わりとデフォで入っているという理由で guile を使うことがある
594:デフォルトの名無しさん
07/11/13 00:16:13
>>591,592
どうもありがとう。何か拘りがあって使ってらっしゃるのかと思いました。
595:デフォルトの名無しさん
07/11/13 00:46:26
>>587
slang
596:デフォルトの名無しさん
07/11/13 01:25:24
リストの中からある要素を探して、その要素の前にあるオブジェクトを破壊的に挿入する
にはどうしたらいいでしょう。例えば、3 の前に 'a を挿入したいです。
(let ((x 3))
(let ((ls (list 1 2 3 4 5)))
;; ここ
ls))
=>(1 2 'a 3 4 5)
597:デフォルトの名無しさん
07/11/13 02:27:53
俺初心者で悪いけど、こういうこと?
(define (find-insert lst fnd val)
(define (find-cdr lst f)
(if (equal? (cadr lst) f)
lst
(find-cdr (cdr lst) f)))
(let ((l (find-cdr lst fnd)))
(set! (cdr l) (cons val (cdr l)))))
(define ls '(1 2 3 4 5))
(define x 3)
(find-insert ls x 'a)
(write ls)
598:デフォルトの名無しさん
07/11/13 04:01:03
>>597
お付き合いいただいてどうもです。ヒントになりました。
setf を使えば良かったみたいです。3 の後になってしまいますが、
次善の策としてこれでも良いです。
(let ((x 3))
(let ((ls (list 1 2 3 4 5)))
(let ((place (member x ls)))
(setf (cdr place) (cons 'a (cdr place))))
ls))
=>(1 2 3 a 4 5)
599:デフォルトの名無しさん
07/11/13 12:00:26
>>587
俺はPLTだな…IDEが付いてくるからって理由だけだが。
600:デフォルトの名無しさん
07/11/13 12:14:47
gaucheとscm。
scmはdefaultでreadlineがあるからちょこちょこ書くときはこっち。
601:デフォルトの名無しさん
07/11/13 18:00:34
scheme48(とguile)
有理数が使えていろんな環境で使えるのはこれくらいしかない(と思う)
ocsなんかも面白そうだけどまだあんまり使ったことない
602:デフォルトの名無しさん
07/11/13 18:05:51
一度どれか使っちゃうと、
独自仕様部分のポーティングが面倒になる。
603:デフォルトの名無しさん
07/11/13 18:51:27
つまりスキームなんてどれも使うな、コモンリスプ最強ってことか?
604:デフォルトの名無しさん
07/11/13 20:17:53
>>603
Common Lispの処理系が動かない環境もあるんでつ(´・ω・`)
605:デフォルトの名無しさん
07/11/14 01:05:28
どんな環境?
606:デフォルトの名無しさん
07/11/14 06:55:03
zaurus-openbsdとか
607:デフォルトの名無しさん
07/11/14 13:22:12
clispくらい動きそうだけどな
608:デフォルトの名無しさん
07/11/14 13:58:42
つPalmOS
609:デフォルトの名無しさん
07/11/14 18:19:10
>>607
動きそうだけど動かないですねぇ
clispもGCLもGaucheもMzSchemeもGambit-Cも
Gambit-Cはビルドは成功するけどリーダがいかれてて
3 -> 0
8 -> unbound error
とかになります
ソースが機械翻訳のCだから追う気になれないけど
規則性のあるバグだから見つかればつぶせそうです
scheme48は依存ライブラリもなく、GCも多倍長計算も有理数も自前なのにi386 onlyでポーティングされてるのが疑問
だから自分でパッケージ作っていれてます
610:デフォルトの名無しさん
07/11/15 15:48:16
Linuxならi386以外にもportされてるけどな
URLリンク(packages.debian.org)
611:デフォルトの名無しさん
07/11/16 01:12:44
というかzaurusなら普通にscheme48のパッケージが流通しているわけであるが。
感度の悪いアンテナ持ってるやつってどうよ?
612:デフォルトの名無しさん
07/11/16 06:53:05
>>611
zaurus-"OpenBSD"の話です
i386のみにportingされているのは事実です
i386じゃなくても動くのも事実ですけどね
613:デフォルトの名無しさん
07/11/16 07:42:01
好きで使っているOSへの愚痴は、そのOSの板でやってくれ。
614:デフォルトの名無しさん
07/11/16 23:20:53
そう、ここは好きじゃないのに使わされている OS への愚痴を書き込む場所です
615:デフォルトの名無しさん
07/11/16 23:48:10
好きでも嫌いでもないOSの愚痴はどこに書き込んでもいいです
616:デフォルトの名無しさん
07/11/16 23:51:51
押忍
617:デフォルトの名無しさん
07/11/16 23:58:29
OCS ってこれか。
URLリンク(will.iki.fi)
618:デフォルトの名無しさん
07/11/17 01:17:35
御意
619:デフォルトの名無しさん
07/11/20 13:14:54
>>600
ledit使えばいいんじゃね? > readline
$ ledit gosh -i
$ alias gau='ledit gosh -i'してる。
620:デフォルトの名無しさん
07/11/20 15:57:12
SECDR-Schemeってソース見てみたいんだけど、誰か持ってない?
テンプレのリンクは切れてて見れませんでしたわ。
621:デフォルトの名無しさん
07/11/20 23:48:16
以前ダウンロードしたときはリンク切れから適当にURLを推定して当てた記憶があるですよ。
622:デフォルトの名無しさん
07/11/21 10:39:21
だから、そのダウンロードしたソースを持ってないでしょうか?
って聞いてるんだわ。(^〜^)
623:デフォルトの名無しさん
07/11/21 10:49:39
「 ̄ `ヽ、 ______
L -‐ '´  ̄ `ヽ- 、 〉
/ ヽ\ /
// / / ヽヽ ヽ〈
ヽ、レ! { ム-t ハ li 、 i i }ト、
ハN | lヽ八l ヽjハVヽ、i j/ l !
/ハ. l ヽk== , r= 、ノルl lL」
ヽN、ハ l ┌‐┐ ゙l ノl l
ヽトjヽ、 ヽ_ノ ノ//レ′
r777777777tノ` ー r ´フ/′
j´ニゝ l|ヽ _/`\
〈 ‐ 持ってるが lト、 / 〃ゝ、
〈、ネ.. .lF V=="/ イl.
ト |お前の態度が とニヽ二/ l
ヽ.|l 〈ー- ! `ヽ. l
|l気に入らない lトニ、_ノ ヾ、!
|l__________l| \ ソ
624:デフォルトの名無しさん
07/11/23 13:49:48
CommonLispやSchemeでは、
2個以上の引数を取るandやorはマクロで定義されている様なんですが、
関数を使っても定義できるはずです。
なぜマクロを使っているのでしょうか。
625:デフォルトの名無しさん
07/11/23 14:01:08
無駄な評価をふせげるから。
626:デフォルトの名無しさん
07/11/23 14:02:36
そんで、大昔は、特殊形式でやる流儀もあったけど、
今はマクロで済むことはマクロでやる流儀。
627:デフォルトの名無しさん
07/11/23 14:39:20
誰かfranzセミナー行った人、内容教えて
628:624
07/11/23 14:55:37
>625
関数だと引数をみんな評価してしまうけど、
マクロならしないってことですか?
>626
すいません
特殊形式とマクロの違いがよくわかってないんですが、
引数を関数とは違う順序で評価するという点で同じで、
そのうち特殊形式はプリミティブなものと言うような理解で
いいんでしょうか。
629:デフォルトの名無しさん
07/11/23 15:32:46
>>628
andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ?
でも関数は「まずすべての引数を評価する」機構なわけで、それではandもorも実現できない。
一方、マクロは引数をまったく評価しない。だからこれを使って定義されている。
特殊形式は、すべての引数を評価するとは限らない関数、みたいなもので、
想像の通り、プリミティブなものだ。
てかこの辺り、Lispの勉強の初日や二日目の範疇じゃないか?
630:デフォルトの名無しさん
07/11/23 22:22:56
遅延評価を導入すれば関数として統一的に定義じゃないかという吊りかも
631:デフォルトの名無しさん
07/11/24 09:36:14
脳内のイメージが遅延評価な人なのかもしれん。Haskell でも試してみたら?
632:デフォルトの名無しさん
07/11/24 11:00:01
>>628
なんのために書籍の「ON LISP」があると思っているのか
633:デフォルトの名無しさん
07/11/24 11:28:27
賢い人を更に教育するため。
私たちにとっては,On Lisp でレベルアップして,
更にいろいろ教えてくれる様になったその人たちに
より突っ込んだを質問が出来るようになる。だな。
634:デフォルトの名無しさん
07/11/24 13:54:45
初心者はANSI Common Lispがいいよ。On Lispはちょっと応用すぎる。
あとはEmacs Lisp Tutorialとかも参考になるだろうね。
635:デフォルトの名無しさん
07/11/24 14:04:06
Scheme→Common Lispだと拒否しちゃいそうだけど
Common Lisp→Schemeだと使い分けられそう。
636:デフォルトの名無しさん
07/11/24 14:08:24
プラットフォームがBlackboardならScheme、それ以外ならCommon Lisp。
637:デフォルトの名無しさん
07/11/24 15:35:48
引数の評価についてはSICPでも超序盤で触れてるね
638:デフォルトの名無しさん
07/11/24 16:42:39
>>633のような輩に無料で教えるほど賢い人は暇ではないだろうな
639:624
07/11/24 22:13:01
>629
>andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ?
なるほど、単なる論理演算かと思ってました
ありがとうございます
>630,631
最近Haskellをかじって
うはwwwマクロもういらねんじゃね?www
とかいって喜んでたんですが、やっぱりそれであってるんですね
640:デフォルトの名無しさん
07/11/25 02:35:01
>>115-128 あたりで同じやりとりをした気がするけど、遅延評価でも関数じゃ setq とかが書けないんで、マクロは必要。
641:デフォルトの名無しさん
07/11/25 03:53:03
マクロがあってもスペシャルフォームは書けないはずだけど。
642:デフォルトの名無しさん
07/11/25 10:05:48
setq って quote して set するだけだと思ってたけど、他に何かしてたっけ?
643:デフォルトの名無しさん
07/11/25 13:39:38
遅延評価でquoteが書けるか?
644:デフォルトの名無しさん
07/11/25 16:05:00
>>642
説得してる
645:デフォルトの名無しさん
07/11/25 16:12:29
>>642
それだと(多くの処理系では)グローバルしかセットできない
646:デフォルトの名無しさん
07/11/25 17:16:37
なるほど。
# 普段 ELisp しか使ってないから、 set するだけだと思ってた。
じゃ、 case とかが書けないからマクロは必要、に訂正かな。
647:デフォルトの名無しさん
07/11/27 01:33:45
>>635
SchemeとXyzzyLispって俺はどうすれば…。
648:デフォルトの名無しさん
07/11/27 02:05:34
どうしようもないね
649:デフォルトの名無しさん
07/11/27 03:29:28
>>635
俺は逆だなぁ、CLだとなんでも揃うのだけどSchemeだと原理主義ありきなんで妥協してくれないから。
650:デフォルトの名無しさん
07/11/27 11:05:23
原理主義ってどんなの?
「プリミティブがあれば充分」論者はR6RSで少なくなっていくと思う。
moduleとかOOとか。
651:デフォルトの名無しさん
07/11/27 11:21:24
じゃあ、さっさと R6RS を実装しやがれ
652:デフォルトの名無しさん
07/11/27 11:33:55
あんなR6RSを正直に完全実装するのがでてくるかな?
リファレンス実装以外で。
653:デフォルトの名無しさん
07/11/27 11:38:14
今のメジャーな処理系が実装するというよりは、新しい処理系で R6RS 準拠ってのが出てきそうな気がする
654:デフォルトの名無しさん
07/11/27 11:57:18
SchemeのC++0xやー
655:デフォルトの名無しさん
07/11/27 17:28:37
個人的にはR5RSにリードマクロとsyntax-caseと{read,write}-byteとfile-seekとsystemと環境を明に操作する手段とimplicit forceとfull numeric towerとFFIさえあれば良いだけなんだけどなぁ
実装してる処理系はあるけど標準化されてないってのがネック
UTF-8ファイルの読み書きで1バイト読み込むのか1文字読み込むのか実装依存(1文字読み込む実装は知らないけど)だし
構文オブジェクトもファーストクラスにして
(define foo (syntax ...なんて構文で定義したり
applyの第1引数に構文オブジェクトを受け取るように出来たらいいのに
でもそうすると構文木解釈系でしか動かないだろうから相当遅くなるし
そもそも合成構文はevalされる前に展開されるから無理か
ただCLと違って値も関数もdefineで定義できるのに
構文定義だけdefine-syntaxってのが美しくない気がする
define-syntaxは処理系に対して、defineは実行系に対しての構文だと割り切るしか無いか
656:デフォルトの名無しさん
07/11/27 19:57:37
そういえば以前PCLの翻訳が進んでるって話題でてたけどどうなったんだろう。
中止になったのなら半分まで進めて止まってる翻訳再開しようかな・・・
657:デフォルトの名無しさん
07/11/27 22:43:16
>>656 あなたは「RHG読書会」というお告げが聞こえたような気がした --more--
658:デフォルトの名無しさん
07/11/28 11:59:24
>>656
Lisp関係の書籍出している出版社に問い合わせてみては?
既に進んでいるなら、翻訳者陣に参加して加速してくださいw
659:デフォルトの名無しさん
07/11/29 16:42:48
>655
ハゲド
ごちゃごちゃしたいならCLに行けば良いんだから
schemeは原理主義的な性格を守っていってほしい
構文オブジェクトは普通のマクロ入れると
コンパイラのコード生成ルールを吐いてくれるように出来ないかな?
ほんとに動的なマクロだと無理だろうけど...
660:デフォルトの名無しさん
07/12/06 13:58:46
continuation の挙動について理解できていない点があり,
以下のような 2 種類の Scheme コードを書いてみました.
;;; case-A ----------------------------------------
(define continuation-A #f)
(define procedure
(lambda (n)
(define counter-A n)
(call-with-current-continuation
(lambda (k)
(set! continuation-A k)
(write counter-A) (newline)
)
)
(set! counter-A (+ counter-A 1))
(write counter-A) (newline)
)
)
(procedure 0) ; ==> 0 と 1 が表示される
(continuation-A #t) ; ==> 2 が表示される
(continuation-A #t) ; ==> 3 が表示される
(continuation-A #t) ; ==> 4 が表示される
;;; case-A おわり
661:660
07/12/06 14:00:00
;;; case-B ----------------------------------------
(define continuation-B #f)
(do ((counter-B 0 (+ counter-B 1)))
((= counter-B 10) 'finished)
(if (= counter-B 5) (call-with-current-continuation (lambda (k) (set! continuation-B k))))
(write counter-B) (newline))
; ==> 1 2 3 ... 7 8 9 finished が表示される
;;プログラム実行部
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される
;;; case-Bおわり
662:660
07/12/06 14:02:18
case-A では
continuation-A が生成されたときから変数 counter-A が
ずっと見えたままであり,
continuation-A の呼び出しごとに counter-A の束縛値が
1 ずつインクリメントされていく.
(continuation-A が呼ばれるたびに,
「continuation-A 生成時における counter-A の束縛値」である 0 に
いちいちリセットされることはない.)
case-B では
continuation-B が呼ばれるたびに counter-B の束縛値は
「continuation-B 生成時の counter-B の束縛値」である 5 に
リセットされる.
多分基本的なところが理解できていないのだと思いますが,
この 2 つのコードにおける continuation 上の変数の見えかたについて
なぜこのような違いが生ずるか,お教えいただければ助かります.
663:デフォルトの名無しさん
07/12/06 15:14:39
わざわざdoなんか使うから話が余計ややこしくなってる。
doを再帰に展開してごらん。
664:デフォルトの名無しさん
07/12/06 15:14:49
doは再帰だから。
doのdefine-syntaxがR5RSに書いてあるから読んでみたらどうよ?
束縛環境を良く考えると分かるはず。↓while版
(define continuation-B #f)
(let ((counter-B 0))
(while (< counter-B 10)
(if (= counter-B 5)
(call-with-current-continuation (lambda (k) (set! continuation-B k))))
(write counter-B)
(write-char #\ )
(inc! counter-B))
(print 'finished))
(continuation-B #t)
(continuation-B #t)
(continuation-B #t)
665:デフォルトの名無しさん
07/12/06 15:15:39
do は counter-B の値を破壊的に書き換えてない。
新しい環境作って、そこで同じ名前に別の値を束縛してるだけ。
だから元の場所に戻ると、そこの環境にはそのときの値が残ってるから、その値が参照される。
set! は破壊的に書き換えるから、元の値が残ってない。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5092日前に更新/189 KB
担当:undef