- 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)
- 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の表記ミスですか?
|

|