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)
855 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:40:28.11 ] >>836 >>835 のような実用用途に対するLISPプログラムを初めて読んだ。 結構時間かかったけど、こういう風にするんだな。面白い。 destructing-bindって融通効かしてくれるんだな。きれいに書きますね〜。 (concatenate 'string "test39" (subseq "foo8" (length "foo"))) こういう実務向けの機能知らな過ぎワロタ このぐらいの長さの物をもっと読みたいんだけど、良いサイトあります? 当方竹内さんの入門書を一冊通した程度の実力。
856 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 22:42:59.10 ] >>855 どういう分野を勉強したいのか、具体的に詳しく書いた方がいいよ。 あと何を作りたいとか。
857 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:03:07.02 ] >>855 実務向けの機能と言うか、マニュアル(CLtL2)読めばいいじゃん。
858 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:16:28.21 ] >>850 Schemeを使う。半分冗談だけど半分は本気。 Common Lispは利便性と厳格さのトレードオフで利便性を採った言語だから。 多分、その辺が気になるなら、今後も色々引っかかりを覚える事が多いはず。 リーダーをいじって、'()を適当にユニークなデータに置き換えて、 cl:carとかcl:cdrとかcl:consとかも上書き定義して…みたいに頑張るよりは、 nilと空リストが同じことに慣れるか、Scheme使う方が幸せだと思う。
859 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:19:16.92 ] 「実務向けの機能」なら実践Common Lispはどうだろ 部分的にしか読んでないけど パス名の扱いとか懇切丁寧に書いてあってすごい参考になった
860 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:44:00.80 ] >>858 > Schemeを使う。半分冗談だけど半分は本気。 > Common Lispは利便性と厳格さのトレードオフで利便性を採った言語だから。 > 多分、その辺が気になるなら、今後も色々引っかかりを覚える事が多いはず。 勉強で必要最小限Schemeやるけど、今の所、真面目に勉強する気がないなあ。 Scheme使うのは誰かに任せるよ。自分はCL道を極める。 ちなみにSchemeでデバッグ機能も強力で日本語も使える処理系ってRacket? SchemeってCLみたいに処理系分岐ってできないの? Gaucheの良さって分かるんだけど、学習コストをかけた後に後々やっぱり タスキに長し帯に短しで不満が出てきそうなんだよね。 GaucheのコードをRacketに移植ってコストがかかって面倒くさいでしょ。
861 名前:836 mailto:sage [2012/02/08(水) 00:00:15.62 ] >>855 私幼女だけど、concatenateの部分はむしろ教科書的というか、 多分実用的なコードなら正規表現の後方参照使うと思うの。 あと、(concatenate 'string x y)よりは、(format nil "~a~a" x y)使う。 ついでに、(length ...)の部分は#.(length ...)ってする。 あんま長過ぎず、見てて楽しいっていうと、ユーティリティライブラリじゃないかな。 例えば、こんなんどうだろう。 common-lisp.net/gitweb?p=projects/alexandria/alexandria.git;a=tree;js=1 www.flownet.com/ron/lisp/rg-utils.lisp
862 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:27:18.15 ] >>860 CL続けるなら、tやnilの使い回しには慣れたほうが良い。 じゃないと、多分CLOSを学習するとき、一番底にあるクラスにビビる。 Schemeだと、現状だとRacketが優秀過ぎるってのはある。 CLに比べると処理系切り替えは楽じゃない。処理系依存部分が大きく、ある程度は面倒。 でもまあ、Gaucheかはともかく、Schemeを勉強するのは、視野が広がって良いと思うよ。
863 名前:SCHEME餃子 ◆8X2XSCHEME mailto:sage [2012/02/08(水) 00:45:13.51 ] >>860 処理系ごとの切り替えは srfi-0 があるが…。 srfi.schemers.org/srfi-0/srfi-0.html そもそも srfi-0 をサポートしてない処理系もあるからなー。 racket だと srfi-7 を使えってことになってたと思う。
864 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:47:07.73 ] >>862 > でもまあ、Gaucheかはともかく、Schemeを勉強するのは、視野が広がって良いと思うよ。 英語できて、フランス語できれば、視野が広がるのは分かるんだけど、 時間は有限だからなあ。
865 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 18:28:29.02 ] >>854 ありがとうございます。読み進めてみます。 >>855 に関連することですが、 THE SEASONED SCHEMERのような短いコードでcommon lispのノウハウを一通り学べるサイトはありますか? とくにseriesの実例をいくつも見てみたいのですが。
866 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:41:13.84 ] wiki文法をhtml風のs式に変換しようとしているのですが インラインの装飾をどう変換するのでしょう あ\*ああ**//強調&斜体//**ううう この行を (:P "あ*ああ" (:EM (:ITALIC "太字&斜体")) "ううう") こうしたいのですが(//で囲まれていればitalic、**で囲まれていればem、\*は*に)、 (defun wiki-syntax->html-like-sexp (text) ;; cl-ppcre (ppcre:register-groups-bind (first second third) ("^(.*?)\\*\\*(.+?)\\*\\*(.*?)$" text) (list first (list :em second) third))) このように書くと:italicに対応するため正規表現を複雑にしなければなりません 読み込んだ文字列全体を:pでまとめるというのも入れると、こんがらがりそうです どうすればいいのでしょう?
867 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:53:05.55 ] wikiの文法は知らないけど、正規表現でなく、parserを書いてモードで切り替えた方が楽なんじゃない? clikiを見たらwiki用のライブラリもあるみたいだから参考にすると良いんじゃないかな。
868 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:56:16.48 ] 自己訂正:コメントじゃないからモードの切り替えは要らないか。
869 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 21:20:22.06 ] >>867 の言うように、再帰下降パーサを手書きするか、CL-Yaccやmeta-sexpを使うか、 いくつかあるパーサコンビネータライブラリを使うかした方が多分楽だと思う。 多分、最終的にはもっと多くのWiki構文をサポートするんでしょ?
870 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 14:41:12.30 ] >>867-869 ありがとうございます。たしかに既存のパーサを利用するのがよさそうですね。 はい。多くのwiki構文をサポートするつもりです。 早速やってみます。
871 名前:866 mailto:sage [2012/02/09(木) 18:55:09.42 ] すみません。続けて質問します。 字句解析を書いたのですが:があらわれると illegal terminating character after a colon: #\ となってしまいます ソースはこちらです paste.lisp.org/display/127608 コロンを特別の字句として解析するにはどうすればいいのでしょうか。
872 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 21:21:08.69 ] >>871 :もreadが読んでる。:の解析部分はこの場合には使用されてない。 もともと内部的にもLispではない文字列だからreadは使えない。怠けず全文字処理すべし。
873 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 14:34:06.44 ] >>871 cl-yaccを使うなら、lexerもライブラリを使えば?
874 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 15:48:00.58 ] >>872 ありがとうございます 指摘を受けてloopのacrossを使って全文字を処理するようこう書き換えました paste.lisp.org/display/127669 処理できたようなのですが、なぜかサンプルと同じように動きません lispuser.net/memo/lisp/2006-03-30-23-58.html の「つくったら早速 REPL で試してみましょう.」以下と同じく出力されると思うのですが >>873 blogs.yahoo.co.jp/oiron_abok/archive/2011/9/21 これを見てcl-lexをいじってみたのですが#\newlineと#\spaceの検出方法がわかりませんでした
875 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 02:09:23.54 ] >>874 あんまloop詳しくないけど、do節の使い方が間違ってる気がする。 あと、字句解析器(lexer)はトークンをひとつずつ返せばいいので、 一度に全体を走査する必要ないはず。 ja.wikipedia.org/wiki/%E5%AD%97%E5%8F%A5%E8%A7%A3%E6%9E%90 それと、想定外の結果になったら、問題の切り分けからすると良いと思う。 この場合、まずlexerが正しく動作するか確認すれば、問題の位置を特定できる。 lexerの中にはloopしかない。loopをマクロ展開すると、どうやら値を返すようになってない。 じゃあ、HyperSpecやCLtL2とかのリファレンスを見てみよう、って感じで。
876 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 03:22:32.57 ] テンションが上がったので、ちょっと書いてみた。 こんな感じのことがやりたかったってことで良いんだろうか。 paste.lisp.org/display/127683
877 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 10:58:50.37 ] >>874 もう要らないかも知れないけど、cl-lexはlexと同じく正規表現で指定する。
878 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 18:22:23.84 ] みなさんありがとうございます。 cl-lexを使うパターンと使わないパターンの二つを書いてみました。 >>875-876 たしかにご指摘のとおりloopの部分がおかしかったです。 そしてまさに>>876 の例が行いたかった処理です。うまく動きました。 ただ、コメントにあるように効率的に処理するために一度に複数のトークンを切り出すのが理想的ですが peek-charを使っても一つ先しか見れません paste.lisp.org/display/127703 このようにして先の文字を読み込むのではなく、はじめにpeek-charを使うと今度は": "の読み込みで 引っかかってしまいます。 >>877 正規表現を書き直したら大方うまく動きました。行も判定できました。 ですが、backslashの判定と、パースの結果をまとめる部分がうまくいきません。 cl-lexを使ってこのように書きました。 paste.lisp.org/display/127704 引き続き調べます。
879 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 20:40:33.48 ] >>878 > ただ、コメントにあるように効率的に処理するために一度に複数のトークンを切り出すのが理想的ですが なぜトークンを切り出す関数を別に作らない? (t (values :token (get-token c in))) とかすれば, ええんちゃう?
880 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 23:42:39.64 ] >>878 分かってるっぽいけど「複数のトークン」じゃなくて、「複数文字のトークン」。 構文解析のときに一文字ずつ解析するより、ブロックごとの方が効率良くなるという話。 とりあえず、ライブラリで字句解析するみたいだからこの辺で止めとく。 あと、コメントに書いたように、"う\うう"だと"ううう"と同じに解釈されるからね。 "う\\うう"じゃないと、文字列にバックスラッシュが含まれることにならない。 あと、colonの区別が付かないのはread-from-stringしてるから。 元の値を使えば良いと思うんだけど、readしてるのは何か事情があるの?
881 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 14:12:28.41 ] >>879 ええ。そうしようとしたのですが、うまくできませんでした。 >>880 read-from-stringを使っていたのはミスでした そのまま値を返せばよいだけでした バックスラッシュについても勘違いしていたようで、 他のファイルのテキストから読み込むときにはバックスラッシュをきちんと認識できていました これで問題が無事解決しました お騒がせいたしました
882 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 17:57:50.83 ] common lispを使った講義や開発シーンを動画で公開しているところはありますか? schemeのsicpなら ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/ がありますが。
883 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 18:47:06.73 ] プログラミングを何も知らない私がClispを始めるには何を用意すれば良いのでしょうか win
884 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 20:18:01.64 ] winでclispもろもろをそろえるなら lispboxでいいんじゃない? 紫藤のWiki と lispbox で検索
885 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 22:19:27.24 ] www.google.co.jp/search?q=common+lisp+video+lecture おなじの物ばかりかもしれないが。
886 名前:デフォルトの名無しさん [2012/02/15(水) 14:08:33.85 ] 長いリストの出力について教えてください。 (print (make-sequence 'list 100)) これをsbclやclispで行うとNIL19個毎に改行されてしまいます。 どうすれば改行せずに出力出来ますか?次工程でgrepなんかを使いたいのです。 よろしくお願いします。
887 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 14:38:12.07 ] >>886 (let ((*print-pretty* nil) (*print-length* nil)) (print (make-sequence 'list 100)))
888 名前:デフォルトの名無しさん [2012/02/15(水) 14:46:42.86 ] >>887 動きました。ありがとうございます。 pretty print絡みだったんですね。
889 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 15:24:36.69 ] >>885 ありがとう slimeの入門動画なんてものがあったんだな 知らなかったよ
890 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 18:43:19.33 ] “@ajiyoshi: NTTデータでcommon lispが使われるようになったりするのか?!w t.co/9zLNfeRs 株式会社数理システムの子会社化について 2012年2月15日 | ニュースリリース | NTTデータ” 株式会社数理システムの子会社化について ttp://www.nttdata.co.jp/release/2012/021500.html
891 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 07:02:40.13 ] MSI、NTTデータの子会社になるんだ。 Common Lispユーザにとって色々有益な情報を出してくれる所だから、少し不安。
892 名前:デフォルトの名無しさん [2012/02/17(金) 01:32:25.22 ] sbclでのコンパイルについて教えて下さい。 以下の方法でSBCL 1.0.40.0.debianでは動いていたはずなのですが、 SBCL 1.0.50.0.debianではエラーが出てしまいます。 メモリが少ないために小分けで何万回と実行する予定ですので コンパイル済みのバイナリとしたいのです。 どうすれば良いでしょうか?よろしくお願い致します。 hell.lisp: (print "HELL!") $ sbcl --noinform --disable-debugger --eval "(compile-file \"hell.lisp\")" --eval '(quit)' ; compiling file "/.../hell.lisp" (written 17 FEB 2012 XX:XX:XX AM): ; compiling (PRINT "HELL!") ; /.../hell.fasl written ; compilation finished in 0:00:00.003 $ chmod +x hell.fasl $ ./hell.fasl unhandled SB-C::INPUT-ERROR-IN-COMPILE-FILE in thread #<SB-THREAD:THREAD "initial thread" RUNNING {AA65919}>: READ failure in COMPILE-FILE: SB-INT:SIMPLE-READER-ERROR at 27 (line 2, column 2) on #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}>: illegal sharp macro character: #\
893 名前:デフォルトの名無しさん [2012/02/17(金) 01:34:17.67 ] (つづき) 0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {AA75BAD}> :START 0 :COUNT 128) 1: (BACKTRACE 128 #<SB-SYS:FD-STREAM for "standard error" {AA669C9}>) 2: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-C::INPUT-ERROR-IN-COMPILE-FILE {AA71861}> #<unavailable argument>) 3: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SB-C::INPUT-ERROR-IN-COMPILE-FILE {AA71861}>) 4: (INVOKE-DEBUGGER #<SB-C::INPUT-ERROR-IN-COMPILE-FILE {AA71861}>) 5: (ERROR SB-C::INPUT-ERROR-IN-COMPILE-FILE :CONDITION #<SB-INT:SIMPLE-READER-ERROR "illegal sharp macro character: ~S" {AA71791}>) 6: (SB-C::READ-FOR-COMPILE-FILE #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}> 25) 7: (SB-INT:LOAD-AS-SOURCE #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
894 名前:デフォルトの名無しさん [2012/02/17(金) 01:34:51.95 ] (つづき) 8: ((FLET SB-FASL::LOAD-STREAM) #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}> NIL) 9: (LOAD #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT) 10: ((FLET SB-IMPL::LOAD-SCRIPT) #<SB-SYS:FD-STREAM for "file /.../hell.fasl" {AA697D9}>) 11: ((FLET #:WITHOUT-INTERRUPTS-BODY-[PROCESS-SCRIPT]69)) 12: (SB-IMPL::PROCESS-SCRIPT "./hell.fasl") 13: (SB-IMPL::TOPLEVEL-INIT) 14: ((FLET #:WITHOUT-INTERRUPTS-BODY-[RESTART-LISP]30)) 15: ((LABELS SB-IMPL::RESTART-LISP)) unhandled condition in --disable-debugger mode, quitting $
895 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 05:07:44.25 ] lispboxをXPで使いたいんだがbat実行しても動かん; 落としてきてbat実行するだけじゃダメなのかこれ? linuxのはsh実行するだけで普通に動いたんだが
896 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 05:39:03.41 ] 追記:後、時々、win版は自動インストーラがついてるって書いてるブログあるけど、 これは昔のバージョンだけ?lispbox-0.7には入ってないみたいだけど
897 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 06:20:45.30 ] batファイルをどう実行したの? ダブルクリックではなくコマンドプロンプトから実行すれば 何かしらエラーメッセージでも出そうなものだけど
898 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 06:46:01.31 ] >>892 むしろ、その話が事実だと、前はFASLをそのまま実行できたということに。マジですか。 SBCLでバイナリを作るには、cl:compile-fileじゃなくてsbcl-ext:save-lisp-and-dieを使えば大丈夫。 Common Lispでは(Cとかでもそうだけど)コンパイルと実行形式を作ることとは別なのでご注意。 cl.cddddr.org/index.cgi?%bd%e8%cd%fd%b7%cf%3a%bc%c2%b9%d4%a5%d5%a5%a1%a5%a4%a5%eb%a4%ce%ba%ee%a4%ea%ca%fd ただ、メモリの消費量とバイナリにすることって、多分あんまり関係ないと思うけど、 それはそれで大丈夫なんだろうか。
899 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 08:02:38.86 ] >>897 すいません、自己解決しました; windowsのユーザーフォルダ名が日本語だったのでそれが原因でエラーが 起きてた模様 レスありがとうございました
900 名前:デフォルトの名無しさん [2012/02/17(金) 13:12:34.76 ] >>898 ありがとうございます。 >むしろ、その話が事実だと、前はFASLをそのまま実行できたということに。マジですか。 faslにはシバン(#!/usr/bin/sbcl --script)が付加されてるので実質はsbcl呼んでるんですけどね。 0.50にも付いてるのですが動かなくなりました。 >SBCLでバイナリを作るには、cl:compile-fileじゃなくてsbcl-ext:save-lisp-and-dieを使えば大丈夫。 save-lisp-and-die時のTOPLEVELの指定が分かりません。 スクリプトとコンパイルのソースを共有したかったので。 実行時型チェックすれば良いのだろうけど。 >ただ、メモリの消費量とバイナリにすることって、多分あんまり関係ないと思うけど、 起動に掛かる時間を減らしたいのです。 コンパイルとか数秒掛かるでしょ。何万回とかになると何時間にもなるのではないかと。 実際は何百万回とかだた。
901 名前:デフォルトの名無しさん [2012/02/17(金) 13:27:19.85 ] 補足です。 # save-lisp-and-die時のTOPLEVELの指定が分かりません。 WEBだと関数を指定しているものばかりなのですが、 スクリプトの場合は関数の呼び出しまで記述する必要があり 共用させるのに「おまじない」が必要になります。 例示した様なスクリプト形式のままで実行出来る コンパイルの方法が分からないとの意味です。
902 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:18:49.78 ] >>900 なるほど。そちらの事情は把握できたと思う。 とりあえず、1.0.51以降でのFASL周りの変更は、型関係の不具合修正だけなはずなので、 1.0.55でも直ってない気はする。1.0.40以降のリリースノートにも書いてないように見える。 それって正式な機能なのかな? マニュアルのFASLの項には特に書いてない感じだけど。 正式な機能ならLaunchpadへ報告どうぞ。そうでなくとも、MLで聞いてみても良いかも。 自分なら、トップレベルの関数を利用する形にスクリプトのコードを自動変換し、 それをコンパイルしてロード、save-lisp-and-dieするまでの処理を自分で書いちゃって、 今度からそれを使うようにすると思う。一度書いちゃえば次からは使い回しもできるし。 ただ、いかにもkludgyではあるので、そちらのお気には召さないかも。 それと、多分バイナリにまでする必要はなくて、ロードした状態のイメージを保存して、 それを処理系を起動するときのイメージとして指定すれば、同じ効果が得られると思う。 ロード時間を削るために良く使われる手じゃないかと。
903 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:03:16.60 ] >>900 いまいち何がしたいのか理解できてないけど、バイナリにしたいのではなくて、コンパイル済のファイルを呼び出したいだけではないの? シバンに任せずに普通にloadしてはいけないの?
904 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:07:10.83 ] >>900 エラーの直接の原因としてはfaslファイルの2行目の# FASLの部分でマクロキャラクタと判別してるからだと思う。
905 名前:デフォルトの名無しさん [2012/02/17(金) 20:30:39.44 ] 沢山のコメントありがとうございます。 >>902 LISP初心者なんでLaunchpadとかよく分かりません。 ベテランLISPerが誰も困ってないのなら仕様どおりなのでしょう。 処理時間の関係だけなので実はソースを弄ってsave-lisp-and-dieで既に動かしてはいます。 今まで便利だったのでそのまま使えたらと考えました。 >ただ、いかにもkludgyではあるので、そちらのお気には召さないかも。 ソースコードの可読性が損なわれないなら問題ありません。 >トップレベルの関数を利用する形にスクリプトのコードを自動変換し、 LISPならこんな事も簡単?に出来るのでしょうか。勉強してみます。 >ロードした状態のイメージを保存して、それを処理系を起動するときのイメージとして指定すれば、 これってsave-lisp-and-dieの事ですよね。 >>903 個人的にsave-lisp-and-dieの方法も検討していたので書き方が混乱していました。 目的は処理時間の短縮なので方法には拘りません。今まで(とは言っても数日ですが) 動いていたのが環境を変えたら動かなくなったのでどうなったのかなと。 >>904 なるほど。 実は0.40ではシバン付けたままでもコンパイルが通ってたんですよ。 シャープマクロ?の解析方法が変わったのかもしれませんね。
906 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 00:55:04.52 ] >>905 Launchpadってのは、オープンソースプロジェクトのホスティングサービスで、 その機能のひとつであるバグトラッキングシステムをSBCLは使ってる。 非公式な機能でなければ、開発者に不具合報告してみれば良いのでは、って話。 イメージの件はそう。:executable tを指定しなければ単なるコアイメージができる。 あと、コードの変換については、別にそんな難しいことを言ってるわけじゃなくって、 こういうのをcompile-fileの代わりに使えば良いんじゃないかと思う。 (defun script->executable (exe-file-name src-file-name) (let ((tmp-file-name (format nil "~a.tmp" src-file-name)) (toplevel-symbol (gentemp "TOPLEVEL"))) (with-open-file (src src-file-name) (with-open-file (tmp tmp-file-name :direction :output :if-exists :error) (format tmp "(defun ~a ()~%" toplevel-symbol) (do ((line (read-line src nil) (read-line src nil))) ((null line)) (write-line line tmp)) (format tmp "~&)~%"))) (compile-file tmp-file-name) (load tmp-file-name) (delete-file tmp-file-name) (sb-ext:save-lisp-and-die exe-file-name :toplevel toplevel-symbol :executable t)))
907 名前:デフォルトの名無しさん [2012/02/18(土) 18:08:27.54 ] >>906 コードまでありがとうございます。全体をdefunで括っても構わないのですね。 何となくdefunやrequireなんかを除外しないといけない様な気がしていました。 早速シバンの除去とコマンドラインから起動出来る様にしました。 これで今まで同様の操作で行けます。本当にありがとうございました。
908 名前:デフォルトの名無しさん [2012/02/18(土) 18:09:12.81 ] あと、皆様ごめんなさい。 SBCL自体では *シバンはサポートしてない* みたいです。 私の環境で動いたのは~/.sbclrcに以下を記述していた為でした。 (同様な記述がいくつもありますがおそらくwww.kono.cis.iwate-u.ac.jp/~hiki/?SBCL からのコピペ) 0.40でも0.50でも全く同じに設定(FTPでコピーしたのでcksum値も同じ)してあるのですが、 動作が変わった理由が分かる方おられますか? なお、上記代替策がありますのでそれ程逼迫したものではありません。 お騒がせして申し訳ありませんでした。 ;;; If the first user-processable command-line argument is a filename, ;;; disable the debugger, load the file handling shebang-line and quit. (let ((script (and (second *posix-argv*) (probe-file (second *posix-argv*))))) (when script ;; Handle shebang-line (set-dispatch-macro-character #\# #\! (lambda (stream char arg) (declare (ignore char arg)) (read-line stream))) ;; Disable debugger (setf *invoke-debugger-hook* (lambda (condition hook) (declare (ignore hook)) ;; Uncomment to get backtraces on errors ;; (sb-debug:backtrace 20) (format *error-output* "Error: ~A~%" condition) (quit))) (load script) (quit)))
909 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 03:31:07.45 ] stumpwmはそろそろ実用してもいいのだろうか
910 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 19:41:19.23 ] emacsのslimeを使っていて疑問に思ったのですが、 slimeやACLのIDEができる前のcommon lispの開発は どういう環境で行っていたのでしょう? まさかとは思いますが括弧の対応を一つ一つ目で確認していたのですか
911 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 19:47:39.55 ] Emacsが処理系の中に実装されていたのです。MacLisp, Symbolics 二昔前のLispは統合開発環境しかなかったんです。(ちょっと嘘w) というか統合開発環境とはLispのことでした。(Basicとかもあったけどw)
912 名前:SCHEME餃子 ◆8X2XSCHEME mailto:sage [2012/02/20(月) 20:00:20.08 ] 今だと OS, 言語処理系, 開発環境 という概念が分かれているけど、 昔はそれほどきちんとした線引きが無かった。 今でも厳密に定義付けされているわけではない。 俺は世代的にそれほど古い時代を知ってるわけじゃないが、 N88-Basic (DISK版) が OS であり 言語処理系であり エディタ であり デバッガでありアセンブラであったことは知ってる。 (使ってた) それと似たような感じなのかなぁ?
913 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:02:35.23 ] Emacs としては標準で LISP モードがあったし、 さらに、各処理系ごとに独自の emacs モードを添付していたりしてた。 統合環境としては SLIME の前 (90年代) には ILISP というものががあった。 自分の経験(ここ20年)でいえば、手で括弧対応ってのは一度もなかったね。
914 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:37:47.09 ] うろ覚えなんだけど、昔、超括弧ってあったよね? ] を入力すると括弧全部閉じたことになるやつ。 エディタが賢くなって無意味になったけど。
915 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:40:57.06 ] [もあったよ。 ]で最初の[まで全部閉じる。 要するに[(([((]]は、(((((())))))と同じ。
916 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 01:10:50.04 ] みんな若いんだなぁ PC-8001でカセットテープからLispインタープリタ読み込んで 左かっこで指折って右かっこで指伸ばして数えてたこと思いだした
917 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 11:36:03.91 ] [(((;゚Д゚]
918 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 11:42:33.18 ] 911です。皆さんありがとうございます。 知らない話ばかり聞けてうれしいです。 たしかgaucheのshiroさんだったと思うのですが common lispはそれ一つで完結する開発環境を持っているとおっしゃっていた気がしますが 伝統的なものなのですね。勉強になりました。
919 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 21:12:52.60 ] >>914-915 それは凶悪シンタックスだな。
920 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:53:27.22 ] lisp始めたてだけどまだまだ括弧の多さになれない。
921 名前:866 mailto:sage [2012/02/22(水) 16:21:37.34 ] 字句解析について質問していたものです。その節はありがとうございました。 今度はcl-yaccについてお聞きしたいのですが、 paste.lisp.org/display/127909 ソース冒頭に書いた3点に対応するにはどう書き換えればよいでしょうか。
922 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:20:24.55 ] Common Lisp はそれ単体で完結した開発環境ではない。 その証拠にエディタを起動する手続き ed が存在する。
923 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:54:17.92 ] edは内部で実装されてる関数でもいいんだけども。 (ed '関数名) (ed "ファイル名") こんな関数でもいいし。 CMU Common Lispでは内部にEmacs-likeなeditor, HEMLOCKが実装されていて、 ed関数を実行するとHEMLOCKが呼び出された。 最近使ってないから今もそうかは知らない。
924 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 07:41:50.10 ] sites.google.com/site/shidoinfo/Home/programing-lang/%E9%96%A2%E6%95%B0%E5%9E% 8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E /lisp/common-lisp/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AE%E7%82%B A%E3%81%AElisp%E7%92%B0%E5%A2%83 ここのlispboxの使い方の項なんですが、 smartcalcconsoleini.lispをc-c c-kでコンパイルしようとしても 1 compiler notes: smartcalcconsoleini.lisp:14:1: warning: Undeclared free variable *WARN-ON-FLOATING-POINT-CONTAGION* Compilation failed. となってしまうんですが、どうしたらいいのでしょうか?
925 名前:924 mailto:sage [2012/02/23(木) 09:37:42.03 ] 失礼、自己解決しました; 普通に (load "smartcalcconsoleini.lisp") で動きました; 手順にコンパイルするよう書いてあったのでそうしたのですが、、、 動いてよかったけどなんで動いたのか・・・;
926 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 02:42:41.49 ] PAIP邦訳の5章の演習問題の回答に5.19とあるのですが5.18の表記ミスですか?