【入門】Common Lisp その6【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/02/18(水) 00:22:16初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)
ま、ゆっくりたりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
(list
(url http://pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url http://pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2)
(url http://pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3)
(url http://pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4)
(url http://pc11.2ch.net/test/read.cgi/tech/1215834213/l50 :part 5))
□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
0357デフォルトの名無しさん
2009/06/26(金) 01:09:06lispboxについてはよくわからないし、初心者に毛が生えたレベルだけど、
警告出たら、qなり、Ctrl-x oなりすればいいんじゃないの?
0358デフォルトの名無しさん
2009/06/26(金) 06:16:540359デフォルトの名無しさん
2009/06/26(金) 08:56:21slime-compilation-finished-hook で警告を消せばいいんじゃないの?
slime はかなり読みやすいんだからこれくらい自分で探せよ
0360デフォルトの名無しさん
2009/06/26(金) 20:09:01関数でsetqはあまり良くないよね
0361デフォルトの名無しさん
2009/06/26(金) 20:22:32大丈夫?
0362デフォルトの名無しさん
2009/06/26(金) 20:44:06(destructive-function (copy-list list)))
3秒で書いたのでどうなっても知らない
0363デフォルトの名無しさん
2009/06/27(土) 10:44:15ありがとうございます。
ふだんxyzzyは使うんですが、emacsには慣れてなくて。
>>357-358
ありがとうございます。
それでうまくいきました。
>>359
サーセン、無理ッス。
0364デフォルトの名無しさん
2009/06/27(土) 16:47:400365デフォルトの名無しさん
2009/06/27(土) 17:26:20CL-USER> (cond (nil (values nil t))
(t (values t nil)))
T
NIL
CL-USER>
0366デフォルトの名無しさん
2009/06/28(日) 02:27:58最適化でループになるのなら、初めからループで書けば良いと思うのですが
0367デフォルトの名無しさん
2009/06/28(日) 02:36:56発想じゃないかなぁ。
ある動作を素直に表現しようとした時に、それが再帰と呼ばれるものを使用している場合がある。
他のあらゆる技法、概念と同じだよ。
0368デフォルトの名無しさん
2009/06/28(日) 03:07:08再帰にすることで、構造が非常にはっきりする(場合がある)という利点はあるよ
ループのほうが速ければ、別に再帰にする必要なんかない
カルト宗教じゃないんだから
0369デフォルトの名無しさん
2009/06/28(日) 03:17:10loop構文で出てくる単語を覚えられない。
読むのは、いじっていればなんとかわかるんだけどなあ。
0370デフォルトの名無しさん
2009/06/28(日) 10:32:43構文の重箱の隅をつつくような使い方をすると、
ちゃんと動かなかったりするらしい。
…と初心者の聞きかじり。
0371デフォルトの名無しさん
2009/06/28(日) 10:49:37rplaca,rplacdを使わないで
0372デフォルトの名無しさん
2009/06/28(日) 10:53:190373デフォルトの名無しさん
2009/06/28(日) 11:22:020374デフォルトの名無しさん
2009/06/28(日) 11:23:03(defun settest (x) (setq x 123))
で(settest y)としてもyに値を入れてくれないじゃん
どうすればいいの?
0375デフォルトの名無しさん
2009/06/28(日) 11:24:230376デフォルトの名無しさん
2009/06/28(日) 11:33:36関数に副作用持たすのはよくない傾向と共通認識があるからそもそも問題にならない
呼び出し側でsetfすればいい話
0377デフォルトの名無しさん
2009/06/28(日) 11:43:12(setf (symbol-value x) 123))
(settest 'y)
0378デフォルトの名無しさん
2009/06/28(日) 11:49:53何を言っているのだお前は
0379デフォルトの名無しさん
2009/06/28(日) 19:07:50まぁここでも見とけ
0380デフォルトの名無しさん
2009/06/29(月) 18:06:35(defvar *test*
'(("aaa" . "bbb")
("ccc" . "ddd")))
(defmacro build-toolbar (val)
`(progn
,@(loop for i in val collect
`(print ,(car i)))))
こういうマクロを書いて
(progn
(print "aaa")
(print "ccc"))
こうなることを期待したのですが.
(build-toolbar *test*)
とやると,The value *TEST* is not of type LIST.
と出てしまいます.
どうすればよいのでしょうか?.
ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
0381デフォルトの名無しさん
2009/06/29(月) 18:16:16マクロが展開されるのはコンパイル時。
0382デフォルトの名無しさん
2009/06/29(月) 18:18:31それかーっ!
ありがとうございます
0383380
2009/06/29(月) 18:22:44そもそも定数値をマクロに渡すような手法は間違っているのだろうか...
0384デフォルトの名無しさん
2009/06/29(月) 18:22:47てことは展開時に *test* はそのリストに束縛されてんだろう
(build-toolbar *test*)
のマクロ展開時に val が束縛されてるのは symbol *test* であって、その
値である '(("aaa" . "bbb") ...) ではないからじゃね?
0385デフォルトの名無しさん
2009/06/29(月) 18:28:510386デフォルトの名無しさん
2009/06/29(月) 18:31:180387デフォルトの名無しさん
2009/06/29(月) 20:23:11(defmacro foo (val)
`(mapcan (lambda (x) (print (car x))) ,val))
(defmacro bar (val)
`(eval (cons 'progn (loop for i in ,val collect (list 'print (car i))))))
0388デフォルトの名無しさん
2009/06/29(月) 23:25:17(defvar *test* '(("aaa" . "bbb") ("ccc" . "ddd")))
(defun foo (val)
`(progn ,@(mapcar (lambda (x) `(print ,(car x))) val)))
(defmacro build-toolbar (val)
(let ((m (gensym)))
`(macrolet ((,m () (foo ,val)))
(,m))))
0389デフォルトの名無しさん
2009/06/30(火) 01:35:370390デフォルトの名無しさん
2009/06/30(火) 07:48:27> ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
↓
うまくいくマクロを定義するマクロを書く。
0391デフォルトの名無しさん
2009/06/30(火) 08:35:02>>380の最後に書いてあるように、大域変数の値に実際にマクロの定義文内で
アクセスすることは可能。でもトップレベルスコープであるマクロの展開中は
大域変数にしかアクセスできないのでふつうは>>387-388のように書く。
0392デフォルトの名無しさん
2009/06/30(火) 09:39:11http://www.lispworks.com/documentation/HyperSpec/Body/03_bc.htm
> Normally, the top level forms appearing in a file compiled with
> compile-file are evaluated only when the resulting compiled file is
> loaded, and not when the file is compiled.
コンパイル環境と実行環境が理解できていないんだろうな。
0393デフォルトの名無しさん
2009/06/30(火) 16:58:270394デフォルトの名無しさん
2009/06/30(火) 17:18:39そんなこと書いてないじゃん。質問がreplでは通るのにcompile-fileできません><なら
ともかく、>>381の回答は明らかに状況が判ってないだろ。
実際、compile-fileが評価される前に評価されたdefvarの値をマクロ定義内で参照してる
ファイルはコンパイルできる品
0395デフォルトの名無しさん
2009/06/30(火) 17:22:42メッセージが出たんで一旦止めて
$ clisp -m 768KB program.fas
という具合に -m オプションをつけて走らせたんですけど、同じようにメモリーが足りないという
メッセージがでます。
ps でメモリーの使用量を調べたら30%も使ってませんでした。
これってclispのバグとかでしょうか?
0396デフォルトの名無しさん
2009/06/30(火) 17:23:060397デフォルトの名無しさん
2009/06/30(火) 17:42:20されちゃうってことも知っておいてね☆
0398ネカマ
2009/06/30(火) 17:48:06トップレベルの式がコンパイルするときには評価されないとか 全 く 関係ないから
>ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
と書いてあるんだから、すでに *test* は束縛されてることがあきらかなのに
トップレベルの式はコンパイル時に評価されないとかズレたこと言い出す >>392
は無能すぎ
質問に答える価値なし
たとえ defvar 式がトップレベルに書いてあるファイルをコンパイルしてても
元々束縛されてるものはちゃんと束縛されてますから
小学校からやりなおしてね
>>395
申し訳ないが、今は>>392で遊ぶのに必死で、あなたの質問に答える余裕がないことを
どうか許してもらいたい
0399デフォルトの名無しさん
2009/06/30(火) 17:56:540400デフォルトの名無しさん
2009/06/30(火) 18:10:160401デフォルトの名無しさん
2009/06/30(火) 18:45:150402デフォルトの名無しさん
2009/07/01(水) 01:35:25テキストボックスを表示させてキー入力すると固まってしまいます。
(ウィンドウが完全無反応になる)
要はltkを使いたい(CLでGUIアプリを作りたい)のですが、
1.上記組み合わせ(CLisp + ActiveTcl)で解決方法はありますか?
2.ない場合、上記現象がおきない処理系の組み合わせを教えてください
(AllegroCLとかLispWorksといった有償のパッケージは使わない方向で)
0403デフォルトの名無しさん
2009/07/01(水) 03:26:13関係ないかもしれんが、もしお商売の一環としてやるならフリーウェアを使うことでよけいに
手間がかかることの潜在的なコストというのも考えるべきだと思う。
0404デフォルトの名無しさん
2009/07/01(水) 05:11:52LispWorksは日本語のリテラルが入ったソースの扱いで困る
ACLは店頭で気軽に買えないので困る(通販でも買えないし)
>>402
文字コード関係の問題だと思った過去スレ4だかに同じような話が出てたよ
0405402
2009/07/01(水) 20:30:57((defun wish-enable-japanese… や (setf sb-impl::…)といったもの)
CLispの代わりにSBCL(1.0.20)を使ってみると、固まらずに動きました。
Windows版のSBCLは不安定、といった感じの文章をみたことがあるので、
できれば避けたかったのですが。
0406デフォルトの名無しさん
2009/07/02(木) 01:05:48> ((defun wish-enable-japanese… や (setf sb-impl::…)といったもの)
CLISPつかってるのにsb-implを設定とな?
0407402
2009/07/03(金) 09:09:14狐につままれた感じです。OSの違いが関係あるのでしょうか???
(以前)Windows XP Home SP1
(今回)Windows XP Pro SP2
一応各モジュールのバージョンを書いておきます。
CLisp 2.47
ActiveTcl 8.4.15.0.280619
ltk 0.91
0408402
2009/07/03(金) 09:10:030409デフォルトの名無しさん
2009/07/03(金) 14:52:520410デフォルトの名無しさん
2009/07/03(金) 15:03:000411デフォルトの名無しさん
2009/07/08(水) 08:11:01CL-USER(1): ;; Setting (stream-external-format *terminal-io*) to :emacs-mule.
CL-USER(2): (defun ^o^ () '(^o^))
^O^
CL-USER(3): (^o^)
(^O^)
CL-USER(4):
0412デフォルトの名無しさん
2009/07/14(火) 22:18:57Webサイトを読み込みたいのですが
0413デフォルトの名無しさん
2009/07/14(火) 22:44:580414デフォルトの名無しさん
2009/07/14(火) 23:03:44レスありがとうです。
やっぱりライブラリがあるんですね。
0415デフォルトの名無しさん
2009/07/15(水) 08:20:33値を返さない組み込み関数があるといいんだけど。
0416デフォルトの名無しさん
2009/07/15(水) 09:01:40意味がわかりません
関数は必ず値を返します
elispでいうignore関数みたいなものが欲しいって事?
0417デフォルトの名無しさん
2009/07/15(水) 09:59:18(apply #'format stream format args)
(values))
0418デフォルトの名無しさん
2009/07/15(水) 10:01:520419デフォルトの名無しさん
2009/07/17(金) 05:29:14こっそり変化かぁ。おもいっきり副作用じゃないの。
たぶん言語的なものじゃなくて、機械語に変換される際の高速化に影響する場合
といったものだと思うよ。それも処理系依存だから、特殊な条件がかさなるよ。
0420デフォルトの名無しさん
2009/07/17(金) 12:20:20まあ関数型言語だし、何も考えずとも最適化されとるよ
0421デフォルトの名無しさん
2009/07/17(金) 22:03:26(do ((n 1 (* n 2)))((print (format (< n 1000) "~A" n))))
0422デフォルトの名無しさん
2009/08/01(土) 21:15:00(require 'asdf)
(asdf:oos 'asdf:load-op :yaclml)
をしたときに
; loading system definition ...
などと出力されますよね?
この情報?の出力をやめさせたいときは、どうすればいいのでしょうか?
0423デフォルトの名無しさん
2009/08/03(月) 10:05:300424デフォルトの名無しさん
2009/08/04(火) 04:47:53cl-whoでやりたいことはすべてできそうです。ありがとうございました。
0425デフォルトの名無しさん
2009/08/05(水) 03:27:16CommonLispでcgiって遅くない?
動作は速いんだけど、起動してロードする時間かかりすぎた気がする。
結局その時はHTTPサーバとかも全部Lispにしたんだけど、なんか速くなる方法あるんですか?
コンパイルしといても時間かかるでしょ?
ECLとかでスタンドアローンにするのかな?
gaucheとかだとCGI速いんだけど、やっぱCLのほうが使いやすいからなー。
実用的速度で使える方法があるなら知りたい。
0426デフォルトの名無しさん
2009/08/05(水) 03:49:43の言っている事って、C++では普通関数アダプタ(bind2stみたいなので)使って解決するもんだよ。
template<typename T, typename F>
void update(T& obj, F func)
{
func(&obj);
}
Foo foo;
Bar bar;
update(foo, mem_fun(&Foo::update));
update(bar, bind2nd(mem_fun(&Bar::update), true));
なんで、CLOSでも同じ事すれば万事解決じゃないかな?
C++はマルチパラダイムなんで、普通にCLOSと同じ事をしているってことだね。
0427デフォルトの名無しさん
2009/08/05(水) 07:49:380428デフォルトの名無しさん
2009/08/05(水) 08:37:44fastCGI 的なことをするしかないと思う。
mod_lisp はあんまりメンテされてないという噂も。
0429デフォルトの名無しさん
2009/08/05(水) 08:52:380430デフォルトの名無しさん
2009/08/05(水) 09:21:26その時間がかかるのには違いない罠。
0431デフォルトの名無しさん
2009/08/05(水) 12:10:39なんだかんだで大きなcore読まないとならんでしょ
短いcgiならfastcgi使うのがいい、システムが大きくなりそうならHunchentootとか
0432高崎佳子
2009/08/11(火) 00:12:02また分からないことがありましたら質問にきます。
0433デフォルトの名無しさん
2009/08/11(火) 01:04:00値段や表紙のデザイン程度でもなんか感想くらい書けよ。
0434デフォルトの名無しさん
2009/08/11(火) 02:52:590435デフォルトの名無しさん
2009/08/11(火) 19:04:24http://pds.exblog.jp/pds/1/200509/27/48/d0063748_1623587.jpg
0436デフォルトの名無しさん
2009/08/17(月) 19:56:21http://www.franz.com/downloads/clp/downloadから指定されたファイルを落として
http://www.franz.com/support/documentation/8.1/doc/installation.htm#express-inst-linfbsd
に従って解凍し、
% ./newlicense
したのですが、
/libexec/ld-elf.so.1: Shared object "libpthread.so.2" not found, required by "newlicense"
と言われてしまいます。どうしたらインストールを完了できるでしょうか。
0437デフォルトの名無しさん
2009/08/17(月) 20:19:51pthread 入れろ
0438デフォルトの名無しさん
2009/08/17(月) 21:29:50/etc/libmap.conf を作って
libpthread.so.2 libthr.so
とか, 書き込むと幸せになれるかも知れない
だめだったら, あきらめろ
0439438
2009/08/17(月) 21:37:56追加 ${PORT}/misc/compat6x をいれるってのもありかもしれない
それでもだめだったら本当にあきらめるしかないっぽいな
0440436
2009/08/17(月) 21:48:04ありがとうございます
0441デフォルトの名無しさん
2009/08/17(月) 23:35:36libpthread.* は *BSD には無条件でインストールされるはずなのに
どんな意味で言ってるんだろうか?
0442デフォルトの名無しさん
2009/08/19(水) 11:26:15これって非効率すぎるよね?皆さんどうしてるの?
0443デフォルトの名無しさん
2009/08/19(水) 18:43:120444デフォルトの名無しさん
2009/08/19(水) 21:33:300445デフォルトの名無しさん
2009/08/19(水) 21:55:090446デフォルトの名無しさん
2009/08/19(水) 22:44:49ありがとう。やはりclispが妥当ですか。
0447デフォルトの名無しさん
2009/08/20(木) 04:24:240448デフォルトの名無しさん
2009/08/20(木) 06:54:540449デフォルトの名無しさん
2009/08/20(木) 09:46:430450デフォルトの名無しさん
2009/08/20(木) 10:09:27commonlispの上でschemeを動かす
こんなのclerなら簡単だよね?
0451デフォルトの名無しさん
2009/08/21(金) 00:07:17clozuer clが該当したけどXP64bit版でMeadowからslime経由で64bitのCCLを実行すると落ちるんだよね
32bit版のCCLは起動自体拒否されちゃうし
ちなみにThreadさえ使わないならSBCLは凄く使いやすいのだけど、hunchentootで遊ぼうとかするとモウダメポ
ACL店売りしてくんろ >> Franz
0452デフォルトの名無しさん
2009/08/21(金) 00:26:310453デフォルトの名無しさん
2009/08/21(金) 16:23:080454デフォルトの名無しさん
2009/08/21(金) 17:52:20するのってどうやったらよいのでしょう.
vectorクラスを定義しておいて,+オペレーターの引数にvectorクラスが
渡されたら,自分が定義した処理を行うみたいな...
C++でいうoperatorみたなのをやりたいんですが...
教えてください
0455デフォルトの名無しさん
2009/08/21(金) 18:42:21汎関数ならオーバーライド的なことはできるけど、
+はただの関数だから無理では。
C++と違って+はオペレーターじゃないぞ。
0456デフォルトの名無しさん
2009/08/21(金) 18:43:14ちなみに汎関数(これって自分が定義する関数ってことですよね?)
どうするんでしょう??
■ このスレッドは過去ログ倉庫に格納されています