1 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:16:33 ] ※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※ Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/ Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/ Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/ Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/ Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/ Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/ Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/ 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/ Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
562 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 22:17:23 ] >infoだけで事足りるのか そんな完璧な文書があると思うか? あるわけねーだろ 完璧を目指すのはいいが少しずつ地道に改善していくしかない ちなみに、アジャイルとかなんとか言われるようになる以前は 一発で完璧なものが作れると思ってる奴がたくさんいたとかいないとか
563 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:46:26 ] >>562 完璧な文書だとは、思わないけど 十分な文書だと思うよ
564 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:35:17 ] common lispの情報探そうとするとhatenaなどのblogにいきあたること多い schemeは2chの過去スレが検索にかかることが多い この違いは何?
565 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:46:13 ] Googleの中の人に聞いて下さい。
566 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:48:47 ] schemeしか知らないけど、lispでぐぐればいいんじゃない? lisp --> common lisp scheme --> scheme という理解だけど
567 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:48:51 ] &hl=en付けたら2chにもhatenaにもいきあたらないな
568 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 13:00:54 ] >564 実用性があるか無いか、実アプリ開発に使ってるか否かの差だとオモ。 言い方を変えればSchemeは教育的効果は高いが…
569 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 13:30:55 ] おっとBASICの悪口はそこまでだ
570 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:54:36 ] schemeで、(car '())や(cdr '())の結果はどうなるんしょうか? 昔読んだLISPの本か何かでnilのcarやcdrはnilになるという 説明を見た気がするのですが、schemeにも当てはまるんでしょうか。
571 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:04:13 ] r5rsでは空のリストにcar,cdrはエラーって定義されてるな
572 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:05:36 ] R5RS 6.3.2
573 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:06:31 ] r5rs-ja.pdfにありました。ありがとうございました。
574 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 21:02:29 ] >>497 オレ、とある図書館でその本の順番待ちなんだが、 まさかオマエが止めてるのか?w
575 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:54:43 ] なんだこいつ
576 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 23:33:46 ] これをLIFOと言います
577 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 23:59:26 ] 後入れ中出しだっけ
578 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 00:29:47 ] アッー!
579 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:54:40 ] guile, gaucheよりelispのほうがデバッガが整備されているの? >Shiro(2007/09/05 13:39:49 PDT): 慣れが半分、後は「バグを出しにくいコードの書き方」が半分でしょうか。出来る限り副作用無しで書いておくとバグの切り分けが非常に容易になります。 >たぶん、「ソースの動きを追う」という考え方自体、C/C++とSchemeで差があるんではないかと思います。 practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AE%E8%B3%AA%E5%95%8F%E7%AE%B1#H-1frlpc5 C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか? 個人的にデバッガを使って、「ソースをよく読み、ときどき書き」というのをしたいんですが
580 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 05:47:16 ] >>579 そのすぐ下に書いてある通りでは。 デバッガを使わずとも、replで個々の手続きを呼べるので、色々な入力を与えて出力を 見るかな。入力と出力の関係がすぐに把握できない(手続き内でステップ実行したいと思う) ようであればたぶん手続きが(あなたにとって)大きすぎる。
581 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 07:32:34 ] で、何のソースを読みたいの? 抽象論はもう飽きたよ
582 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:30:31 ] >C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか? そういえばあんまり追ったことないかも・・・スタックトレースが1000行と出ちゃうから。面倒なんでデバッガ使わなくなった。"Type (debug) to enter the debugger."とか出されても、もう無視(w
583 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:34:34 ] >>580 処理系への絶対的な信頼性ってこと? 効率的なデバッグ術の個人の差ってかなり開きがありそうだね >>581 日本語サイトのサンプルとか、とりあえず、デバッグツールで読みたいなあと思って バグでハマって、解決はしたけど、ものすごく時間がかかった場合は バグの見つけ方のポイントを教えてくださいね
584 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:56:39 ] 初心者ですけど (define (f x) (let ((a (hoge1 x)) (b (hoge2 a)) (c (hoge3 b)) (d (hoge4 c))) d)) ;; (f "なんちゃら") みたいな書き方をしています。 Emacsで、最後のコメントアウト行でC-c C-eで評価。 思ったような主力がでないときは、最後のdをcとかbとかに書き換えて、その段階での出力をみます。 手続き型に毒されたやり方でしょうか?
585 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:10:57 ] それをやるならlet*じゃないかね
586 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:33:22 ] >>579 自分はC++でプログラム書く時も、 デバッガ使うのはcore dump(assert含む)した時くらい。 基本的にユニットテストやってる。 自分のことを全然信用してないから、 全自動で網羅的なチェックした方がよい。 もちろんテストコードの方が圧倒的に多いし、 assertも馬鹿みたいに書いてる。 コードを書いたらすぐにユニットテストも書いてるから、 何かテストしたい時には、デバッガ立ち上げて操作するより、 既存のユニットテストコードを基に新たに書く方が速いw テスト、assertコードを書くのは設計の検討にもなってる。 設計をあらゆる角度から観察する必要があるから。 もちろんdtrace, profilerなんかも使いますが。
587 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:36:15 ] >自分のことを全然信用してないから、 分かるわ〜 自分もいっつもデイジー・デイジー歌っちゃう
588 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 15:46:53 ] そんなんじゃボーマンさんにスイッチ切られちゃうぞ。
589 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:56:25 ] >>585 ご指摘のとおり、let* でした。
590 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:57:53 ] そのテストツールの作り方の方針というか みたいなものをまとめている本ってないでしょうか
591 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:28:14 ] そのってどの?
592 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:32:39 ] まずデバッガに依存するのをやめて徹底的に構造化プログラミングを意識するようにした方がいいんじゃね?
593 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:24:13 ] 具体的に何のコードをテストしたいのかを意識するべき。 そうでないと、ツールとか方針とかが正しいのか、そもそも必要なのかを検証できない。
594 名前:デフォルトの名無しさん [2009/03/21(土) 01:36:26 ] >>592 デバッガ使ってうまくいっている人は使えばいいと思うよ。
595 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:53:44 ] デバッグのしやすさをよく考えて作ったほうがいいよ。つまり 手続っぽく作るのも可能だけど、なるべく関数のスタイルを身につけたほうが 効率的だよ。関数のスタイルをとるなら、デバッグはassertやtraceさえ出来れ ば、大体なんとかなるし。いわゆるデバッガが必要なのは、関数がでかくって、 その中で手続的に処理が乱雑になっちゃうからなのでは?
596 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 02:13:43 ] そもそもの話はコードの読み方じゃなかったっけ。 まあ、それはreplで関数叩いて入出力確かめろ、ですでに結論出てるな。 とは言え、じゃあひどいコードはどうやったら効率よく読めますか、 とか訊かれると、どうしたもんかね、となるが。
597 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:43:54 ] 本屋でO'reilly Gaucheをみかけて、軽く立ち読みしたけど 良さそうな感じだね
598 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 08:10:07 ] >>590 処理系のソースに付いてくるテストコード読みなよ。
599 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:33:23 ] >>597 新しいGauche本が出たのかと喜んでオライリーを覗きに行ったら ふぬああ本のことだったのか…
600 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:45:12 ] 2133?
601 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:57:45 ] フ ムフム ヌ クヌク ア プ ア ア
602 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:20:27 ] フムフムヌクヌクアプアア ♪ www.youtube.com/watch?v=ir38tIOQdT0
603 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:27:25 ] すまんがカッコ付きで話してくれんか
604 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:13:46 ] (+ (* フム 2) (* ヌク 2) アプアア)
605 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:34:35 ] Syntax Error
606 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:36:23 ] >>605 お前が閉じろよ。
607 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:27:25 ] 私のカギカッコは渚でしか見つけられませんでした。
608 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 13:08:06 ] ))) ←波
609 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:44:13 ] ))) ←こんなん見て人生おかしくならないか?
610 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:04:11 ] >>609 おれのヘッドホンは beyerdynamics)))) だよ。
611 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:16:03 ] (((((((((((パナウェーブ)))))))))))
612 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 03:00:39 ] Lisp使い初めてから人生おかしくなったとか損したなんて人は 今まで一人も見たことがないな。 その前に周りにLisp使える人が一人も居ないお(´;ω;`)
613 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 03:03:56 ] 損はしていないが、Lisp使えるだけでアレゲな現場に投入された経験はある。 周りが変態ばかりで困った記憶がある。 かくいう俺もド変態だ。どうだまいったか。
614 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 05:11:32 ] アレゲってエロゲでAI作るとか?
615 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 06:16:04 ] ぬるぽ
616 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:07:38 ] LISPにNullPointerExceptionあるの?
617 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:10:41 ] 規格上はない。 補足してトップレベルに復帰する処理系はある。
618 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:26:42 ] おお、安心しました。
619 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:29:47 ] 値が束縛されてないシンボルを参照したりすると出るエラーがぬるぽに相当するんでは?
620 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:03:13 ] それはUNBOUND-VARIABLEだよね。 NILのCDR取るとか規格の範囲内で起きるものじゃなくて、 MEMREFなどの低レベルAPIや処理系バグで起きる、 *((char *)0)な話かと思ったが。
621 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:13:24 ] >>574 謝ってるのにオマエとか言う奴には貸したくないな。
622 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:58:32 ] いやいや、アナタの本じゃないし 読んでなくても一度返すのがスジですよ。 そして列の最後尾に並び直すのです。 (セドラーから5000円だか7000円だかで新古本を買った者より)
623 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:32:59 ] 筋というか、普通はそういう規則じゃないの。 予約を入れた人がいなくても 貸し出し期間内に図書館にいって延長手続き(借り直し)するものだと思うんだけど。
624 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:53:18 ] >>622 へー新古品なんてあるところにはあるんだなあ。 ところで訳書を出してたとこってたしかオンデマンド印刷とかで 幾つか出してるし、これもそれで復刊してくれないかなあ。
625 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:07:18 ] 某大手書店の最後のディヴィグ本をゲットして喜んでたのに いつの間にか増刷されてamazonでさえ普通に新本が手に入るようになってて涙目w 手習いとかものまねも復刊されるかもね
626 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:15:26 ] >>625 ま、そんなこともあるさ。 どんまいどんまい。
627 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:23:31 ] 筋ってw ヤクザやさんがこんなところに居るとはw 規則なんだから返すに決まってるでしょ。 あればね… ていうか本なくしちゃったw
628 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:30:41 ] >> 627 細かいこと気にするなって。買って返せば無問題♪
629 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:11:21 ] >>621 とか>>627 とか、こういう奴がいるから、 図書館の中の人が苦労するんだろうな、と思った。 釣りならいいけど、素でその態度なら頭おかしいだろ。
630 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:22:12 ] わざわざ言うことかw
631 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:27:05 ] 絶版Lisp本ではものまね鳥と竹内先生の本が読みたいな。 あとLisp以外ではPrologの技芸。ヤフオクみたら29500円とかwwwwww オンデマンドで売ってくれくれ。
632 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:44:01 ] Prologの技芸ってたまに名前を聞くんだが、そんなに偉大な本だったのか・・・・・
633 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:49:05 ] Prologの技芸持ってるけど読んでないぜ そんなプレミア付きとは知らなんだ
634 名前: ◆7y/z31W.Wg mailto:sage [2009/03/25(水) 02:55:24 ] >>633 よかったら読んだら売ってよ。1万なら買うよ。
635 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:56:26 ] 「Prologの技芸」はProlog版SICP。 SICPはアーキテクチャよりだけど、こっちは応用より。 内容グーで印刷ショボ。
636 名前: ◆7y/z31W.Wg mailto:sage [2009/03/25(水) 03:01:49 ] 間違ったヤフオクじゃなくてアマゾンだった。> 29500円
637 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 06:41:10 ] これって業者がつり上げてんの?ひどい値段だなぁ。
638 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 09:28:43 ] >Prolog版SICP なるほど
639 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:06:13 ] the art of prologの和訳本だよね
640 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 13:22:05 ] MITの教科書か。既に新しい版が出てるみたいだね。
641 名前:デフォルトの名無しさん [2009/03/25(水) 14:53:33 ] 話ぶった切ってすまないけど、SchemeでProcessingみたいに Arduinoを制御することができる処理系ってあるのかな? GaucheとかPLTってどうなんだろ? できればやりかた書いてあるリンク教えてください。
642 名前:デフォルトの名無しさん [2009/03/25(水) 15:20:28 ] >>641 chicken scheme + avr-gcc + avrdude 1010.co.uk/arduino.html#2
643 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 15:55:03 ] 一方ポールグレアムはクラウドを制御した
644 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 16:08:31 ] crowdコンピューター?
645 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:24:21 ] 生きのこる術は大衆言語。
646 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:02:14 ] だが気を付けたまえ。
647 名前:デフォルトの名無しさん [2009/03/26(木) 17:47:48 ] >>641 "Getting Started with Arduino"の6章"Talking to the Cloud"で Proce55ingを使ってクラウド上のPhysical computingを制御してます。 実はRubyやPerlやPythonでも出来るので、 もしかしたらGaucheとかPLTでもできるかも・・・Arduinoはavrdude経由で操作するかと思いますが・・・ スクリプトでなければ>>642 のようにavr-gccでArduino上のプログラムを 作成するのが良いでしょう。 そんな感じでクラウド側もPhysical computing側もSchemeは使えます。 といってもArduino上のというかAVR上のSchemeはまだないですね。 最近はメモリサイズが大分大きくなったようですが・・・
648 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:55:27 ] >>647 >Arduino上のというかAVR上のSchemeはまだないですね。 つーかそもそもmegaの内蔵SRAM程度では厳しい。 外部コンパイルしてAVR上でVMを走らせる みたいな使い方ならできるだろうけど。 マイコンでscheme動かすならアドレス空間大きめの ものを選んだ方がいい。
649 名前:デフォルトの名無しさん [2009/03/27(金) 03:23:50 ] >>648 PICでSchemeが動いているw
650 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:03:22 ] atmegaでも無理なのか ならschemeからマシン語のコードを吐くコンパイラというのならどうかな
651 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:10:45 ] ハーバードアーキテクチャだからフラッシュとSRAMの扱いが違うんだよね フラッシュにオンタイムで書き込むにはブートローダもどきがいる
652 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 15:07:29 ] Schemeじゃないけどこんなのはあるよ。 簡単なλ計算のインタプリタをArduinoで動かしてる。 Project LambdaCan: Lambda Calculus in a Can alum.wpi.edu/~tfraser/Software/Arduino/lambdacan.html
653 名前:デフォルトの名無しさん [2009/03/28(土) 23:38:51 ] >>652 有り難う御座います。このスレでもλ計算の話は久しぶりですね。 とっても気に入りました。でも、素のλ計算はメモリを喰うので この計算ぐらいが限界って例が書いてありますね。 簡約戦略がまずいとメモリオーバーしそうですねw
654 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:38:06 ] 関数型スレでスルーされてしまったのでコチラで聞いてみますが lazy-kやunlambdaの式をλ式にしてくれる変換器ってないでしょうか (もしあればCombinator Birdsのような式が直接計算出来るのが理想ですが) というのも、W=C(BMR)=λab.bbb≠λab.abbな気がするので 検算してみたいんです。 後Combinator Birdsのページ、 W=SS(KI)がおそらく一番シンプルな答えですね
655 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:23:24 ] なんか流れを止めてしまったみたいなので、654は撤回します ごめんなさい
656 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:39:56 ] 過疎板の過疎スレで気にするような事じゃない
657 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:13:21 ] >>655 いや、関係ないだろ W=C(BMR)=λab.bbb≠λab.abbとW=SS(KI)ってどういう意味なの? 暗号にしかみえないw
658 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:25:41 ] 撤回するな!CLかSchemeで実装してみろ! と焚きつけてみる
659 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:53:00 ] 良かった。それじゃせっかくなので解説してみます λをlと表記すると lab.abbってのは(lambda (a) (lambda (b) ((a b) b))と同じ意味(abbの部分は左結合)で、 これはWコンビネータのλ式の表現でもあります。 W=SS(KI)、つまり((S S) (KI))ってのは以下のS,Kを用いてWが表せますよ、という意味 ;lxyz.xz(yz) (define S (lambda (x) (lambda (y) (lambda (z) ((x z) (y z)))))) ;lxy.x (define K (lambda (x) (lambda (y) x))) ;lx.x (define I (lambda (x) x)) (define turing-type-quine (lambda (x) (lambda (y) (list y (list x (list 'quote x) (list 'quote y)))))) (define w (lambda (x) (lambda (y) ((x y) y)))) ((((S S) (K I)) turing-type-quine) 2) ((w turing-type-quine) 2) 最後の2行は同じ結果になりますよね Combinator Birdsでググるとトップに出てくるページには この他にW=C(BMR)っていう定義が載っていて これを簡約するとlab.bbbになるのではないか、というのが自分の疑問です。 というか、上のようなコードを書いて気づいたけど、 Scheme殿に計算してもらえば良かったわけだ 今から試してきます。気づかせてくれてさんきゅ
660 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:03:17 ] (define C (lambda (x) (lambda (y) (lambda (z) ((x z) y))))) (define B (lambda (x) (lambda (y) (lambda (z) (x (y z)))))) (define M (lambda (x) (x x))) (define R (lambda (x) (lambda (y) (lambda (z) ((y z) x))))) (define W (C ((B M) R))) ((W turing-type-quine) 2) 普通に出来た。 自分の計算ミスかー、ショック ちなみにW=SS(KI)はこんな感じで計算できます。 lab.abb =lab.(ab)b =la.S(lb.ab)(lb.b) =la.SaI =la.(Sa)(KIa) =S(la.Sa)(la.KIa) =SS(KI)
661 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:49:42 ] >>660 2割ぐらい理解したw あとで再挑戦・再理解してみる lambdaを3つ使うのを初めてみた おれはlambdaを3つ使うコードを書くことがあるのだろうか このロジック(表記法?)は、どういう用途で使えそうなの?
662 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 07:02:04 ] 意味はさっぱり分からんがラムダだらけで楽しそうだ
663 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:24:12 ] >>661 オレ、660じゃないけど、べつに実用性とかじゃなくて最小の関数型言語の形のひとつ: e.tir.jp/wiliki?%CB%DD%CC%F5%3A%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECLazy_K
664 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:00:20 ] >>663 Thank you 知らない概念や処理系が、いっぱいあったけど 2割ぐらい理解した 感想は、うまく言葉にできない
665 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:15:59 ] 660ですが、ML系(たぶんHaskellも)の言語ではカリー化という機能があって Schemeでいう以下の2つは同じ物として扱われる (lambda (x) (lambda (y) (lambda (z) ... (lambda (x y z) ... 3引数の関数なら書いたことあるでしょ? そう考えたらそんなに複雑でもなく見えてくるかもね
666 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:45:19 ] >>665 素朴な疑問なんですが 普段は、なんの言語を使っているんですか? ちなみに自分はbash 5%, C/C++ 30%, gauche 10%, Python 30%, その他 25% エディタはemacs? 差し支えなければ、教えてください
667 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:23:21 ] 聞かれていない自分も晒すと gauche95%、sh3%、sed1%、C1%くらいだな。 1年半くらい前はsh70%、sed20%、C8%、(Scheme48+guile)2%くらいだったけど。 カリー化と可変長引数は両立がむずかしげでML系はカリー化を、Lisp系は可変長引数を取ったんだとおもう。 あとカリー化とthunkも相性が悪くて 正格評価のMLは、評価を遅延させる式を ():unitを受け取るなんちゃってthunkで実現してた気がする。
668 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:42:54 ] >>667 gaucheを使っていて、不都合はないの? 他の言語を選ばずに、gaucheを選んだいくつかの理由ってなに? lisp系じゃなくて、gaucheの理由も知りたいかも
669 名前:660 mailto:sage [2009/04/01(水) 20:57:38 ] Gauche使ってる時間が50%ぐらいで、 OCaml&F# 30% C++ 15% Perl 5%ぐらい エディタはVC付属エディタとemacs/viです ところで、可変長引数がダメなのはカリー化というより 型付けが出来ないからではないでしょうか? 呼び出し時に引数の型を指定するprintfのような関数なら I,T,Qコンビネータと関数合成とカリー化で一応実現できます 効率にハンデはあるかもしれませんが
670 名前:デフォルトの名無しさん [2009/04/01(水) 21:04:07 ] 500 :Classical名無しさん :09/04/01 20:55 ID:qtulE/8k よろしくお願いします。 【URL】 pc12.2ch.net/test/read.cgi/tech/1231856193/ 【名前欄】 660 【メール欄】 sage 【本文】↓ Gauche使ってる時間が50%ぐらいで、 OCaml&F# 30% C++ 15% Perl 5%ぐらい エディタはVC付属エディタとemacs/viです ところで、可変長引数がダメなのはカリー化というより 型付けが出来ないからではないでしょうか? 呼び出し時に引数の型を指定するprintfのような関数なら I,T,Qコンビネータと関数合成とカリー化で一応実現できます 効率にハンデはあるかもしれませんが
671 名前:667 mailto:sage [2009/04/01(水) 21:20:19 ] >>668 自分のScheme処理系の変遷は 1.scm。多倍長整数が使いたくなる。 2.Gambit-C。SRFI周りがオレ様過ぎる。 3.MzScheme。非メジャーCPU、非メジャーOSへのポートに挫折。 4.Scheme48。本格的にSchemeを使い始めるが非保健的マクロが独自、SLIBのサポートがビミョー。 5.Guile。機能的にはほぼ文句はないが、遅い。そして重い。 6.Chicken。非メジャーCPUで最適化バグがあったような気がする。 7.Gauche。現状フリーR5RS処理系でベスト。非メジャーCPU、非メジャーOSへのポートも楽。 という感じです。 ドキュメントも豊富、高機能で軽くて高速、とくに正規表現周りはcl-ppcreよりも使いやすいのも◎。 いままでC+sed+shでやってたことをgaucheだけで置き換えられるようになったのがいいですね。 速度重視とかマルチスレッドバリバリなことをしなくなったということもありますが。
672 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:52:45 ] SGIが倒産したらしい
673 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:58:17 ] そうか、そうか
674 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 23:00:18 ] lisp系は自作に限るよ
675 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 03:41:44 ] LispスレでSGIといったら創価じゃなくて シリコン・グラフィックの方だろJK
676 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 03:47:31 ] 2度目の倒産なんだって? なんかLispに関して大きいことやってたっけ? OpenGLぐらいしかシランわ。
677 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:44:57 ] ずっと自作のSchemeモドキを使っています。モドキというのは、あまり 使わない機能を削って代わりに部分継続やソフトタイピングを入れたり してるためです。それなりに高速でデバッグ機能も充実していると思って いますが、RnRSやSRFIの類は全く考慮せず作っているので公開していま せん。ドキュメント書くのもめんどくさいし(論文は書いたけど)。
678 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:10:38 ] >>672 エイプリルフールだと思ってた…
679 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:18:51 ] 勘違いしたかも。 SGI(非創価)ってLisperが作った会社だと思ってました。
680 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:20:30 ] lispでモナディウスなみの速度は出せるのだろうか
681 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:33:15 ] >>679 ジムクラーク? Lisper ではないね。専門は CG らしい。 ワークステーション屋で Lisper が作った会社ってあったっけ? Sun のビルジョイはハッカーだけど Lisper じゃないし。
682 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:58:18 ] 昔、N-Worldって、SGI (Indy?)向けの3D CG作成アプリなかった? Lispマシンから移植されたものだったと思う。Lispで動いていたはず。 プロトタイピング強いから、いろいろな分野の初期大型アプリで使われてるね。 数式処理、ウィンドウシステム、プログラミング可能エディタなど。 CG関係も昔はもっと多かった。
683 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:25:17 ] sgiといえば、インディゴだな。doomでネット対戦に使わせてもらったよ。
684 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:27:02 ] sigは破産申請したらしいね
685 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:34:16 ] CGはもうからないのか
686 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:50:42 ] >>682 ニチメンなんとか、ってやつのことかな。Shiroさんが詳しそう
687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:37:30 ] 前回の破産でCG方面からサーバー屋に商売変えしてたんじゃなかったっけ?
688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:39:09 ] なんかMIPSの灯がどんどん消えてく気がするなぁ…
689 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:43:52 ] /.Jによると、どこだかに買収されるんで、それに必要な手続きなんだと。
690 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:57:27 ] >>681 そうゆう名前で呼ばれてかかどうかはおいといて、MIT 由来の LISP マシンってワークステーション以外のなのものでもないが…
691 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:28:13 ] >>685 技術の発展とともに、作業端末は高価なUNIXワークステーションではなく 安価なWindowsマシンが優位になり、未開の領域に強く柔軟なLispから 高速で大規模なプログラムに強い? C++に置き換わったとかじゃないの。
692 名前:681 mailto:sage [2009/04/03(金) 09:54:17 ] >>690 あーそうね。シンボリクスとかがそうか。 Unixワークステーション屋で、と言うべきだったかな。
693 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 11:16:16 ] carやcdrがちゃんと理解できん・・・ アセンブラの方が簡単かも。
694 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:14:13 ] そんなに難しいかな? 単方向リンクリストの、先頭を取り出すか、それ以外を取り出すか、 だけなんだが。
695 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:16:17 ] 括弧とドットの表記法でつまづくか、ポインタでつまづくかのどっちかですよねー
696 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:42:44 ] carは左って覚えれば良いと思うよ
697 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:48:44 ] >>693 コンスは単なる2つのポインタの対 Lispよりも低レベルではcarとcdrは可換で線形リストとは何の関係もない 線形リストに利用しているのはLispより高レベルだけの話 アセンブラ的に考えればこう
698 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:05:28 ] まずボックス表記を手で書いて それからいろんな構造をconsだけで組み立てる ドット対→線形単リスト→2分木みたいに徐々に複雑にしていくといい
699 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:14:01 ] Common Lisp: A Gentle Introduction to Symbolic Computation 付録の sdraw 使うと図示してくれる CL-USER> (sdraw '(1 2 3 (4 5))) [*|*]--->[*|*]--->[*|*]--->[*|*]--->NIL | | | | v v v v 1 2 3 [*|*]--->[*|*]--->NIL | | v v 4 5 www.cs.cmu.edu/~dst/Lisp/sdraw/
700 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:17:57 ] ちゃんと理解できないったって(と)の対応はわかりますよね? Lispのリスト記法はドット記法の構文糖 任意のリスト記法はドット記法で表せる(逆は偽) ドット記法の基本は( A . B )でホワイトスペース+ドット+ホワイトスペースがcarとcdrの間の仕切り (開き/閉じ括弧の周りはホワイトスペースの省略可) そしてドット記法を(A B C)みたいなに直すのは ドット+開き括弧を見つけたら、それと、それに対応する閉じ括弧を消しゴムで消すだけ
701 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:22:22 ] ( A . B ) ≡ [ A | B ]
702 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:15:16 ] (cons 'a 'b) => (a . b) (cons 'a (cons 'b '())) => (a b) '(a . (b . (c . ()))) => (a b c)
703 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:22:09 ] 'とかquoteが絡んでくると解りづらくなるから 任意のアルファベット1文字のシンボルと空リストは自己評価的という設定にしよう (cons A B) => (A . B) ;; [ A | B ] (cons A ()) => (A . ()) ≡ (A) ;; [ A | NIL ] (cons (cons A B) ()) => ((A . B) . ()) ≡ ((A . B)) ;; [ [ A | B ] | NIL ] (cons () (cons A ())) => (() . (A . ())) ≡ (() A) ;; [ NIL | [ A | NIL ] ] (cons A (cons B C)) => (A . (B . C)) ≡ (A B . C) ;; [ A | [ B | C ] ]
704 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:24:40 ] lispのリストはヘテロジニアスリストでさらにペアにもなるから難しいよな ML系みたいにリストは空か値とリストを持つコンスって定義だとまだわかりやすいのに
705 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:27:28 ] 分かりにくくないだろw
706 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:48:41 ] ふと思ったんですけど 効率の為にlistではなくvectorを使っているアルゴリズムって 静的にコンパイル+破壊的代入なしって条件なら プログラマにはlistとして見せつつ 内部的にはvectorとして処理できませんかね? たとえば(list 1 2 3 4 5)は 表面的にはコンスによる線形リストなんだけど内部的には#(1 2 3 4 5)であるオブジェクトを返すとか。 書き換えられない事が解っているn要素の線形リストは2ワードのセルをn個アロケートするより nワード+αのベクタで記憶するほうがよさそう。 Haskellが文字列をリストとして実装してるのはそんな理由だったりするのでしょうか?
707 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:50:16 ] それは「cdr coding」と呼ばれるもので散々実験済み。
708 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:52:55 ] 書き込んでから気づいたけど、 部分リストを複数オブジェクトで共有している場合 先頭部分の参照がはずれてもGCで回収できなくて逆に効率が悪くなりますね。 ベクタの最初の方だけGCできる方法を取れば別ですけど そうするとベクタの情報が増えて結局コンスと大差なくなるかも
709 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:14:39 ] >>707 おや、そうでしたか。不勉強でした。 見た所、線形リストを少しでも効率よく処理する為の物の様で ベクタを置き換えるには至らなかったようですね。
710 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:35:18 ] vector的利用がはっきりしているところでは、 vectorを使えばいいしね。 listで構造体を模倣してprototypingしても、 accessor使っておけば簡単に移行できるし。
711 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 17:59:01 ] evalと大域変数でhashを模倣する初心者を見てニヤニヤするんですよねー
712 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 18:02:44 ] それは君だけ。
713 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:15:13 ] やべえ、サボってたらSeasoned Schemerわかんねえw また後戻りか…英語もやってないし… λ.......