関数型プログラミング言語Haskell Part34 (694レス)
上下前次1-新
454: 2024/10/03(木)20:59 ID:B2Xmf+Xl(8/9) AAS
値のリスト自体をそのまま持ってくればvalueということになるんだろうけれど、
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
455: 2024/10/03(木)21:11 ID:zyXzLypu(4/6) AAS
判断するって何言ってるの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
456: 2024/10/03(木)21:22 ID:B2Xmf+Xl(9/9) AAS
valueとcomputationの違いは微妙で$(prog n)の実行結果として出てくるかどうかとか
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。
最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
省4
457: 2024/10/03(木)21:30 ID:zyXzLypu(5/6) AAS
❌決まってない
⭕知らない
間違えるなよ
458: 2024/10/03(木)21:31 ID:zyXzLypu(6/6) AAS
お前の脳内にしかないお花畑に巻き込むのやめてもらっていいですか?
459: 2024/10/03(木)22:10 ID:/brOvmjG(1) AAS
おそらくメンタルヘルスに問題がある方なのかな?
自分の頭の中の映像をそのまま言葉にしたような感じを受ける
460(2): 2024/10/04(金)05:46 ID:vLDssEdm(1/9) AAS
>>428
Haskellの副作用については2つの解釈がある。
1.副作用も含めてアクションという単位で値としてみる。
(アクションを受け取って、アクションを返す関数)
2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。
((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
461(1): 2024/10/04(金)05:52 ID:EogKDI3R(1/3) AAS
>>460
ようするに副作用はないってことじゃん
462(1): 2024/10/04(金)05:57 ID:vLDssEdm(2/9) AAS
>>461
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。
ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
463: 2024/10/04(金)06:07 ID:4jD3Hbcp(1) AAS
副作用が隔離できていることが大切
スレの基地外の隔離スレのように
464(1): 2024/10/04(金)06:24 ID:EogKDI3R(2/3) AAS
>>462
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
465(1): 2024/10/04(金)07:22 ID:vLDssEdm(3/9) AAS
>>464
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
466(1): 2024/10/04(金)07:38 ID:EogKDI3R(3/3) AAS
>>465
まあそのほうがいいか
上の方にいた彼はなんか脳内にこだわりがあって、普通の型付きラムダ計算以上のことをやってると思ってるフシがあったね
467: 2024/10/04(金)07:48 ID:vLDssEdm(4/9) AAS
>>466
そうそう。
副作用は無い!って、こっちが必死になって弁を述べれば述べるほど、屁理屈感が出てくる。
それよりは副作用を認めて、「副作用を分離」「副作用を伴っても参照透明性が保たれている」って言った方が、納得感がある。
468: 2024/10/04(金)19:23 ID:tixO3LDq(1/22) AAS
とりあえず続きを書いてみる。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。
ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。
省1
469: 2024/10/04(金)19:23 ID:tixO3LDq(2/22) AAS
Moggiのアイディア1
・返り値の型がBのcomputationは、何か型構築子をIOとすると、その型構築子を適用した型 IO B のvalueに対応する。
※Moggiの原理ともいう。
つまり、上で挙げた入出力プログラム prog の型は、具体的に A → IO B になると言っている。
IO B 型の実装で、入出力の予約だか、値のリストだか指示書だか表現はいろいろあるが、そういう機構を実装すれば、
prog :: A → IO B
は参照透過性を保ったまま入出力を行うプログラムになる。
省3
470: 2024/10/04(金)19:24 ID:tixO3LDq(3/22) AAS
Moggiのアイディア2
・入出力プログラム(に対応する数学的概念)は、圏をなすはずだ。
Moggiのアイディア1の段階でもprog :: A → IO Bは参照透過性を保ったまま入出力を行うプログラムになるはずだが、
入出力プログラム同士の合成が考えられていない。入出力プログラム prog1、prog2と開発したら、できるだけ再利用するというのが
現実のプログラミングだと思う。わざわざprog1とprog2の合成として定義できそうなプログラムを得るために、イチイチいちから
開発するということを理論的に要請されるというのは不合理。
純粋関数は、λ式に割り当てられることになって、当然、圏をなすだろうに、
省4
471: 2024/10/04(金)19:29 ID:tixO3LDq(4/22) AAS
Moggiのアイディア1の段階でcomputationの概念というのは解消してしまう。
PlotokinとPowerはそこが不満なんだろうか?
472(1): 2024/10/04(金)20:18 ID:WSIC8Xt5(1/14) AAS
だから、副作用を隠してラムダ計算に変換する手続きは、世界をステートにする変換をした時点で達成されてるわけで、そんなの太古の昔から分かってたことだろ
IO aの定義読んでから出直せよ
473(1): 2024/10/04(金)20:30 ID:SclsbEZF(1) AAS
日を跨ぐつもりならコテハンでも付けてくれんか
追えん
474(1): 2024/10/04(金)20:44 ID:tixO3LDq(5/22) AAS
>>472
だからそれはわかっているって。評価途中では実際の入出力はせず指示書だか値のリストだけ作成して
参照透過性を保証して、参照透過性が要求されなくなったプログラムの最終段階でリストに従って
入出力を実行するような仕組みがあれば、参照透過性を保ったまま入出力はできるという話でしょ。
それを数学的にどう正当化するかという話を書いているんだって。
>>473
水曜日あたりからだからそんな分量ないよ。
475: 2024/10/04(金)20:49 ID:WSIC8Xt5(2/14) AAS
>>474
どこが正当化されてないのか意味不明なんだけど
ていうか正当化って何?
476(1): 2024/10/04(金)20:51 ID:tixO3LDq(6/22) AAS
だから、入出力がある数学的関数なんてないじゃん。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
477: 2024/10/04(金)20:57 ID:6lZW+X9H(1/3) AAS
こんなところで長文書くのはやめてもろて
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
478(2): 2024/10/04(金)20:58 ID:WSIC8Xt5(3/14) AAS
>>476
型付きラムダ計算の時点で数学的に表現されてるだろ…
意味不明すぎる
479(2): 2024/10/04(金)21:00 ID:qBjLuAvO(1/2) AAS
メインの入力とメインの出力は数学にもある
主じゃないやつを副作用といってる
480(1): 2024/10/04(金)21:11 ID:tixO3LDq(7/22) AAS
>>478
なるほどそう考えていたのか。全部λ計算でアセンブルすりゃ数学的に還元できるだろうってわけね。
でもそうだとすると文字列を表示するハードウェアの部分はどう還元するの?
>>479
よくわかんない。具体的に言うとどういうのある?
481: 2024/10/04(金)21:11 ID:tixO3LDq(8/22) AAS
>>478
なるほどそう考えていたのか。全部λ計算でアセンブルすりゃ数学的に還元できるだろうってわけね。
でもそうだとすると文字列を表示するハードウェアの部分はどう還元するの?
>>479
よくわかんない。具体的に言うとどういうのある?
482: 2024/10/04(金)21:18 ID:WSIC8Xt5(4/14) AAS
>>480
アセンブルって何?
後半も何言ってるのかちゃんと分かるように書いて
483: 2024/10/04(金)21:25 ID:WSIC8Xt5(5/14) AAS
そうだよ、こんなとこじゃなくてzennとかに煽った感じのタイトルつけて炎上する記事書いてコメントもらって来いよ
484(3): 2024/10/04(金)21:28 ID:tixO3LDq(9/22) AAS
λ計算を機械語とかアセンブラと見立てて、λ計算ですべて数学世界を組み立てれば、
入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする
理由がわからない、ということだろうと思った。
プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ
だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である
ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか?
入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ
省2
485: 2024/10/04(金)21:33 ID:tixO3LDq(10/22) AAS
これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
486: 2024/10/04(金)21:33 ID:tixO3LDq(11/22) AAS
これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
487: 2024/10/04(金)21:34 ID:qBjLuAvO(2/2) AAS
関数の「型」を見ろ
入力が何で出力が何かが宣言されている
488: 2024/10/04(金)21:39 ID:tixO3LDq(12/22) AAS
>>484
ディスプレイに表示するまでの概念はよく考えたら既存の例でもなかったわ。
焦って変なこといったスマン。
ちょっと説明を考える。
489: 2024/10/04(金)21:39 ID:WSIC8Xt5(6/14) AAS
>>484
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
490(1): 2024/10/04(金)21:48 ID:tixO3LDq(13/22) AAS
λ計算が数学的に正当化されてないというような話はしてなくて、
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
491(1): 2024/10/04(金)21:52 ID:WSIC8Xt5(7/14) AAS
>>490
じゃあHaskellは純粋にただの型付きラムダ計算なんだから、数学的に正当化されてない部分などない
おしまい
492(1): 2024/10/04(金)22:03 ID:tixO3LDq(14/22) AAS
>>491
うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される
解析学とか、線形代数学とかいらない、みたいな論法じゃない?
この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、
そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。
みんなそこに興味あるわけじゃないと思いますよ。
493(1): 2024/10/04(金)22:08 ID:vLDssEdm(5/9) AAS
>>484
横からというか >460 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか?
でしたら、解釈2では納得出来ませんでしょうか?
解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。
モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。
(これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが)
IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。
省5
494(1): 2024/10/04(金)22:14 ID:WSIC8Xt5(8/14) AAS
>>492
ラムダ計算も集合論上で展開されてるだろ
だから、Haskellも集合論の言葉で書かれてるじゃん
そんな誰もが分かってるけど、いちいち書いても何の得もないことを話したかったの?
495: 2024/10/04(金)22:16 ID:vLDssEdm(6/9) AAS
この場合、IOモナドを使って変数xを書き換えているのではなく、シャドーイングによって同じxという名前の変数を新しく作って、古い x に +1 した値を束縛しています。
496(1): 2024/10/04(金)22:21 ID:tixO3LDq(15/22) AAS
>>493
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
497: 2024/10/04(金)22:27 ID:vLDssEdm(7/9) AAS
無理やりハードウェアも数学と言い張るなら、ハードウェアもチューリングマシンという計算モデルなので数学が元と言えなくはない?
そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
498(1): 2024/10/04(金)22:28 ID:tixO3LDq(16/22) AAS
>>494
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
499(1): 2024/10/04(金)22:32 ID:WSIC8Xt5(9/14) AAS
>>498
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
500(1): 2024/10/04(金)22:34 ID:WSIC8Xt5(10/14) AAS
最低限、論文に書いてある正しいこととお前の妄想がはっきり区別できるように感想文を書けよ
501(1): 2024/10/04(金)22:44 ID:tixO3LDq(17/22) AAS
>>499
はっきりそうは言ってない。
プログラムをλ項に対応させて単純化させると、valueからvalueへの全域関数となるけれど、
そう考えると、非停止性とか非決定性、副作用といった現実のプログラムにある特徴が失われる(だからそれを何とかしようと読める)。
>>500
そんなことできるほど力量ないです。
502: 2024/10/04(金)22:46 ID:vLDssEdm(8/9) AAS
>>496
少なくともコマンド系のプログラムは圏をなしますね。
Haskellで作ると実感しますが、Haskellに限らず、
(ユーザーから見て)プログラムそのものが関数になります。
Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。
id相当のプログラムは作れますし。
・・・と考えると圏をなすと思うのですが。
省5
503: 2024/10/04(金)22:50 ID:WSIC8Xt5(11/14) AAS
>>501
なんでラムダ項に対応させると全域関数になるわけ?ラムダ計算は停止しない計算も表現できるモデルでしょ
言ってることが意味不明なんだよ
504(1): 2024/10/04(金)22:52 ID:tixO3LDq(18/22) AAS
ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
505: 2024/10/04(金)22:52 ID:tixO3LDq(19/22) AAS
ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
506: 2024/10/04(金)22:54 ID:WSIC8Xt5(12/14) AAS
そもそもラムダ項は関数ではないし、集合ではあるということはできるけど、それは自然数1は集合であるみたいな話でそれに意義なんてないよ
507: 2024/10/04(金)23:02 ID:vLDssEdm(9/9) AAS
>>504
>398 じゃ答えにならない?
508: 2024/10/04(金)23:02 ID:6lZW+X9H(2/3) AAS
流石にこれじゃ関数型界隈の人達にボコボコにされて終わるね
やめといた方がいい
509(1): 2024/10/04(金)23:04 ID:tixO3LDq(20/22) AAS
βη簡約するとλ項が別の簡約されたλ項になる。この対応関係を数学的関数とみなせると言ってると解釈してる。
510: 2024/10/04(金)23:12 ID:WSIC8Xt5(13/14) AAS
>>509
みなせるって何?
ようするにラムダ項は関数じゃないってことでしょ当たり前だけど
511(1): 2024/10/04(金)23:14 ID:tixO3LDq(21/22) AAS
全域関数となる理由はわからん。全域関数=数学的関数ということを言いたいんだろうと思ってたけどそこから詰めてなかった。
512: 2024/10/04(金)23:22 ID:WSIC8Xt5(14/14) AAS
>>511
お前が言い出したんだろ
513: 2024/10/04(金)23:30 ID:6lZW+X9H(3/3) AAS
これがワードサラダか
514: 2024/10/04(金)23:41 ID:tixO3LDq(22/22) AAS
すまんね。準備不足だったわ。詰めるところわかったし、
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
515: 2024/10/05(土)00:27 ID:aeHKoAMv(1/3) AAS
集合と写像の区別がついてないんだから、何を準備しようが時間の無駄
516: 2024/10/05(土)07:57 ID:jwoAd9Km(1/2) AAS
ZFでは集合しか無いから。写像だろうが、自然数だろうが何でも集合。全てを集合で実装する世界。
517: 2024/10/05(土)08:14 ID:JByJwyk5(1/4) AAS
圏論は逆で、対象(集合で言う元)を恒等写像と同一視して全てを射(写像)として扱うね。
518: 2024/10/05(土)08:53 ID:jwoAd9Km(2/2) AAS
対象Aに対しA=id_Aとする圏の定義は、射のクラスの上での全域的で無い結合的2項演算⚪︎を持つ代数系としての簡潔な定式化。この定義では圏には射しかなくて、対象とは恒等射の別名に過ぎない。
ただ、この圏の実装は入門者には分かり難い。
Aが圏Cの対象であることを古い文献はA in Ob(C)と書くことが多いけど、最近の文献はA in Cと書いてしまう。fが圏Cの射f:A --> Bなことはf in Hom_C(A,B)かf in Mor_C(A,B)。
519(1): 2024/10/05(土)10:51 ID:KE+ltgGd(1/2) AAS
普通のλはどの順序で適用しても同じ計算結果になる(Church-Rosserの定理)けど
副作用を伴うλは適用順序が入れ替わると副作用の順序も変わって同じ結果とは言えなくなるから
順序を保証する仕組みとしてモナドが応用されてるはず
IO a >>= (a -> IO b) -> IO b
は(a -> IO b)が(IO a)を受け取れないから
(IO a)からaを取り出せるところまで計算しないと(a -> IO b)を適用できない
仮に
省7
520: 2024/10/05(土)11:23 ID:KE+ltgGd(2/2) AAS
どうでもいいけど計算科学のside effect→副作用は誤訳だと思う
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
521(1): 2024/10/05(土)11:40 ID:gdCH0E84(1) AAS
圏論のコンコルド効果について。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
522(1): 2024/10/05(土)13:16 ID:AoKf42Y0(1) AAS
>>519
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
523: 2024/10/05(土)13:51 ID:2BBo/yBe(1/2) AAS
数日程度で成果を出す戦略を採用したにもかかわらず何年も戦争が続く
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
524: 2024/10/05(土)14:41 ID:hOtauQiF(1) AAS
>>522
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
省1
525: 2024/10/05(土)15:10 ID:u1hwkRNd(1) AAS
圏論の話題出すなよ
Haskellで何か書くにあたって利益があるわけじゃないんだから
526: 2024/10/05(土)15:30 ID:2BBo/yBe(2/2) AAS
利益は道徳よりも軽い
これも、未来予知ができなければ利益を計算できないことに原因がある
527(1): 2024/10/05(土)17:25 ID:JByJwyk5(2/4) AAS
>>521
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
528(1): 2024/10/05(土)20:22 ID:J2mQEu2j(1) AAS
>>527
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
529(2): 2024/10/05(土)20:30 ID:aeHKoAMv(2/3) AAS
集合と写像の区別もついてないんだから、集合と位相からやらないとだめ
530(2): 2024/10/05(土)22:07 ID:JByJwyk5(3/4) AAS
>>528
ありがとうございます。
手探りだったので、助かります。
重点的に勉強してみます。
(高卒にどこまで理解できるか…)
>>529
一応、区別付いてるつもりなのですが…。
省1
531: 2024/10/05(土)22:16 ID:aeHKoAMv(3/3) AAS
>>530
あー上で暴れてた人とは別人だったのね
でも、集合と位相は何をやるにしても必要だから頑張ってね
532(1): 2024/10/05(土)23:30 ID:bPGp2ASj(1) AAS
>>373=396=530 っぽいから言うと、(数学に関して)「分かった」「理解した」の自己基準が不安しかない
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
533: 2024/10/05(土)23:50 ID:JByJwyk5(4/4) AAS
>>532
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
534: 2024/10/06(日)01:53 ID:6zQjUfx4(1/3) AAS
いま正常性バイアスを理解した
全て正常だと仮定する
なるほど
上下前次1-新書関写板覧索設栞歴
あと 160 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.019s