1 名前:デフォルトの名無しさん [2011/07/06(水) 17:15:15.55 ] lispを触ってみたい入門者のQ&A 初心者のQ&A 本スレでは恥ずかしくて聞けない人のQ&A 本スレは高度すぎて割り込めない人のQ&A linuxでなくてwindowsでやりたいんですが・・・Q&A lispを使用してC#やJAVAの代替にするための方法(おまけ) ま、ゆっくりたりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ (list (url pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1) (url pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2) (url pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3) (url pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4) (url pc11.2ch.net/test/read.cgi/tech/1215834213/l50 :part 5) (url pc12.2ch.net/test/read.cgi/tech/1234884136/l50 :part 6) (url hibari.2ch.net/test/read.cgi/tech/1270370267/l50 :part 7) □テンプレート置き場□ ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
735 名前:デフォルトの名無しさん [2012/01/09(月) 00:30:28.89 ] >>728 インデント?
736 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 01:31:58.40 ] >>732 > グレアム御大はエディタでなく言語の側で頑張れ派なので vi を使うとどこかで読んだ。 viでshellコマンド使えるよね? vi を使って、LISPでパースしたりうんたらしたりしているのかね。LISPでvi上で文字を 色付けしたりとかもできるのかな。SHELLを何を使っているか、知らないけど、SHELL側から 色付けアプローチができるんかな。 vi使いのLISPerの動画ってないかね。マジでみてみたいんだよなあ。 超高等テクニックを紹介している英語サイトでもいい。
737 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 11:48:05.90 ] まず最初にvimを使おう。
738 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:48:06.72 ] >>737 プログラム組むんならそれもありだろうけど, Linux 以外でデフォで vim ってあるんかよ?
739 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 15:10:37.13 ] >>737 vimは使えるわ。 viの話が聞きたい。 >>738 Linuxでもvimは標準で入っていないのが多いよ。
740 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 06:28:23.08 ] monadをlispの文法で説明しているサイトないでしょうか
741 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 07:16:19.47 ] >>740 okmij.org/ftp/Scheme/monad-in-Scheme.html
742 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 07:28:41.91 ] ああ、ごめん。早合点した。モナド自体の解説も必要なのか。 それならこっちか。 groups.google.com/group/comp.lang.functional/msg/2fde5545c6657c81 英語だけど端的でとても分かりやすいと思う。
743 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 09:50:31.71 ] in dente
744 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 12:51:58.52 ] John McCarthy 追悼記事 cacm.acm.org/magazines/2012/1/144801-john-mccarthy-1927-2011/fulltext >he was also one of the first to investigate how to rigorously prove properties of programs この一文がよく分からない 証明関係の話だとは思うんだがどういうことなんだろう それとこの一文に興味を持ちました >McCarthy was "a very, very clear thinker regardless of the topic—politics, sociology, the water supply in the San Andreas Basin, anything," recalls Hayes. paul graham御大のようにずけずけと切り込んでいくスタイルだったんでしょうかね エッセイ集のようなものがあれば読んでみたいな そうそう、figureにある御大の若い日の姿がいい deliveryimages.acm.org/10.1145/2070000/2063187/figs/uf1.jpg なんというか、目つきが鋭くて黒ひげが凛々しい
745 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 14:53:18.17 ] チェス盤があるところを見ると Kotok-McCarthy のデバッグ中かな?
746 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 15:37:08.04 ] 質問ですが、 >>1 のパワーズとはどういう人なのですか
747 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 17:31:29.46 ] "MOJO"
748 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 17:47:31.46 ] >>744 後ろに説明あるじゃない。 >He invented abstract syntax; created the nonmonotonic logic technique called circumscription; and invented the garbage collector.
749 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 09:19:35.64 ] サーカムスクリプションじゃなくてこっち。 www-formal.stanford.edu/jmc/basis.html
750 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 15:38:06.07 ] blog.livedoor.jp/s-koide/archives/1846185.html >2003年ニューヨークのConferenceではものすごく感動的なトークをし マッカーシーは2003年にどんなトークをしたのでしょう?
751 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 18:28:37.32 ] Tutorial:Lispで人工知能 cl.cddddr.org/index.cgi?Tutorial%3ALisp%E3%81%A7%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD 例はAllegro Common Lispで開発を進めるということになっていますが、 windowsのsbcl+emacs+slimeで試したいです blog.livedoor.jp/s-koide/archives/1877088.html >そのほかの Common Lisp システムで進めるかたは,ご自分で環境設定とか,コードの修正などをお願いいたします. こう書いてあるのですが、case-sensitiveにするために (setf (readtable-case *readtable*) :preserve) と書くのはわかったのですが、ほかにどういう設定をしてpaipのソースファイルをどこに置けばいいのですか
752 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:43:49.62 ] >>750 comp.lang.lispでも話題になったから検索してみて。 John "Practical" McCarthy でたどれると思う。 しかしそのページILCのIがInternetになってるな。 近くの人教えてあげて。
753 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 16:04:07.76 ] どうもありがとうございます https://groups.google.com/group/comp.lang.lisp/browse_thread/thread/6c75cae46f065843/f06272a6e41dfdfa?hl=ja&lnk=gst&q=John+%22Practical%22+McCarthy#f06272a6e41dfdfa Anton van Straatenさんの発言をまとめると… マッカーシーはチャーチのラムダ計算の考えをlispに部分的に取り入れた、 万が一ラムダ計算をlispのデザイン全体に持ち込んでいたら 実用的なプログラミング言語というものを誤って推し進めたかも、 純粋な型無しのラムダ計算にひどく捕らわれていたかもしれない で、実際のところは無名関数を設けるラムダの表現の意味を拝借したのだ、と lispを開発していたときマッカーシーは チャーチの本のコピーを持ってはいたが最初から最後まで読んだわけでは無かった 飛ばし読みをしていた そのおかげで上のようなデメリットが避けられた lispを作った本人がlispの限界とその理由をかいつまんで解説したと 理解したのですが、これでいいでしょうか
754 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 16:41:45.59 ] Yコンビネータで再帰定義、再帰実行とか、 理論的整合性の泥沼にはまらずに済み、 実践的な言語設計をすることが出来たってことでしょ。 もともと数式評価するFORTRANライブラリ書いていたわけだから、 下手すりゃSucc(Succ(Zero))とか別の方向行っちゃうもんね。
755 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 17:18:30.24 ] 結局、動的スコープ以外はほぼ間違いなかったわけだしな
756 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:25:58.91 ] こないだエロ漫画雑誌を見てたら、姉弟でセクロスしてるところを母親に見付かった場面で「続きは単行本××で」 ってひっぱってたけど、たぶんこの母親もまじえて3Pになる展開なんだろうなぁってのが容易に予想できるので、 ここで予想を裏切るシチュを期待したい。
757 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 20:03:22.08 ] すいません。誤爆しました。忘れてください。
758 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 20:06:12.33 ] テンプレに入れといてやんよ
759 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 21:09:33.86 ] クラブを持ったリスコフ婆さんも乱入だ
760 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 22:07:26.48 ] 質問なんですが、Common Lispで三目並べを作ろうとしているのですが、 対戦相手のグラとして画像を表示させることもできますか? できるのでしたら、関数を教えていただければ幸いです。
761 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:35:40.98 ] >>760 要は「GUIアプリケーションを作れるか」ってことで合ってる? そういう話なら「作れる」んだけど、Common Lisp標準のGUI APIというのはないので、 ライブラリを使ったり、FFI経由で各種APIにアクセスする必要がある。 そして、どういう風に作れば良いのかは、環境と方法によって全然違うので、 対象とする環境とかを教えてもらわない限りは答えにくいと思う。
762 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:43:52.42 ] やっぱり X プロトコルを喋らせないと。
763 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:51:28.76 ] >>761 環境はLisp IDEというフリーのエディタ。全文英語になっとる。 >要は「GUIアプリケーションを作れるか」ってことで合ってる? たぶんあってる。ググったのを見る限り。
764 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:19:47.99 ] つLTK
765 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 01:25:26.08 ] >>764 なんか今使っとるのより断然よさげですね。 ありがとうございました。頑張ってみます。
766 名前:デフォルトの名無しさん [2012/01/15(日) 08:26:04.65 ] 宣教師と人喰人問題で4人ずつ、ボートに3人まで乗れる。 この条件でプログラムを教えて欲しいです。
767 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 08:46:19.56 ] Prolog向きの問題じゃなかったっけそれ
768 名前:デフォルトの名無しさん [2012/01/15(日) 08:51:22.80 ] ググってたんですけど、これでできるかな? d.hatena.ne.jp/jits/20100718/1279443182
769 名前:デフォルトの名無しさん [2012/01/16(月) 17:26:23.02 ] LISPさっぱりわからん… 俺向いてないわ
770 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:39:15.42 ] >>769 Lispに特有の概念(S式とかマクロ)はとっても簡単なので、 再帰とかクロージャとか、そっちの方が理解し辛いのかな? それらは他の言語でも役立つので、覚えて絶対損はしないと思う。 根気良く覚えていくことをお勧めする。 あとは、具体的にどの辺が分からないか書いてくれると、 ここを見てる他の人が、分かりやすく説明をしてくれたり、 分かりやすい説明の場所を教えてくれたりするかもしれないよー。
771 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:43:29.86 ] Haskellに比べたらLispはまだわかりやすいな・・・
772 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:23:45.93 ] MITハッカーにあこがれてCLISPをとりあえず入れてみた いまいち何をすればいいかわからん
773 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 18:24:42.76 ] Lispでもモナドとか使ったりすればHaskell並に難しくなったりするので、 Haskellが殊更難しいっていうのは、Haskellにとってもフェアじゃない気がする。 前提とする知識の多さを「難しい」って表現するなら、確かにそうなんだろうけど。 うーん。でもやっぱ軽く嫉妬入ってるかも。
774 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 20:03:31.30 ] >>773 Haskell使いの被害妄想はすごいなあ。 遠征して書くことか。
775 名前: ◆QZaw55cn4c mailto:sage [2012/01/16(月) 23:58:33.67 ] >>769 処理系の作成の教科書を読むといいかも
776 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:24:41.47 ] >>769 酔っ払いの竹内の本は読むなよ。お金の無駄だ。 編集者が文字を書き起こしたらしいんだが、それだけの手間をかけるなら新しく書けよ、 団塊の世代。
777 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:32:17.99 ] そもそもあれCommon Lispじゃないし、 「文字を書き起こした」ってのもどうなのよw
778 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:51:27.54 ] 竹内本は例題や練習問題が豊富だしそんな悪くないと思うけどな 初心者がコーディングする段階で詰まるポイントをよく捉えてるので 実際に手を動かしながらる本を読む人には向いてるんじゃないかと 概念本としてはそんないいとは思えなかった
779 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 01:28:57.76 ] >>778 新しく本を書いた本を書いた方が良くない? 例題・練習問題はネットに転がっているから困らないでしょ。
780 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 01:45:47.24 ] じゃあ竹内本みたいな構成で例題が載ってるサイト挙げてみて
781 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 02:22:48.45 ] 竹内本みたいな構成でないとダメならない
782 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 06:51:50.80 ] >>774 反応が予想外過ぎるw俺がHaskellerだったら、何に嫉妬してんだw Lispのシンプルさとか? ないだろー。 Lispでも時と場合によってはモナドとか遅延とか使ったりするのに、 それがHaskellだけのものみたいに思われがちなのは、正直面白くない、って話。 Lisp書きがHaskell書きに嫉妬してんの。
783 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 07:51:26.36 ] >>782 はいはい。 さっさと巣にお帰り。
784 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 07:53:52.34 ] 構文エラーと言われたら書き直すのが筋
785 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 10:00:29.72 ] 構文エラーな手書き文章から本を作るお仕事
786 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 10:23:58.09 ] >>773 言語が難しいと言うより、解こうとしている問題が難しいだけだと思うが。 将来はもっと簡潔&理解し易い表現方法が開発されるかもしれないが、そういう表現形式の開発自体、鶏・卵の関係だからな。
787 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 11:51:20.71 ] >>786 同感だし、一応そういう主張。 GitHubでも、他言語由来の概念のLispへの導入とか結構見掛けるけど、 まだ手探りな感じが強い気がする。こういった流れも、数が増えていけば、 よりLisp的に洗練されていくのかなー、とか考えると面白いよね。
788 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 23:47:41.83 ] >>786 表現形式の開発自体が卵だとすると鶏って何?
789 名前:デフォルトの名無しさん [2012/01/18(水) 08:03:50.21 ] 実践CommonLispてどの位時間でよめますか?
790 名前:デフォルトの名無しさん [2012/01/18(水) 08:05:53.51 ] 実践CommonLispてどの位の時間で読めますか?
791 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 14:06:14.90 ] >>790 「読めますか」…そんな言葉は使う必要がねーんだ。 なぜなら、オレや、オレたちの仲間は、 その言葉を頭の中に思い浮かべた時には! 実際にそれを読んじまって、もうすでに理解しているからだッ! だから使った事がねェーッ。 >>789 、オマエもそうなるよなァ〜〜〜、オレたちの仲間なら… わかるか?オレの言ってる事…え? 『読んだ』なら、使ってもいいッ!
792 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:48:45.82 ] partake.in/events/e9956e93-dd82-4b63-96bb-f9f75370dc5d >訳がアレな部分がある paipの日本語版を持っていますが、具体的にはどこなのでしょうか
793 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 03:56:16.14 ] (setq alist (acons 1 "uno" (1 . "one") (2 . "two")))) => ((1 . "uno") (1 . "one") (2 . "two")) ではなくて (setq alist (acons 1 "uno" (1 . "one") (2 . "two")))) => ((1 . "uno") (2 . "two")) となるような aconsの拡張に標準的な名前はついてないのでしょうか
794 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 13:08:34.82 ] www.aoky.net/articles/paul_graham/vw.htm viawebのスナップショットがあるけど なんというかシンプルなんだね それに競合他社を欺くためのテクニックがあざとくて笑った
795 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 13:26:39.48 ] 「その理由」のリンク、昔、別の記事にもあったんだけど、大笑いしたなぁ
796 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 14:41:57.08 ] ロバート・モリスが、表に名前を出すのを避けてた、ってのは初めて知った話という気がする
797 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 23:53:38.16 ] >>793 俺は知らない。たぶんないんじゃない? cltl に「assoc と rplacd でできるけど、お勧めはしない」って書いてある。 ttp://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node153.html 本当に update が必用なら hash table 使うのが普通だと思う。 あるいは property list。
798 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 00:54:45.05 ] Lisp。入門書を読んでみたが、 この言語のなにがすごいのかよくわからない。 PROGとか手続き型となにが違うのかと。 カッコも多くてめんどくさい。 普通の手続き型言語、例えばCで同じ内容のプログラムを書いた場合と比較して、 手間が省けるプログラムって例示できる人いるの?
799 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 01:52:13.58 ] >>798 っpractical-scheme.net/trans/icad-j.html
800 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 04:22:59.22 ] >>798 Lisp全般の話がしたいのならLisp Schemeスレでね。 丁度向こうでも同じ話題が出ているので、>>798 にも都合が良いと思う。 こちらでもflame warを起こすのが目的じゃなければ、の話だけどね。 Lisp Scheme Part33 toro.2ch.net/test/read.cgi/tech/1318150738/ >>799 プログラムを出せと言ってるんだから、そこで挙げるなら、例えば www.atmarkit.co.jp/news/200909/07/lltv02.html practical-scheme.net/vault/lltv-shiro.tar.gz 辺りでしょ。
801 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 12:04:24.58 ] >>798 入門書とか読むだけだとLispのすごさや便利さはあまり腑に落ちないよ。 1000行くらいの簡易実装(マクロつき)を読み下すと、 CやJavaの不自由さがよくわかると思うよ。
802 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 13:17:46.65 ] Lispのぱっと見の印象がそんなに悪くなる入門書ってなんだろな
803 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 19:07:55.33 ] >>802 lyrical.bugyo.tk/
804 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 20:16:05.40 ] twitter.com/lipsmagazine
805 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 01:39:03.94 ] >>804 それ舌足らずやない唇や
806 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 15:22:56.95 ] >>804 のアイコンを俺が今作ってる処理系に使いたい
807 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 10:40:03.82 ] (format nil "~{ ~}" '(l i s t)) とすると一気にメモリを消費してしまうのは仕様ですか?
808 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 11:29:50.10 ] >>807 仕様かどうか知らんけど 間に~aか何か置かないと引数のリストがいつまでたっても消費されないんじゃない? (format nil "~{~a~}" '(l i s t)) => "LIST"
809 名前:806 mailto:sage [2012/01/29(日) 19:47:07.24 ] >>808 言われてみれば確かに。 slimeで勉強中にこの式をたまたま評価したらいつの間にかメモリを食い潰してしまって焦ってしまいました。 で、こういう事態に備えてヒープサイズ?を制限しようかと思ったのですが、clozureでは可能なのでしょうか。 sbclなら--dynamic-space-sizeで指定したメモリ以上は使わないようにできました。 しかしclozureでは--heap-reserve 1Gと指定しても、topで見る限り128Gまでメモリ使用を許可しているようです。 当然そんなにメモリを積んでいないし、>>806 のような馬鹿をすると1Gを超えてメモリを食い出しました。
810 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 01:20:22.90 ] >>809 >>806 がdisられてる件について。 --heap-reserve 8Mくらいで>>807 試すと普通にメモリ不足ですぐ例外発生したりしない? Windows XP SP3 32-bit + CCL 1.8-dev-r14962-trunkだとそんな感じだけども。 一応、CCLのヒープ関係はこういう仕組みになってるとのこと。 ccl.clozure.com/manual/chapter16.1.html#Heap-space-allocation (cl:room)するとどうなってる?
811 名前:デフォルトの名無しさん [2012/01/30(月) 05:34:46.27 ] CL-USER> 0.123e20 1.23e19 理解できないのですが どなたか説明お願いします。
812 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 05:39:05.44 ] eで桁が減ってるから合ってるじゃん。
813 名前:デフォルトの名無しさん [2012/01/30(月) 07:05:19.17 ] ↑ありがとうございました。
814 名前:807 mailto:sage [2012/01/30(月) 08:34:25.72 ] すいません>>806 じゃなくて>>807 でした。 ccl64 --heap-reserve 4Mで(cl:room)としたとき、 pproximately 24,117,248 bytes of memory can be allocated before the next full GC is triggered. Total Size Free Used Lisp Heap: 39190528 (38272K) 24117248 (23552K) 15073280 (14720K) Stacks: 51246288 (50045K) 51211592 (50011K) 34696 (34K) Static: 19070896 (18624K) 0 (0K) 19070896 (18624K) -4071.375 MB reserved for heap expansion. となります。OSはlinux(64bit)で、clozureはccl-1.7-linuxx86.tar.gzの中にあるccl64を動かしています(cclはエラーになる)。 (swank:start-server :port 4005 :stlye :spawn :dont-close t)でswankサーバを建ててslime-connectして使っています。 この状態で、>>807 をC-c C-cとし、数秒後に(cl:room)を実行すると Approximately 33,554,432 bytes of memory can be allocated before the next full GC is triggered. Total Size Free Used Lisp Heap: 2548170752 (2488448K) 33554432 (32768K) 2514616320 (2455680K) Stacks: 51246288 (50045K) 51210424 (50010K) 35864 (35K) Static: 19070896 (18624K) 0 (0K) 19070896 (18624K) -6464.125 MB reserved for heap expansion. となります。
815 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 15:25:59.61 ] LispのマクロはJsとかでいわれているラムダ的な物と考えてよいのでしょうか?
816 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 18:19:23.92 ] >>814 Oh... 凄く…負の値です…。バグなのかなー。>>810 の環境で普通に起動するとこう。 Approximately 7,864,320 bytes of memory can be allocated before the next full GC is triggered. Total Size Free Used Lisp Heap: 20119552 (19648K) 7864320 (7680K) 12255232 (11968K) Stacks: 31317648 (30584K) 31304808 (30571K) 12840 (13K) Static: 20140352 (19668K) 0 (0K) 20140352 (19668K) 844.812 MB reserved for heap expansion. 予約された領域の表示は、ccl:%reservedbytesで領域の境界同士を引いて算出してる。 負の値になるってことは、多分境界の値がおかしなことになってるんだと思うんだけど。 trac.clozure.com/ccl/ticket/890 に、"This affects me."とか書きつつ、環境と(room)の結果でも貼ってみたらどうだろう。 blo.udoidio.info/2008/10/out-of-memory-sad-case.html を見ると、少なくとも1.2の時点からある問題みたいだ。
817 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 18:49:29.05 ] >>815 ラムダは関数だから違う。強いて言うならC++のテンプレートが近い。 用途は色々あるけど、総じて他の言語ならコンパイラの書き替えや別言語の実装が必要なレベルの抽象化が出来る。
818 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 19:01:05.30 ] >>817 なるほど、C++のテンプレートにちかいのですね。 この考えを取っ掛かりとしてもう一度勉強してみます。
819 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 19:24:25.09 ] >>818 強いて言えばだから、テンプレートの勉強をしてもあまり参考にならないと思うよ。 Lispマクロ自体を勉強する方が良いと思う。 Paul=Grahamやgaucheの作者の書いた物がお勧め。
820 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:57:34.69 ] >>819 いっしょだと思う. template_expand と template_expand_1 さえあれば...
821 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 07:26:04.21 ] >>820 条件分岐の面倒さや再帰の深さ制限とか、実行時型情報とかやはり違うと思う。Lispにはリーダマクロ等もある。 boostにもよりLispマクロを目指したmopがあるし、D言語もASTマクロを入れる予定。 ところで調べてて驚いたけど、Perl6にもASTマクロがあるらしい。現状で一番Lispに近い言語なのかも(笑)
822 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:38:23.98 ] Boost.MPL はマクロに近い
823 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 17:32:20.27 ] Why I love Common Lisp and hate Java « Piece of mine https://kuomarc.wordpress.com/2012/01/27/why-i-love-common-lisp-and-hate-java/ Why I love Common Lisp and hate Java, part II – code examples « Piece of mine kuomarc.wordpress.com/2012/02/02/why-i-love-common-lisp-and-hate-java-part-ii-code-examples/
824 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 21:18:26.92 ] ネタ記事? Compare class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); } } with Common Lisp’s equivalent: "Hello World"
825 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 22:41:28.18 ] ttp://homepages.inf.ed.ac.uk/wadler/language.pdf を思い出した。
826 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 00:30:57.46 ] 最近common lisp始めてみた。 特に作るののもないのでリストいじってあそんでいる。
827 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 00:35:10.04 ] いらっしゃい。何かを得ていってくれると嬉しい。
828 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 02:32:05.69 ] (defun hoge (x) (format t "hoge start~%")(catch 'c1 (format t "catch c1 start~%") (fuga x) (format t "catch c1 end~%")) (format t "hoge end~%")) (defun fuga (x) (format t "fuga start~%") (if (= x 0)(throw 'c1 "x = 0")(format t "x /= 0~%")) (format t "fuga end~%")) で質問です。このlispの実行結果は、 (hoge 0) hoge start catch c1 start fuga start hoge end nil となるのですが、catch c1 start後に関数fugaのif文でtrueなので (throw 'c1 "x = 0") を実行すると思うんですが (format t "catch c1 start~%") (fuga x) (format t "catch c1 end~%") を実行せずにそのまま"hoge end"で終わっています。 (throw 'c1 "x = 0")の時いったい次どこの処理をするのでしょうか。 また、最後、throwの戻り値の"x = 0"も出力されず、nilとなっています。 "x = 0"が返されるときとはどういうときなのでしょうか。 動きがよくわからなくて困っています。 よろしくお願いします。
829 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 04:02:22.74 ] catchの各formを評価している最中にthrowされると、throwで指定した値がcatchの戻り値になる。 なので、(throw 'c1 "x = 0")によって、catchの戻り値が"x = 0"になる。以降のformは評価されない。 catchの戻り値は、件のコードでは単に捨てられるようになっているので、出力もされない。 catchの後に「hoge end」を出力して、そのまま終了する。 つまり、throwの次に実行されるのは(format t "hoge end~%")。 www.lispworks.com/documentation/HyperSpec/Body/s_catch.htm というか、普通はcatchやthrowを直接使ったりせず、より上位の仕組みのコンディションを使う。
830 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 10:05:55.45 ] >>829 回答ありがとうございます。 throwでx=0の後は、関数fugaは評価されないんですね また、catchというかhogeのcatchが終了したところに戻るんですね 戻り値は受け手はいるけど出力して終了とはならないということですか なるほど。。。非常に難しいですね。。。 ありがとうございます。
831 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 10:16:38.35 ] 1:(defun catch2 (tag) 2: (catch tag 3: (throw 'hack 'yes))) 4:catch2 5: 6:=> catch2 7: 8:(catch 'hack 9: (print (catch2 'hack)) 10: 'no) 11: 12:yes 13:no というプログラムでもやはりcatch,throwのことですがいいでしょうか 先ほどの回答ですと まず8行めのcatchから、1,2行目にとんで3行目のthrowで すでに8行目は行ってるので、8行目に飛ばずにそのままそのthrowは終了 でyesが返ってくる。 それが9行目のprint文にもどるのでyesを出力となるわけですね。 最後の'noはどうやって出力されたのでしょうか。 ここもやっぱりよく分からないのですが。。。
832 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 10:25:18.81 ] (catch2 'hack) は (catch 'hack (throw 'hack 'yes)) になる。
833 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 11:19:25.56 ] 1:(catch 'hack 2: (print 3: (catch 'hack 4: (throw 'hack 'yes))) 5: 'no) とすると 3行目のcatchから、throwで戻り値yesをprintして 残りは'noが残ると思うのですが すると 結果は yes no となるのですが、noは'noがただ評価されたから 出力されているという解釈でいいんでしょうか。
834 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 13:34:40.81 ] (print (catch2 'hack)) がyesを表示してて、 (catch 'hack (print (catch 'hack (throw 'hack 'yes))) 'no) を評価したときの戻り値がno。 インタプリタ上だと標準の出力先と戻り値を表示する先が同じものが多い。
835 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 14:40:06.47 ] リスト操作の質問です (list "test2" "foo34" "bar23" "test5" "foo67" "test9" "bar8" "foo7") こうして作成したリストを ("test234" "bar23" "test567" "test9" "bar8" "foo7") のように変換したいです どういうことかというと、test〜の直後の要素がfoo〜だったら test〜とfooより右側の文字列を結合させます そうでなければその要素はそのままにしておきます (mapcar #'(lambda (a b) のように書きはじめるのかと思いましたが、この場合の a bは二つのリストからそれぞれ 要素を取り出すものなので違うようです どうすればよいでしょうか