1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:48:56] lispを触ってみたい入門者のQ&A 初心者のQ&A 本スレでは恥ずかしくて聞けない人のQ&A 本スレは高度すぎて割り込めない人のQ&A linuxでなくてwindowsでやりたいんですが・・・Q&A lispを使用してC#やJAVAの代替にするための方法(おまけ) ま、ゆっくりたりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ
293 名前:デフォルトの名無しさん mailto:sage [05/02/02 20:31:44 ] >>291 Lispには予約語はありません。
294 名前:デフォルトの名無しさん [05/02/02 20:45:30 ] (defun foo()()) <foo> (undefun 'foo) <undefun-foo> のような一度defunしたものをリリースするundefunのような 関数ってCLにありますか?
295 名前:デフォルトの名無しさん mailto:sage [05/02/02 20:51:48 ] intern unintern
296 名前:デフォルトの名無しさん mailto:sage [05/02/03 00:02:20 ] >>293 ()は予約記号。
297 名前:デフォルトの名無しさん mailto:sage [05/02/03 01:00:32 ] ちゃんとした処理系なら括弧もリーダーマクロで変えられるんじゃなかったか m4みたいに
298 名前:デフォルトの名無しさん [05/02/03 22:13:49 ] CLにはJAVAのHashMapみたいなものはありますか? (hashmap obj "KEY" "OBJECT") みたいな
299 名前:デフォルトの名無しさん mailto:sage [05/02/03 22:35:42 ] JAVAのHashMapとやらの機能を教えちくり。
300 名前:デフォルトの名無しさん [05/02/03 23:09:12 ] HashMap hobj = new HashMap(); String key "KEY"; String object = "OBJECT"; hobj.put(key,object); System.out.println( hobj.get(key) );//"OBJECT"が表示される こんなんです
301 名前:デフォルトの名無しさん mailto:sage [05/02/04 00:14:26 ] ハッシュテーブルあるよ。 データ構造でなくJavaのHashMapが質問に出てくるところがなんだかなー。
302 名前:デフォルトの名無しさん mailto:sage [05/02/04 00:46:59 ] 一旦定義したメソッドに引数を追加して定義しなおそうと思ったら Attempt to add the method #<STANDARD-METHOD ほげほげ> to the generic function #<STANDARD-GENERIC-FUNCTION ほげほげ>, but the method has "more" optional arguments than the generic function. と怒られてしまいます。開発中にいちいち処理系を起動しなおすのはかったるいので なんとかならないかと思うんですが、どうすりゃいいんでしょ。
303 名前:デフォルトの名無しさん mailto:sage [05/02/04 08:30:38 ] >>302 ANSI CLのdefgenericの説明では、defgenericの:methodオプションで定義した メソッドと、defmethodで定義したメソッドは区別されるみたい。 defgenericの場合はラムダリストを変更して再定義することが許されている様子。 GNU CLISPではエラーになったけど。CMUCLでは可能。 (defgeneric foo (a b) (:method (a b) (list a b))) => #<GENERIC-FUNCTION FOO> (foo 1 2) => (1 2) (defgeneric foo (a b &optional c) (:method (a b &optional c) (list a b c))) => #<GENERIC-FUNCTION FOO> (foo 1 2 3) => (1 2 3) あとは、find-methodとremove-methodでメソッドを削除してからdefgenericとか。
304 名前:デフォルトの名無しさん mailto:sage [05/02/04 14:09:51 ] ふむふむ。 今度はfind-method/remove-methodでやってみます。 今まではシンボルごとuninternしちゃってました。 どうもありがとうございました。
305 名前:デフォルトの名無しさん mailto:sage [05/02/04 16:10:05 ] 継続って何ですか?
306 名前:デフォルトの名無しさん mailto:sage [05/02/04 16:11:50 ] >>305 テンプレ嫁 pc5.2ch.net/test/read.cgi/tech/1100229366/
307 名前:デフォルトの名無しさん [05/02/05 22:42:02 ] lispで簡単(テキストファイルの送受信程度)なネットワークプログラム作りたいのですが、 その辺の情報の載ったサイトとか本ありませんか?
308 名前:デフォルトの名無しさん mailto:sage [05/02/05 22:56:09 ] perlでも使えよ
309 名前:デフォルトの名無しさん mailto:sage [05/02/05 23:06:09 ] まずは処理系のマニュアルを眺めてみるのがよろしいのでは。
310 名前:デフォルトの名無しさん mailto:sage [05/02/06 17:36:15 ] CLISPでMOPがサポートされtらしいのですが、 どうやって使うものなんでしょうか?
311 名前:デフォルトの名無しさん mailto:sage [05/02/06 18:48:22 ] MOPってMeta Object Protocolのこと? もしそうなら使い方がわからない時点で貴方には必要のないものだと思うのですが。 AMOPは読破・理解されましたか?
312 名前:デフォルトの名無しさん mailto:sage [05/02/06 21:10:14 ] >>310 MOPはオブジェクトシステム(CLOS)をカスタマイズするときに使います。 CLOSを実装するのに必要となる、ある程度の動作が規定された一連のジェネリック関数が存在し、 それらのメソッドを独自に定義することにより、カスタマイズを行います。 たとえば、永続化をサポートしたオブジェクトをシステムに組み込むなんて ときに使うこともあれば、CLOSに標準化される前の古いオブジェクトシステムを エミュレートしたりするときに使うこともあるでしょう。 MOPの仕様は公開されているので読んでみてはいかが? www.lisp.org/mop/index.html
313 名前:デフォルトの名無しさん [05/02/07 20:28:56 ] dylanという言語は素晴らしい。 Lispより素晴らしい。 何よりIDEが素晴らしい。 と、言語マニアな友人が言っていた。 マジかぁ?
314 名前:デフォルトの名無しさん mailto:sage [05/02/07 23:04:49 ] >>313 >dylanという言語は素晴らしい dylanって何?
315 名前:デフォルトの名無しさん mailto:sage [05/02/07 23:44:28 ] まあマカの言う事だし
316 名前:デフォルトの名無しさん [05/02/07 23:58:42 ] ぬるぽぅ?
317 名前:デフォルトの名無しさん mailto:sage [05/02/08 21:35:26 ] >>314 dylan pc5.2ch.net/test/read.cgi/tech/1004242854/
318 名前:デフォルトの名無しさん [05/02/13 16:57:45 ] append という関数について質問なのですが、 (append '(1 2) '(3 4)) => (1 2 3 4) 仕様では前半の '(1 2) は新しいセルを作って内容を コピーするらしいのですが、なんで前半の最後を後半の 最初に繋げるだけじゃ駄目なんですか?
319 名前:デフォルトの名無しさん mailto:sage [05/02/13 17:37:26 ] CL-USER> (setf x (list 1 2)) (1 2) CL-USER> x (1 2) CL-USER> (append x (list 3 4)) (1 2 3 4) CL-USER> x (1 2) CL-USER> (nconc x (list 3 4)) (1 2 3 4) CL-USER> x (1 2 3 4) CL-USER>
320 名前:デフォルトの名無しさん mailto:sage [05/02/13 18:26:58 ] 319を見て318はダメな理由が思いつくかしらね、と。
321 名前:デフォルトの名無しさん mailto:sage [05/02/14 08:40:44 ] >>318 > なんで前半の最後を後半の最初に繋げるだけじゃ駄目なんですか? それにはnconcという別の関数が用意されている(「駄目」とかじゃなく 別々の使い方に対応するためにappendとnconcが用意されている)。 なぜappendが現在の仕様になっているかというと、 あるリストを参照している変数や自分の一部として参照しているLisp objectは 複数存在する可能性があって、そういうリストを1つの参照元が勝手に変更すると、 そのリストが変更されるとは想定していない別の参照元で混乱が生じるときがあるため。 (setq x (list 1 2)) => (1 2) (setq y (cons 0 x)) => (0 1 2) ;; yが参照しているリストは勝手に変更されないとプログラマーは想定しているとする。 (setq z (nconc x '(3))) => (1 2 3) y => (0 1 2 3) ;; えっ! (0 1 2)と変わっとるやないけ! なぜnconcが用意されているかといえば、appendより速度、空間的なコストが安くあがる 可能性が高いため。 こんなんでどうでしょう?
322 名前:デフォルトの名無しさん mailto:sage [05/02/14 08:44:13 ] 上の例での動作がプログラマが望むものであるときもnconcを使うよね。
323 名前:デフォルトの名無しさん mailto:sage [05/02/14 11:20:10 ] >>318 > (append '(1 2) '(3 4)) => (1 2 3 4) '(1 2), '(3 4)は定数なのでテキストセグメントなど変更できないメモリ領域に とられる可能性がある。そうするとappendの代わりにnconcを使って前半のリストを 変更すると、bus errorで落ちる。
324 名前:デフォルトの名無しさん mailto:sage [05/02/14 23:28:54 ] 気味が悪いくらい皆親切だな。何かあったのか?
325 名前:デフォルトの名無しさん mailto:sage [05/02/14 23:30:05 ] >>324 実は童貞だけどチョコレートもらえたんだ。
326 名前:デフォルトの名無しさん mailto:sage [05/02/24 23:09:02 ] ML使いの香具師いる?
327 名前:デフォルトの名無しさん mailto:sage [05/02/25 00:41:40 ] MultiLanguage
328 名前:デフォルトの名無しさん mailto:sage [05/02/27 13:28:46 ] >>326 Ocaml ならちょくちょく使うよ.
329 名前:デフォルトの名無しさん [05/02/27 16:41:12 ] (setq n '(func foo)) n (defmacro macro(x) `(defun ,(car x) (y) (print y) ) ) このマクロがエラーになるのですがどうしてでしょうか? `(defun ,(car n) (y) (print y)) これと同じ事をしているつもりなんですが・・・
330 名前:デフォルトの名無しさん mailto:sage [05/02/27 17:35:58 ] 自己解決しました お騒がせしました
331 名前:デフォルトの名無しさん [05/03/01 20:56:04 ] 引数がアトム型なら"atom"、そうでなければ"false"と表示するマクロを 作成したいんですが、 (defmacro macro(x) `(if,(atom ,x) (print "atom") (print "false") ) 上のようなマクロで動くんですが、 展開したときに (macroexpand-1 '(macro 'a)) -> (print "atom") となるようしするにはどうすればいいんでしょうか??
332 名前:デフォルトの名無しさん mailto:sage [05/03/01 22:23:19 ] ifを外側に出せばいいのでは。 `(print ,(if (atom x) "atom" "false"))
333 名前:デフォルトの名無しさん mailto:sage [05/03/01 22:32:27 ] (if (atom x) '(print "atom") '(print "false"))
334 名前:デフォルトの名無しさん mailto:sage [05/03/02 01:15:22 ] >>332 、>>333 ありがとうございます。 マクロは凄い機能ですね、昔C++でどうしてもできなくて挫折した 機能をわずか数行で実現できました。
335 名前:デフォルトの名無しさん mailto:sage [05/03/02 03:02:22 ] scheme と common lisp ってどのくらい違うのでしょうか? なにが決定的に異なるかでもいいですが。 schemeを覚えたからといってcommon lisp のプログラムがかけるとか、そういうことは無いのですか?
336 名前:デフォルトの名無しさん mailto:sage [05/03/02 03:30:08 ] |← これくらい →|
337 名前:デフォルトの名無しさん mailto:sage [05/03/02 04:14:03 ] >>355 個人的には、最初にぶつかる大きな違いは define-syntax と defmacro の違いかなあと思います。 call/cc は……scheme で call/cc 使いこなせるくらいになったら、 common lisp の特殊形式諸々で何とかできない……のかなあ。 私は call/cc 使いこなしてるわけじゃないので何とも。 clos も plt やら gauche を使えば、まあ、それなりに、て気もするし。 名前空間辺りは、好みはあっても、基本的にはすぐに慣れるでしょう。 たまにうっかり #' 付けたり付け忘れたりしますけど。あと funcall とか。 まあ、scheme やってればすぐ common lisp で書けるようなるかっていうと、 やっぱり慣れるのに時間は必要でしょうけれど、やってないよりは遥かに楽に入れるとは思います。
338 名前:デフォルトの名無しさん mailto:sage [05/03/02 05:25:45 ] call/ccなんて使わない奴は全く使わないでしょ
339 名前:デフォルトの名無しさん [05/03/04 17:44:07 ] lispで正規表現ってできますか? Clispでうありたいんですけど。。。
340 名前:デフォルトの名無しさん mailto:sage [05/03/04 18:57:18 ] >>339 はいな。 clisp.cons.org/impnotes.html#regexp
341 名前:デフォルトの名無しさん mailto:sage [05/03/04 19:01:02 ] >340 さんくすです
342 名前:デフォルトの名無しさん [05/03/05 12:43:02 ] >>337 schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、 こうしてみると、別にそれほどLispが劣ってるようには見えないなあ。 大して違わないじゃん。
343 名前:デフォルトの名無しさん mailto:sage [05/03/05 13:31:47 ] 趣味でいやなことやんなくていいときはScheme 仕事で泥臭いことも泣く泣くやらなきゃいけないときはCommon Lisp フリーソフト作ってみんなに自慢したいときはEmacs Lisp
344 名前:デフォルトの名無しさん mailto:sage [05/03/05 14:56:15 ] 別に泣く泣くとか泥臭いとか言うほど違わないじゃん。 ちっとも泥臭くない。
345 名前:デフォルトの名無しさん mailto:sage [05/03/05 16:46:25 ] >>343 仕事で泣く泣くCommonLispなんて選択する奴いるのかね。
346 名前:デフォルトの名無しさん mailto:sage [05/03/05 17:31:16 ] こんなこと言うと怒られるかも知れんが、 lispとschemeで相違点あるのか? ほとんど同じようなもんじゃないのか?
347 名前:デフォルトの名無しさん mailto:sage [05/03/05 19:10:12 ] それ以上はスレ違い このスレ、なんのために立てたんだ?
348 名前:デフォルトの名無しさん mailto:sage [05/03/05 19:11:19 ] >schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、 どこで言ってたのか教えてくれよ(プゲラ
349 名前:デフォルトの名無しさん mailto:sage [05/03/05 20:39:24 ] 正直言って Scheme の define-syntax はいまいち馴染めん。 call/cc も catch/throw で代用できるケースしかあまり使わない。 (そうでないケースで使うと極端に効率の悪い処理系もある) srfi の実装も結構まちまちで、ポータビリティを考えると結構めんどくさい。 ってなわけで、最近は Scheme より Common Lisp を使うことが多いね。
350 名前:デフォルトの名無しさん mailto:sage [05/03/05 23:32:23 ] Lisp と Scheme を比較って、意味がわからんぞ。 Lisp +- Common Lisp +- Scheme +- Emacs Lisp +- その他の Lisp 方言 :
351 名前:デフォルトの名無しさん mailto:sage [05/03/05 23:48:15 ] LOOPマクロが嫌いな奴はみなSchemeに流れたよ
352 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:01:58 ] >>350 このスレの流れは >>335 から派生しているのだよ。
353 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:40:06 ] >>351 あぁ、あれか。あれは Common Lisp 派の漏れでも醜いなと思う。 CLtL2 を読んだとき目を疑ったよ。Common Lisp の汚点だ。w 漏れ的にはループは do がデフォかな。loop は無条件繰り返しのときだけ使う。
354 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:44:47 ] >>349 CommonLispにだってperlやrubyみたいな単一の実装があるわけじゃないんでしょ? だったらポータビリティの問題はschemeとかわらないんじゃない?
355 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:54:25 ] んなこたあない
356 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:57:40 ] >>354 Common Lisp なら言語で定義されている範囲で済むことでも、Scheme の場合は ちょっとした便利関数でも R5RS では定義されてないから結局 SRFI のお世話に なってしまう。そのときの処理系間のばらつきが割と大きいように思えるということ。 別に Scheme が嫌いなわけじゃないよ。念のため。
357 名前:デフォルトの名無しさん mailto:sage [05/03/06 01:26:26 ] Schemeってモジュールやオブジェクト指向といった、現代のプログラミングでは 欠かせない重要なことすら処理系依存じゃん。 そういうのは嫌なとこだよね。
358 名前:デフォルトの名無しさん mailto:sage [05/03/06 06:10:36 ] SRFIでライブラリの標準化を進めるのはいいが、 定義された関数仕様が気に入らない マクロ覚えたて厨が考えたみたいなマクロとか、 どこぞの処理系の実装そのまんまとか ところで、ここはCommonLispスレじゃなかったのか
359 名前:デフォルトの名無しさん mailto:sage [05/03/06 11:49:49 ] まぁ対比することで Common Lisp の良さが見えてくることもあるからいーじゃない。
360 名前:デフォルトの名無しさん [05/03/06 20:03:24 ] ところでおまいらどの処理系使ってる? ちなみに漏れは CLISP だが。
361 名前:デフォルトの名無しさん mailto:sage [05/03/06 20:27:09 ] ACL trial
362 名前:デフォルトの名無しさん [05/03/06 22:20:39 ] やっぱりemacsかな 日本語とデバッガと独自関数の便利さから。 しかしcommon lispと結構違うのが痛い。 日本語と環境(デバッガ)とフリーという三つの条件入れるとこれしか選択肢ないんだよな。 Schemeは全滅。
363 名前:デフォルトの名無しさん [05/03/06 22:51:10 ] >>362 最近の CLISP は GNU libiconv 使ってて国際化は結構充実しているっぽいよ。 clisp.cons.org/impnotes/encoding.html
364 名前:デフォルトの名無しさん mailto:sage [05/03/07 05:40:28 ] clispいい。 eclipseみたいな環境があればもっといい。 エディタは飽きた。
365 名前:デフォルトの名無しさん mailto:sage [05/03/07 09:20:21 ] CommonLispではまともなのはCLISPしか選択肢ないよな。 環境が多少悪いかもしれないけどこれしかないんだから 我慢するしかない。
366 名前:デフォルトの名無しさん mailto:sage [05/03/08 06:21:06 ] そうか、CLISPはIDEがないのか。 JAVAでさくっと作ってみるかな。。。
367 名前:デフォルトの名無しさん mailto:sage [05/03/08 12:36:51 ] こんなのどーだ。使ったことないけど。 ciapek.uci.agh.edu.pl/~kwlodarc/VisualCLisp/en.htm
368 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:00:20 ] >>367 使ってみたけど、なんか意味あるのかこれ? デバッガと言ってもインタプリタがそのまま出てきただけだったぞ。
369 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:10:19 ] SLIME じゃダメですかね
370 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:31:32 ] Lispがそんなに生産性高いならIDEくらいさっさと作れるはずだな。
371 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:41:17 ] slimeってclispで動いたっけ??
372 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:53:58 ] >370 ACLはACLで出来ている
373 名前:デフォルトの名無しさん mailto:sage [05/03/08 21:16:10 ] >>371 % ls swank*.lisp swank-abcl.lisp swank-lispworks.lisp swank-allegro.lisp swank-loader.lisp swank-backend.lisp swank-openmcl.lisp swank-clisp.lisp swank-sbcl.lisp swank-cmucl.lisp swank-source-path-parser.lisp swank-gray.lisp swank.lisp
374 名前:デフォルトの名無しさん mailto:sage [05/03/08 21:56:04 ] clisp 使えても iso-8859-1 決めうちじゃなあ。
375 名前:デフォルトの名無しさん mailto:sage [05/03/09 02:21:04 ] emacs系が統合環境なんじゃないの?
376 名前:デフォルトの名無しさん mailto:sage [05/03/09 16:07:21 ] >>371 サポートするってかいてあるけど。ttp://common-lisp.net/project/slime/
377 名前:デフォルトの名無しさん mailto:sage [05/03/09 22:41:11 ] >>367 のエディタで改行して自動でインデントが付かないのは 俺だけか・・・? 微妙に使いづらいな。
378 名前:デフォルトの名無しさん mailto:sage [05/03/09 22:46:23 ] 忘れたころにLOOPマクロマンセー、と書いてみる。漏れは結構好きで使いまくりだ。
379 名前:353 mailto:sage [05/03/09 22:59:16 ] >>378 そうか。醜いとか汚点とか書いて悪かった。許してくれ。
380 名前:デフォルトの名無しさん mailto:sage [05/03/09 23:25:15 ] loopも典型的で簡単な使い方をする分にはいいんじゃないの。
381 名前:378 mailto:sage [05/03/09 23:52:10 ] そうくるとは思わなかったな。何でLOOPなんか使うんだゴルァと叩かれると思ってた。 Common Lisp使ってる時点で異端扱いなので変な目で見られるのは慣れてるのだ(w でもあのレベルのマクロを皆が好き勝手に作り始めたらポータビリティどころの騒ぎじゃ なくなるような気はする。
382 名前:デフォルトの名無しさん [05/03/10 06:13:09 ] emacsのlisp-modeのインデントが (if predict □□a □b) こうなるんだけど、scheme-modeみたく (if predict □□a □□b) のように出来ないんディスカー?
383 名前:デフォルトの名無しさん mailto:sage [05/03/10 07:05:10 ] できる。というかわざわざ前者のようになってるわけだが……。 (put 'if 'lisp-indent-function nil)
384 名前:デフォルトの名無しさん mailto:sage [05/03/10 07:09:41 ] >>383 ありがとう。 前者のようになっている理由は?
385 名前:デフォルトの名無しさん mailto:sage [05/03/10 08:25:07 ] >>381 何でLOOPなんか使うんだゴルァ LOOPみたいな独り善がりマクロがある限り CommonLispに発展はない
386 名前:353 mailto:sage [05/03/10 11:20:48 ] >>381 マイナな中でさらに細かい流派を作って、いがみあってもしょうがないからね。 なるべく寛容になるようにしている。w 複雑なLOOPマクロを書けと言われたらちょと困るけど、読むくらいならなんとかなるし。 (たぶん、、、)
387 名前:デフォルトの名無しさん mailto:sage [05/03/10 16:19:01 ] >>384 lisp: (if COND THEN ELSE ...) scheme: (if COND THEN ELSE)
388 名前:デフォルトの名無しさん mailto:sage [05/03/10 21:50:33 ] え、それって理由になってるの?
389 名前:デフォルトの名無しさん mailto:sage [05/03/10 23:04:31 ] おそらく、理由なんだろうな。 elseが複数あるからってことでしょ? まあ、だからってなんでaだけ下げるんだという疑問はまだ残るが。
390 名前:378 mailto:sage [05/03/10 23:13:10 ] >> 385 前半の前提と後半の帰結の関係がさ〜っぱりわからん。理論立てて説明してみ。 LOOPマクロが繰り返し構造に特化したDSLの様相を呈しているという点で独り善がり という感想を持つのは理解できなくもないが(しかし委員会で承認され規格化されて いるという点で独善ではありえない)、その存在とCommonLispの発展とに何の関係が?
391 名前:デフォルトの名無しさん mailto:sage [05/03/10 23:35:25 ] >>389 >elseが複数あるからってことでしょ? ええー 述語ひとつに対してTHEN節とELSE節の他に、 ELSE1…ELSEn節があるって論理的におかしくないか?
392 名前:デフォルトの名無しさん mailto:sage [05/03/10 23:48:24 ] Scheme での (if COND THEN (begin ELSE1 ELSE2 ...)) を伝統的 Lisp では (if COND THEN ELSE1 ELSE2 ...) と書けるってこと。
393 名前:353 mailto:sage [05/03/10 23:52:58 ] >>387 ええーーーっと思って確かめたけど、Common Lisp は複数の else 句を取れないよね。 初めて知ったが emacs lisp は確かに複数の else 句が取れるんだな。 別に論理的におかしいとまでは思わないけど変わった仕様だね。