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
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 また後戻りか…英語もやってないし… λ.......