Lisp Scheme Part17
..
666:デフォルトの名無しさん
07/07/01 19:05:54
>>662
え、めっちゃ有名な話だと思ってたよ。
俺の持ってる本にも書いてあるし。
667:デフォルトの名無しさん
07/07/01 19:07:11
>>664
λ
668:デフォルトの名無しさん
07/07/01 19:26:31
>>662
顔殴られたクマーみたい
669:デフォルトの名無しさん
07/07/01 19:36:59
lambdaと打ったらリガチャ扱いでλ出す、くらいのことは出来るだろう
670:デフォルトの名無しさん
07/07/01 20:03:58
>>666
俺、貧乏で本買えないから…
671:デフォルトの名無しさん
07/07/01 20:11:24
>>670
図書館行くとよいぞ。
672:デフォルトの名無しさん
07/07/01 20:24:56
関係ないけど、教養のためにとλ計算のプログラムを今書いてますが、
bashとかperlみたいに$を使う事にしてます。
(厳密には$と.で識別子を挟む。)
束縛子に$を使って、参照は識別子そのままなので、用法は逆ですけどね。
($m. $n. $s. $x. m s (n s x)) ($s. $x. s x) ($s. $x. s (s x))
こんな感じで
673:デフォルトの名無しさん
07/07/01 21:00:01
>>671
あんた賢いな
674:デフォルトの名無しさん
07/07/01 21:12:31
SKKのほうがいいよ
675:デフォルトの名無しさん
07/07/02 07:03:32
>>660
>>661
とても親切な返答有り難うございます。分かりました!
676:デフォルトの名無しさん
07/07/02 07:43:04
>>662
俺LISPで採用けってい
677:デフォルトの名無しさん
07/07/02 11:00:15
俺Lisp作ってる人ってどれくらいいるのかな
678:デフォルトの名無しさん
07/07/02 13:27:38
少なくとも今ある処理系の数だけあるよな
679:デフォルトの名無しさん
07/07/02 14:14:52
俺LISPといえるほどの独自仕様の処理系ってそんなにあったっけ
680:デフォルトの名無しさん
07/07/02 16:35:54
だから俺Lispなんじゃね?
681:デフォルトの名無しさん
07/07/02 18:14:29
lispじゃないけど>>662っぽい記法使ってる言語には
URLリンク(bugyo.tk)
こんな変なのがあったぞ。
682:デフォルトの名無しさん
07/07/02 20:18:53
ホントだ、良く見つけたね。
個人的には ^ は return に見えてしまう...
683:デフォルトの名無しさん
07/07/02 20:55:16
このSmalltalkerが
684:デフォルトの名無しさん
07/07/02 21:32:48
Metaluaはluaでlispのマクロっぽい事ができるらしい。
いっちょ前にquasi-quoteっぽい仕組みまである(様に見える)。
685:デフォルトの名無しさん
07/07/02 22:31:01
本質的にはλは開き括弧、.は閉じ括弧だから
[]でも<>でも{}でも`'でも良いのに
接頭字+空白セパレタが主流なのはなぜなんでしょうね?
686:デフォルトの名無しさん
07/07/02 22:34:22
書き込んでから気づきましたが
歴史的には接頭字の方が先なんでしたね
687:デフォルトの名無しさん
07/07/03 14:32:31
質問です。
アトムとリストと、
car,cdr,cons,atom,eq
これでどうやって足し算が出来たりするのでしょうか?
688:デフォルトの名無しさん
07/07/03 14:41:01
>>687
チャーチ数 でググれ
689:デフォルトの名無しさん
07/07/03 14:42:49
リストの長さで0以上の自然数を表すのがよく使われる手だね。
そうすると足し算はappendになる。他も自分で考えてみな。
690:デフォルトの名無しさん
07/07/03 14:54:04
あ〜、足し算はappendなのか。
だいたいイメージつかめた。
有り難うございます。
691:デフォルトの名無しさん
07/07/03 16:35:22
ん、やっぱりなんか引っかかります。
リストの長さで0以上の自然数を表すなら、
()=0
(())=1
((()))=2
は納得できるのですが、
これでどうやってリストを表すのでしょうか?
アトムしか表現できないんじゃないんですか?
692:デフォルトの名無しさん
07/07/03 18:49:44
()
(())
(() ())
(() () ())
693:デフォルトの名無しさん
07/07/03 19:35:56
>これでどうやってリストを表すのでしょうか?
言ってる意味が分かんないなぁ
694:デフォルトの名無しさん
07/07/03 20:56:23
砂場の石ころでもできる
だから何ってやつ
695:デフォルトの名無しさん
07/07/03 21:13:45
何段階かの問答を経て、ようやく「自分が何を訊ねたいのか」を掴む質問者っているけど、
この人もそれと同様、これから自分の疑問の内容がわかるんだと思う。
696:デフォルトの名無しさん
07/07/03 21:36:29
URLリンク(rikunabi-next.yahoo.co.jp)
リスパーなら演技くらいはできないとな。
697:デフォルトの名無しさん
07/07/03 21:42:57
マジな話、Lisperと話しするときは教養がいるよ。
プログラム言語の話とかだけじゃ相手にしてもらえない。
科学好き、数学好きとかが多すぎる。
698:デフォルトの名無しさん
07/07/03 22:03:06
個人的には数学は敬して遠ざけておきたい
そんな僕でも立派なLisperになれるでしょうか
699:デフォルトの名無しさん
07/07/03 22:09:47
ところで河合さんの頭は本物なの?
700:デフォルトの名無しさん
07/07/03 22:13:10
>>698
GNU GPLを暗唱できたらあるいみ立派なLisperになれるかも!
701:デフォルトの名無しさん
07/07/03 22:14:31
687さんは純Lispが五つの基本関数「だけ」で
本当にチューリング完全かどうか
疑問に思ってるんじゃないですか?
ちょうど1ヶ月前の自分と同じで
マッカーシーの論文斜め読みしたら
関数は五つで良いけど
→表記も含まれるから
condかifスペシャルフォームも必要みたいに感じました
本当に五つの基本関数(と真偽値)「だけ」でチューリング完全なら
自分にも教えてください
702:デフォルトの名無しさん
07/07/03 22:15:18
Lisp と GPL は全く関係無いな
703:デフォルトの名無しさん
07/07/03 22:25:57
おいおい、Gの付く話はやめてくれよ
704:デフォルトの名無しさん
07/07/03 22:35:59
>>701
再帰かループがないとどうにもならんよ
705:デフォルトの名無しさん
07/07/03 22:41:00
大前提としてλ式が必要
706:デフォルトの名無しさん
07/07/03 22:41:26
>>704
と、いうことはcondまたはifと
関数抽象のためのlambdaが必要ということになりますか
要素としては5関数2特別式でチューリング完全
707:デフォルトの名無しさん
07/07/03 22:44:52
そうか、lambdaだけでチューリング完全ですね
でもそうすると5関数の立場が…
708:デフォルトの名無しさん
07/07/03 22:48:57
Lispエバリュエータを書くのに最低限必要な関数だと思うが
709:デフォルトの名無しさん
07/07/03 22:51:55
λ算法とLispのlambdaは等価ではないので
710:デフォルトの名無しさん
07/07/03 23:01:19
そういやifはλで表現できたんだな…。
711:デフォルトの名無しさん
07/07/03 23:07:44
>>709
どこらへんですか?
正格評価だからですか?
712:デフォルトの名無しさん
07/07/04 00:57:12
>>708
チューリング完全である≠"apply" or "eval"が記述できる
lambdaがあればチューリング完全だけど
"Lisp"の機能を満たすために5つの基本関数が必要である
ってことですか?
713:デフォルトの名無しさん
07/07/04 10:57:50
リストの n 番目「以外」の要素のリストを得るにはどうすれば良いでしょうか
例えば (0 1 2 3 4 5 6 7 8 9) から 3 を除いた (0 1 2 4 5 6 7 8 9) が欲しいです
それとも、もしかすると Gauche の添付ライブラリの中にありますか…?
一応自分でも書いてみたのですが
かなり長〜くなってしまって。
714:デフォルトの名無しさん
07/07/04 11:10:12
(define (exclude-nth n l)
(cond
((null? l) l)
((= n 0) (cdr l))
(t (cons (car l) (exclude-nth (1- n) (cdr l))))))
715:デフォルトの名無しさん
07/07/04 11:25:50
好みの分かれるところか?
(define (exclude-nth n l) (append (take l n) (drop l ( + n 1))))
(exclude-nth 3 '(0 1 2 3 4 5 6 7 8 9))
=>(0 1 2 4 5 6 7 8 9)
716:デフォルトの名無しさん
07/07/04 12:12:11
>>715
takeは必ずリストつくるからappend!でセルを節約したくなる貧乏性な俺
717:デフォルトの名無しさん
07/07/04 12:56:33
レス感謝です。
>714
勉強になります。
>715
takeとdrop、こんなのあったんですね。
こんなに短くなるとは…
718:デフォルトの名無しさん
07/07/04 12:58:18
まさかこのオペレータを使う日が来るとは……。
(use gauche.sequence)
(define (exclude-nth n l)
(reverse!
(fold-with-index
(lambda (i e pr)
(if (= n i)
pr
(cons e pr)))
'()
l)))
;(exclude-nth 3 '(0 1 2 3 4 5 6 7 8 9))
;; =>(0 1 2 4 5 6 7 8 9)
719:デフォルトの名無しさん
07/07/04 13:03:35
>718
このオペレータ…とはどれのことなのか
Schemeに不慣れな私には判りませんが
…えーと…
ちょっと勉強がてら気合い入れて読んでみます…
720:デフォルトの名無しさん
07/07/04 13:05:28
fold-right-with-index(仮称)があればreverseしなくていいのにね。
721:デフォルトの名無しさん
07/07/04 13:29:05
fold-rightはある意味reverse以上のコスト
722:デフォルトの名無しさん
07/07/04 13:41:43
【問題】 >>713を不完全リスト(最後のcdr部がアトム)に対しても
適用できる様にexclude-nthを拡張せよ
ex.)
(exclude-nth 2 '(0 1 2 . 3)) => (0 1 . 3)
(exclude-nth 3 '(0 1 2 . 3)) =>(0 1 2)
(exclude-nth 4 '(0 1 2 . 3)) =>(0 1 2 . 3) ;; 同値
723:デフォルトの名無しさん
07/07/04 13:59:22
やってみました。あってる?
(define (exclude-nth n ls)
(cond ((null? ls) '())
((= n 0) (if (not (pair? ls)) '()
(cdr ls)))
((not (pair? ls)) ls)
(else (cons (car ls)
(exclude-nth (- n 1) (cdr ls))))))
724:デフォルトの名無しさん
07/07/04 14:21:52
つきあってくれてありがとう。
多分合ってる。
用意してた答えはコレ
(define (exclude-nth n l)
(let loop ((n n)(r '()) (l l))
(if (pair? l)
(loop (- n 1) (if (= n 0) r (cons (car l) r)) (cdr l))
(if (null? l)
(reverse r)
(if (= n 0)
(reverse r)
(apply list* (reverse (cons l r))))))))
我ながらapply list* reverseは美しくないよな・・
725:デフォルトの名無しさん
07/07/04 14:28:04
それって破壊もlist*も使わずに末尾再帰で書ける?
726:723
07/07/04 14:30:40
named-letでもやってみたんだけど、いまいち自信がないというか…。
(define (exclude-nth n ls)
(let loop ((ls ls) (n n) (acc '()))
(cond ((null? ls) (reverse! acc))
((= n 0) (if (not (pair? ls))
(reverse! acc)
(loop (cdr ls) (- n 1) acc)))
((not (pair? ls)) (append (reverse! acc) ls))
(else (loop (cdr ls) (- n 1) (cons (car ls) acc))))))
727:デフォルトの名無しさん
07/07/04 14:33:34
list*相当を作っちまえば・・
(define (apply-list* l)
(define (loop l)
(if (and (pair? l) (pair? (cdr l)))
(cons (car l) (loop (cdr l)))
(car l)))
(loop l))
って、これは末尾再帰じゃないしな
>>726
appendすりゃよかったのね
728:デフォルトの名無しさん
07/07/04 23:17:00
>>709
λとlambdaが等価じゃないところ1つ見つけた
λxyz.E = λx.λy.λz.E
(lambda (x y z) E) ≠ (lambda (x) (lambda (y) (lambda (z) E)))
他にどんな違いがあるかなぁ
729:デフォルトの名無しさん
07/07/04 23:50:27
チューリング完全を実現するのに必要な
最低限のデータ構造って何だろう。
リストが使えないとダメなのかな?
730:デフォルトの名無しさん
07/07/04 23:59:27
例えば配列があればリストは作れる。チューリング機械の定義により何かの記憶機構は必要。
731:デフォルトの名無しさん
07/07/05 00:13:14
SKだけでチューリング完全なのに
純Lisp5関数でチューリング完全じゃない(?)のは不思議
eqやatomがTやNILを返すんじゃなくて
carとcdrを返すなら何とかなりそうな気もする
関数を返す関数くらいは必要な気がする
732:デフォルトの名無しさん
07/07/05 00:16:37
>>713
CL loop マクロは見易いと思う。
(defun exclude-nth (n l)
(loop for x in l and idx from 0 if (/= idx n) collect x))
だけど >>722 の不完全リストだと書けないかな。
733:デフォルトの名無しさん
07/07/05 00:57:12
>>729
整数が1つあれば十分だろ。コンピュータのメモリなんて見方によっては
ものすごく桁数が多い1つの2進数なんだし。
734:デフォルトの名無しさん
07/07/05 00:59:48
でもそれって結局、無限長の配列を仮定してることにならないかだぜ?
735:デフォルトの名無しさん
07/07/05 01:04:59
無限長の配列でも一つの整数でも同じことだろ。
どちらか片方あればもう片方が表現できる。
736:デフォルトの名無しさん
07/07/05 01:19:56
lispマシンってメモリアドレスって有ったんだろうか?
737:デフォルトの名無しさん
07/07/05 01:41:20
>>736
Symbolics社のはタグ付きアーキだったってC-FAQに書いてあった
だからポインターが数値でない
738:デフォルトの名無しさん
07/07/05 02:14:33
>>736
なくてどうする
739:デフォルトの名無しさん
07/07/07 20:47:56
read-eval-printループのevalの部分を別のコンピュータで実行させるフレームワークみたいなのってない?
作ろうと思えば簡単に出来そうなんだが、誰かやってる人いないかなと思って。
740:デフォルトの名無しさん
07/07/07 21:21:17
slime
741:デフォルトの名無しさん
07/07/07 21:22:26
>>739
readしないでevalって言うのはできるん?
sexpを通信先のマシンでreplしてるところに食わせるのならslimeがそうじゃない
742:739
07/07/07 21:43:31
>>740-741
サンクス
gauche使ってるんだが、gauche.listenerってのを見付けた。
ちょいいじってみる。
743:デフォルトの名無しさん
07/07/10 01:23:48
Gaucheでselect使ってサーバー書こうと思ってたんだけど質問。
selectで書き込み可能でも、ソケットバッファを越えたサイズを書き込もうとするとブロックするよね。
unixのwrite(2)ならバッファを全部フラッシュしないからブロックしないように書けるんだけど。
生のwrite(2)をそのままGaucheから呼べないの?
744:デフォルトの名無しさん
07/07/10 05:40:22
今はできないんじゃなかったっけな。0.9までになんとかするって話だったと思う。
745:デフォルトの名無しさん
07/07/10 06:42:30
>743
サーバ書くモチベをちょっとだけGaucheのソース修正に割くんだ。
そしてうまく動いたらパッチ提供してあげたら喜ばれるんじゃないかな。
ライブラリ作成者側のオナニーテストよりは実アプリによる動作テスト
の方が意味あるだろうし。
746:743
07/07/10 09:30:08
>>744-743
了解!
綺麗なソースコードだからちょっといじってみる。
cvs headに比べると、debian etchのやつはだいぶ古いんだな。
今のところはスレッド使う方向に逃げるってのが正解みたいだね。
747:743
07/07/10 10:02:44
アンカミスった>>744-745だった
748:デフォルトの名無しさん
07/07/11 04:17:03
卒論を書かなきゃ行けないんだけれど、何も思いつかない。
思いついたとしても既に実現されている。
計算機の歴史なんてまだ100年もたっていないのに、
その先行研究の凄さにはひれ伏すしか無い、という
今日この頃の学部生なんですが、何か面白いお題ないですかね?
スペックとしてはCommon Lispが出来るくらいなんですが。
「こんな事やったら面白いんじゃないの?」
とか
「コレが無いから困っている。でもつくるのメンドイ」
っていうの有りませんか?
749:デフォルトの名無しさん
07/07/11 09:34:11
>>748
S式で書ける TeX とかどうよ
750:デフォルトの名無しさん
07/07/11 15:56:13
>>749
え、無いの?
HTMLをS式で表現するものがあるのに?
751:749
07/07/11 20:20:40
いや、あるかもしれんけど。
そんなに真剣に調べたことはないんで。
752:デフォルトの名無しさん
07/07/11 22:16:07
ちょっと違うかもしれないけどmaxima があるからなー>tex
>>748
オープンソース版のAllegroCache(OODB)作るってのはどうよ?
753:デフォルトの名無しさん
07/07/11 22:51:01
皆さんお返事有り難うございます。
そりゃ、自分もいろいろ考えたんですよ。
例えば色でプログラミングできたら面白いかな〜とかね。
正方形を9分割した物が有って、
白→nil
黒→t
が決定。
んで色がいくつ塗っているかでチャーチ数を表す。
緑→(())
緑と黄色→(()(()))
だから、緑と赤は等しい訳です。直感的ではないですけれど。1=1なんで。
んで、最低限の関数の色を決める。
car→オレンジ
とかね。
でも、これじゃ関数定義できないし、逆にややこしいし、
大きい数の計算は出来ないし、データ構造の定義は出来ないし、
何の役に立つのか説明しにくい。
んで、考えれば考えるほどどうすれば良いのか分からなくなって、
皆さん卒論でどんなことしていたか質問してみたんです。
すいませんでした。
754:デフォルトの名無しさん
07/07/12 00:16:04
卒論とかだと学問ぽく見せる必要があるから、Lisp 族は人気ないだろ。
強い型付けのメリットとして、とても研究な感じになるという利点があるから
卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。
755:デフォルトの名無しさん
07/07/12 00:47:38
> オープンソース版のAllegroCache(OODB)作るってのはどうよ?
それならむしろAllegroStore
756:デフォルトの名無しさん
07/07/12 01:46:49
>>754
>強い型付けのメリットとして、とても研究な感じになるという利点があるから
>卒論は Haskell とか ML 系でなんかごにょごにょするほうがお手軽じゃないかな。
カリー・ハワード対応の事ですか?
それで、チューリングマシンの停止問題なんかを証明しても、
そりゃ学問的だけれども新規性がないんじゃ。
誰も証明してない命題が有るなら別なんでしょうけど。
>>755
AllegroStore?AllegroCache?
なんぞコレ?
clispしか使った事無いのでいまいち何に使うのかさっぱり?
総称関数を保存して共有できるようになる代物?
そもそもデータベースを触った事が無いからデーターベースからして
よくわかんないです。
757:デフォルトの名無しさん
07/07/12 01:47:44
一言で言うなら 卒論書く前にもっと勉強しろよ
758:デフォルトの名無しさん
07/07/12 02:20:34
まあ4年の7月なんてこんなもんだ。
759:デフォルトの名無しさん
07/07/12 02:23:19
>753
世の中にはGPGPUというものがあってだな
760:デフォルトの名無しさん
07/07/12 03:05:22
>>759
自分、面白そうな事思いついたです。
CUDA使って、Lispのインタプリタ作るのってどうでしょうかね?
そして、clispとどっちが計算が速いか検討するの。
これだと、今のところ誰もやってないだろうし、
リスト処理ってGPU向きの処理だと思いませんか?
761:デフォルトの名無しさん
07/07/12 04:03:19
わざとっぽいのは相手にしない方が
762:754
07/07/12 07:51:20
>>756
どっからカリーハワードだの停止性判定だの証明だのがでてきたんだよ。
そーゆうんじゃなくて、なんか小物の研究でも Haskell や ML ならそれっぽく見えるだろって事。
つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が得られず完全自力じゃ評価もまともにできんし、学費がもったいない。
763:デフォルトの名無しさん
07/07/12 10:50:20
じゃあ Lisp の型推論がどこまでできるかとか
764:デフォルトの名無しさん
07/07/12 15:26:16
>>762
>そーゆうんじゃなくて、なんか小物の研究でも
> Haskell や ML ならそれっぽく見えるだろって事。
>つうかテーマは研究室の先輩や教官とよく相談したほうがいい…。
>たとえば超並列分散 Lisp をつくるぜ!!と決めたとして、周囲の支援が
>得られず完全自力じゃ評価もまともにできんし、学費がもったいない。
いや、お恥ずかしい話なんですが自分の大学は大学院が無いんで
先輩なんていないんです。
それに指導教官は「何か作れば良いよ〜」という態度なんで
自由な反面、アイデアが必要なんです。
自分の友達は「大学のSNSをxoopsで作る」でOKと言われてました。
自分は「さすがにそれじゃアレかなぁ」と思って。
自分はCUDAでLisp処理系は面白い案だなと思います。
誰でも思いつきそうだけれど、今のところ誰もやってないし、
自分の処理系欲しかったんで。
それじゃ、パソコン買うところから始めなきゃならないんですが(Macなんで)
頑張ってみますね。
C言語は1年くらい触ってないし、マルチスレッドプログラミングは初めてなんで
不安ですが。
出来たらUpするんで、コードレビューしてください。
タライ回し関数が速く動くといいなぁ。
765:デフォルトの名無しさん
07/07/12 16:20:23
逐次処理しなきゃだめな部分は早くならないんじゃないのかな。
766:デフォルトの名無しさん
07/07/12 16:34:47
>>764
くそうらやましす
767:デフォルトの名無しさん
07/07/12 20:12:46
一口で大学と言ってもピンキリなんだな
768:デフォルトの名無しさん
07/07/12 21:17:35
型推論 1 (変数、戻り型が単一の型に定まる物)
(define (ack m n)
(cond ((zero? m) (+ n 1))
((zero? n) (ack (- m 1) 1))
(else (ack (- m 1) (ack m (- n 1))))))
(ack (m ?x) (n ?y)) : (result ?z) から ?x ?y ?zの型を求める
(zero? m) => (type_a) : bool
1 => int
(+ n 1) => (int int) : int から ?x = int
(zero? n) => (type_a) : bool
m, nがintなのでzero?の引数は intと仮定して良い
(- m 1) => (int int) : int から ?y = int
末尾コンテキストは+ とackのみなので?z = int
これでack内の +-zero?演算子はintという前提で最適化でける
・・という感じで良い?
769:デフォルトの名無しさん
07/07/12 21:36:38
>(tail-map list '(a b c . d))
=>((a) (b) (c) d)
(define (tail-map proc x)
(let loop ((l x))
(if (pair? l)
(cons (proc (car l)) (loop (cdr l)))
(proc l)))) ;procをcdrにも適用する
(tail-map (proc ?x) (x ?y)) : (result ?z) から ?x ?y ?zの型を求める
(l ?v) = ?x
(pair? l) (type_a) : bool
この中ではl = pairと確定
(car l) => (pair) : type_b
(cdr l) => (pair) : type_c
(proc 〜) (type_a) : type_d
(loop 〜) (type_c) : type_e
(cons 〜) (type_b type_c) : pair
(proc not-pair) : type_f
以上からprocは1引数でtype_aまたはnot-pairを受け取りtype_d|type_fを返す、
xはpairかnot-pair
tail-map の戻り型は pair もしくはprocの戻り型に依存
・・・もうわかんね
770:デフォルトの名無しさん
07/07/12 22:08:54
Schemeが(Haskellほどでないけど)関数的であるとされる根拠の1つに
識別子が一度ある場所に束縛されると
他の場所に束縛を変更される事がないっていうのがあるけど
それをいうならCだって同じですよね?
一度宣言した変数のアドレスはスコープ内で一定
むろん関数的であるという最大の根拠は関数が第一級の値であるというところにつきるんでしょうけど
でもR5RSでは関数のリテラル表記はない、でもそれぞれの実装でサポートしてもよいって扱いですけどね
lambdaは関数のリテラル表記だっていう解説もちらほら見ますが
771:デフォルトの名無しさん
07/07/12 22:12:32
「識別子が一度ある場所に束縛されると他の場所に束縛を変更される事がない」ことが
「関数的である」とは思わないけど
772:デフォルトの名無しさん
07/07/12 22:22:29
>>771
いや、参照透過性とは関係ないのに
識別子の束縛が変更されない事に言及する解説をよく見る気がしたので
773:デフォルトの名無しさん
07/07/12 22:25:43
ヒント: 言論の自由
774:デフォルトの名無しさん
07/07/12 23:20:13
>>768
なんかところどころよくわかんないような。
自分で目の子でやったらこんな感じになったけど、どうかな。
まず (zero? m) から m : number
次に (+ n 1) から n : number
だから ack : number * number -> ?z で
else 節の (ack (- m 1) (ack ...)) の第二引数を見ると ?z = number
∴ ?x = ?y = ?z = number
775:デフォルトの名無しさん
07/07/12 23:43:17
zero?って渡される引数がnumberのみと限定していいのかな。
リストとか入ってきたらエラーでいいんだっけ?
まあそういう判定が減るから全体で3倍ぐらい速くなるかな。
それはそれとして、ackみたいな単純なケースは結構作ってるうちに
適当なのができそうだからどうでもいいと思う。
問題は型が定まらない場合。
上、named-let余計だった。
(define (tail-map proc l)
(if (pair? l)
(cons (proc (car l)) (tail-map proc (cdr l)))
(proc l)))
まあ普通のmap1でもいいけど。
(define (map1 proc l)
(if (pair? l)
(cons (proc (car l)) (map1 proc (cdr l))) '()))
この場合procが確定するまで保留にすべきなのかな?
procは1引数取って何か返す、ぐらいの情報しかないよね。
776:デフォルトの名無しさん
07/07/12 23:50:20
>>775
> zero?って渡される引数がnumberのみと限定していいのかな。
R5RS みると (zero? z) と書いてあって、 z は複素数を表すメタ変数ということだから
そこは問題ないと思う。
で、今気付いたけど = にしてしまうとまずいね。例えば三行目で
(zero? n) が (<= n) だったりすると number ではダメで、
real に推論されなきゃいけない。
777:デフォルトの名無しさん
07/07/12 23:59:38
いや、この際大雑把に「数字かどうか」ぐらいの区別でよくないですか?
アドホックにでも最適化に結び付けて、お手軽に型推論による効果
を体感したいというか。
>>775のmapにしてもフローチェックすればpair?の判定で
car/cdrのpair判定が省略できるとか、そんなレベルから徐々に
大掛かりな仕掛けを考えていければいいかなと。
778:デフォルトの名無しさん
07/07/13 00:01:00
>>777
うん、その方が健全な気がしてきた
779:デフォルトの名無しさん
07/07/13 08:55:16
え、そのほうが soundnessがいえるんですか?
と、あえて誤読をしてみる。
780:デフォルトの名無しさん
07/07/13 13:14:34
誤読というより誤爆?
781:デフォルトの名無しさん
07/07/14 06:51:44
俺、凄い事思いついた!
GHC立ち上げると、
Prelude>
ってでるじゃん。
なんでプレリュード?とずっと思ってたんだけれど、
これってもしかして、
Franz Lisztの前奏曲から来てるんじゃないの?
リストつながりで。
782:デフォルトの名無しさん
07/07/14 12:17:40
Franz Lisp
783:デフォルトの名無しさん
07/07/14 13:50:04
>>781
prelude って一般名詞じゃないの?
784:デフォルトの名無しさん
07/07/14 16:01:21
俺も Prelude は一般名詞だと思う。
785:デフォルトの名無しさん
07/07/14 16:54:13
ネタにマジレスなんとやら
786:デフォルトの名無しさん
07/07/14 16:58:10
ネタにマジレスを重ねるというネタだったのにマジレスされた…
787:デフォルトの名無しさん
07/07/14 17:13:36
でもそれが、ネタにマジレスを重ねるというネタにマジレスするというネタかもしれないと考えるのが危機管理というものではないだろうか。
788:デフォルトの名無しさん
07/07/14 17:17:54
ネタになりかけのレスと、ネタになる余地のないレスの区別ぐらいつきますわよ。
789:デフォルトの名無しさん
07/07/14 17:19:30
だがしかしそれは主観に左右されるものであるから、絶対的な答えなどないのではないか
つまりは君の意見などどうでもよいのですわよ。
790:デフォルトの名無しさん
07/07/14 17:21:27
ここ、Haskell スレだと思ったら Lischeme スレだったのか!
791:デフォルトの名無しさん
07/07/14 17:27:55
むしろ寝たすれ家と思う田
792:デフォルトの名無しさん
07/07/15 21:07:40
自分がアホっぽく見える流れになっちゃったら、
「何か狙ってた」ことにして「お前らのせいでそれがダメになった」と嘆いとくのは基本。
793:デフォルトの名無しさん
07/07/15 21:10:43
誤爆?
794:デフォルトの名無しさん
07/07/15 23:41:45
アホの子はかあいいよ?
795:デフォルトの名無しさん
07/07/20 16:31:39
gaucheのCVS Headって、ここ最近コンパイルできたためしが無いんだけど、
これってパッチとか作る価値があるの?
それとも、shiroさんの手元ではできてるの?
796:デフォルトの名無しさん
07/07/20 18:36:58
wilikiかlingrあたりで聞いてみたら? HEAD使ってる人は何人もいると思うけど。
797:デフォルトの名無しさん
07/07/20 20:15:04
普通にできてる。ドキュメントよまずにやってない?DISTほげ
798:795
07/07/21 00:53:52
HACKING とかは読んでる。
Cのコンパイルじゃなくて、schemeコードを実行するところで
ライブラリが見つからないとかいろいろ出る。
システム既存のgaucheと衝突してるのかなあ…?
lingrで、makeにいろいろオプション渡すとできるよって言ってた人が
いて、それで前進したけどまだ止まる
もう少しあがいてみるかな
799:デフォルトの名無しさん
07/07/21 01:16:10
そうか。
俺は ./DIST gen を忘れてて、コンパイルできねーな?と思ってた事があったんでひょっとしてと思ったんだけどね。
で、どんなエラーメッセージなの?
800:デフォルトの名無しさん
07/07/21 21:01:50
>>795
俺もそれではまった。
最近はGauhceのコンパイルにGaucheを要求するので、
古いGaucheを使ってるとgoshがエラー出す。
Gauche 0.8.10(release)使えばコンパイルに成功する。
Gauche 0.8.10(release)すらコンパイル出来ないときは、
バージョンを一個ずつ上げてみて。
801:795
07/07/22 17:34:53
>>800
サンクス
調べてやってみます
802:デフォルトの名無しさん
07/07/23 01:00:07
schemeってcommon lispのsymbol-valueに相当するもの無いけどevalを使うしかないんですか?
やりたいことはalistに文字と関数のペア入れておいてその関数を呼び出したいんだけど。
'(#\a . func_a)
だとfunc_aは関数にならないから
`(#\a . ,func_a)
と書いてるんだけどいちいち','を書くのがめんどい。
こういうところはマクロを使うのがセオリーなの?
803:デフォルトの名無しさん
07/07/23 07:13:30
Schemeでは「symbolに値が入ってる」わけじゃないからね
処理系によっては実行時にはシンボルと値の結び付きは完全に忘れちゃってる
可能性もあるし。
処理系依存で良ければ、symbol-valueとかglobal-variable-refとかが使える
場合もある。ポータブルにやるならevalしかないだろうね。
「文字と関数のalist」とかは普通にバッククオート使っちゃうけどなあ。
804:デフォルトの名無しさん
07/07/23 08:50:18
個人的には evalも邪道だと思う。
そもそも R4RS には evalも必須じゃなかったし。
万独裁なら cons でも使え。
805:802
07/07/23 11:14:54
>>803
なるほどね。R5RSをよく読んだらそう書いてあったよ。
Common Lisp陣営がSchemeを批判するときの論点がそこなのね。
>>804
確かにevalは使いたくない。
今まで通りquasi quote使って関数をunquoteすることにしました。
806:デフォルトの名無しさん
07/07/23 20:16:11
>>805
> >>803
> なるほどね。R5RSをよく読んだらそう書いてあったよ。
> Common Lisp陣営がSchemeを批判するときの論点がそこなのね。
全然違うと思うが。
Schemeにも1st class objectとしてのシンボルがあればなあという
CLerもいるっちゃいるだろうけどさ。
807:デフォルトの名無しさん
07/07/23 23:38:53
ブラックボード黒田
808:デフォルトの名無しさん
07/07/23 23:49:38
kuroタソ(*´д`*)/ヽァ/ヽァ
809:デフォルトの名無しさん
07/07/25 09:38:10
URLリンク(www.tekkon.net) これってlisperの話?w
810:デフォルトの名無しさん
07/07/27 01:42:56
質問があります。
lispで、他の言語も実装した(というか、DSLを作ってみたというか)
処理系があったと思うのですが、ご存じないでしょうか?
lispでよく用途に合わせた言語を再実装したとう話を聞くのですが、
なかなか実例に合わず、う〜ん?と思っていたのですが、
これを見て、lispすげーと、唸った覚えがあります。
けっこう、最近の言語だったと思うのですが、ご存じないでしょうか?
確か、DSLとしては、ひとつとして、JavaScriptのサブセットを実装していました。
他の言語のサブセットもあったと思うのですが、覚えていません。
もしかしたら、Lispじゃなくて、もしかしたら、schemeの実装だったかもかわかりません。
811:デフォルトの名無しさん
07/07/27 01:58:31
もしかしたら、lispじゃなかったかもしれません orz
うろ覚えなのですが、中間形式として、S式を使っていたような?
言語内に、いくつかのプログラムがあってそれを組み合わせて、使っていたような気がします。
812:デフォルトの名無しさん
07/07/27 02:05:25
>>811
『On Lisp』の24章に、Common Lisp による埋め込み言語としての Prolog 実装の話はあるけど。
ただ Prolog は最近の言語ってわけでもないし……。
813:デフォルトの名無しさん
07/07/27 03:48:27
>>811
まさか、TAOじゃないよな。
814:デフォルトの名無しさん
07/07/27 04:30:18
Coke & Pepsi?
815:デフォルトの名無しさん
07/07/27 14:31:02
>>814
それそれ!!それです。
ありがとさんです。
CokeとPepsiとJoltです。
ただ、今見たら、素人の手に負えそうなものではないことがわかったw
816:デフォルトの名無しさん
07/07/27 17:25:35
オナニーしすぎてモーホー炎になりますたw
817:デフォルトの名無しさん
07/07/29 00:07:51
>>810
HaskellでPerlを実装した話じゃなくて?
818:デフォルトの名無しさん
07/07/29 00:31:50
haskellはschemeで作られました
819:名無しさん@そうだ選挙に行こう
07/07/29 02:31:09
schemeはschemeで作られました
820:名無しさん@そうだ選挙に行こう
07/07/29 13:11:31
・[1492] L2Lisp in Ruby((鈴))
静的スコープ、末尾呼出し(末尾再帰を含む)の最適化、およびマクロを備えた
近代的なLispの小さなインタープリタをRuby(およびJRuby)で作ります。Rubyの
データ型と親和性が高く、簡単に組込み関数を増設できる手頃なLisp処理系として
利用できます。
URLリンク(codezine.jp)
821:名無しさん@そうだ選挙に行こう
07/07/29 13:38:23
rubyなら継続も比較的簡単に実装できると思うんだけど
なんでまた半端な物作るかな
CL厨がまた文句言いにくるよ
822:名無しさん@そうだ選挙に行こう
07/07/29 14:01:32
「簡単に組込み関数を増設できる手頃なLisp処理系」に継続も装備させようという発想が凄いな。
823:名無しさん@そうだ選挙に行こう
07/07/29 15:56:16
手頃な処理系というのならForthの方が良いと思うけどな。
元にしたL2Lispのページを見ると、継続(というかcall/cc)は不完全らしいね。
824:名無しさん@そうだ選挙に行こう
07/07/29 16:07:56
Forth でも良いだろうし Lisp でも良いだろう
大して変わらんよ
825:名無しさん@そうだ選挙に行こう
07/07/29 20:15:49
>>821 漏れ CLer だけど……どの辺に文句つける要素があるんだ?
826:デフォルトの名無しさん
07/07/29 20:28:16
気にする事は無いよ
827:デフォルトの名無しさん
07/07/29 20:34:11
むしろ継続継続とSchemerが喰いついている件。まぁ、あんまり使われないだろうけど。Rubyistがわざわざこれを使うとは思えない。
828:デフォルトの名無しさん
07/07/29 20:58:35
いわんや Lisper おや
829:デフォルトの名無しさん
07/07/29 21:20:01
つーかLisperも使わんでしょこんなの
830:デフォルトの名無しさん
07/07/29 23:05:29 0
そういう問題ではない
831:デフォルトの名無しさん
07/07/29 23:12:06 0
なんだ、L2LispってPascalの処理系を移植しただけか。
ruby厨うぜえ。
832:デフォルトの名無しさん
07/07/30 00:09:14
>>825
ブラックボード黒田さんなら、黒板振り回しながら襲いかかるであろう仕様。
833:デフォルトの名無しさん
07/07/30 00:27:42
>>832
一般の Lispnik とは全く関係無いな
834:デフォルトの名無しさん
07/07/30 00:59:26
>>820
とてもコンパクトに出来ていて Ruby と Lisp の勉強になりました、
とレスしてほしいんだろw
835:デフォルトの名無しさん
07/07/30 04:54:46
継続ってのは後続のことですか?
836:デフォルトの名無しさん
07/07/30 15:43:41
>>834
そうそう。わかればいいのです(^^)
837:デフォルトの名無しさん
07/07/30 17:24:55
荒らすなよRuby厨
838:デフォルトの名無しさん
07/07/30 17:45:09
Schemeの質問をお願いします。
下記@とAを実行した場合、
それぞれの結果になるプログラムを教えて下さい。
@(my_makelist 5) を実行した結果 (1 2 3 4 5)
A(my_max ’(34 20 30 19)) を実行した結果 34
839:デフォルトの名無しさん
07/07/30 19:22:03
(define (my_max list) 34)
(define (my_makelist n) '(1 2 3 4 5))
こんなかんじ
840:838
07/07/30 19:40:06
>>839さん
実行しましたが、以下の結果が返ってきません。
@(my_makelist 5) -> (1 2 3 4 5)
A(my_max ’(34 20 30 19)) -> 34
もう一度お願いします。
841:839
07/07/30 19:46:15
うちでは動いています。
あなたの処理系のバグではないですか?
842:838
07/07/30 20:00:01
839>>さん
昨年、以下のサイトで、
URLリンク(www5a.biglobe.ne.jp)
これを『ChezEdit-NT Ver1.11 setup.exe』インストールしましたが、
何か問題があるのでしょうか?
他のプログラムは問題なく結果が返ってきます。
度々すいません。
843:デフォルトの名無しさん
07/07/30 20:10:51
あなたの頭に問題があんじゃないでしょうか?
844:838
07/07/30 20:13:43
>>839さん
@は以下の通りで何とかできました。
(define make_list(lambda (n)
(do ( (res (list n) (cons n res)) )
((= n 1) res)
(set! n (- n 1)))))
Aの方は、以下のmax部分がうまく作れません。
(max 34 20 30 19) -> 34
お願いします。
845:839
07/07/30 20:19:04
それと同じ方法で書けば良いと思います
846:838
07/07/30 20:23:56
>>839さん
そこを何とか教えてもらえませんか?
847:デフォルトの名無しさん
07/07/30 20:25:38
Prologだと以下のようになります。Prologでまったりには
意地悪な人いないから、遊びにいらっしゃい。
my_max([A|R],Max) :- my_max(A,R,Max).
my_max(Max,[],Max).
my_max(A,[B|R],Max) :- B>A,my_max(B,R,Max),!.
my_max(A,[_|R],Max) :- my_max(A,R,Max).
848:838
07/07/30 20:29:15
>>847さん
遊びに行きたいのはやまやまですが・・・。
Prologではダメなんです・・・。
初心者で申し訳ありませんが、
誰か優しい人お願いします。
849:デフォルトの名無しさん
07/07/30 20:36:21
無能にキレる人というのは、無能によく出会うレベルの学校や職場にいる人が多い。
滅多に無能に出会わないようなハイレベルな環境で生きてる人は、もっと「余裕綽々にイジる」。
でも、無能によく出会うレベルの環境に居るってことは、自分のレベルも知れた物なんだよね、実は。
そのくせ上から目線というのはどういうことかというと、つまり自分では優秀なつもりなのに
現実がそれをまったく反映してくれない、そのギャップへの苛立ちを、こういう場所での小爆発で
少しでも解消しようという行為なわけ。
黒板におでこくっつけて頭冷やしたほうがいいよw
850:デフォルトの名無しさん
07/07/30 20:39:58
>>838
俺だったらschemeの上のprolog乗っけて>>847のコード動かすけどな。
On Lisp prologでぐぐって
851:デフォルトの名無しさん
07/07/30 20:43:10
>>849
黒板に縛りつけられてチョークを出し入れまで読んだ
852:838
07/07/30 20:57:30
あの、私女子大生なんですが・・・。
優しい方にはなんでもお礼しますから回答お願いします。
853:デフォルトの名無しさん
07/07/30 21:02:57
VIPでマンマンうpしたら考える
854:838
07/07/30 21:04:40
(i)
こうですか?わかりません(><)
855:デフォルトの名無しさん
07/07/30 21:29:23
>>849
えらく無能そうな人が出てきたなぁ
856:デフォルトの名無しさん
07/07/30 21:33:09
>>838
通りすがりのものですが、行きがかり上こちらも書いておく。
my_makelist(N,L) :- findall(M,for(1,M,N),L).
実用上はこれで良いのだが、ただライブラリを利用したようなものだから、
my_makelist(N,L) :- my_makelist(1,N,L).
my_makelist(N,N,[N]) :- !.
my_makelist(N,E,[N|R]) :- plus(N,1,M),my_makelist(M,E,R).
とすれば、自分で書いた気がする。
なんでこのスレがこんなに伸びるのか(Part 17)、視察に来た
だけです。PrologでまったりはまだPart 2なので。失礼しました。
857:デフォルトの名無しさん
07/07/30 21:47:43
>>849
そんなことどうでもいいから答えてあげたら?
858:デフォルトの名無しさん
07/07/30 22:37:17
>>840
(define my_makelist (cut iota <> 1))
(define (my_max l) (apply max l))
859:デフォルトの名無しさん
07/07/30 22:39:39
ほい
> (define (my_makelist n) (if (= n 0) () (append (my_makelist (- n 1)) (list n))))
my_makelist
> (my_makelist 5)
(1 2 3 4 5)
> (define (my_max lst) (if (null? (cdr lst)) (car lst) (my_max (cons (if (> (car lst) (cadr lst)) (car lst) (cadr lst)) (cddr lst)))))
my_max
> (my_max '(34 20 30 19))
34
860:デフォルトの名無しさん
07/07/30 22:42:00
(define my-max max) のほうがいいんじゃ... apply 使う意味がわからん
861:858
07/07/30 22:45:58
>>860
おいおい。それじゃ>>838で示してる仕様通りにならんだろ。
862:デフォルトの名無しさん
07/07/30 22:53:01
(define (make_list n)
(define (ml n l)
(if (= n 0) l (ml (- n 1) (cons n l))))
(ml n '()))
(define (my_max l)
(define (max2 x y) (if (> x y) x y))
(define (mm x l) (if (null? l) x (mm (max2 x (car l)) (cdr l))))
(mm (car l) (cdr l)))
863:デフォルトの名無しさん
07/07/31 01:08:21
>>839の動かないScheme処理系ってあるの ?
864:デフォルトの名無しさん
07/07/31 03:13:29
>>850
scheme なら schelog がいいんじゃない?
865:838
07/07/31 18:45:58
>>859さん
>>862さん
来るのが遅くなりましたが、
問題なく実行できました、
有難う御座いました。
866:838
07/07/31 18:47:26
もう一度、質問をお願いします。
以下のような結果が得られる、
前置記法から中置記法へ変換する手続きを教えて下さい。
(prefix->infix '(+ (* a b) c))) を実行した結果 (a * b + c)
(prefix->infix '(* 4 (** x 3))) を実行した結果 (x ** 3 * 4)
お願いします。
867:838
07/07/31 19:10:41
exp、opr、opd
のスタテックポインターを使って実行したいのです。
すいませんが、教えて頂けませんか?
868:838
07/07/31 19:12:11
× スタテックポインター
○ スタックポインター
間違えました。
869:デフォルトの名無しさん
07/07/31 19:17:02
「質問をお願いします」ってのは日本語としておかしい
870:デフォルトの名無しさん
07/07/31 19:18:30
>>867
そういう宿題がでるときはスタックつかって前置記法の式を中置記法に
手で変換する方法の説明があると思うけどな。それをプログラムであらわせば
いいだけだ。
871:838
07/07/31 19:19:55
確かにそうでした。
>>866に対する回答をお願いします。
872:デフォルトの名無しさん
07/07/31 19:30:03
>866
詳細不明だしあとは自分でやれよ
(define (prefix->infix p)
(if (pair? p)
(let ((l (prefix->infix (cadr p)))
(r (prefix->infix (caddr p))))
(append
(if (pair? l) l (list l))
(list (car p))
(if (pair? r) r (list r))))
p))
873:デフォルトの名無しさん
07/07/31 19:30:38
Schemeによる記号処理入門の演習問題5.8だね。
874:デフォルトの名無しさん
07/07/31 23:15:17
とりあえず、状況がわからんので答えてね。 >>838
1. 宿題の正確な問題文
2. 宿題の期限はいつまでか?
3. 教科書は手元にある?どこまで読んだ?
4. 教育的なヒントがほしいの?それともズバリ答えのほうがいい?
875:デフォルトの名無しさん
07/08/01 00:04:11
>>865
あれ?>>858は?
876:デフォルトの名無しさん
07/08/01 00:22:52
ずばり答えてあげると本人のためにならなくて良いな
877:デフォルトの名無しさん
07/08/01 00:27:08
一つ問題に答えてあげる代わりに
一つ問題を解いてもらえばいいんじゃないか
何が良いかな
878:デフォルトの名無しさん
07/08/01 00:31:51
嫁姑問題とかどうだ
879:デフォルトの名無しさん
07/08/01 01:27:04
つーか>838も自力解決できない奴に何か期待しても無駄。
880:デフォルトの名無しさん
07/08/01 01:57:45
彼はFizzBuzzをちゃんと書けるんだろうか
881:デフォルトの名無しさん
07/08/01 02:57:59
演算子の結合優先順位とか気にしなくていいのかなあ。とおもった。
882:デフォルトの名無しさん
07/08/01 03:19:11
気にしようぜ
883:デフォルトの名無しさん
07/08/01 08:42:45
演算子? そんなものあったっけ?
884:デフォルトの名無しさん
07/08/01 13:48:00
>>883
スレを読め
885:872
07/08/01 19:17:16
一応>>872に演算子の優先度追加したのも用意してたけど、
本人から何も反応ないしやめておく
886:デフォルトの名無しさん
07/08/01 22:14:38
そうなんだよな。ズバリ答えていいのか、872 みたいに段階的にいくべきなのかわかんないんだよなー
887:デフォルトの名無しさん
07/08/01 22:32:29
教育的回答をすればなんとかなるレベルの質問者じゃないので、
回答者とギャラリーが面白いと思う方でいいんでないの?
888:デフォルトの名無しさん
07/08/01 22:40:53
そーゆう上から目線はいくないと思うよ。 >>887
俺も昔は NetNews とかで痛い厨房だったけど、親切な上級者に諭されて目が醒めた。
だれだって慣れない内はちょっと痛い言動もあるし、上級者から見ればアホっぽい質問することだってあるさ。
何から手をつけていいからわかんないから答えをみながら考える、だって一概に間違いとは言えないだろう。
889:デフォルトの名無しさん
07/08/01 22:44:49
887が上からの目線とは思わんけど
890:デフォルトの名無しさん
07/08/01 22:48:21
むしろ>>888が上から目線
891:デフォルトの名無しさん
07/08/01 22:52:53
慣れないうちとかそういう問題じゃないと思うな今回の人は
892:デフォルトの名無しさん
07/08/01 23:07:55
「教育的回答をすればなんとかなるレベルの質問者じゃない」ってなんで決めつける?
とか思ったんだけど、まあ、すまんかったね。空気悪くする気はなかったんだ。黙っとくわ。
893:デフォルトの名無しさん
07/08/01 23:10:28
まあ放っておこう
はい次。
894:デフォルトの名無しさん
07/08/02 00:22:04
schemeそのものとあんまり関係ないかもしれんけどさ、
R6RS(正確にはR5.97RS)で追加されてる "mantissa width"ってなんのこと?
直訳すれば"仮数部長"あたりだと思うんだけど、何?
ぐぐってもよくわからんです
仕様を見るに、 "3.14 | 10" みたいに書くのかな?
895:デフォルトの名無しさん
07/08/02 01:25:29
>>894
単精度・倍精度のような実装依存の値ではなく、必要な桁数を要求して、
実装が単精度・倍精度を判断できるということでは?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5369日前に更新/220 KB
担当:undef